Blackfin - jak ugryźć?

Nov 08, 2012 4 Replies

Chciałbym wykonać projekt na procesorze z rodziny Blackfin (np. BF504), nie wiem jednak dokładnie jak się za to zabrać. Z tego co zauważyłem, dużo projektów na Blackfinach polega na dołączeniu pamięci SDRAM i wykorzystaniu Linuksa, np. uCLinux. Ja jednak czegoś takiego nie potrzebuję, wystarczy kawałek kodu w C. I teraz zaczynają się schody. Dotychczas wykorzystywałem procki AVR i STM32 i tam było prosto, można było wewnętrzny Flash zaprogramować z poziomu programatora ISP lub JTAGa. Z Blackfinami jest inaczej, wykorzystywany jest zewnętrzny Flash, a w tych, co mają wewnętrzny, nie jest on dostępny przez JTAG. Niemniej jednak jakoś narzędzie od VisualDSP++ jest w stanie tego wewnętrznego Flasha zaprogramować. Czy da się takiego wewnętrznego Flasha zaprogramować za pomocą gnICE+? I jak gnICE+ programuje te zewnętrzne pamięci? Program bfin-jtag z otwartego toolchaina na komendę initbus zwraca m.in.: bf533_ezkit Blackfin BF533 EZ-KIT board bus driver via BSR bf533_stamp Blackfin BF533 Stamp board bus driver Jak działa taki driver i czym właściwie jest BSR? Może się starzeję, ale nie udało mi się wygooglać odpowiedzi na powyższe pytania. Generalnie chciałbym wiedzieć jak mając BF504 i gnICE+ zrobić, żeby LED podłączony to tego procesora migał. Dalej myślę, że sobie już poradzę.


Grzegorz Niemirowski snipped-for-privacy@poczta.onet.pl> napisał(a):

Miałem nadzieję, że wszystko zacznie działać i będę mógł tu umieścić jakąś instrukcję. Niestety. Kod można sobie skompilować i nawet odpalić przez debugger. W tym celu uruchamia się gdb-proxy komendą: bfin-gdbproxy bfin --reset Wtedy gdbproxy wykrywa gnICE+ i przejmuje kontrolę nad procesorem. Następnie można na drugim terminalu uruchomić bfin-elf-gdb. Podłączamy się do gdbproxy komendą: target remote :2000 Można teraz załadować binarkę komendą load a potem jeszcze symbole z niej komendą file. Mając symbole można sobie zrobić np. breakpoint na mainie: b main i puścić program komendą c. Gdy się zatrzyma na początku maina można wykonywać krokowo komendą s. No i luz, działa. Ale nadal nie wiem jak to wpakować do flasha, żeby płytka sama się bootowała. Niby jest skrypt vdsp-flash-programmer.sh, który za pomocą odpalonego gdbproxy może uruchomić kod flashujący (BF504FEzFlashDriver_BF50x4MBFlash.dxe), który udostępnia komendę flrestore, ale jakoś nadal procek z tego swojego flasha nie chce się bootować po zaprogramowaniu plikiem .LDR stworzonym z .ELFa.

On 11/20/2012 06:32 PM, Grzegorz Niemirowski wrote: [...]

Nie mam doświadczenia z blackfinem, więc nie wiem czy moja porada będzie przydatna, ale czy próbowałeś zlinkować program tak, żeby kod trafił w przestrzeń adresową flasha? W ten sposób programuje się flasha w texasowych c2000. Linkerowi trzeba podać odpowiedni plik z komendami, a programator już sam będzie wiedział czy ma binarkę wgrać do RAMu czy do flasha.

pzdr. j.

Jacek Radzikowski snipped-for-privacy@spamer.die.die.die.piranet.org> napisał(a):

Próbowałem, ale nie wiedziałem jak to dokładnie zrobić. W każdym razie nie udało mi się znaleźć potwierdzenia, że trzeba tak robić. Poza tym o ile dobrze rozumiem, plik .ldr to nie jest binarka z kodem, tylko taka struktura zawierająca kilka bloków, która jest parsowana przez boot kernel procesora i on sobie dopiero z niej wyciąga te bloki i umieszcza pod odpowiednimi adresami. W momencie bootowania, po resecie.

Grzegorz Niemirowski snipped-for-privacy@poczta.onet.pl> napisał(a):

W końcu mam rozwiązanie, dostałem na forum Analoga. Otóż jednak ten .LDR trzeba inaczej generować niż dla zewnętrznych pamięci flash, niepotrzebne okazały się parametry --bits 16 --dma 8 --bmode para. Bez nich wszystko działa.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required