W cenie niewiele większej niż 1$.
Jak szybko się pojawiła tak niemal szybko świat zapomniał o tym kilerze

Z tym, że w tym przypadku w środku siedzi ARM Cortex M3 co stanowi jakąś nadzieję ... i po kilku miesiącach pojawiło się SDK, na chwilę obecną cały czas rozwijane.
Z dokumentacją nadal nie ma szału ale chociaż jest kilka dokumentów po angielsku, wcześniej same chińskie krzaki.
Ale do rzeczy. Najbardziej popularny moduł to "zamiennik" ESP-01 z podobnym układem wyprowadzonych pinów na złączu.

Standardowo zasilanie (3,3V), UART, reset, oraz 3 piny, mogą pełnić funkcję kolejnego interfejsu UART lub jako GPIO.
Owy SoC posiada 1MB FLASH, 288kB RAM i może być taktowany 80MHz.

Pamięć ram podzielona jest na dwie sekcje, jedna dla "systemu" wszystko co związane z obsługą WiFi oraz druga przeznaczona dla użytkownika.
Przejdźmy do ważniejszego jak zamigać LED-em

Standardowo modułem można sterować za pomocą komend AT, jako most UART-WiFi to nawet tania alternatywa w porównaniu z innymi modułami. Ale komu by się chciało klepać komendy AT! przecież tam jest M3!
Opis "instalacji" zrobię na swoim przypadku czyli pod systemem Linux, generalnie nie ma większego znaczenia jaka dystrybucja bo potrzebne narzędzia są dostępne w większości dostępnych.
Będziemy potrzebować:
1 - modułu UART pracującego na napięciu 3,3V (piny nie są 5V tolerant, przynajmniej nie znalazłem tego w skromnej dokumentacji)
2 - kompilatora (ale dla ARM to przecież nie problem)
3 - SDK i narzędzi do przygotowania wsadu
Punk 3 najważniejszy znajdziemy na githubie https://github.com/w600/sdk

No to zaczynamy:
1 - przygotowanie piaskownicy.
Ja lubię mieć poukładane i to co dotyczy W600 będę trzymał w jednym katalogu, ty zrobisz wedle własnych upodobań.
Zgodnie z powyższym do katalogu w600 pobrałem SDK z githuba:
Kod: Zaznacz cały
mkdir W600
git clone https://github.com/w600/sdk
2 - kompilator.
Z kompilatorem (gcc) dla ARM nie ma problemu. Ale jest mały chiński haczyk

Kod: Zaznacz cały
wget https://launchpad.net/gcc-arm-embedded/4.9/4.9-2014-q4-major/+download/gcc-arm-none-eabi-4_9-2014q4-20141203-linux.tar.bz2
Pobranie archiwum wypakować, żeby ułatwić sobie życie zmieniłem nazwę wypakowanego katalog na gcc-arm-4_9. Tak więc kompilator nie jest instalowany nie będzie się gryźć z inną wersją itp.
3 - ożenić SDK i kompilator.
Jako że nie instalowałem tej wersji kompilatora to system nie wie że go mam i standardowo będzie chciał użyć wersji zainstalowanej w systemie w moim przypadku 7, a tak niestety się nie da, próbowałem ale przy budowie binarek wychodzą błędy.
Aby nie kombinować za wiele nieco zmieniłem plik odpowiedzialny za kompilację w katalogu sdk/tools/tool_chain.def
Dodałem tam linię:
Kod: Zaznacz cały
GCC_DIR = /home/nazwa_usera/W600/gcc-arm-4_9/bin/
Oraz w sekcji tego pliku:
Kod: Zaznacz cały
# select which tools to use as compiler, librarian and linker
ifeq ($(COMPILE), gcc)
AR = $(GCC_DIR)arm-none-eabi-ar
ASM = $(GCC_DIR)arm-none-eabi-gcc
CC = $(GCC_DIR)arm-none-eabi-gcc
CPP = $(GCC_DIR)arm-none-eabi-c++
LINK = $(GCC_DIR)arm-none-eabi-ld
OBJCOPY = $(GCC_DIR)arm-none-eabi-objcopy
OBJDUMP = $(GCC_DIR)arm-none-eabi-objdump
Jeszcze chwilę pozostańmy w tym katalogu i nadamy prawa do wykonywania dla programów do tworzenia obrazów, czyli:
Kod: Zaznacz cały
chmod +x tools/makeimg
chmod +x tools/makeimg_all
chmod +x tools/makeimg_dbg
Zanim przejdziemy do kompilacji "helloworld" z przykładów z SDK musimy nadać też prawa do wykonania skryptu ułatwiającego proces kompilacji
Kod: Zaznacz cały
chmod +x example/build.sh
No to kompilujemy

W katalogu example znajdującego się w SDK jest helloworld od niego zaczniemy, zawiera podkatalog user a tam plik main.c zbudujemy go bez modyfikacji w kodzie, to zostawiam już każdemu we własnym zakresie.
Przechodzimy do katalogu example i wydajmy polecenie:
Kod: Zaznacz cały
./build.sh helloworld
Kod: Zaznacz cały
sdk/bin/nazwa_projektu
... no to do dzieła

Kod: Zaznacz cały
.......
Generate ..//bin/helloworld/helloworld.bin successully
linux platform
..//bin/helloworld/helloworld.bin: 28.9% -- replaced with ..//bin/helloworld/helloworld.bin.gz
secboot_len:4948, app_imglen:47788, total:55788
use 1M flash
Build finish !!!
Tadammm no i co teraz z tym zrobić!

No właśnie i tu przyda się przeczytać dokumentację, jest kilka sposobów na wymianę wsadu. Generalnie w układzie jest bootloader i są dwie możliwości wgrania.
1 - całość, czyli nowy bootloader (generowany przy kompilacji) oraz program.
2 - wgranie skompresowanego obrazu samej sekcji programu.
Wszystkie potrzebne pliki są już przygotowane:
Kod: Zaznacz cały
ls ../bin/helloworld/
helloworld.bin helloworld.fls helloworld_gz.img helloworld.map
Dla opcji 1 jest przygotowany plik: helloworld.fls a dla 2: helloworld_gz.img
No dobra ale co dalej czym wgrać ... zgodnie z dokumentacja wsad należy wgrać przy użyciu protokołu Xmodem. Jeśli w systemie nie ma paczki lrzsz to musimy ją zainstalować.
Kod: Zaznacz cały
#apt-get install lrzsz
Podpiąć się do UART0 układu, domyślnie 8N1 i prędkość 115200
Opcja 1.
Żeby skorzystać z tej drogi, należy podać stan niski na pin 13 (PA_0 - bootmode) stan niski i zresetować układ (podać stan niski na pin 2).
w terminalu pojawi si coś w tym stylu:
Teraz trzeba w konsoli wydać polecenie:
Kod: Zaznacz cały
sx -vv bin/nazwa_pliku.fls < /dev/ttyUSB0 > /dev/ttyUSB0
wsad zostanie wgrany, należy go jeszcze ręcznie zresetować by nowy wsad został załadowany przy bootowaniu.
Opcja 2.
Tryb ten pozwala na podmianę samej sekcji użytkownika, i do tego potrzebny jest plik z skompresowanym obrazem: .img
Tu jest łatwiej bo nie musimy się dolutować do pinu PA_0, a wystarczy w trakcie normalnej pracy układu trzymać wciśnięty klawisz ESC i zresetować układ. W trakcie bootowania (po resecie) wysłanie znaku klawisza ESC powoduje wejście w tryb upgade.
I analogicznie jak wcześniej przesłać odpowiedni plik protokołem Xmodem:
Kod: Zaznacz cały
sx -vv bin/nazwa_pliku.img < /dev/ttyUSB0 > /dev/ttyUSB0
Nie napisałem jeszcze że SDK jest oparte o FreeRTOS, jest sporo przykładów (dema) z softem do chyba każdego peryferiału jaki jest w układzie.
Pomimo skromnej dokumentacji są komentarze w plikach nagłówkowych dzięki czemu można jakoś iść do przodu

Mi przypadł póki co ten układ, w obudowie QFP-32 (5x5mm) mam naprawdę fajny materiał do IoT.
Zachęcam do zapoznania z W600

Ja czekam na płytkę (devboard)

Będzie trochę łatwiej bo wszystkie GPIO są wyprowadzone.
Czy jest to ESP killer ... nie wiem ale zasługuje na uwagę i mi przypadł, szkoda tylko że nigdzie nie znanazłem dostępnych samych kostek a jedynie jako moduły, choć w cenie ~4,5 PLN mamy po wylutowaniu oscylator 40MHz i W600 które można używać w swoich projektach

A to z aktualnego placu boju ...
