
Niedawno przedstawiłem wnętrze taniego smartbanda z interfejsem BT, kolorowym wyświetlaczem i kilkoma funkcjami typowymi dla tego segmentu https://www.elektroda.pl/rtvforum/topic3975641.html. Teraz opiszę jak zabrać się za programowanie tego układu.
Opaską steruje SoC DA14585 firmy Dialog (Renesas) posiadający rdzeń ARM Cortex-M0. Ma 96 kB pamięci RAM i 64 kB pamięci jednorazowo programowanej (OTP). Jak się okazało, można układ programować, gdyż posiada zewnętrzną pamięć FLASH połączoną przez SPI. Ponadto, na płytce istnieją mini pola do podłączenia interfejsu UART.

Odkrycie interfejsu UART umożliwiło mi nawiązanie komunikacji i wgrywanie własnego softu za pomocą narzędzi programistycznych udostępnionych przez Renesas. Dobre jest to, że Renesas wydał wersje tych narzędzi dla Windowsa i Linuxa.
Narzędzia i biblioteki przydatne do programowania DL14585:
SmartSnippets™ Toolbox

Zestaw narzędzi umożliwiających komunikację z DA15855. Posiada GUI ale może być używany z linii komend.
SmartSnippets™ Studio

Firmowe IDE Renesas, wciąż rozwijane, jeszcze nieco niedopracowane w porównaniu z Keil. Nie jest niezbędne, wolę Keila w tym zastosowaniu.
Oba powyższe toole do pobrania z smartbond-development-tools
Poradnik instalacji i korzystania ze SmartSnippets um-b-057
Keil MDK 5.38

IDE do tworzenia oprogramowania. Wersja tylko na Windows, ja zainstalowałem go na wine-8.0.1.
Do pobrania z Keil MDK, po zarejestrowaniu i zalogowaniu.
Software Development Kit SDK6.0.18.1182.1 for DA1453x, DA14585/6
Zestaw bibliotek wraz z przykładowymi programami.
Do pobrania z SDK po wcześniejszym zalogowaniu
Przejściówka USB-UART
Koniecznie na układzie FTDI, bo innych programator SmartSnippetsToolbox nie rozpoznaje

Nie opisuję procesu instalacji bo robiłem to na linuxie, inaczej może być na Windowsie.
Ogólnie instalacja przebiegła bez większych problemów. Jeżeli czegoś brakowało po prostu przeczytałem komunikat i doinstalowałem, myślę, że nie ma sensu tego opisywać. Ewentualnie jeżeli ktoś będzie chciał się pobawić i natrafi na problem zapraszam do zadawania pytań.
Przygotowanie do programowania
Płytka po wyjęciu z obudowy opaski jest dosyć nieporęczna, połączenia są wykonane z cienkich drucików i taśm, toteż konieczne było umiejscowienie jej na większej płytce "deweloperskiej".
Wykorzystałem do tego uniwersalną płytkę, na której umieściłem trochę elektroniki oraz wykonałem połączenia z płytką wyjętą z opaski.
Przydatne podczas programowania stało się wyprowadzenie sygnału RESET na zewnątrz.

Ponieważ konwerter USB-RS232 działa z poziomami TTL, konieczne stało się użycie konwertera poziomów w postaci dzielnika rezystorowego na linii Tx oraz tranzystora przesuwającego poziomy z 3,3 na 5V na linii Rx konwertera.
Na razie jest druciarnia, być może wykonam jeszcze jedną solidniejszą platformę z płytką DA14585.

Pierwszy program na DA14535
SDK dostarczone przez Renesas zawiera przykładowe projekty. Znajdują się one w lokalizacji
DA145xx_SDK/6.0.18.1182.1/projects/
Na sam początek warto załadować i skompilować któryś z projektów, bez własnych modyfikacji, aby sprawdzić działanie środowiska.
Ja wybrałem projekt target_apps/peripheral_examples/blinky.
Posiada on strukturę:
Code: bash
Struktura jest jasna - oddzielone zostały pliki projektu w danym IDE oraz źródła programu.
Analizując inne projekty łatwo dojść do wniosku, że Renesas w przypadku tego SoC preferuje Keil zamiast swojego SmartSnippets™ Studio.
Jak wygląda projekt w innym IDE można się przekonać zaglądając np. do katalogu: projects/target_apps/ble_examples/prox_reporter/
Code: bash
U mnie projekty kompilowały się od razu więc przystąpiłem do tworzenia swojego projektu bazując na blinky.
Posiłkowałem się przy tym wspomnianym wcześniej poradnikiem UM-B-057, gdzie opisana jest m.in. procedura tworzenia projektu na bazie istniejącego.
Na początku zmieniłem nazwę projektu i jego lokalizację względem SDK zmieniając wszystkie ścieżki w pliku *.uvprojx na właściwe. Pozostawiłem pliki *.c i *.h aby struktura projektu wyglądała tak:
Code: bash
Program wypisuje tekst na UART, który zawiera kolejne liczby pierwsze w formacie hex. Liczby są liczone w bardzo nieoptymalny sposób, wykorzystując dzielenie modulo.
Czas trwania pętli zależy więc od aktualnie liczonej liczby pierwszej, im większa tym dłużej trwa.
Code: c
Dodatkowo program steruje podświetleniem LED wyświetlacza IPS na zasadzie włącz/wyłącz. Rozgryzienie połączeń na tak małej płytce to nie lada wyzwanie. Dodatkową trudność stanowi obecność w obwodzie sterowania podświetlenia tajemniczego elementu przypominającego konwerter poziomów albo inny bufor, mający 4 wyprowadzenia Vcc, GND, input, output, oznaczony kodem EL1, w obudowie o wymiarach około 1x1 mm (dwa obok siebie w centrum zdjęcia).

W każdym razie, podświetlenie sterowane jest od masy tranzystorem NPN a od plusa akumulatora wspomnianym buforem. Podając stan wysoki na bazę tranzystora i stan wysoki na wejście drivera podświetlenie IPS działa.
Programowanie układu
Odbywa się przez UART, ten sam, przez który będzie wysyłać tekst.
Proces programowania nie ogranicza się tylko do wgrania hexa do pamięci FLASH. Ponieważ mikrokontroler DA14585 korzysta tutaj z pamięci FLASH zewnętrznej, najpierw jest wgrywany kod programatora, który obsłuży programowanie tej zewnętrznej pamięci.
Następnie wykonywane jest czyszczenie FLASH (ERASE), wgrywanie hexa z programem i weryfikacja.
Można to przeprowadzić ręcznie korzystając z GUI Toolboxa, ale ja od razu napisałem skrypt robiący to wszystko za mnie. Aby wgrać program muszę odpalić skrypt z konsoli i za chwilę nacisnąć RESET na dev-boardzie, reszta robi się sama.
Code: bash
Skrypt uruchamiający programowanie FLASH
Code: bash
Częsta zmiana portów powoduje, że ttyUSBxx też się zmienia, stąd poszukiwanie w pętli.
Ścieżki oczywiście do poprawy.
Próbowałem pogodzić Keila z zewnętrznym skryptem, ale bez sukcesu bo coś nie styka na łączu WINE-Linux.
Po wgraniu programu i zrestartowaniu układu można włączyć terminal i obserwować co się pojawia oraz spoglądać na wyświetlacz, na którym powinno być widać mruganie podświetlania zgodne z tym, co widać na terminalu.
Po paru minutach działania na terminalu można dostrzec coś takiego:

Płytka kryje jeszcze wiele ciekawych funkcjonalności, których oprogramowanie i uruchomienie będzie ciekawym wyzwaniem.
Są to m. in.
- czujnik dotykowy,
- czujnik przyspieszenia (I2C),
- wyświetlacz IPS (SPI),
- czujnik pulsu (I2C?),
- BLE 5.0.
Jak dobrze pójdzie swoje dalsze zabawy opiszę w następnych częściach.
Cool? Ranking DIY