Aktualizacja z września 2025:
zobacz tutaj, aby uzyskać szczegółowe informacje na temat konwersji STM32 przez UART zamiast J-Link (tj. J-Link nie jest wymagany) https://www.elektroda.com/rtvforum/topic4120455.html#21695356 (dzięki @max4elektroda!)
zobacz tutaj, aby uzyskać wyższą wersję przekonwertowanego oprogramowania CK-Link Lite dla STM32 https://www.elektroda.com/rtvforum/topic4120455.html#21554694
Tutaj udokumentuję moją podróż z tanią płytką STM32F103C8T6 "blue pill" kupioną w Ali Express. Pomimo układu scalonego oznaczonego jako "STM32F103C8T6" wewnętrzna pamięć flash wydaje się mieć 128k zamiast 64k, co czyni go bardziej podobnym do STM32F103CBT6. Wydaje się, że nie jest to nieoczekiwane w przypadku podróbek/klonów STM32.
Celem tego zakupu jest stworzenie taniego debuggera procesora C-SKY CK-Link / T-Head w nadziei, że będę mógł uzyskać dostęp i zrzucić pamięć flash układów opartych na C-SKY, takich jak WinnerMicro W800/W801/W806, które są C-SKY CK804FGT.
Kupiłem 3 w sklepie YouKeyi https://www.aliexpress.com/item/1005006999051681.html
Korzystając z opracowań cjackera na https://github.com/cjacker/cklink-lite-fw-convertor, możemy przekonwertować plik "cklink_lite.hex" dostarczany z serwerem debugowania T-Head, aby działał na STM32 po flashowaniu. cjacker dostarcza również plik binarny, który został już przekonwertowany https://github.com/cjacker/cklink-lite-fw-con.../blob/main/cklink_lite-2.36_for-stm32f103.hex, a wersję 2.37 wraz ze skryptem konwersji Pythona kompatybilnym z Windows można znaleźć w tym PR https://github.com/cjacker/cklink-lite-fw-convertor/pull/1/files. Załączę tutaj wszystkie pliki dla bezpiecznego przechowywania.
Ale jak zaprogramować STM32? SWD - Serial Wire Debug!
Używając jednego z tych tanich klonów programatora/debuggera J-Link możemy flashować STM32 używając J-Flash.
.
J-Flash można pobrać ze strony https://www.segger.com/products/debug-probes/j-link/technology/flash-download/
Podłącz w następujący sposób
J-Link GND -> STM32 GND
J-Link SWDIO -> STM32 SWIO
J-Link SWCLK -> STM32 SWCLK
J-Link 3V3/VCC - <odłączony>
uruchom J-Flash, utwórz nowy projekt i wybierz "STM32F103CB" (128kb) z listy urządzeń docelowych
przy zasilaniu obu urządzeń z ich portów micro-USB "Target" i "Connect" w menu J-Flash powinny zobaczyć pomyślne połączenie urządzenia
Teraz można skasować/zapisać lub odczytać cały chip z menu Target-> Manual Programming . Najpierw przeczytałem demo emulatora pamięci USB Keil, które zostało dostarczone z STM32.
Aby sflashować cklink_lite-2.37_for-stm32f103.hex wystarczy przeciągnąć plik do okna J-Flash -> Erase Chip -> Program & Verify
Wyłącz zasilanie STM32 i podłącz go ponownie. W przypadku korzystania z systemu Windows powinien on zostać wykryty jako urządzenie C-Sky CKLink-Lite
Teraz musimy połączyć się z serwerem debugowania T-Head, abyśmy mogli połączyć się z urządzeniami opartymi na C-SKY.
Zarejestruj się i pobierz serwer debugowania T-Head ze strony https://www..xrvm.cn/community/download?id=4380347564587814912 - będę demonstrował wariant Windows. Załączam pliki do pobrania dla systemów Windows i Linux w najnowszej wersji w momencie pisania, a także instrukcję debugowania w formacie PDF.
Procesor, z którym będę się łączył, to CK804 w płytce deweloperskiej Hi-Link HLK-W806-KIT, tak samo jak wyjaśniono tutaj https://github.com/cjacker/opensource-toolcha...your-own-ck-link-lite-debugger-with-stm32f103
STM32 jest podłączony do HLK w następujący sposób
Po podłączeniu zasilania do STM32 i W806, uruchomienie aplikacji DebugServerConsole powinno przełączyć procesor w tryb debugowania i wyświetlić informacje o wersji oprogramowania CK-Link i procesorze W806.
Wyodrębnij załączony plik w806.elf i umieść go w folderze \bin obok pliku wykonywalnego konsoli debugowania - C:\Users\xxxx\AppData\Roaming\T-Head\T-HeadDebugServer\bin jeśli został zainstalowany w domyślnej lokalizacji.
Informacje o pliku elf można uzyskać za pomocą polecenia flash -al w806.elf z konsoli debugowania.
DebuggerServer$ flash -al w806.elf
Dla porównania, cała lista poleceń flash jest następująca
więc powinniśmy być w stanie zrzucić zawartość flash W806 za pomocą polecenia takiego jak to
te argumenty oznaczają:
Zrzut wydaje się działać. 1mb zajął 56 sekund.
.
Zrzut ląduje w folderze \bin
Wynikowy plik wydaje się zawierać dane, a nawet zwykły tekst z W806 demo sflashowanego przy użyciu Upgrade Tools .
Niestety flashowanie z powrotem za pomocą polecenia flash program -f blinkydump.bin -b -a 0x080000 -al w806.elf nie wydaje się skutkować uruchomieniem aplikacji, pozostawiając urządzenie oczekujące na przesłanie w trybie xmodem "CCCCCCCCCCCCC"
Ciekawe jest również to, że wymazanie pamięci flash, mimo że "udane", nie wydaje się faktycznie zerować pamięci flash, kolejny zrzut wydaje się być prawie identyczny z tym wykonanym przed wymazaniem - jest to również prawdą, jeśli używa się wm_tool (wm_tool_1.0.4.exe -c com79 -eo all) do wymazania W806 przez UART - brak pustej pamięci flash, chociaż wydaje się, że po wymazaniu przechodzi w tryb CCCCC, więc może zmienia jakiś bajt, aby oznaczyć go jako pusty?
wypróbowane polecenia wymazywania konsoli debugowania:
flash erase -a 0x080000 -s 0x100000 -al w806.elf
flash erase -c -al w806.elf
Inne obserwacje:
Port COM wysyła to podczas operacji odczytu
i to podczas zapisu
Do tego właśnie doszedłem. Działające przywracanie flasha myślę, że jest priorytetową rzeczą do dopracowania. Niestety nie mam żadnych urządzeń C-Sky z wgranym oryginalnym firmware, żeby wrzucić coś nowego i ciekawego od takiej firmy jak Tuya.
zobacz tutaj, aby uzyskać szczegółowe informacje na temat konwersji STM32 przez UART zamiast J-Link (tj. J-Link nie jest wymagany) https://www.elektroda.com/rtvforum/topic4120455.html#21695356 (dzięki @max4elektroda!)
zobacz tutaj, aby uzyskać wyższą wersję przekonwertowanego oprogramowania CK-Link Lite dla STM32 https://www.elektroda.com/rtvforum/topic4120455.html#21554694
Tutaj udokumentuję moją podróż z tanią płytką STM32F103C8T6 "blue pill" kupioną w Ali Express. Pomimo układu scalonego oznaczonego jako "STM32F103C8T6" wewnętrzna pamięć flash wydaje się mieć 128k zamiast 64k, co czyni go bardziej podobnym do STM32F103CBT6. Wydaje się, że nie jest to nieoczekiwane w przypadku podróbek/klonów STM32.
Celem tego zakupu jest stworzenie taniego debuggera procesora C-SKY CK-Link / T-Head w nadziei, że będę mógł uzyskać dostęp i zrzucić pamięć flash układów opartych na C-SKY, takich jak WinnerMicro W800/W801/W806, które są C-SKY CK804FGT.
Kupiłem 3 w sklepie YouKeyi https://www.aliexpress.com/item/1005006999051681.html
Korzystając z opracowań cjackera na https://github.com/cjacker/cklink-lite-fw-convertor, możemy przekonwertować plik "cklink_lite.hex" dostarczany z serwerem debugowania T-Head, aby działał na STM32 po flashowaniu. cjacker dostarcza również plik binarny, który został już przekonwertowany https://github.com/cjacker/cklink-lite-fw-con.../blob/main/cklink_lite-2.36_for-stm32f103.hex, a wersję 2.37 wraz ze skryptem konwersji Pythona kompatybilnym z Windows można znaleźć w tym PR https://github.com/cjacker/cklink-lite-fw-convertor/pull/1/files. Załączę tutaj wszystkie pliki dla bezpiecznego przechowywania.
Ale jak zaprogramować STM32? SWD - Serial Wire Debug!
Używając jednego z tych tanich klonów programatora/debuggera J-Link możemy flashować STM32 używając J-Flash.
J-Flash można pobrać ze strony https://www.segger.com/products/debug-probes/j-link/technology/flash-download/
Podłącz w następujący sposób
J-Link GND -> STM32 GND
J-Link SWDIO -> STM32 SWIO
J-Link SWCLK -> STM32 SWCLK
J-Link 3V3/VCC - <odłączony>
uruchom J-Flash, utwórz nowy projekt i wybierz "STM32F103CB" (128kb) z listy urządzeń docelowych
przy zasilaniu obu urządzeń z ich portów micro-USB "Target" i "Connect" w menu J-Flash powinny zobaczyć pomyślne połączenie urządzenia
Teraz można skasować/zapisać lub odczytać cały chip z menu Target-> Manual Programming . Najpierw przeczytałem demo emulatora pamięci USB Keil, które zostało dostarczone z STM32.
Aby sflashować cklink_lite-2.37_for-stm32f103.hex wystarczy przeciągnąć plik do okna J-Flash -> Erase Chip -> Program & Verify
Wyłącz zasilanie STM32 i podłącz go ponownie. W przypadku korzystania z systemu Windows powinien on zostać wykryty jako urządzenie C-Sky CKLink-Lite
Teraz musimy połączyć się z serwerem debugowania T-Head, abyśmy mogli połączyć się z urządzeniami opartymi na C-SKY.
Zarejestruj się i pobierz serwer debugowania T-Head ze strony https://www..xrvm.cn/community/download?id=4380347564587814912 - będę demonstrował wariant Windows. Załączam pliki do pobrania dla systemów Windows i Linux w najnowszej wersji w momencie pisania, a także instrukcję debugowania w formacie PDF.
Procesor, z którym będę się łączył, to CK804 w płytce deweloperskiej Hi-Link HLK-W806-KIT, tak samo jak wyjaśniono tutaj https://github.com/cjacker/opensource-toolcha...your-own-ck-link-lite-debugger-with-stm32f103
STM32 jest podłączony do HLK w następujący sposób
Po podłączeniu zasilania do STM32 i W806, uruchomienie aplikacji DebugServerConsole powinno przełączyć procesor w tryb debugowania i wyświetlić informacje o wersji oprogramowania CK-Link i procesorze W806.
Kod: Text
Wyodrębnij załączony plik w806.elf i umieść go w folderze \bin obok pliku wykonywalnego konsoli debugowania - C:\Users\xxxx\AppData\Roaming\T-Head\T-HeadDebugServer\bin jeśli został zainstalowany w domyślnej lokalizacji.
Kod: Text
Informacje o pliku elf można uzyskać za pomocą polecenia flash -al w806.elf z konsoli debugowania.
DebuggerServer$ flash -al w806.elf
Kod: Text
Dla porównania, cała lista poleceń flash jest następująca
Kod: Text
więc powinniśmy być w stanie zrzucić zawartość flash W806 za pomocą polecenia takiego jak to
Kod: Text
te argumenty oznaczają:
Kod: Text
Zrzut wydaje się działać. 1mb zajął 56 sekund.
Kod: Text
Zrzut ląduje w folderze \bin
Wynikowy plik wydaje się zawierać dane, a nawet zwykły tekst z W806 demo sflashowanego przy użyciu Upgrade Tools .
Niestety flashowanie z powrotem za pomocą polecenia flash program -f blinkydump.bin -b -a 0x080000 -al w806.elf nie wydaje się skutkować uruchomieniem aplikacji, pozostawiając urządzenie oczekujące na przesłanie w trybie xmodem "CCCCCCCCCCCCC"
Ciekawe jest również to, że wymazanie pamięci flash, mimo że "udane", nie wydaje się faktycznie zerować pamięci flash, kolejny zrzut wydaje się być prawie identyczny z tym wykonanym przed wymazaniem - jest to również prawdą, jeśli używa się wm_tool (wm_tool_1.0.4.exe -c com79 -eo all) do wymazania W806 przez UART - brak pustej pamięci flash, chociaż wydaje się, że po wymazaniu przechodzi w tryb CCCCC, więc może zmienia jakiś bajt, aby oznaczyć go jako pusty?
wypróbowane polecenia wymazywania konsoli debugowania:
flash erase -a 0x080000 -s 0x100000 -al w806.elf
flash erase -c -al w806.elf
Inne obserwacje:
Port COM wysyła to podczas operacji odczytu
Kod: Text
i to podczas zapisu
Kod: Text
Do tego właśnie doszedłem. Działające przywracanie flasha myślę, że jest priorytetową rzeczą do dopracowania. Niestety nie mam żadnych urządzeń C-Sky z wgranym oryginalnym firmware, żeby wrzucić coś nowego i ciekawego od takiej firmy jak Tuya.