Przywracanie SAM-B-y w MMnecie1002

Eksperymentując z bootloaderami i jądrami Linuksa na AT91SAM9260 zablokowałem sobie w pewnym momencie moduł MMnet1002. Mikrokontroler programowany jest przez atmelowski interfejs ISP o nazwie SAM-BA (SAM Boot Assistant), który jest bardzo wygodny, bo nie wymaga żadnego sprzętowego programatora — wystarczy podłączyć się przez USB do ARM-a i użyć oprogramowania dostarczonego przez Atmela.

Niestety, nie jest tak, że tryb programowania włącza podanie odpowiedniego stanu na jakiś pin i restart mikrokontrolera. SAM-BA znajduje się na samym końcu sekwencji startowej i jest uruchamiana tylko wtedy, gdy nie uda się wczytać programu z pamięci DataFlash i NANDFlash. Wprawdzie na płytce MMnet1002 znajduje się zworka SAMBA podłączona do pinu PC15 (NWAIT), której założenie w połączeniu z dwukrotnym restartem wprowadza system w stan programowania, ale ta tajemnicza metoda nie zawsze skutkuje. W szczególności, gdy doprowadzimy system do takiego stanu, że będzie w stanie wczytać z pamięci wadliwy program, utkniemy w miejsu — algorytm startowy stwierdzi, że program wczytano i nie ma potrzeby uruchamiania SAM-B-y, nawet gdy program będzie błędny. W efekcie na konsoli DBGU zobaczymy tylko smutne:

RomBOOT
>

Jak się ratować w takiej sytuacji? Szereg rozwiązań znajdziemy w nocie Atmela AT91SAM9260-EK SAM-BA Recovery. Przede wszystkim bootloader AT91Bootstrap może być skompilowany tak, że podczas startu monitoruje stan wskazanego pinu i w razie żądania (zwarcia pinu do masy), czyści pierwszy blok pamięci NANDFlash, co uniemożliwia wczytanie z niej programu, a w konsekwencji wywołanie SAM-B-y. Nota mówi o pinie PB4 PA31 (chodzi o przycisk BP4 na płytce ewaluacyjnej AT91SAM9260-EK, podłączony do pinu PA31), ale dla MMneta1002 powinien to być PC15, podłączony do zworki SAMBA. Trick ten jednak nie pomoże nam, jeżeli majstrowaliśmy przy AT91Bootstrapie.

Podobne rozwiązanie stosuje aplikacja AT91bootstrap-recovery, którą można wgrać na kartę DataFlash, trzeba jednak najpierw mieć taką kartę i możliwość jej podłączenia do systemu. Zatem to rozwiązanie odpada, tak samo jak użycie programatora SAM-ICE, którego nie posiadam.

Na szczęście jest prosta metoda sprzętowa, odradzana przez Atmela, ale moim zdaniem najlepsza. Wystarczy odciąć pamięć nieulotną od mikrokontrolera, choćby na krótką chwilę podczas startu. Zostanie uruchomiona SAM-BA, a wtedy wystarczy z powrotem podłączyć pamięć i programować.

Moja płytka wyposażona jest w pamięć NANDFlash, którą można w prosty sposób odciąć, wylutowywując rezystor R48 (0Ω) i zastępując go zworką w pozycji NF (możliwe, że niektóre płytki domyślnie są przygotowane właśnie w taki sposób — wtedy nie trzeba nawet wyciągać lutownicy i można od razu przejść do kolejnego kroku). Na poniższych zdjęciach zaznaczyłem, który rezystor należy usunąć i którą zworka nas interesuje.

MMnet1002: usunięcie rezystora MMnet1002: opcjonalne zworki

Teraz, aby zaprogramować mikrokontroler, wystarczy zdjąć zworkę NF, zrestartować system i założyć zworkę z powrotem.

Komentarzy: 1 do „Przywracanie SAM-B-y w MMnecie1002“

  1. Czaro komentuje:

    Bardzo dobry artykuł. Muszę dodać, że ten MMnet1002 też mi napsuł dużo krwi. Ostatnio po około roku nie używania chciałem go odpalić. Włączam a tu nic na konsoli. Sprawdzam na oscyloskopie cisza. Napięcia ok. Zacząłem coś kombinować żeby uruchomić SAM-BE i nic. Okazało się, że bateria, w którą ten MMnet1002 jest wyposażony miała tylko 0.8V (prawdopodobnie się rozładowała). Wymieniłem na nową CR2032 i zaczęło wszystko działać, a nic nie napsułem w między czasie, bo widocznie w ogóle ARM nie ruszał.
    A co do artykułów na tej stronie to mogę powiedzieć tylko: WIĘCEJ, WIĘCEJ!
    Nie jestem linuxowcem, więc jak czytam jak ktoś po ludzku tłumaczy jak coś wgrać to chwała mu!

Dodawanie komentarzy

XHTML: Możesz używać tagów: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">