Dzwon.

Są ci, którzy przeczytali tę wiadomość przed tobą.
Subskrybuj odbieranie artykułów świeżych.
E-mail
Nazwa
Nazwisko
Jak chcesz przeczytać dzwonek
Bez spamu

Ten Clone Arduino oferuje specjalny bootloader, który umożliwia wylewanie oprogramowania przez USB, bez użycia zewnętrznych elementów typu ST-link lub adapter USB-UART.

Dzisiaj musiałem pracować z nagimi kontrolerem z COOCOX i bez STM32DUINO. Ale jaki jest problem. Nawet prosta żarówka Ferglass za pośrednictwem tego bootloadera nie działa.

Zajmijmy się. Być może moje obliczenia wydają się komuś banalij. Ale zaczynam studiować kontrolerów STM32 i znaleźć problem zabity co najmniej pół dnia. Nagle ten artykuł zmniejszy kogoś rozwój czasu.

Nie mam nic przeciwko St-Link i innym debugownikom. Ale w moim gotowym urządzeniu nie będzie, ale na pewno będzie USB. Dlaczego natychmiast nie położyć okazji, aby zaktualizować oprogramowanie przez USB? Osobiście uważam tę stronę wygodną. Zwłaszcza, że \u200b\u200bnadal już podłączyłem koronkę, która jest zasilana i szeregowa USB.

Zobaczmy, jak działa bootloader. Zacznij od, na przykładzie sterowników AVR. Dlaczego pamiętałem o nim? Przeglądałem się z Arduino i podświadomie oczekiwałem tego samego zachowania. Ale w STM32 okazało się różne. Dlatego chcę opowiedzieć o różnicy tych dwóch mikrokontrolerów.

Więc. W mikrokontrolery AVR. Atmega w ramach bootloadera może być zarezerwowany bliżej pamięci do końca lampy błyskowej. Korzystając z bitów bezpieczników, możesz dostosować się z którego adres rozpocznie program. Jeśli nie ma bootloadera - program zaczyna się od adresu 0x0000. Jeśli bootloader jest - zaczyna się od innego adresu (powiedzmy, w ATMEGA32 z 0x3C00, jeśli rozmiar bootloadera jest wybrany 2K).

Gdy bootloader dokonał swoich spraw, przekazuje zarządzanie głównym programem z adresu 0x0000. Te. Program zawsze uruchamia się od adresu 0x0000. Kompilator i Lintel działają z faktem, że kod będzie na początku przestrzeni adresowej.

W mikrokontrolerrach STM32 wszystko jest tak. Wszystkie programy zaczynają się od adresów 0x0800000. Butloider nie jest czymś wyjątkowym. Jest to ten sam program, który rozpoczyna się od tego samego adresu początkowego. W trakcie działania bootloader może wziąć oprogramowanie układowe (przez USB lub UART, odczytaj z napędu flash, aby wziąć od satelity, aby uzyskać z podprzestrzeni, Whater ...) i napisz go na adresach wyższych niż sam ładowarka. Cóż, oczywiście na końcu swojej pracy, przenieś zarządzanie głównym programem.


Przy kompilarze oprogramowania układowego musisz wiedzieć, gdzie bootloader nagryje oprogramowanie układowe i odpowiednio dostosuje adresy.

W tym z teorią wszystko. Idź do praktyki. Poniżej instrukcja krok po kroku Jak przymocować ładowarkę USB do mikrokontrolerów STM32F1XX, a może do innych.

Istnieje jednak pewne ograniczenia w obwodzie. Tutaj niestety nie jest silny. Yatp potrzebuje rezystora zaostrzenia 1.5K dla portu PA12 (jest również USB D +). Umożliwia to ładowarce odpowiednie chwile Czas połączenia i odłączyć od USB.

  • Teraz mikrokontroler jest gotowy do mapowania przez bootloader USB. Ale nadal musisz poprawić same oprogramowanie układowe. I potrzebujesz 2 rzeczy:
    • Określ linię adres początkowy. W Coocox odbywa się to w ustawieniach projektu, karta Link, sekcja Obszary pamięci, adres początkowy adresu IROM1. Bootloader zajmuje pierwsze 8 kilobajte, co oznacza, że \u200b\u200badres początkowy oprogramowania oprogramowania wynosi 0x0800000 + 0x2000 \u003d 0x08002000. Wielkość rozmiaru, prawdopodobnie warto również zmniejszyć o 8 tys.
    • Gdzieś na początku programu przed inicjalizacją peryferii złoży wyzwanie

      NVIC_SetVectortable (NVIC_VECTTAB_FLASH, 0x2000);

      Aktualizacja 17.05.2018: W nowoczesnej wersji STM32Cube funkcja nvic_setvectortable () nie jest. Zamiast tego możesz w pliku System_stm32f1xx.c (lub podobny do innego mikrokontrolera) Fix define vect_tab_offset

  • Zatoka firmware Możesz wziąć z projektu STM32DUINO. W katalogu Narzędzia szukaj skryptu pod nazwą Maple_Upload. Użyłem tylko wersji systemu Windows - Maple_upload.bat.
  • Uruchom taki:

    "Maple_upload.bat" COM20 2 1: 0003 "Ścieżka do firmware.bin"
    Zamiast COM20 musisz zastąpić port, w którym zamyka się mikrokontroler.

    Chuck jest bardzo delikatny, ścieżki względne nie lubią. Więc ścieżka do oprogramowania układowego musi być całkowicie określona.

    1: 0003 jest vid i pid

    2 jest parametrem outd, który wskazuje, że oprogramowanie układowe musi być wylane do 0x08002000 (odczyt).

  • Kolejne małe niuanse. Przed nalewaniem oprogramowania układowego musisz uruchomić bootloader. Najprostszym sposobem jest naciśnięcie przycisku Reset. Potem uruchomienie bootloader rozpocznie się i będzie czekać na oprogramowanie przez kilka sekund. Jeśli nikt nie działa w tym momencie Maple_Upload, bootloader przekazuje kontrolę głównego oprogramowania układowego.

    Z tego powodu mogą pojawić się niedogodności. Jeśli mikrokontroler również podświetlony i zawieszony, nie słucha już portu. Dlatego nie może usłyszeć sekwencji kluczowej i przeciążenia do bootloadera. Następnie zresetuj, aby pomóc.

    To wszystko. Mam nadzieję, że mój artykuł złamie światło na temat tego, w jaki sposób ładowarka działa w STM32 i jak załadować oprogramowanie układowe Port USB.. Niestety, próg wejścia jest nadal wysoki, ale nagle ktoś mój artykuł pomoże pokonać go.

    Każdy mikrokontroler STM32 może migać Usart_1. I inne interfejsy, zobacz szczegółowo. Aby to zrobić, w MK znajduje się specjalny ładownik systemowy, który jest szyty Pamięć systemowa. (Spec. Obszar pamięci) Na etapie produkcji nie można go usunąć ani zmienić. Ten bootloader jest zainicjowany przez "Pull-ups" Pina Boot_0 do "Plus", po czym oczekuje, że przyjazd oprogramowania układowego.

    Via Usart można pobrać pliki Any.Bin lub.Hex.

    Opis jest wykonany na przykładzie niebieskiej opłaty za pigułkę, ale wszystko jest powiedziane dość dla każdego STM32.

    Discovery i Nucleo Brands można również migać za pomocą Usart.

    Aby pracować, będziesz potrzebował konwertera USB do UART ...

    Jeśli nie ma czegoś takiego, to znaczy, dwie opcje obracania arduinów w konwerterze ...

    transformacja

    1 . Blisko Resetowanie. na Gnd. (może się toczyć).
    2 . Ładuj do niej tutaj jest taki prosty szkic:

    Ustawienia bez pustienia () (Pinmode (0, wejście); Pinmode (1, wejście);) Pętla void () ()

    Aby sprawdzić, czy Arduin działa jako konwerter, zamknij RX i TX, otwórz i wysłać kilka znaków. Jeśli wrócili, oznacza to wszystko działa.

    Przed oprogramowaniem oprogramowania należy dokręcić BOOT0 PIN0 na "Plus", przełoży MK do trybu "masła systemowego". Na opisanej tablicy przeprowadza się to przez dozwolenie skoczek ...

    Jeśli deska jest marką

    Na płytach korporacyjnych (odkrycie, jądro) należy również dokręcić pino Boot0 do Plus, ale po prostu nie zadziała. Weź schemat swojej planszy i znajdź tam odpowiednich skoczków ...

    Musisz szukać czegoś takiego:

    Nie pamiętam, z którego planuje ten schemat, ale esencja jest taka: w tym przypadku pin Boot_0. Dokręcanie do "minus" przez rezystor R16 i skoczkę SB16. Jeśli usuniesz skoczkę SB16, kod PIN zacisnął do "plus" rezystor R17 i możesz migać. Po oprogramowaniu, musisz zwrócić wszystko do miejsca.

    Jumper może wyglądać jak rezystor.

    Podłącz konwerter i STM w następujący sposób ...

    obrazek

    Przetwornik Rx. <-> PA9. Stm.
    Przetwornik Tx. <-> PA10. Stm.
    Przetwornik Gnd. <-> Gnd. Stm.

    ... i podłącz konwerter i STM do komputera.

    Instrukcje oprogramowania układowego

    Jeśli chcesz, możesz wziąć ze strony ST (na dole strony).

    Kliknij Resetuj na płycie.

    Idź do folderu Demonkor loader flash. I uruchom Loader flash demonstrator.exe.

    Wybierz port konwertera i kliknij Kolejny...

    OSTRZEŻENIE Usuń ochronę (ochrona przed zapisem)

    Taka wiadomość ...

    ... oznacza, że \u200b\u200bdeska jest zablokowana. Nie ma nic strasznego, po prostu usuń ochronę przycisku Usuń ochronę. I następne kliknięcie dobrze.

    Obrona usunięta.


    Jeśli wydawał się jeszcze jeden błąd, albo nie nacisnął resetowania ani czegoś z konwerterem.

    Jeśli światła daje zielone światło, a potem odważnie naciśnij Kolejny...

    Zhmem. Kolejny...

    W punkcie Pobierz na urządzenie. Określ ścieżkę do żądanego pliku.bin or.hex i kliknij Kolejny...

    Wszystko jest gotowe, zwróć zworkę do pierwotnej pozycji i kliknij Resetuj.

    Instrukcje oprogramowania układowego

    Pobierz i rozpakuj gdzieś.

    Z folderu odpowiedniego systemu operacyjnego skopiuj plik STM32FLASH do folderu domowego.

    To narzędzie jest w Ubuntu Repars, nie wiem w innej katastrofie, więc publikuję.

    Przed oprogramowaniem oprogramowania zawsze naciśnij RESET na płycie.

    W terminalu podaj polecenie:

    ./STM32FLASH -W /HOME/DIMA/MYFILE.BIN -V -G 0X0 / DEV / TTEUSB0
    Nazwa i ścieżka do pliku będziesz miał własną. Pliki sześciokątne mogą również migać do tego narzędzia.

    Jeśli przysięgasz sobie na prawo, daj drużynę ...

    Sudo chmod 777 / dev / ttyusb0

    ... lub uruchom narzędzie przez sudo.

    Rekordowa ochrona

    Jeśli pojawił się ten komunikat ...

    ... Następnie daj dwie drużyny z kolei:

    ./STM32FLASH -U / DEV / TTUSB0 ./STM32FLASH -K / dev / ttyusb0

    Pierwszy usuwa ochronę przed nagrywaniem, druga czytania.

    Jeśli miałeś bootloader arduin, zostanie pokryty, aby przywrócić to po prostu wlać sposób opisany powyżej

    Załóżmy, że wydałeś swoje urządzenie na rynku i boimy się, że ktoś zacznie kopiować go ... Naprawdę - po prostu podłącz program do naszego urządzenia i przeczytaj oprogramowanie układowe, na przykład za pośrednictwem narzędzia ST-Link Utility ( Cel.Połączyć.).

    Oczywiście możesz po prostu rozerwać nogi mikrokontrolera ... ale deweloperzy ST mikroelektroniki oferują alternatywę dla lepszej. Wszystkie MK ma system bezpieczeństwa (odczyt ochrony). Jego istota jest niezwykle prosta - jeśli w specjalnym rejestrze (opcjonalne bajty) ustawiona jest pewna wartość - wówczas możliwość debugowania i odczytywania oprogramowania układowego jest wyłączone. W tym trybie znikniesz również migając MK. Oczywiście, ta ochrona może być wyłączona przez zmianę wartości w rejestracji bajtów opcji, jednak w tym przypadku pamięć programu zostanie pokryta, co oznacza, że \u200b\u200bnikt nie może go skopiować.

    Zmień wartość w rejestrze, który możesz za pomocą tego samego narzędzia St-Link, Cel.Opcja bajtów ...Odczytaj ochronę.Włączyć.


    Wyłącz, odpowiednio w ten sam sposób. Nie jest całkowicie wygodne, jeśli istnieje wiele urządzeń. Możesz włączyć ochronę programowo.

    Aby wdrożyć obronę, wygodnie jest użyć standardowej biblioteki obwodowej, a konkretnie STM32F10X_FLASH.C zawiera funkcję, której potrzebujesz. Sam rejestr, a także praca z pamięcią flash jest opisana w dokumencie. Jednak wcześniej pamiętaj, jak chronić wielokrotne włączenie plików nagłówka. Użyliśmy dyrektyw preprocesora, takich jak:

    • #Define - dyrektywa wskazuje preprocesor do wymiany ciągu w pliku, jednak jeśli argument (co stoi na końcu) nie określa samego identyfikatora (fakt, że w środku) do systemu i może być sprawdzany przez inne Dyrektywy (tj. Możesz napisać warunek, który zostanie wykonany określony kod lub odwrotnie);
    • #ifndef - dyrektywa może być czytana jako ", jeśli nie zdecydowanie", ale drugi #ifdef jest bardziej odpowiedni - ", jeśli zdecydowanie";
    • #Edif - dyrektywa wskazująca koniec stanu.

    Utwórz identyfikator, który powie, że ten montaż jest ostateczny. Chociaż ten ciąg jest komentowany - kod jest umieszczony pomiędzy #ifdef i #ENSIF nie zostanie wykonany.

    // # zdefiniuj wydanie

    Gdy Ultimate Montaż wystarczy, aby po prostu nieostrzyć linię i flashować urządzenie.

    #ifdef wydanie // kod tutaj edycja

    A teraz przez samą istotę. Rozumieliśmy już, jak pracować z wewnętrzną pamięcią flash mikrokontrolera. Przed nagrywaniem bitów ochronnych należy odblokować dostęp do pamięci, musisz ponownie dokonać niezbędnych operacji i dostępu bloku. Okazuje się:

    #FDEF RELEASE #Anarning "Ochrona jest włączony. Debugowanie jest wyłączony" IF (Flash_getReadOutPrionStatus () \u003d\u003d Resetuj) (Flash_unlock (); Flash_ReadoutProtection (Włącz); Flash_lock ();) #endif

    Dziś chronimy oprogramowanie układowe na STM32 od czytania Kul Hakers. Aby nie ciągnąć gumy, oto kawałek kodu:

    #ifdef ndebug IF (Flash_getReadoutProtionStatus () \u003d\u003d Resetuj) (Flash_unlock (); Flash_ReadoutProtection (Włącz); Flash_lock ();) #endif

    Nie trudno jest odgadnąć, kawałek używa biblioteki z STM. Taki kod kodu jest bardzo wygodny - sam kontroler instaluje swoją ochronę podczas pierwszego uruchomienia, a pierwsze uruchomienie jest łatwe do organizowania po oprogramowaniu układowym. Oto, wolność od tyranii Fuuz!

    Tak, wiem o Holivor o "Bibliotece vs Direct Apel do rejestracji". Moja pozycja jest taka - jeśli potrzebujesz dużej prędkości, albo jest bardzo mała pamięć, ale musisz bezpośrednio odwołać się do rejestrów. Jeśli prędkość nie jest ważna, a pamięć jest wiele, lepiej jest korzystać z biblioteki - więc program jest napisany szybszy i okazuje się bardziej czytelny.

    Usuń ochronę
    Kontroler, byliśmy chronieni. Ale kłopot jest - musisz naprawić nasz program, iz deficytowaną ochroną, nie możesz nic zrobić z kontrolera - nie możesz pisać. Jak usunąć ochronę? Natychmiast ostrzegam cię - faceci z ul zrobili wszystko, a wszystkie oprogramowanie układowe zostaje zniszczone z ochroną.

    Aby usunąć ochronę, będziemy potrzebować narzędzia St-Link. Możesz go pobrać.

    Uruchomimy program i wybierz ten element lub po prostu kliknij Ctrl-B:

    W "Stan początkowy przed czytaniem wybierz wyłączony". I kliknij przycisk Zastosuj:

    Wraz z bitem ochronnym cała pamięć jest usuwana:

    Bezpieczny, jesteśmy dla bezpiecznego osadzonego.



    W moim projekcie używam mikrokontrolera STM32F103C8 i Ramy STM32DUINO. Ten Clone Arduino oferuje specjalny bootloader, który umożliwia wylewanie oprogramowania przez USB, bez użycia zewnętrznych elementów typu ST-link lub adapter USB-UART.

    Dzisiaj musiałem pracować z nagimi kontrolerem z COOCOX i bez STM32DUINO. Ale jaki jest problem. Nawet prosta żarówka Ferglass za pośrednictwem tego bootloadera nie działa.

    Zajmijmy się. Być może moje obliczenia wydają się komuś banalij. Ale zaczynam studiować kontrolerów STM32 i znaleźć problem zabity co najmniej pół dnia. Nagle ten artykuł zmniejszy kogoś rozwój czasu.

    Nie mam nic przeciwko St-Link i innym debugownikom. Ale w moim gotowym urządzeniu nie będzie, ale na pewno będzie USB. Dlaczego natychmiast nie położyć okazji, aby zaktualizować oprogramowanie przez USB? Osobiście uważam tę stronę wygodną. Zwłaszcza, że \u200b\u200bnadal już podłączyłem koronkę, która jest zasilana i szeregowa USB.

    Zobaczmy, jak działa bootloader. Zacznij od, na przykładzie sterowników AVR. Dlaczego pamiętałem o nim? Przeglądałem się z Arduino i podświadomie oczekiwałem tego samego zachowania. Ale w STM32 okazało się różne. Dlatego chcę opowiedzieć o różnicy tych dwóch mikrokontrolerów.

    Więc. W mikrokontrolerrach AVR ATMEGA można zarezerwować wiele pamięci bliżej końca lampy błyskowej. Korzystając z bitów bezpieczników, możesz dostosować się z którego adres rozpocznie program. Jeśli nie ma bootloadera - program zaczyna się od adresu 0x0000. Jeśli bootloader jest - zaczyna się od innego adresu (powiedzmy, w ATMEGA32 z 0x3C00, jeśli rozmiar bootloadera jest wybrany 2K).


    Gdy bootloader dokonał swoich spraw, przekazuje zarządzanie głównym programem z adresu 0x0000. Te. Program zawsze uruchamia się od adresu 0x0000. Kompilator i Lintel działają z faktem, że kod będzie na początku przestrzeni adresowej.

    W mikrokontrolerrach STM32 wszystko jest tak. Wszystkie programy zaczynają się od adresów 0x0800000. Butloider nie jest czymś wyjątkowym. Jest to ten sam program, który rozpoczyna się od tego samego adresu początkowego. W trakcie działania bootloader może wziąć oprogramowanie układowe (przez USB lub UART, odczytaj z napędu flash, aby wziąć od satelity, aby uzyskać z podprzestrzeni, Whater ...) i napisz go na adresach wyższych niż sam ładowarka. Cóż, oczywiście na końcu swojej pracy, przenieś zarządzanie głównym programem.


    Przy kompilarze oprogramowania układowego musisz wiedzieć, gdzie bootloader nagryje oprogramowanie układowe i odpowiednio dostosuje adresy.

    W tym z teorią wszystko. Idź do praktyki. Poniżej znajduje się instrukcja krok po kroku, jak przykręcić ładowarkę USB do mikrokontrolerów serii STM32F1XX serii, a może do innych.

    Istnieje jednak pewne ograniczenia w obwodzie. Tutaj niestety nie jest silny. Yatp potrzebuje rezystora zaostrzenia 1.5K dla portu PA12 (jest również USB D +). Umożliwia to bootloader do podłączenia i odłączenia z USB do żądanych momentów.

  • Teraz mikrokontroler jest gotowy do mapowania przez bootloader USB. Ale nadal musisz poprawić same oprogramowanie układowe. I potrzebujesz 2 rzeczy:
    • Określ linię adres początkowy. W Coocox odbywa się to w ustawieniach projektu, karta Link, sekcja Obszary pamięci, adres początkowy adresu IROM1. Bootloader zajmuje pierwsze 8 kilobajte, co oznacza, że \u200b\u200badres początkowy oprogramowania oprogramowania wynosi 0x0800000 + 0x2000 \u003d 0x08002000. Wielkość rozmiaru, prawdopodobnie warto również zmniejszyć o 8 tys.
    • Gdzieś na początku programu przed inicjalizacją peryferii złoży wyzwanie

      NVIC_SetVectortable (NVIC_VECTTAB_FLASH, 0x2000);

  • Zatoka firmware Możesz wziąć z projektu STM32DUINO. W katalogu Narzędzia szukaj skryptu pod nazwą Maple_Upload. Użyłem tylko wersji systemu Windows - Maple_upload.bat.
  • Uruchom taki:

    "Maple_upload.bat" COM20 2 1: 0003 "Ścieżka do firmware.bin"
    Zamiast COM20 musisz zastąpić port, w którym zamyka się mikrokontroler.

    Chuck jest bardzo delikatny, ścieżki względne nie lubią. Więc ścieżka do oprogramowania układowego musi być całkowicie określona.

    1: 0003 jest vid i pid

    2 jest parametrem outd, który wskazuje, że oprogramowanie układowe musi być wylane do 0x08002000 (odczyt).

  • Kolejne małe niuanse. Przed nalewaniem oprogramowania układowego musisz uruchomić bootloader. Najprostszym sposobem jest naciśnięcie przycisku Reset. Potem uruchomienie bootloader rozpocznie się i będzie czekać na oprogramowanie przez kilka sekund. Jeśli nikt nie działa w tym momencie Maple_Upload, bootloader przekazuje kontrolę głównego oprogramowania układowego.

    Z tego powodu mogą pojawić się niedogodności. Jeśli mikrokontroler również podświetlony i zawieszony, nie słucha już portu. Dlatego nie może usłyszeć sekwencji kluczowej i przeciążenia do bootloadera. Następnie zresetuj, aby pomóc.

    To wszystko. Mam nadzieję, że mój artykuł złamie światło, w jaki sposób ładowarka pracuje w STM32 i jak pobrać oprogramowanie przez port USB. Niestety, próg wejścia jest nadal wysoki, ale nagle ktoś mój artykuł pomoże pokonać go.

    Dzwon.

    Są ci, którzy przeczytali tę wiadomość przed tobą.
    Subskrybuj odbieranie artykułów świeżych.
    E-mail
    Nazwa
    Nazwisko
    Jak chcesz przeczytać dzwonek
    Bez spamu