Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

STR71x, IDEaliST i bootloader

SnowBizz 27 Dec 2007 00:45 1268 6
  • #1
    SnowBizz
    Level 14  
    Witam. Od jakiegoś czasu używam CrossStudio for Arm i bootloadera po RS232 od ST.
    Wszystko działa OK tzn wystarczyło tylko w jednym pliku zmienić adres początkowy Flasha i programy skompilowane w CrossStudio wgrywały się HyperTerminalem i normalnie działały.
    Teraz jednak muszę się przesiąść na Anglia IDEaliST i tu już sprawa dla mnie nie jest taka prosta.. Nie do końca wiem, co powinienem pozmieniać, żeby moje programy działały z bootloaderem. Znalazłem jakieś pliki z adresami sektorów pamięci, ale zmiana w nich wartości nic nie daje.. Czy powinienem coś jeszcze pozmieniać?
  • #2
    pawelgt
    Level 11  
    Witam !

    Widze ze udało Ci sie uruchomić bootlader'a z ST. Ja niestety nie moge go zmusic do poprawnej pracy z str71x. Nie potrafie zdefiniowac funkcji aby uruchamiały sie z ram ( w crossstudio). Czy wiesz jak to zrobic ?
    Probowałem caly plik z funkcjami umieszczac w sekcji .fast , ale niestety funcje nadal byly we flash :(


    Pozdrawiam

    Paweł
  • #3
    SnowBizz
    Level 14  
    Rozumiem, że bootloadera masz już wgranego do procka?
    Jeśli tak to potem każdy program który chcesz wgrać bootloaderem musisz mieć skompilowany na innej mapie pamięci.

    ...Rowley Associates Limited\CrossWorks for ARM 1.5\targets\ST_STR71x

    Tutaj znajdziesz plik:
    ST_STR711F_MemoryMap.xml

    W nim musisz zmienić wartość:
    <MemorySegment size="0x40000" access="ReadOnly" start="0x40000000" name="FLASH" />
    na:
    <MemorySegment size="0x40000" access="ReadOnly" start="0x40002000" name="FLASH" />

    I później w ustawieniach projektu podajesz mu tą mapę pamięci i juz będzie wiedział ze ma startować z Flashem od 0x40002000

    Kompilacje robisz normalnie jako:
    ARM Flash Relase

    P.S. jakby cos to z ta Anglia IDEaliST tez poradziłem sobie i działa
  • #4
    pawelgt
    Level 11  
    Witam !

    Niestety nie uruchomiłem tego boot loadera. Tj. przerobiłem przyklad na CrossStudio. BootLoader sie uruchamia,oczekuje na przeslanie pliku *.bin , ale przy ladowaniu nowego programu przez bootloader zawiesza sie. Przyczyna tego jest ze nie moge uzywac funkcji zapisujacej flash uruchomionej z flasha. Nie moge zmusic crossstudio aby umiescil te funkcje (do obslugi flasha) w RAM i z RAM je uruchomił .

    Dzieki za odpowiedz dot. zmiany memory_map - przyda mi sie jak w koncu uruchomie bootloader'a :)

    Pozdrawiam

    Paweł
  • #5
    SnowBizz
    Level 14  
    Czemu to chcesz umieszczać gdzieś w RAMie..? Ja normalnie wgrałem to przez Jtag do Flasha i działa.. nie przerabiałem nic w głównym programie bootloadera.. Spróbuj może IARem wgrać przykład z ST jest w tym właśnie kompilatorze.. Jak nie to mogę przerobić ten projekt pod crossstudio i Ci podesłać
  • #6
    pawelgt
    Level 11  
    Witam !

    Zgodnie z dokumentacja do str71x , nie mozna zapisywac nic tym samym banku flash i rownoczesnie z niego czytac. (W moim wypadku czytac/uruchamiac funkcje dot. flasha przy programowaniu image z rs232)
    "During a Flash write operation any attempt to read the bank under modification will output
    invalid data. This means that the Flash bank is not fetchable when a write operation is
    active.
    Note: The write operation commands must be executed from another bank or another memory
    (internal RAM or external memory). " z ST UM0116.

    Niestety nie mam IAR. I chciałem to zrealizowac wlasnie w cross, ale nie wiem jak go zmusic aby przy starcie przeladowal krytyczne funkcje do RAM i potem tam tez sie odwolywal. Jest przyklad w sieci dla gcc , i tam w makefile jest deklaracja :

    " SRC += ../../../stdlib/str71x/source/uart.c
    # fuctions from this file to be executed from RAM (see linker-script)
    SRC += ../../../flashlib/src/7xx_flash.c "

    a w skrypcie linkera :
    /* .data section which is used for initialized data */

    .data : AT (_etext)
    {
    __data_start = .;
    /* mthomas special */
    *7xx_flash*.o(.text)
    *7xx_flash*.o(.text.*)
    . = ALIGN(4);
    *(.data .data.*)
    *(.gnu.linkonce.d.*)
    SORT(CONSTRUCTORS)
    . = ALIGN(4);
    *(.fastrun .fastrun.*)
    } >DATA
    . = ALIGN(4);


    Pozdrawiam

    Paweł
  • #7
    SnowBizz
    Level 14  
    Chyba nie dokońca rozumiem co właściwie chcesz zrobić.. Czemu podczas zapisu flasha chcesz coś uruchamiać? Poprostu bootloadera wgrywasz normalnie w flash procka i jest on potem widziany jako normalny program i po każdym resecie właśnie on się odpala bo jest we Flashu 0x40000000, chyba że zmienisz rejestry od bootowania, żeby starttował z RAMu ale to do bootloadera nie jest potrzebne, czyli jeszcze raz:
    Wgrywasz Bootloadera Jtagiem do flasha pod adres 0x40000000.
    Teraz po każdym resecie procek sprawdza stan przycisku i przechodzi albo w tryb bootloadera (gdzie możesz wgrać nowy program który adres startowy ma ustawiony na 0x40002000), albo odpala wgrany przez rs232 program.
    W załączniku przesyłam Ci projekt w CrossStudio z gotowym bootloaderem. Sprawdź tylko czy w ustawieniach projektu plik z mapą pamięci napewno ma adres 0x40000000. Potem ustaw w Crossie "ARM Flash Relase" i przy podłączonym procku via Jtag kliknij "build and run"
    Bootloader powinien się wgrac do procka i teraz po podlaczeniu do RS232 przez UART0 na konsoli powinienes po resecie zobaczyc okno glowne bootloadera..