tomny
Guest
Thu Aug 07, 2008 8:40 pm
Adam Dybkowski
Guest
Thu Aug 07, 2008 11:46 pm
tomny pisze:
Quote:
Mam pytanie do osob, ktore maja doswiadczenie z ARMami 9 z zewnetrzna
pamiecia programu. Z powodu duzych f cpu podczas resetu program z
zewnetrznego flasha laduje sie do zewnetrznego RAMu i stamtad wykonuje sie
program. No i tutaj moje pytanie: czy program bedzie sie wykonywal z pelna
predkoscia i odczyt danych nie spowolni wykonywania programu (dodam, ze f
cpu = 190MHz, ARM9 ATMELa)? Konkretnie, z jaka f bedzie sie wykonywał
taki kod:
pPio->PIO_SODR = tablica[0];
pPio->PIO_SODR = tablica[1];
pPio->PIO_SODR = tablica[2];
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.
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
tomny
Guest
Fri Aug 08, 2008 8:38 pm
tomny
Guest
Fri Aug 08, 2008 9:04 pm
Quote:
Potem PDF do ręki (o instrukcjach asemblera ARM) i wyczytaj, ile cykli
zajmuje każda z tych instrukcji.
Jakoś nie mogę znaleźć dobrej dokumentacji, w której byłaby informacja o
ilości cykli dla każdej instrukcji.
No i wystarczyło napisać, że nie mogę znaleźć i od razu znalazłem
Adam Dybkowski
Guest
Sat Aug 09, 2008 5:33 pm
tomny pisze:
Quote:
Jestem na etapie wyboru procka dopiero. A czy wewnętrzy flash byłby
rozwiązaniem problemu? Coś mi sie wydaje, że nie - w końcu byłby tak
samo wolny jak zewnętrzny i pewnie i tak trzeba by kopiować do RAMu
program. Dobrze myśle?
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).
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
tomny
Guest
Sat Aug 09, 2008 8:10 pm
Quote:
Jestem na etapie wyboru procka dopiero. A czy wewnętrzy flash byłby
rozwiązaniem problemu? Coś mi sie wydaje, że nie - w końcu byłby tak samo
wolny jak zewnętrzny i pewnie i tak trzeba by kopiować do RAMu program.
Dobrze myśle?
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.
atmel ma rodzine SAM9XE, która zapowiada się bardzo ciekawie i niby jest już
dostępna, ale chyba jeszcze nie na dużą skalę.
A jak wygląda sprawa z dataflash? Czy po przeniesieniu programu do RAMu
(tutaj chyba nie można inaczej) mogę wykorzystać tą pamięć jako pamięć
danych podłączoną poprzez SPI? Oczywiście nie nadpisując programu.
pozdrawiam
tn
Adam Dybkowski
Guest
Sat Aug 09, 2008 11:52 pm
tomny pisze:
Quote:
atmel ma rodzine SAM9XE, która zapowiada się bardzo ciekawie i niby jest
już dostępna, ale chyba jeszcze nie na dużą skalę.
A jak wygląda sprawa z dataflash? Czy po przeniesieniu programu do RAMu
(tutaj chyba nie można inaczej) mogę wykorzystać tą pamięć jako pamięć
danych podłączoną poprzez SPI? Oczywiście nie nadpisując programu.
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.
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
tomny
Guest
Sun Aug 10, 2008 10:12 am
Quote:
A jak wygląda sprawa z dataflash? Czy po przeniesieniu programu do RAMu
(tutaj chyba nie można inaczej) mogę wykorzystać tą pamięć jako pamięć
danych podłączoną poprzez SPI? Oczywiście nie nadpisując programu.
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.
A da się załadować program od razu do zewnętrznego RAMu jeżeli jest za duży
czy trzeba samemu napisać bootloader, który to zrobi?
Jak już program jest w dataflash to jego zmiana jest możliwa tylko przez
JTAG? SAMBA już przecież się nie uruchomi.
pozdrawiam
tn
Adam Dybkowski
Guest
Sun Aug 10, 2008 10:10 pm
tomny pisze:
Quote:
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.
A da się załadować program od razu do zewnętrznego RAMu jeżeli jest za
duży czy trzeba samemu napisać bootloader, który to zrobi?
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.
Quote:
Jak już program jest w dataflash to jego zmiana jest możliwa tylko przez
JTAG? SAMBA już przecież się nie uruchomi.
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.
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.