Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Bascom - odczyt danych z SD i zapis do zewnętrznej pamięci SRAM

rj1307 20 Sty 2018 16:12 441 16
  • #1 20 Sty 2018 16:12
    rj1307
    Poziom 15  

    Jestem na etapie projektowania urządzenia, w którym musiał bym użyć sporej ilości pamięci Flash 4Mx8 MBM29F033 (7szt.), co tanie nie jest. :(
    Dane które potrzebuję odczytać mają różną wielkość, min. 32kB max. 512kB . Czy którykolwiek AVR jest w stanie odczytać plik .hex z karty SD, zapisać go do zewnętrznej pamięci SRAM 512kx8 i udostępnić innemu urządzeniu jako "emulowany" eprom?
    Na razie pytam czysto teoretycznie, bez wchodzenia w szczegóły, ew. ile takie przepisanie najdłuższego pliku może potrwać? Częstotliwość taktowania Atmegi dowolna, ew. możliwe "wsparcie" ze strony CPLD (EPM7128) uwzględnionego w projekcie.

    0 16
  • #2 20 Sty 2018 16:32
    3099750
    Użytkownik usunął konto  
  • #3 20 Sty 2018 16:50
    rj1307
    Poziom 15  

    Żadne ARM'y czy inne "potworki" nie wchodzą w rachubę. Nie potrzebuję aż takich prędkości, nie stworzę projektu na taki procek, nie wyjdę poza AVR i Bascom. Urządzenie które ma czytać te dane ma nieporównywalnie mniejszą moc obliczeniową, byłby to przerost formy nad treścią ;)
    I nie martwię się o czytanie SD, to raczej nie problem, martwię się zapisem Atmegi do pamięci zewnętrznej, czy to się da z plikiem 512kB.

    0
  • #4 20 Sty 2018 17:09
    3099750
    Użytkownik usunął konto  
  • #5 20 Sty 2018 17:15
    rj1307
    Poziom 15  

    Właśnie o to mi chodzi, by z SD przekopiować do SRAM, czyli da się to zrobić w Bascomie? Co do czasu, to chciałbym wiedzieć jaki to rząd wielkości, bo kilka sekund było by OK, minuta to już za dużo.

    0
  • #6 20 Sty 2018 19:20
    3099750
    Użytkownik usunął konto  
  • #7 20 Sty 2018 20:39
    rj1307
    Poziom 15  

    Dzięki za odpowiedzi, taki czas jest dla mnie idealny, nawet "potrojony" mnie zadowala :)
    Teraz pytania bardziej konkretne. Wstępnie będzie to Atmega128, pamięć typu 628512 podłączona zgodnie z helpem bascoma. Wg. dokumentacji, mogę "sprzętowo" obsłużyć 64kb, czy przejdzie taki myk, by podzielić 512kB SRAM na 8 banków i sterując je adresami A16-A18 z wyjść Atmegi potraktować jako niezależne pamięci 64kB? I drugie pytanie, jeśli dobrze zrozumiałem, nie mogę adresować xram'u od 0 tylko od adresu powyżej końca pamięci wewnętrznej mikrokontolera. Jak więc zapisać pełne 64kB?

    0
  • Pomocny post
    #8 20 Sty 2018 20:46
    3099750
    Użytkownik usunął konto  
  • #9 20 Sty 2018 21:31
    rj1307
    Poziom 15  

    Teoretycznie proste :)
    Na razie wielkie dzięki, sklecę jakiś prototyp i przetestuję.

    0
  • #10 21 Sty 2018 14:58
    tmf
    Moderator Mikrokontrolery Projektowanie

    AnicoZ napisał:
    rj1307 napisał:

    I drugie pytanie, jeśli dobrze zrozumiałem, nie mogę adresować xram'u od 0 tylko od adresu powyżej końca pamięci wewnętrznej mikrokontolera. Jak więc zapisać pełne 64kB?


    Bezpośrednio sie nie da. W kontrolerze trzeba ustawić adresowanie 32 kB. Pamięć trzeba podzielić na dwa obszary po 32kB. Linią adresową A15 (nie musi to być PC7) wybieramy bank. Aby miec dostęp do pełnych 32kB (poczatek zajmują rejestry i wewnętrzna pamięć) najprościej adresować ją ustawiając najstarszy bit, czyli wykonując OR 0x8000 na adresie.


    Oczywiście, że możesz sobie wybrać czy adresowanie zewnętrznej pamięci jest od zera, czy od końca wewnętrznego SRAM. Co prawda wybór jest teoretyczny, bo:
    - o ile pamiętam, jakieś ATMegi miałby bład, powodujący, że stos nie mógł być w zewnętrznym RAM,
    - nawet jeśli by mógł, to i tak jest problem, bo jak przełączysz bank rozpoczynający się od adresu 0, to przełaczysz stos i wszystkie zmienne w RAM.
    Stąd rozsądnie mieć adresowanie 0 do max wew. pamięć ram, potem np. zewnętrzny ram do graniczy 16 lub 32 kB i przełączalne banki po 32 kB od 0x8000 do 0xffff.
    Oczywiście jeśli masz BASCOM, to o ile wiem z AVR wspiera on też XMEGA, w tym A1U, które mają możliwość zewnętrznego adresowania do 16 MB RAM, a sam 24-bitowy adres jest wspomagany przez MCU.
    Z tym, że jak rozumiem, ty chcesz tylko w tej pamięci umieścić dane, które posłużą do emulacji EPROM. W takiej sytuacji wcale interfejs do XRAM ci nie jest potrzebny. Przede wszystkim potrzebujesz muiltiplekser 2 na 1 - bo musisz przecież przełączać linie adresowe tego emulowanego EEPROM ze sterowania przez AVR na sterowanie przez układ zewnętrzny. Skoro dopuszczasz CPLD, to możesz w nim umieścić 24-bitowy zatrzask, adresowany np. przez SPI oraz multipleksery linii adresowych. To samo zresztą można zrobić za pomocą dyskretnych układów 74xxx. Wtedy AVR ustawia adres, przesyła dane, itd. w kółko aż wypełni pamięć. Nie wiem jak w BASCOM, ale normalnie odczyt SD powinien dać ci prędkość ze 400 kB/s. Po zakończeniu ładowania, przestawiasz multipleksery i zewnętrzny układ widzi pamięć tak jakby to był EPROM.

    0
  • #11 21 Sty 2018 15:11
    3099750
    Użytkownik usunął konto  
  • #12 21 Sty 2018 15:55
    rj1307
    Poziom 15  

    tmf napisał:
    W takiej sytuacji wcale interfejs do XRAM ci nie jest potrzebny.

    Czyli lepiej zrobić to czysto programowo i przesyłać dane bajt po bajcie, od adresu 0 do końca pamięci SRAM ?

    tmf napisał:
    Z tym, że jak rozumiem, ty chcesz tylko w tej pamięci umieścić dane, które posłużą do emulacji EPROM.

    Tak, a dokładnie ma to działać w ten sposób, że odczytuję z pliku na karcie SD pierwsze 128 bajtów, tam będą zawarte dane konfiguracyjne (nazwa pliku, jego wielkość oraz inne ustawienia), Atmega w tym momencie już wie ile dany plik zajmuje i ładuje resztę pliku do pamięci zewnętrznej, następnie "odcina się" od niej i udostępnia urządzeniu docelowemu. Samo przełączanie magistrali nie stanowi problemu, rozwiązań jest wiele, ale nigdy nie korzystałem z xram'u i stąd moje pytania. ;)

    0
  • #13 21 Sty 2018 16:43
    tmf
    Moderator Mikrokontrolery Projektowanie

    AnicoZ napisał:
    amiast multiplekserów lepiej użyć 3-stanowych buforów jak 74HC244 dla adresu i 74hc245 dla danych. Łatwiej zaprojektować PCB. Rozwiązania takie można znaleźć w archiwalnych numerach EP i PE pod hasłem "emulator pamięci rom/eprom".


    Dla danych nie jest potrzebny, bo wystarczy przestawić porty IO AVR na wejścia. Ew. może się przydać, jeśli w emulowanym układzie nie da się wymusić HiZ podczas programowania. Ale skoro autor dopuszcza użycie CPLD, to sobie to poroutuje jak zechce, wewnętrznie na CPLD musi być multiplekser.
    rj1307 napisał:
    tmf napisał:
    W takiej sytuacji wcale interfejs do XRAM ci nie jest potrzebny.


    Czyli lepiej zrobić to czysto programowo i przesyłać dane bajt po bajcie, od adresu 0 do końca pamięci SRAM ?


    Obojętnie. Użycie procesora z XMEM wymusi odpowiednią liczbę pinów IO. Użycie kilku rejestrów z wyjściem trójstanowym/multiplekserem lub wrzucenie tego do CPLD zmniejszy zapotrzebowanie na IO, tak, że mała ATMega temu podoła.
    rj1307 napisał:
    Samo przełączanie magistrali nie stanowi problemu, rozwiązań jest wiele, ale nigdy nie korzystałem z xram'u i stąd moje pytania. ;)

    W tym zastosowaniu użycie interfejsu sprzętowego do pamięci niewiele/nic nie daje. Jakieś potencjalne oszczędności czasowe jak sądzę nie są dla ciebie krytyczne.
    Jeśli urządzenie w którym ma być taki emulowany EPROM wykorzystane umożliwia wymuszenie HiZ na magistrali adresowej i danych to wszystko sprowadza się do 4 rejestrów z wyjściem trójstanowym (3 na 24-bitowy adres i 1 na dane), jeśli nie umożliwia, lub nie można odpiąć się na czas programowania od urządzenia docelowego, to musisz jeszcze odseparować magistralę tego urządzenia na czas programowania.

    BTW, chodzi ci o emulację zwykłego EPROMa, czy pamięci FLASH? To ostatnie jest dużo bardziej skomplikowane, bo trzeba odtworzyć strukturę tej pamięci, funkcje rejestru kontrolnego, stanu itd.

    0
  • #14 21 Sty 2018 17:01
    rj1307
    Poziom 15  

    tmf napisał:
    BTW, chodzi ci o emulację zwykłego EPROMa, czy pamięci FLASH? To ostatnie jest dużo bardziej skomplikowane, bo trzeba odtworzyć strukturę tej pamięci, funkcje rejestru kontrolnego, stanu itd.

    Eprom'a, oryginalnie siedzą tam 27Cxxx. Z powodów o których piszesz + ograniczona ilość cykli zapisu + szybkość zapisu wybrałem Sram a nie Flash.
    I chyba posłucham rady i zrobię to czysto programowo, mniej mnie to będzie ograniczać ;)

    0
  • #15 21 Sty 2018 19:01
    3099750
    Użytkownik usunął konto  
  • #16 21 Sty 2018 22:50
    Marek_Skalski
    Moderator Projektowanie

    AnicoZ napisał:
    Możesz szukać emulatorów z 8051, który jest wiesz, jest starszym bratem AVR.

    Czy masz jakiś dowód na poparcie tej tezy, czy to takie wyssane z palca mądrości?
    C-51 to modyfikowana struktura harwardzka, ma częściowo rozdzieloną pamięć danych i rozkazów, ale wspólne magistrale i możliwe jest wykonanie programu z obszar pamięci danych. AVR to czysty harward, nie może wykonać kodu z pamięci danych, pośrednio ze względu na brak wyprowadzonej magistrali pamięci programu.
    C-51 ma 1 akumulator roboczy ACC i 1 akumulator pomocniczy B. Rdzeń AVR ma 32 rejestry operacyjne i każdy z nich może być akumulatorem.
    C-51 ma banki rejestrów i okienkowanie pamięci. AVR tego nie ma, dzięki temu AVR jest bardziej przyjazny dla języków z rodziny C, w odróżnieniu od 'C51 czy czy PIC (8 bitów), które są koszmarem dla kompilatora.
    Zgodność pinowa wynikała była sprytnym zabiegiem, który pozwalał dość łatwo zastąpić 'C51 przez AVRy.

    0
  • #17 21 Sty 2018 23:11
    3099750
    Użytkownik usunął konto