Wracam z tematem bo znowu znalazłem czas na eksperymenty z tym układem.
W między czasie pojawiła się obsługa ANNA-B112 (nrf52832) w Arduino w postaci Nicla Sense ME. Zainstalowałem w Arduino potrzebny core i próbowałem wygenerować .bin a później zaprogramować przez SWD (STLink + OpenOCD), ale bezskutecznie. Program testowy miał za zadanie migać diodą podłączoną do pinu P0.30, wgrywał się poprawnie (przynajmniej po wgraniu weryfikacja przechodziła pomyślnie), ale dioda nie migała.ac
Aby wykluczyć problemy po stronie programatora i samego układu ANNA-B112, poprosiłem użytkowników na portalu Nordic DevZone (https://devzone.nordicsemi.com/f/nordic-q-a/105035/please-help-me-generate-a-test-bin) o stworzenie programu w dedykowanym środowisku Nordic SDK dla układu nrf52832, który migałby diodą na tym konkretnym pinie. Jeden z użytkowników stworzył mi taki soft i podesłał plik .bin. Po jego wgraniu dioda zaczęła migać. Czyli samo programowanie jak i układ ANNA-B112 działa poprawnie.
Nie byłem w stanie sprawić aby wygenerowany plik .bin dla płytki Nicla Sense ME zadziałał mi po wgraniu go programatorem, więc na tapetę wziąłem raz jeszcze core "Adafruit Bluefruit nRF52 Boards" oraz "Nordic Semiconductor nRF5 based boards". Oba core wspierają układ nrf52832, a ten jest sercem ANNA-B112. Kod w obu przypadkach był taki sam:
Zaloguj się, aby zobaczyć kod
Najpierw skompilowałem (Sketch -> Export Compiled Binary) kod dla core Nordic Semiconductor w wyniku czego dostałem plik .bin. Wgrałem do układu i... dioda nie miga. Pomyślałem, że ten core nie będzie współpracować z ANNA-B112 i spróbowałem wygenerować .bin tym razem dla Adafruit. Po wgraniu wsadu dioda nadal nie migała. Byłem już zrezygnowany ale coś mnie tchnęło i zwróciłem uwagę na coś takiego jak "SoftDevice". Z neta dowiedziałem się na szybko, że jest to jakiś stos obługi bluetooth. W obu przypadkach miałem to zaznaczone w zakładce "Tools -> SoftDevice". O ile dla Adafruit jest zaznaczony SoftDevice 6.1.1 i nie można zmienić na nic innego, to dla Nordic Semiconductor mogę dać SoftDevice na None. Wtedy po wgraniu takiego softu dioda zaczeła mi migać
Idąc tym tropem doszedłem do wniosku, że gdy jest wybrany SoftDevice to soft chyba musi wchodzić w interakcję z tym całym SoftDevice, a plik .bin go nie zawiera. Znalazłem taką rozpiskę mapy pamięci
Pochyliłem się bardziej nad Adafruit bo na tym core chciałbym się skupić. Znalazłem w plikach tego repozytorium w ścieżce Arduino plik .hex który zawiera w sobie SoftDevice i Bootloader. Otwierając plik w edytorze HxD faktycznie widać, że zgodnie z mapą w zakresie 0x00000 do 0x26000 i 0x74000 - 0x80000 są jakieś dane - zapewne SoftDevice i Bootloader. Dodałem do tego pliku od adresu 0x26000 zawartość .bin wygenerowanego przez Arduino i wgrałem całość do procka. Dioda zaczęła migać, ale tylko przez chwilę, później kilka sekund przerwy i znowu zaczeła migać ale w losowych odstępach czasu, więc jest już lepiej ale nie do końca. Zauważyłem, że Arduino oprócz .bin generuje też plik .dat. Założyłem, że to mogą być dane oznaczone na mapie jako UserData. Dodałem więc i je od adresu 0x6D000, ale po wgraniu dioda zaczęła migać ale po chwili przestała i już nie chciała więcej migać. Czyli gorzej.
Ktoś może wie gdzie robię błąd?
I w ogóle to co to jest dokładnie ten cały SoftDevice? Jak to działa?