ARM9 z zewnetrzna wspolna pamiecia programu i danych

Loading thread data ...

tomny pisze:

Jeżeli takiego kodu nie jest bardzo dużo w jednym kawałku (np. tylko kilka KB albo ciasna pętla, potem skok gdzie indziej) - to jeżeli masz właściwie skonfigurowaną pamięć cache programu - kod powyższy zostanie załadowany z SDRAMu do pamięci cache i wykonany z niej z pełną prędkością procesora. Skompiluj powyższy kawałek i sprawdź, na jakie rozkazy asemblera składa się każda z tych linii. Potem PDF do ręki (o instrukcjach asemblera ARM) i wyczytaj, ile cykli zajmuje każda z tych instrukcji. A jak nie masz tyle zapału to po prostu sprawdź doświadczalnie oscyloskopem.

Reply to
Adam Dybkowski

tomny pisze:

ARM9 z wewnętrznym Flashem? Raczej mało takich jest do wyboru. Ja siedzę tylko w prockach od Atmela więc może u innych producentów jest coś do wyboru. W ARM9 jest wewnętrzna pamięć cache programu i właściwie to nie ma znaczenia, czy coś idzie z RAMu czy z Flasha (opóźniają wykonanie tylko bardzo długie kawałki kodu i skoki poza skeszowany obszar).

Reply to
Adam Dybkowski

tomny pisze:

Oczywiście. Bootloader ROMowy szuka twojego softu na początku DataFlasha, jeżeli znajdzie to ładuje do wewn. RAMu od adresu 0 tyle kodu ile trzeba (to się wpisuje linkerem w nieużywanym wektorze przerwań

- patrz opis bootloadera np. AT91SAM9261) i do niego skacze. Nic nie stoi na przeszkodzie, abyś resztę pamięci DF przeznaczył na dowolne inne dane i korzystał z niej normalnie przez SPI.

Reply to
Adam Dybkowski

tomny pisze:

Bootloader zaszyty w ROMie procesora z założenia ładuje dane do wewnętrznej pamięci SRAM. Przecież nawet nie ma pojęcia co tam na zewnątrz podłączyłeś: czy SRAM, czy SDRAM. Jeżeli masz inne potrzeby to po prostu napisz "mini loader", który trafi po resecie z DataFlasha do wewnętrznego RAMu a potem skonfiguruje odpowiednio pamięć zewnętrzną (czego nie może oczywiście automatycznie zrobić ROMowy bootloader) i doładuje już z pamięci DF co chce i tam gdzie chce. Przy okazji możesz na tym etapie dużo zyskać stosując kompresję ZIP (biblioteka zlib jest całkiem darmowa nawet dla zastosowań komercyjnych - nie jest na GPLu). Zlib zlinkowana z bootloaderem powoduje jego spuchnięcie zaledwie o kilka KB a za to ładowanie reszty z DF może pójść Ci średnio 2x szybciej.

Jeżeli ROMowy bootloader nie znajdzie podłączonej pamięci DF lub stwierdzi, że nie ma tam nic ciekawego (czyta najpierw 32 pierwsze oktety i sprawdza poprawność słowa z długością obrazu do załadowania) - to przechodzi w tryb "terminalowy", umożliwiający wydawanie z peceta komend przez UART na 115200 bps, 8N1 oraz przez USB. Wystarczy, że w swoim projekcie dodasz zworkę/pad/jumper załączający reset pamięci DF a już program sam nie wystartuje. JTAG nie jest konieczny, choć na pewno Ci się przyda prędzej czy później do debugowania.

Reply to
Adam Dybkowski

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.