Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ARM - dodatkowa zewnętrzna pamięć RAM

Smashing 08 Kwi 2010 11:09 3408 13
  • #1 08 Kwi 2010 11:09
    Smashing
    Poziom 20  

    Witam
    Mam system w którym potrzebuję dużo ram'u, jakieś 1 mega.
    Arm musi mieć Usb, zewnętrzna szynę adresowa, i spi lub coś co czyta kartę SD.
    Mój wybór padł na dwa procesory lpc2378 lub 91Sam7SE512.
    1. Do lpc2378 można podłączyć RAM, ROM, i Flash. (szyna danych 8 bitów??)
    Czy taki sram mogę podłączyć do baterii, i jak procesor nie będzie zasilony to dane w nim powinny zostać?

    2. Do Sam7SE512 można podłączyć SRAM, PROM, EPROM, EEPROM, Flash, i
    SDRAM. (szyna danych 16 bitów)
    Jeśli użyje SDRAM (pamięć musi się odświeżać) to jak nawet zasilę SDRAM z baterii a procesor nie będzie miał napięcia to dane stracę? , czyli musiał bym je gdzieś przekopiować?

    3. Czy z pamięci sram jak jest szybka np czas dostępu 10 ns będę mógł umieścić program i arm da radę to odczytać. Nie bardzo wiem jak to jest jeśli w manualu do lpc2378 jest napisane że dane mają 8 bitów(zewnętrza pamięć), a czas dostępu będzie 10 ns to odczyt instrukcji to 40 ns... chyba trochę wolno.

    5. 4 mega sdram 133 Mhz około 10zl . jaki polecicie sram

    4. Może ktoś poleci innego lpc ( 70 zl max) który by obsługiwał SDRAM, bo nie wiem jakie będą odpowiedzi na pierwsze pytania

    Będę wdzięczymy za jakąkolwiek pomoc.. :)

  • #2 08 Kwi 2010 11:31
    Freddie Chopin
    Specjalista - Mikrokontrolery

    od końca:

    10. Czemu tylko ARM7? Czemu tylko NXP i Atmel?

    4. LPC24xx - obsługują SDRAM, mają pełną szynę 32-bitową. Wada - obudowa 208pinów <; Są też LPC22xx, ale chyba nie mają USB (nie jestem pewien).

    5. A co tu polecać? Każdy działa tak samo, popatrz co jest dostępne i tyle. Z SRAMem jest taki problem, że największe kostki jakie ja widziałem mają 512kB, więc musiałbyś użyć kilku.

    3. Przy pracy z pamięcią o 8bitowej magistrali zbytnio nie poszalejesz - procek zwolni i tyle. Jakbyś jednak połączył SRAM tak, aby osiągnąć szerokość magistrali 32-bity (oczywiście do 32-bitowej magistrali) to będzie sporo lepiej.

    2. Bez odświeżania dane z SDRAMu giną.

    1. Podtrzymanie bateryjne pamięci SRAM jest jak najbardziej możliwe bez żadnych dodatkowych zabiegów.

    4\/3!!

  • #3 08 Kwi 2010 12:21
    Smashing
    Poziom 20  

    Czemu tylko NXP i Atmel?
    W sumie pewnie dlatego bo z innymi nie pracowałem... jeszcze. Popatrzę na STR,
    Czemu tylko ARM7?
    hmmm, w sumie to najbardziej chodzi o cenę a ARM7 powinien wystarczyć.

  • #4 08 Kwi 2010 12:25
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Jeśli chodzi o cenę, to zupełnie nietrafiony argument, bo układy z rdzeniem Cortex-M3 są zwykle nieco tańsze lub porównywalne, a możliwości mają większe, zawsze też są nowocześniejsze...

    Pooglądaj więc może "większe" STM32 (100- i 144-pinowe obudowy mają kontroler pamięci) oraz LPC17xx, które są Cortex'owym odpowiednikiem LPC23xx.

    4\/3!!

  • #5 08 Kwi 2010 12:40
    atom1477
    Poziom 43  

    A zamiast podtrzymania SRAMu możesz użyć FRAMu. Choć to duży koszt.
    Pisałeś coś o programie w SRAMie. Chyba nie chcesz trzymać programu w podtrzymywanej bateryjnie pamięci SRAM?

  • #6 08 Kwi 2010 13:52
    Smashing
    Poziom 20  

    Cortex są niezłe ale nie można do nich dołączyć zewnętrznej pamięci.
    Nieźle wygląda STR912, ma wszystko czego chcę... szyna danych 16 bitów cena 25zl.
    1. W OpenOCD jest str910-eval.cfg i iar_str912_sk.cfg, używał ktoś z was nich do tego procesora.

    atom1477 napisał:
    Chyba nie chcesz trzymać programu w podtrzymywanej bateryjnie pamięci SRAM?

    ups... właśnie mam taki plan. Teraz mam arm z 64 kB ramu z czego około 35 kB mam wolne i teraz mój program ładuje przez USB w ten wolny ram. z tego 20 kB to program a 15 kb na zmienne. Program (konwertuję z drabinki) to tylko wywoływanie funkcji które są obecnie we flashu arm. Wszystko pięknie działa, ale 35 kilo ramu to mało.... wywalanie jednej funkcji zajmuję mi około min 44 bajty, czyli np 440 razy Add...
    2. Myślisz że nie bardzo będzie to działać z tą pamięcią? Mogę to zrobić tak albo użyć dodatkowego flasha, albo karta sd w którym zapisze program....

  • #7 08 Kwi 2010 14:02
    Freddie Chopin
    Specjalista - Mikrokontrolery
  • #8 08 Kwi 2010 15:13
    Smashing
    Poziom 20  

    sorki to do LPC17xx nie można podłączyć ramu..
    STM32F103Vx ma wszystko, że też wcześniej go nie zobaczyłem

  • #9 09 Kwi 2010 10:21
    nenpa8lo
    Poziom 17  

    Freddie Chopin napisał:
    Jeśli chodzi o cenę, to zupełnie nietrafiony argument, bo układy z rdzeniem Cortex-M3 są zwykle nieco tańsze lub porównywalne, a możliwości mają większe, zawsze też są nowocześniejsze...
    Przy zamówieniu masowym Cortexy wychodzą drożej niż ARM7. Przynajmniej tak mi wyszło z porównania SAM7S512 z Cortexem który ma tyle samo flashu (to było moje kryterium wyboru).

  • #10 10 Kwi 2010 00:46
    TWl
    Poziom 19  

    LPC3130, jesli nie boisz sie obudowy. 1 sztuka ok. 5 euro, przy wiekszej ilosci ok. 2 eur.

    TWl

  • #11 12 Kwi 2010 19:42
    Smashing
    Poziom 20  

    Zamówiłem dwa Cortex'y STM32F103ZET6, czekam na przesyłkę...
    W między czasie, patrzę na przykłady z STM32 i nie mogę się nadziwić.... no cóż czasem człowiek potrafi skomplikować proste sprawy...

    Używam startup.S i vectors.c od kolegi Freddie Chopin. Niby wszystko ok, ale jak ktoś przerabia jakieś rzeczy z USB, niech zwróci uwagę na dwie rzeczy. w ST używają USB_HP_CAN1_TX_IRQHandler i USB_LP_CAN1_RX0_IRQHandler a w vectors.c od kolegi Freddie'go jest USB_HP_CAN_TX_Handler i USB_LP_CAN_RX0_Handler. Lepiej wszystko napisać odnowa bazując na vectors.c

    W pliku ST startup_stm32f10x_hd.s jak używa się sram'u zewnętrznego jest dodatkowy skok do SystemInit_ExtMemCtl (funkcja w pliku system_stm32f10x.c).

    1. Użycie zewnętrznego (po inicjacji) sramu sprowadza się tylko do dopisania kolejnej sekcji w pliku stm32f103rb_rom.ld. W adresie mam wpisać adres odpowiedniego banku i długość ramu? Potem kompilator standardowo umieszcza zmienne w ramie wewnętrznym, chyba że przy deklaracji zmiennej napiszę ze w zewnętrzym? czy jest na to inny patent..?

  • #12 12 Kwi 2010 19:52
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Cytat:
    W między czasie, patrzę na przykłady z STM32 i nie mogę się nadziwić.... no cóż czasem człowiek potrafi skomplikować proste sprawy...

    A o czym dokładnie piszesz?

    Cytat:
    Używam startup.S i vectors.c od kolegi Freddie Chopin. Niby wszystko ok, ale jak ktoś przerabia jakieś rzeczy z USB, niech zwróci uwagę na dwie rzeczy. w ST używają USB_HP_CAN1_TX_IRQHandler i USB_LP_CAN1_RX0_IRQHandler a w vectors.c od kolegi Freddie'go jest USB_HP_CAN_TX_Handler i USB_LP_CAN_RX0_Handler. Lepiej wszystko napisać odnowa bazując na vectors.c

    W pliku ST startup_stm32f10x_hd.s jak używa się sram'u zewnętrznego jest dodatkowy skok do SystemInit_ExtMemCtl (funkcja w pliku system_stm32f10x.c).

    Zarówno pierwsza rzecz o której piszesz (...IRQHandler), jak i druga (skok do jakichś dziwnych funkcji przed inicjalizacją pamięci) jest w nowych wersjach przykładów, których "preview" jest już udostępniony na stronie.

    Cytat:
    1. Użycie zewnętrznego (po inicjacji) sramu sprowadza się tylko do dopisania kolejnej sekcji w pliku stm32f103rb_rom.ld. W adresie mam wpisać adres odpowiedniego banku i długość ramu? Potem kompilator standardowo umieszcza zmienne w ramie wewnętrznym, chyba że przy deklaracji zmiennej napiszę ze w zewnętrzym? czy jest na to inny patent..?

    O zmiennych w innych obszarach jest już conajmniej kilka tematów... tylko poszukać...

    4\/3!!

  • #13 12 Kwi 2010 20:58
    Smashing
    Poziom 20  

    Freddie Chopin napisał:
    Cytat:
    W między czasie, patrzę na przykłady z STM32 i nie mogę się nadziwić.... no cóż czasem człowiek potrafi skomplikować proste sprawy...


    ja piszę tak:
    FSMC_Bank1->BCR3 = FSMC_BCR3_MBKEN | FSMC_BCR3_FACCEN | FSMC_BCR3_WREN
    ST tak:
    FSMC_Bank1->BTCR[4] = 0x00001011;
    Rejestru BTCR nie ma w manualu.
    Żeby ustawić jakiś bit w rejestrze lub coś odczytać trzeba "polatać" po kilku plikach, nie wiem może teraz się tak pisze, nie jestem zawodowym programistą :) Może wiele rzeczy to błahostki, ale dla mnie kod powinien być "samo dokumentujący się" tu tego nie widzę, dla mnie jest duża różnica między kodami z Atmela a z ST.

    Cytat:
    O zmiennych w innych obszarach jest już conajmniej kilka tematów... tylko poszukać...
    4\/3!!

    Czyli nie ma innego patentu jak tylko skrypt linkera i dodatkowa sekcja... ok

  • #14 12 Kwi 2010 21:10
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Jedyny "inny" patent jaki przychodzi mi do głowy (ale działający tylko w "run-time") to "ręcznie" zainicjalizowany wskaźnik i pisanie gdzieś za jego pomocą:

    uint32_t *ptr;

    ptr = (uint32_t*)0xDEADBEEF;
    *ptr = 0xDEAFFACE;
    itd.

    4\/3!!

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME