Actions

KAmod STM32H503 (PL): Difference between revisions

From Kamamilabs.com - Wiki

 
(57 intermediate revisions by the same user not shown)
Line 1: Line 1:
__jzpdf__
__jzpdf__
====Opis====
===Opis===
----
'''KAmod STM32H503 - Płytka ewaluacyjna z mikrokontrolerem STM32H503CBU6 Cortex-M33'''
'''KAmod STM32H503 - Płytka ewaluacyjna z mikrokontrolerem STM32H503CBU6 Cortex-M33'''


Line 10: Line 11:
[[File:KAmod_STM32H503_3d.png|none|900px|thumb|center]]
[[File:KAmod_STM32H503_3d.png|none|900px|thumb|center]]
</center>
</center>
===Podstawowe parametry===
----
----
====Podstawowe parametry====
* mikrokontroler STM32H503CBU6 w obudowie UFQFPN48:
* mikrokontroler STM32H503CBU6 w obudowie UFQFPN48:
**rdzeń Arm Cortex-M33 z FPU i instrukcjami DSP, taktowany do 250 MHz,
**rdzeń Arm Cortex-M33 z FPU i instrukcjami DSP, taktowany do 250 MHz,
Line 37: Line 38:




===Wyposażenie standardowe===
----
----
====Wyposażenie standardowe====
<center>
<center>
{| class="wikitable" style="width: 1020px;"
{| class="wikitable" style="width: 1020px;"
Line 48: Line 51:
! style="text-align: left; background-color:#EEEEEE;"|
! style="text-align: left; background-color:#EEEEEE;"|
* Zmontowany i uruchomiony moduł
* Zmontowany i uruchomiony moduł
* 2 x prosta listwa goldpin 20-pin raster 2,54 mm
* 1 x kątowa listwa goldpin 4-pin raster 2,54 mm


|}
|}


</center>
</center>
===Schemat elektryczny===
----
----
<center>
[[File:KAmod_STM32H503_sch.png|none|1100px|thumb|center]]
</center>


====Schemat elektryczny====
===Zasilanie===
----
----
====Zasilanie====
<center>
<center>
{| class="wikitable" style="width: 1020px;"
{| class="wikitable" style="width: 1020px;"
Line 70: Line 79:
! style="text-align: center; background-color:#EEEEEE;"|'''P1'''
! style="text-align: center; background-color:#EEEEEE;"|'''P1'''
! style="text-align: center; background-color:#EEEEEE;"|
! style="text-align: center; background-color:#EEEEEE;"|
1: '''+5V'''
1:<code>+5V</code>, 2:<code>GND</code>, 3:<code>+3.3V</code>
 
2: '''GND'''
 
3: '''+3.3V'''
! style="text-align: left; background-color:#EEEEEE;"|Zasilanie płytki lub dostęp do linii zasilających
! style="text-align: left; background-color:#EEEEEE;"|Zasilanie płytki lub dostęp do linii zasilających
|-
|-
! style="text-align: center; background-color:#EEEEEE;"|'''P2'''
! style="text-align: center; background-color:#EEEEEE;"|'''P2'''
! style="text-align: center; background-color:#EEEEEE;"|
! style="text-align: center; background-color:#EEEEEE;"|
17: '''GND'''
17:<code>GND</code>, 18:<code>+5V</code>, 19:<code>GND</code>, 20:<code>+3.3V</code>
 
18: '''+5V''''
 
19: '''GND'''
 
20: '''+3.3V'''
! style="text-align: left; background-color:#EEEEEE;"|Zasilanie płytki lub dostęp do linii zasilających
! style="text-align: left; background-color:#EEEEEE;"|Zasilanie płytki lub dostęp do linii zasilających
|-
|-
! style="text-align: center; background-color:#EEEEEE;"|'''P1'''
! style="text-align: center; background-color:#EEEEEE;"|'''P1'''
! style="text-align: center; background-color:#EEEEEE;"|20: '''VB'''
! style="text-align: center; background-color:#EEEEEE;"|20:<code>VB</code>
! style="text-align: left; background-color:#EEEEEE;"|Wejście baterii podtrzymującej domenę VBAT i RTC
! style="text-align: left; background-color:#EEEEEE;"|Wejście baterii podtrzymującej domenę VBAT i RTC


Line 95: Line 94:


</center>
</center>
Płytkę najwygodniej zasilać przez USB-C. Napięcie VBUS przechodzi przez diodę Schottky'ego D4 na linię '''+5V''', a następnie przez stabilizator U2 na linię '''+3.3V''''. Dioda ogranicza możliwość przepływu prądu z płytki z powrotem do złącza USB.
Optymalnym sposobem zasilania płytki KAmod STM32H503 jest podłączenie do interfejsu USB poprzez złącze USB-C. Napięcie ze złącza USB-C (VBUS) przechodzi przez diodę Schottky'ego D4 na linię +5V. Innym sposobem zasilania płytki jest doprowadzenie stabilizowanego napięcia 5 V bezpośrednio do styku <code>+5V</code> jednego ze złączy P1 lub P2, oraz masę do styku <code>GND</code>. Napięcie zasilające musi mieścić się w przedziale 4,5…5,5 V. Dioda D4 ogranicza możliwość przepływu prądu z płytki do złącza USB.


Alternatywnie można doprowadzić stabilizowane napięcie 5 V do styku '''+5V''' jednego ze złączy P1 lub P2 oraz masę do styku '''GND'''. Dopuszczalny zakres wejściowy stabilizatora MIC5504 wynosi 2,5...5,5 V, jednak linia oznaczona '''+5V''' i urządzenia do niej dołączone są przewidziane do pracy z nominalnym napięciem 5 V. Maksymalny prąd wyjściowy stabilizatora 3,3 V wynosi 300 mA; część tej wartości pobierają mikrokontroler i pozostałe elementy modułu. Po zamontowaniu opcjonalnej pamięci Flash należy uwzględnić również pobierany przez nią prąd.


Styki '''+3.3V''' są połączone bezpośrednio z wyjściem stabilizatora i służą przede wszystkim jako wyjście zasilające dla dołączanych układów. Przy zasilaniu płytki bezpośrednio napięciem 3,3 V należy odłączyć USB i linię 5 V oraz zachować parametry zasilania wymagane przez mikrokontroler. Schemat nie zawiera układu separującego zewnętrzne 3,3 V od stabilizatora.
Stabilizowane napięcie 3,3 V jest otrzymywane ze stabilizatora MIC5504 i jest dostępne na stykach <code>+3.3V</code> przede wszystkim jako wyjście zasilające dla dołączanych układów. Czerwona dioda D3 sygnalizuje obecność napięcia 3,3 V. Maksymalna wydajność tego źródła to 300 mA, ale część tej puli pobiera mikrokontroler i pozostałe elementy modułu. Po zamontowaniu opcjonalnej pamięci Flash należy uwzględnić również pobierany przez nią prąd.
 
Czerwona dioda D3 sygnalizuje obecność napięcia 3,3 V.




====Zasilanie RTC====
----
----
Wejście <code>VB</code> na styku 20 złącza P1 jest przeznaczone do dołączenia dodatniego bieguna baterii podtrzymującej RTC; biegun ujemny należy połączyć z <code>GND</code>. Układ D1 automatycznie zasila domenę VBAT z linii 3,3 V podczas normalnej pracy, a po zaniku głównego zasilania przełącza ją na baterię. Napięcie na pinie VBAT mikrokontrolera musi mieścić się w zakresie określonym w jego karcie katalogowej (1,2...3,6 V). Należy uwzględnić spadek napięcia na diodzie Schottky'ego D1; typowym wyborem jest bateria litowa 3 V.


====Zasilanie RTC====
Wejście `VB` na styku 20 złącza P1 jest przeznaczone do dołączenia dodatniego bieguna baterii podtrzymującej RTC; biegun ujemny należy połączyć z `GND`. Układ D1 automatycznie zasila domenę VBAT z linii 3,3 V podczas normalnej pracy, a po zaniku głównego zasilania przełącza ją na baterię. Napięcie na pinie VBAT mikrokontrolera musi mieścić się w zakresie określonym w jego karcie katalogowej (1,2...3,6 V). Należy uwzględnić spadek napięcia na diodzie Schottky'ego D1; typowym wyborem jest bateria litowa 3 V.




====Zworka SB1====
----
----
Otwarta fabrycznie zworka lutowana SB1 jest połączona równolegle do diody D4. Jej zwarcie omija spadek napięcia na diodzie, ale usuwa zabezpieczenie przed przepływem prądu z linii <code>+5V</code> do VBUS złącza USB. W typowym zastosowaniu SB1 powinna pozostać otwarta. Nie należy zwierać SB1, gdy płytka może być jednocześnie zasilana z USB i ze złącza P1 lub P2.
<center>
[[File:KAmod_STM32H503_SB1.png|none|900px|thumb|center]]
</center>


====Zworka SB1====
===Interfejs USB===
Otwarta fabrycznie zworka lutowana SB1 jest połączona równolegle do diody D4. Jej zwarcie omija spadek napięcia na diodzie, ale usuwa zabezpieczenie przed przepływem prądu z linii `+5V` do VBUS złącza USB. W typowym zastosowaniu SB1 powinna pozostać otwarta. Nie należy zwierać SB1, gdy płytka może być jednocześnie zasilana z USB i ze złącza P1 lub P2.
 
 
----
----
====Interfejs USB====
<center>
<center>
{| class="wikitable" style="width: 1020px;"
{| class="wikitable" style="width: 1020px;"
Line 133: Line 129:
Mikrokontroler ma zintegrowany kontroler USB 2.0 Full Speed. Linie złącza są połączone bezpośrednio z wyprowadzeniami:
Mikrokontroler ma zintegrowany kontroler USB 2.0 Full Speed. Linie złącza są połączone bezpośrednio z wyprowadzeniami:


  '''PA11''' — USB '''DM'''
  <code>PA11</code> — USB <code>DM</code>
  '''PA12''' — USB '''DP'''
  <code>PA12</code> — USB <code>DP</code>


Te same sygnały są dostępne odpowiednio na stykach 8 i 9 złącza P2. Gdy używany jest interfejs USB, nie należy obciążać tych styków innymi układami. Rezystory 5,1 kΩ na liniach CC konfigurują złącze USB-C jako urządzenie pobierające zasilanie. Płytka nie zawiera obwodu zasilania VBUS wymaganego do pracy jako host USB, dlatego jest przeznaczona do pracy w trybie Device.
Te same sygnały są dostępne odpowiednio na stykach 8 i 9 złącza P2. Gdy używany jest interfejs USB, nie należy obciążać tych styków innymi układami. Rezystory 5,1 kΩ na liniach CC konfigurują złącze USB-C jako urządzenie pobierające zasilanie. Płytka nie zawiera obwodu zasilania VBUS wymaganego do pracy jako host USB, dlatego jest przeznaczona do pracy w trybie Device.
Line 140: Line 136:
Funkcja USB zależy od oprogramowania mikrokontrolera. Dołączony projekt przykładowy konfiguruje urządzenie CDC ACM, widoczne w komputerze jako wirtualny port szeregowy.
Funkcja USB zależy od oprogramowania mikrokontrolera. Dołączony projekt przykładowy konfiguruje urządzenie CDC ACM, widoczne w komputerze jako wirtualny port szeregowy.


===Interfejs programowania i debugowania SWD===
----
----
====Interfejs programowania i debugowania SWD====
Złącze P3 udostępnia interfejs SWD (Serial Wire Debug), który umożliwia programowanie pamięci Flash oraz debugowanie programu przy użyciu zewnętrznego programatora, np. ST-LINK.
Złącze P3 udostępnia interfejs SWD (Serial Wire Debug), który umożliwia programowanie pamięci Flash oraz debugowanie programu przy użyciu zewnętrznego programatora, np. ST-LINK.


Line 153: Line 148:
|-
|-
! style="text-align: center; background-color:#EEEEEE;"|'''1'''
! style="text-align: center; background-color:#EEEEEE;"|'''1'''
! style="text-align: center; background-color:#EEEEEE;"|+3.3V
! style="text-align: center; background-color:#EEEEEE;"|<code>+3.3V</code>
! style="text-align: left; background-color:#EEEEEE;"|Napięcie odniesienia interfejsu programatora
! style="text-align: left; background-color:#EEEEEE;"|Napięcie odniesienia interfejsu programatora
|-
|-
! style="text-align: center; background-color:#EEEEEE;"|'''2'''
! style="text-align: center; background-color:#EEEEEE;"|'''2'''
! style="text-align: center; background-color:#EEEEEE;"|SWDIO
! style="text-align: center; background-color:#EEEEEE;"|<code>PA13</code>/<code>SWDIO</code>
! style="text-align: left; background-color:#EEEEEE;"|Dane SWD
! style="text-align: left; background-color:#EEEEEE;"|Dane SWD
|-
|-
! style="text-align: center; background-color:#EEEEEE;"|'''3'''
! style="text-align: center; background-color:#EEEEEE;"|'''3'''
! style="text-align: center; background-color:#EEEEEE;"|SWCLK
! style="text-align: center; background-color:#EEEEEE;"|<code>PA14</code>/<code>SWCLK</code>
! style="text-align: left; background-color:#EEEEEE;"|Zegar SWD
! style="text-align: left; background-color:#EEEEEE;"|Zegar SWD
|-
|-
! style="text-align: center; background-color:#EEEEEE;"|'''4'''
! style="text-align: center; background-color:#EEEEEE;"|'''4'''
! style="text-align: center; background-color:#EEEEEE;"|GND
! style="text-align: center; background-color:#EEEEEE;"|<code>GND</code>
! style="text-align: left; background-color:#EEEEEE;"|Masa
! style="text-align: left; background-color:#EEEEEE;"|Masa
|}
|}
Line 172: Line 167:
Sygnały należy połączyć z odpowiadającymi im sygnałami programatora. Wyprowadzenie 3,3 V służy programatorowi jako odniesienie poziomów logicznych; płytka powinna mieć własne zasilanie, chyba że używany programator jawnie obsługuje zasilanie układu docelowego.
Sygnały należy połączyć z odpowiadającymi im sygnałami programatora. Wyprowadzenie 3,3 V służy programatorowi jako odniesienie poziomów logicznych; płytka powinna mieć własne zasilanie, chyba że używany programator jawnie obsługuje zasilanie układu docelowego.


===Programowanie mikrokontrolera===
----
----
====Programowanie mikrokontrolera====
Mikrokontroler można programować przez:
Mikrokontroler można programować przez:
*złącze P3 i interfejs SWD,
*złącze P3 i interfejs SWD,
Line 180: Line 174:
*inne interfejsy obsługiwane przez bootloader STM32H503, jeżeli zostaną odpowiednio dołączone do złączy GPIO.
*inne interfejsy obsługiwane przez bootloader STM32H503, jeżeli zostaną odpowiednio dołączone do złączy GPIO.


=====<mark style="background-color: #FFCC99 ;">Programowanie przez SWD</mark>=====
====<mark style="background-color: #FFCC99 ;">Programowanie przez SWD</mark>====
# Podłącz programator do złącza P3 zgodnie z tabelą pinów.
# Podłącz programator do złącza P3 zgodnie z tabelą pinów.
# Zasil płytkę przez USB-C albo linię '''+5V'''.
# Zasil płytkę przez USB-C albo linię <code>+5V</code>.
# W STM32CubeProgrammer wybierz interfejs ST-LINK i połącz się z mikrokontrolerem.
# W STM32CubeProgrammer wybierz interfejs ST-LINK i połącz się z mikrokontrolerem.
# Wybierz plik programu, zaprogramuj pamięć Flash i wykonaj weryfikację.
# Wybierz plik programu, zaprogramuj pamięć Flash i wykonaj weryfikację.


=====<mark style="background-color: #FFCC99 ;">Programowanie przez USB DFU</mark>=====
====<mark style="background-color: #FFCC99 ;">Programowanie przez USB DFU</mark>====
Fabryczny bootloader znajduje się w pamięci systemowej mikrokontrolera i nie jest kasowany podczas zwykłego programowania pamięci Flash. Aby go uruchomić:
Fabryczny bootloader znajduje się w pamięci systemowej mikrokontrolera i nie jest kasowany podczas zwykłego programowania pamięci Flash. Aby go uruchomić:
#Podłącz płytkę przewodem USB-C do komputera.
#Podłącz płytkę przewodem USB-C do komputera.
#Naciśnij i przytrzymaj przycisk `BOOT` (SW2).
#Naciśnij i przytrzymaj przycisk <code>BOOT</code> (SW2).
#Naciśnij i zwolnij przycisk `RST` (SW3), nadal trzymając `BOOT`.
#Naciśnij i zwolnij przycisk <code>RST</code> (SW3), nadal trzymając <code>BOOT</code>.
#Zwolnij `BOOT`.
#Zwolnij <code>BOOT</code>.
#W STM32CubeProgrammer wybierz interfejs USB i połącz się z urządzeniem DFU.
#W STM32CubeProgrammer wybierz interfejs USB i połącz się z urządzeniem DFU.


Po zaprogramowaniu upewnij się, że przycisk BOOT jest zwolniony, i zresetuj płytkę. Zamiast opisanej sekwencji można również włączyć zasilanie przy wciśniętym przycisku BOOT.
Po zaprogramowaniu upewnij się, że przycisk BOOT jest zwolniony, i zresetuj płytkę. Zamiast opisanej sekwencji można również włączyć zasilanie przy wciśniętym przycisku BOOT.


`PA13` i `PA14` są zajęte przez SWD podczas programowania i debugowania. `PA11` i `PA12` są zajęte przez USB podczas programowania DFU lub komunikacji USB.
<code>PA13</code> i <code>PA14</code> są zajęte przez SWD podczas programowania i debugowania. <code>PA11</code> i <code>PA12</code> są zajęte przez USB podczas programowania DFU lub komunikacji USB.
 


====Dodatkowe elementy - przyciski i diody LED====
----
----
====Dodatkowe elementy - przyciski i diody LED====
<center>
<center>
{| class="wikitable" style="width: 1020px;"
{| class="wikitable" style="width: 1020px;"
Line 209: Line 201:
! style="text-align: center; background-color:#FFCC66;|'''Funkcja'''
! style="text-align: center; background-color:#FFCC66;|'''Funkcja'''
|-
|-
! style="text-align: center; background-color:#EEEEEE;"|SW1 '''USER KEY'''
! style="text-align: center; background-color:#EEEEEE;"|SW1 / PA0 <code>USER KEY</code>
! style="text-align: center; background-color:#EEEEEE;"|'''PA0''' - aktywny stan niski
! style="text-align: center; background-color:#EEEEEE;"|<code>PA0</code> - aktywny stan niski
! style="text-align: left; background-color:#EEEEEE;"|Przycisk użytkownika; rezystor szeregowy 330 Ω
! style="text-align: left; background-color:#EEEEEE;"|Przycisk użytkownika; rezystor szeregowy 330 Ω
|-
|-
! style="text-align: center; background-color:#EEEEEE;"|SW2 '''BOOT'''
! style="text-align: center; background-color:#EEEEEE;"|SW2 <code>BOOT</code>
! style="text-align: center; background-color:#EEEEEE;"|'''BOOT0''' - aktywny stan wysoki
! style="text-align: center; background-color:#EEEEEE;"|<code>BOOT0</code> - aktywny stan wysoki
! style="text-align: left; background-color:#EEEEEE;"|Wybór uruchomienia pamięci systemowej/bootloadera
! style="text-align: left; background-color:#EEEEEE;"|Wybór uruchomienia pamięci systemowej/bootloadera
|-
|-
! style="text-align: center; background-color:#EEEEEE;"|SW3 '''RST'''
! style="text-align: center; background-color:#EEEEEE;"|SW3 <code>RST</code>
! style="text-align: center; background-color:#EEEEEE;"|'''NRST''' - aktywny stan niski
! style="text-align: center; background-color:#EEEEEE;"|<code>NRST</code> - aktywny stan niski
! style="text-align: left; background-color:#EEEEEE;"|Reset mikrokontrolera
! style="text-align: left; background-color:#EEEEEE;"|Reset mikrokontrolera
|-
|-
! style="text-align: center; background-color:#EEEEEE;"|D2 niebieska
! style="text-align: center; background-color:#EEEEEE;"|D2 niebieska
! style="text-align: center; background-color:#EEEEEE;"|'''PC13''' - aktywny stan niski
! style="text-align: center; background-color:#EEEEEE;"|<code>PC13</code> - aktywny stan niski
! style="text-align: left; background-color:#EEEEEE;"|Dioda sterowana przez program użytkownika
! style="text-align: left; background-color:#EEEEEE;"|Dioda sterowana przez program użytkownika
|-
|-
! style="text-align: center; background-color:#EEEEEE;"|D3 czerwona
! style="text-align: center; background-color:#EEEEEE;"|D3 czerwona
! style="text-align: center; background-color:#EEEEEE;"|'''+3.3V'''
! style="text-align: center; background-color:#EEEEEE;"|<code>+3.3V</code>
! style="text-align: left; background-color:#EEEEEE;"|Sygnalizacja obecności zasilania 3,3 V
! style="text-align: left; background-color:#EEEEEE;"|Sygnalizacja obecności zasilania 3,3 V
|}
|}
</center>


<center>
[[File:KAmod_STM32H503_SW.png|none|900px|thumb|center]]
</center>
</center>
Przycisk USER zwiera wejście PA0 do masy. Oprogramowanie powinno włączyć rezystor podciągający wejście do 3,3 V; tak skonfigurowano dołączony projekt przykładowy. Niebieska dioda świeci po ustawieniu na PC13 stanu niskiego.
Przycisk USER zwiera wejście PA0 do masy. Oprogramowanie powinno włączyć rezystor podciągający wejście do 3,3 V; tak skonfigurowano dołączony projekt przykładowy. Niebieska dioda świeci po ustawieniu na PC13 stanu niskiego.


 
===Pamięć SPI Flash===
 
----
----
====Pamięć SPI Flash====
Pamięć SPI NOR Flash nie jest montowana fabrycznie. Płytka ma nieobsadzone pola U3, na których użytkownik może samodzielnie wlutować zgodny układ o wybranej pojemności. W25Q16JVSS o pojemności 16 Mbit (2 MB), umieszczony na schemacie, jest przykładem obsługiwanego układu, a nie elementem wyposażenia standardowego.
Pamięć SPI NOR Flash nie jest montowana fabrycznie. Płytka ma nieobsadzone pola U3, na których użytkownik może samodzielnie wlutować zgodny układ o wybranej pojemności. W25Q16JVSS o pojemności 16 Mbit (2 MB), umieszczony na schemacie, jest przykładem obsługiwanego układu, a nie elementem wyposażenia standardowego.


Line 243: Line 236:
[[File:KAmod_STM32H503_FLASH.png|none|900px|thumb|center]]
[[File:KAmod_STM32H503_FLASH.png|none|900px|thumb|center]]
</center>
</center>
Montowana pamięć musi:
Montowana pamięć musi spełniać takie warunki:
* być zasilana napięciem 3,3 V,
* zasilanie napięciem 3,3 V,
* mieć obudowę SOIC-8 o szerokości 208 mil, wymiarach około 5,3 × 5,3 mm i rastrze 1,27 mm,
* obudowa SOIC-8 o szerokości 208 mil, wymiarach około 5,3 × 5,3 mm i rastrze 1,27 mm,
* mieć pinout zgodny z rodziną W25Qxx w trybie SPI,
* pinout zgodny z rodziną W25Qxx w trybie SPI,
* obsługiwać standardowe polecenia SPI NOR używane przez oprogramowanie.
* obsługa standardowych poleceń SPI NOR używanych przez oprogramowanie.




Line 260: Line 253:
! style="text-align: center; background-color:#FFCC66;|'''Złącze P1'''
! style="text-align: center; background-color:#FFCC66;|'''Złącze P1'''
|-
|-
! style="text-align: center; background-color:#EEEEEE;"|'''CS'''
! style="text-align: center; background-color:#EEEEEE;"|<code>CS</code>
! style="text-align: center; background-color:#EEEEEE;"|'''PA4'''
! style="text-align: center; background-color:#EEEEEE;"|<code>PA4</code>
! style="text-align: center; background-color:#EEEEEE;"|11
! style="text-align: center; background-color:#EEEEEE;"|11
|-
|-
! style="text-align: center; background-color:#EEEEEE;"|'''SCK'''
! style="text-align: center; background-color:#EEEEEE;"|<code>SCK</code>
! style="text-align: center; background-color:#EEEEEE;"|'''PA5'''
! style="text-align: center; background-color:#EEEEEE;"|<code>PA5</code>
! style="text-align: center; background-color:#EEEEEE;"|10
! style="text-align: center; background-color:#EEEEEE;"|10
|-
|-
! style="text-align: center; background-color:#EEEEEE;"|'''MISO''' / '''DO'''
! style="text-align: center; background-color:#EEEEEE;"|<code>MISO</code> / <code>DO</code>
! style="text-align: center; background-color:#EEEEEE;"|'''PA6'''
! style="text-align: center; background-color:#EEEEEE;"|<code>PA6</code>
! style="text-align: center; background-color:#EEEEEE;"|9
! style="text-align: center; background-color:#EEEEEE;"|9
|-
|-
! style="text-align: center; background-color:#EEEEEE;"|'''MOSI''' / '''DI'''
! style="text-align: center; background-color:#EEEEEE;"|<code>MOSI</code> / <code>DI</code>
! style="text-align: center; background-color:#EEEEEE;"|'''PA7'''
! style="text-align: center; background-color:#EEEEEE;"|<code>PA7</code>
! style="text-align: center; background-color:#EEEEEE;"|8
! style="text-align: center; background-color:#EEEEEE;"|8
|}
|}
Line 282: Line 275:
Wyprowadzenia PA4...PA7 są również dostępne na złączu P1 i trwale połączone z polami U3. Po zamontowaniu pamięci użycie tych linii przez dodatkowy układ wymaga zachowania poprawnych stanów sygnału CS i uwzględnienia obciążenia magistrali.
Wyprowadzenia PA4...PA7 są również dostępne na złączu P1 i trwale połączone z polami U3. Po zamontowaniu pamięci użycie tych linii przez dodatkowy układ wymaga zachowania poprawnych stanów sygnału CS i uwzględnienia obciążenia magistrali.


 
===Złącza GPIO===
 
----
----
Złącza P1 i P2 mają po 20 styków w rastrze 2,54 mm. Poziomy logiczne mikrokontrolera wynoszą 3,3 V. Tylko wyprowadzenia oznaczone w karcie katalogowej mikrokontrolera jako <code>FT</code> tolerują napięcie 5 V; nie dotyczy to wszystkich pinów ani trybu analogowego.
<center>
[[File:KAmod_STM32H503_GPIO.png|none|900px|thumb|center]]
</center>


====Złącza GPIO====
====Złącze P1====
Złącza P1 i P2 mają po 20 styków w rastrze 2,54 mm. Poziomy logiczne mikrokontrolera wynoszą 3,3 V. Tylko wyprowadzenia oznaczone w karcie katalogowej mikrokontrolera jako `FT` tolerują napięcie 5 V; nie dotyczy to wszystkich pinów ani trybu analogowego.
<center>
{| class="wikitable"
! style="background-color: #FFCC66; text-align:center; font-weight:bold;" | Styk !! style="background-color: #FFCC66; text-align:center; font-weight:bold;" | Sygnał !! style="background-color: #FFCC66; text-align:center; font-weight:bold;" | Uwagi
|-
| style="text-align:center; background-color: #EEEEEE;" | 1 || style="text-align:center; background-color: #EEEEEE;" | <code>+5V</code> || style="text-align:left; background-color: #EEEEEE;" | Linia zasilania 5 V
|-
| style="text-align:center; background-color: #EEEEEE;" | 2 || style="text-align:center; background-color: #EEEEEE;" | <code>GND</code> || style="text-align:left; background-color: #EEEEEE;" | Masa
|-
| style="text-align:center; background-color: #EEEEEE;" | 3 || style="text-align:center; background-color: #EEEEEE;" | <code>+3.3V</code> || style="text-align:left; background-color: #EEEEEE;" | Linia zasilania 3,3 V
|-
| style="text-align:center; background-color: #EEEEEE;" | 4 || style="text-align:center; background-color: #EEEEEE;" | <code>PB10</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO
|-
| style="text-align:center; background-color: #EEEEEE;" | 5 || style="text-align:center; background-color: #EEEEEE;" | <code>PB2</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO
|-
| style="text-align:center; background-color: #EEEEEE;" | 6 || style="text-align:center; background-color: #EEEEEE;" | <code>PB1</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO
|-
| style="text-align:center; background-color: #EEEEEE;" | 7 || style="text-align:center; background-color: #EEEEEE;" | <code>PB0</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO
|-
| style="text-align:center; background-color: #EEEEEE;" | 8 || style="text-align:center; background-color: #EEEEEE;" | <code>PA7</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO, SPI1 MOSI pamięci Flash
|-
| style="text-align:center; background-color: #EEEEEE;" | 9 || style="text-align:center; background-color: #EEEEEE;" | <code>PA6</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO, SPI1 MISO pamięci Flash
|-
| style="text-align:center; background-color: #EEEEEE;" | 10 || style="text-align:center; background-color: #EEEEEE;" | <code>PA5</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO, SPI1 SCK pamięci Flash
|-
| style="text-align:center; background-color: #EEEEEE;" | 11 || style="text-align:center; background-color: #EEEEEE;" | <code>PA4</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO, CS pamięci Flash
|-
| style="text-align:center; background-color: #EEEEEE;" | 12 || style="text-align:center; background-color: #EEEEEE;" | <code>PA3</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO
|-
| style="text-align:center; background-color: #EEEEEE;" | 13 || style="text-align:center; background-color: #EEEEEE;" | <code>PA2</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO
|-
| style="text-align:center; background-color: #EEEEEE;" | 14 || style="text-align:center; background-color: #EEEEEE;" | <code>PA1</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO
|-
| style="text-align:center; background-color: #EEEEEE;" | 15 || style="text-align:center; background-color: #EEEEEE;" | <code>PA0</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO, przycisk USER
|-
| style="text-align:center; background-color: #EEEEEE;" | 16 || style="text-align:center; background-color: #EEEEEE;" | <code>NRST</code> || style="text-align:left; background-color: #EEEEEE;" | Reset, aktywny stan niski
|-
| style="text-align:center; background-color: #EEEEEE;" | 17 || style="text-align:center; background-color: #EEEEEE;" | <code>PC15</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO/LSE; połączenie przez SB3
|-
| style="text-align:center; background-color: #EEEEEE;" | 18 || style="text-align:center; background-color: #EEEEEE;" | <code>PC14</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO/LSE; połączenie przez SB2
|-
| style="text-align:center; background-color: #EEEEEE;" | 19 || style="text-align:center; background-color: #EEEEEE;" | <code>PC13</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO, niebieska dioda LED
|-
| style="text-align:center; background-color: #EEEEEE;" | 20 || style="text-align:center; background-color: #EEEEEE;" | <code>VB</code> || style="text-align:left; background-color: #EEEEEE;" | Wejście baterii RTC przez diodę Schottky'ego
|}
</center>


=====Złącze P1=====
====Złącze P2====
=====Złącze P2=====
<center>
{| class="wikitable"
! style="background-color: #FFCC66; text-align:center; font-weight:bold;" | Styk !! style="background-color: #FFCC66; text-align:center; font-weight:bold;" | Sygnał !! style="background-color: #FFCC66; text-align:center; font-weight:bold;" | Uwagi
|-
| style="text-align:center; background-color: #EEEEEE;" | 1 || style="text-align:center; background-color: #EEEEEE;" | <code>PB12</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO
|-
| style="text-align:center; background-color: #EEEEEE;" | 2 || style="text-align:center; background-color: #EEEEEE;" | <code>PB13</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO
|-
| style="text-align:center; background-color: #EEEEEE;" | 3 || style="text-align:center; background-color: #EEEEEE;" | <code>PB14</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO
|-
| style="text-align:center; background-color: #EEEEEE;" | 4 || style="text-align:center; background-color: #EEEEEE;" | <code>PB15</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO
|-
| style="text-align:center; background-color: #EEEEEE;" | 5 || style="text-align:center; background-color: #EEEEEE;" | <code>PA8</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO
|-
| style="text-align:center; background-color: #EEEEEE;" | 6 || style="text-align:center; background-color: #EEEEEE;" | <code>PA9</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO
|-
| style="text-align:center; background-color: #EEEEEE;" | 7 || style="text-align:center; background-color: #EEEEEE;" | <code>PA10</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO
|-
| style="text-align:center; background-color: #EEEEEE;" | 8 || style="text-align:center; background-color: #EEEEEE;" | <code>PA11</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO, USB DM
|-
| style="text-align:center; background-color: #EEEEEE;" | 9 || style="text-align:center; background-color: #EEEEEE;" | <code>PA12</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO, USB DP
|-
| style="text-align:center; background-color: #EEEEEE;" | 10 || style="text-align:center; background-color: #EEEEEE;" | <code>PA15</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO/JTAG JTDI
|-
| style="text-align:center; background-color: #EEEEEE;" | 11 || style="text-align:center; background-color: #EEEEEE;" | <code>PB3</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO/JTAG JTDO
|-
| style="text-align:center; background-color: #EEEEEE;" | 12 || style="text-align:center; background-color: #EEEEEE;" | <code>PB4</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO/JTAG NJTRST
|-
| style="text-align:center; background-color: #EEEEEE;" | 13 || style="text-align:center; background-color: #EEEEEE;" | <code>PB5</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO
|-
| style="text-align:center; background-color: #EEEEEE;" | 14 || style="text-align:center; background-color: #EEEEEE;" | <code>PB6</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO
|-
| style="text-align:center; background-color: #EEEEEE;" | 15 || style="text-align:center; background-color: #EEEEEE;" | <code>PB7</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO
|-
| style="text-align:center; background-color: #EEEEEE;" | 16 || style="text-align:center; background-color: #EEEEEE;" | <code>PB8</code> || style="text-align:left; background-color: #EEEEEE;" | GPIO
|-
| style="text-align:center; background-color: #EEEEEE;" | 17 || style="text-align:center; background-color: #EEEEEE;" | <code>GND</code> || style="text-align:left; background-color: #EEEEEE;" | Masa
|-
| style="text-align:center; background-color: #EEEEEE;" | 18 || style="text-align:center; background-color: #EEEEEE;" | <code>+5V</code> || style="text-align:left; background-color: #EEEEEE;" | Linia zasilania 5 V
|-
| style="text-align:center; background-color: #EEEEEE;" | 19 || style="text-align:center; background-color: #EEEEEE;" | <code>GND</code> || style="text-align:left; background-color: #EEEEEE;" | Masa
|-
| style="text-align:center; background-color: #EEEEEE;" | 20 || style="text-align:center; background-color: #EEEEEE;" | <code>+3.3V</code> || style="text-align:left; background-color: #EEEEEE;" | Linia zasilania 3,3 V
|}
</center>
Pełna lista funkcji alternatywnych oraz informacje o tolerancji napięć znajdują się w karcie katalogowej STM32H503CB.


 
==== Zworki SB2 (PC14) i SB3 (PC15)====
Pełna lista funkcji alternatywnych oraz informacje o tolerancji napięć znajdują się w karcie katalogowej STM32H503CB.
===== Zworki SB2 (PC14) i SB3 (PC15)=====
Wyprowadzenia PC14 i PC15 mikrokontrolera są używane przez rezonator 32,768 kHz. Otwarta zworka '''SB2''' odłącza '''PC14''' od styku '''18''' złącza '''P1''', a otwarta zworka '''SB3''' odłącza '''PC15''' od styku '''17'''. Zwarcie zworek udostępnia na złączu sygnały oscylatora, ale dodaje do nich pojemność przewodów i dołączonych układów, co może zakłócić pracę rezonatora. W typowym zastosowaniu RTC obie zworki powinny pozostać otwarte.
Wyprowadzenia PC14 i PC15 mikrokontrolera są używane przez rezonator 32,768 kHz. Otwarta zworka '''SB2''' odłącza '''PC14''' od styku '''18''' złącza '''P1''', a otwarta zworka '''SB3''' odłącza '''PC15''' od styku '''17'''. Zwarcie zworek udostępnia na złączu sygnały oscylatora, ale dodaje do nich pojemność przewodów i dołączonych układów, co może zakłócić pracę rezonatora. W typowym zastosowaniu RTC obie zworki powinny pozostać otwarte.


Line 300: Line 383:
[[File:KAmod_STM32H503_SB2_SB3.png|none|900px|thumb|center]]
[[File:KAmod_STM32H503_SB2_SB3.png|none|900px|thumb|center]]
</center>
</center>
===Wymiary===
----
----
====Wymiary====
Wymiary płytki KAmod STM32H503 wynoszą 53 × 20,75 mm.
Wymiary płytki KAmod STM32H503 wynoszą 53 × 20,75 mm.
<center>
<center>
[[File:KAmod_STM32H503_dim.png|none|900px|thumb|center]]
[[File:KAmod_STM32H503_dim.png|none|900px|thumb|center]]
</center>
</center>
===Program testowy===
----
----
Katalog KAmod_STM32H503 zawiera przykładowy projekt dla STM32CubeIDE. Projekt korzysta z STM32CubeH5 HAL, systemu ThreadX i stosu USBX. Po uruchomieniu płytka zgłasza się jako urządzenie USB CDC ACM, czyli wirtualny port szeregowy. W systemie Linux jest to zwykle <code>/dev/ttyACM0</code>; w systemie Windows urządzenie otrzymuje numer portu COM. Ustawienie prędkości transmisji jest dla USB CDC umowne — można wybrać 115200 bit/s, 8N1.
Komendy należy wpisywać wielkimi literami i kończyć klawiszem Enter. Polecenie <code>HELP</code> wyświetla ich listę.


====Program testowy====
<center>
=====Sprawdzanie i synchronizacja RTC z komputerem=====
{| class="wikitable" style="width: 800px;"
! style="text-align: center; background-color:#FFCC66;|'''Komenda'''
! style="text-align: center; background-color:#FFCC66;|'''Działanie'''
|-
! style="text-align: center; background-color:#EEEEEE;"|<code>HELP</code>
! style="text-align: left; background-color:#EEEEEE;"|Wyświetla listę komend
|-
! style="text-align: center; background-color:#EEEEEE;"|<code>RTC GET</code>
! style="text-align: left; background-color:#EEEEEE;"|Odczytuje datę i czas RTC
|-
! style="text-align: center; background-color:#EEEEEE;"|<code>RTC SET YYYY-MM-DD HH:MM:SS</code>
! style="text-align: left; background-color:#EEEEEE;"|Ustawia datę i czas RTC
|-
! style="text-align: center; background-color:#EEEEEE;"|<code>RTC INIT</code>
! style="text-align: left; background-color:#EEEEEE;"|Jednorazowo ustawia wartość początkową RTC
|-
! style="text-align: center; background-color:#EEEEEE;"|<code>LED ON</code>, <code>LED OFF</code>
! style="text-align: left; background-color:#EEEEEE;"|Steruje niebieską diodą na PC13
|-
! style="text-align: center; background-color:#EEEEEE;"|<code>BTN GET</code>
! style="text-align: left; background-color:#EEEEEE;"|Odczytuje stan przycisku USER na PA0
|-
! style="text-align: center; background-color:#EEEEEE;"|<code>FLASH ID</code>
! style="text-align: left; background-color:#EEEEEE;"|Odczytuje identyfikator JEDEC opcjonalnej pamięci Flash
|-
! style="text-align: center; background-color:#EEEEEE;"|<code>FLASH STATUS</code>
! style="text-align: left; background-color:#EEEEEE;"|Odczytuje rejestr statusu opcjonalnej pamięci Flash
|-
! style="text-align: center; background-color:#EEEEEE;"|<code>FLASH TEST</code>
! style="text-align: left; background-color:#EEEEEE;"|Kasuje sektor, zapisuje i weryfikuje 256 bajtów; wymaga zamontowanej pamięci
|-
! style="text-align: center; background-color:#EEEEEE;"|<code>REBOOT</code>
! style="text-align: left; background-color:#EEEEEE;"|Resetuje mikrokontroler
 
|}
</center>
<div style="background:  #EEEEEE ; border: 1px solid #222222 ; padding: 10px; border-radius: 4px; width: width: 1000px">
'''Uwaga:'''
Polecenia <code>FLASH ...</code> wymagają samodzielnie zamontowanej, zgodnej pamięci SPI NOR. <code>FLASH TEST</code> niszczy wcześniejszą zawartość sektora 4 kB rozpoczynającego się pod adresem <code>0x010000</code>.
</div>
 
 
====Szczegółowy opis protokołu i odpowiedzi====
===== <mark style="background-color: #FFCC99 ;">USB CDC CLI — dokumentacja komend </mark>=====
 
Interfejs CLI jest dostępny jako USB CDC ACM (wirtualny port szeregowy). W systemie Linux urządzenie zwykle pojawia się jako <code>/dev/ttyACM0</code>. Wartość prędkości ustawiona w terminalu jest dla USB CDC umowna; można pozostawić <code>115200 8N1</code>.
 
Komendy należy wpisywać '''wielkimi literami''' i kończyć klawiszem Enter (<code>CR</code>, <code>LF</code> albo <code>CR+LF</code>). Po aktywacji połączenia oraz po każdej obsłużonej komendzie urządzenie wysyła:
 
<pre>
READY
</pre>
 
=====<mark style="background-color: #FFCC99 ;"> Lista komend </mark>=====
 
<center>
{| class="wikitable"
! style="background-color: #FFCC66; text-align:center; font-weight:bold;" | Komenda !! style="background-color: #FFCC66; text-align:center; font-weight:bold;" | Działanie
|-
| style="text-align:center; background-color: #EEEEEE;" | <code>HELP</code> || style="text-align:left; background-color: #EEEEEE;" | Wyświetla pionową listę dostępnych komend jako linie <code>OK CMD ...</code>, zakończoną <code>OK END</code>.
|-
| style="text-align:center; background-color: #EEEEEE;" | <code>RTC GET</code> || style="text-align:left; background-color: #EEEEEE;" | Odczytuje bieżącą datę i czas RTC.
|-
| style="text-align:center; background-color: #EEEEEE;" | <code>RTC SET YYYY-MM-DD HH:MM:SS</code> || style="text-align:left; background-color: #EEEEEE;" | Ustawia datę i czas RTC. Dozwolone lata: <code>2000..2099</code>.
|-
| style="text-align:center; background-color: #EEEEEE;" | <code>RTC INIT</code> || style="text-align:left; background-color: #EEEEEE;" | Inicjalizuje RTC wartością <code>2026-01-01 00:00:00</code>, jeśli nie zapisano wcześniej znacznika inicjalizacji.
|-
| style="text-align:center; background-color: #EEEEEE;" | <code>LED ON</code> || style="text-align:left; background-color: #EEEEEE;" | Włącza LED na <code>PC13</code> (LED jest aktywna stanem niskim).
|-
| style="text-align:center; background-color: #EEEEEE;" | <code>LED OFF</code> || style="text-align:left; background-color: #EEEEEE;" | Wyłącza LED na <code>PC13</code>.
|-
| style="text-align:center; background-color: #EEEEEE;" | <code>BTN GET</code> || style="text-align:left; background-color: #EEEEEE;" | Odczytuje stan wejścia <code>PA0</code>.
|-
| style="text-align:center; background-color: #EEEEEE;" | <code>FLASH ID</code> || style="text-align:left; background-color: #EEEEEE;" | Odczytuje JEDEC ID opcjonalnej pamięci SPI Flash i rozpoznaje producenta.
|-
| style="text-align:center; background-color: #EEEEEE;" | <code>FLASH STATUS</code> || style="text-align:left; background-color: #EEEEEE;" | Odczytuje rejestr statusu SR1 (<code>BUSY</code> i <code>WEL</code>) opcjonalnej pamięci.
|-
| style="text-align:center; background-color: #EEEEEE;" | <code>FLASH TEST</code> || style="text-align:left; background-color: #EEEEEE;" | Kasuje sektor 4 KiB, zapisuje 256 B i weryfikuje dane; wymaga zamontowanej pamięci.
|-
| style="text-align:center; background-color: #EEEEEE;" | <code>REBOOT</code> || style="text-align:left; background-color: #EEEEEE;" | Wysyła potwierdzenie i resetuje mikrokontroler.
|}
</center>
 
===== <mark style="background-color: #FFCC99 ;">Format daty i czasu </mark>=====
 
Polecenie <code>RTC SET</code> wymaga dokładnie formatu:
 
<pre>
RTC SET YYYY-MM-DD HH:MM:SS
</pre>
 
Przykład:
 
<pre>
RTC SET 2026-07-12 14:30:00
RTC GET
</pre>
 
Wymagania:
 
* rok: <code>2000..2099</code>,
* miesiąc: <code>01..12</code>,
* dzień zgodny z miesiącem i rokiem przestępnym,
* godzina: <code>00..23</code>,
* minuta i sekunda: <code>00..59</code>,
* wszystkie zera wiodące oraz separatory są obowiązkowe.
 
Przykładowa odpowiedź:
 
<pre>
OK RTC 2026-07-12 14:30:00
READY
</pre>
 
===== <mark style="background-color: #FFCC99 ;">Test pamięci SPI Flash</mark> =====
 
Pamięć SPI NOR nie jest montowana fabrycznie. Polecenia <code>FLASH ID</code>, <code>FLASH STATUS</code> i <code>FLASH TEST</code> działają po samodzielnym wlutowaniu zgodnego układu na pola U3. Pola pamięci są podłączone do <code>SPI1</code>, a sygnał CS znajduje się na <code>PA4</code>. Komenda <code>FLASH TEST</code> używa adresu <code>0x010000</code>.
 
Test wykonuje kolejno:
 
# odczyt JEDEC ID,
# skasowanie sektora 4 KiB,
# sprawdzenie, czy skasowane bajty mają wartość <code>0xFF</code>,
# zapis 256-bajtowego wzorca,
# ponowny odczyt i porównanie danych.
 
''Uwaga: <code>FLASH TEST</code> wymaga zamontowanej pamięci i niszczy wcześniejszą zawartość sektora rozpoczynającego się pod adresem <code>0x010000</code>.''
 
===== <mark style="background-color: #FFCC99 ;">Format odpowiedzi </mark>=====
 
* powodzenie zaczyna się od <code>OK</code>,
* błąd zaczyna się od <code>ERR</code>,
* nieznana komenda: <code>ERR CLI unknown_command: <komenda></code>,
* każda odpowiedź kończy się osobną linią <code>READY</code>,
* linia dłuższa niż 127 znaków: <code>ERR LINE_TOO_LONG</code>.
 
Przykłady:
 
<pre>
OK
READY
ERR RTC bad_format use: RTC SET YYYY-MM-DD HH:MM:SS
READY
OK BTN PA0=1
READY
OK FLASH SR1=0x00 BUSY=0 WEL=0
READY
</pre>
 
===Sprawdzanie i synchronizacja RTC z komputerem===
----
----
Skrypt [https://wiki.kamamilabs.com/images/d/d7/Rtc_sync.zip rtc_sync.py] komunikuje się z programem testowym przez USB CDC. Odczytuje czas mikrokontrolera poleceniem <code>RTC GET</code>, porównuje go z lokalnym czasem komputera i - jeśli różnica przekracza ustawiony próg — wysyła polecenie <code>RTC SET</code>. Po synchronizacji ponownie odczytuje RTC i sprawdza wynik.
Skrypt wymaga Pythona 3 i pakietu <code>pyserial</code>:
<syntaxhighlight lang="bash">
python3 -m pip install pyserial
</syntaxhighlight>
Przykładowe uruchomienie w systemie Linux:
<syntaxhighlight lang="bash">
python3 tools/rtc_sync.py --port /dev/ttyACM0
</syntaxhighlight>
W systemie Windows jako port należy podać nazwę przydzieloną urządzeniu, na przykład:
<syntaxhighlight lang="bash">
python tools/rtc_sync.py --port COM5
</syntaxhighlight>
Domyślnie akceptowana różnica wynosi 2 sekundy. Najważniejsze opcje programu:
<center>
{| class="wikitable" style="width: 800px;"
|-
! style="text-align: center; background-color:#FFCC66;|'''Opcja '''
! style="text-align: center; background-color:#FFCC66;|'''Znaczenie '''
|-
! style="text-align: center; background-color:#EEEEEE;"|<code>--port PORT</code>
! style="text-align: center; background-color:#EEEEEE;"|Port urządzenia; domyślnie <code>/dev/ttyACM0</code>
|-
! style="text-align: center; background-color:#EEEEEE;"|<code>--baud N</code>
! style="text-align: center; background-color:#EEEEEE;"|Umowna prędkość portu CDC; domyślnie <code>115200</code>
|-
! style="text-align: center; background-color:#EEEEEE;"|<code>--threshold S</code>
! style="text-align: center; background-color:#EEEEEE;"| Maksymalna akceptowana różnica czasu w sekundach; domyślnie <code>2.0</code>
|-
! style="text-align: center; background-color:#EEEEEE;"|<code>--timeout S</code>
! style="text-align: center; background-color:#EEEEEE;"|Limit czasu odpowiedzi na jedną komendę; domyślnie <code>3.0</code>
|-
! style="text-align: center; background-color:#EEEEEE;"|<code>--dry-run</code>
! style="text-align: center; background-color:#EEEEEE;"|Tylko porównuje czas, bez zmiany RTC
|-
! style="text-align: center; background-color:#EEEEEE;"|<code>--no-initial-drain</code>
! style="text-align: center; background-color:#EEEEEE;"|Nie usuwa oczekujących komunikatów po otwarciu portu
|}
</center>
Przykład samego sprawdzenia czasu z progiem 0,5 sekundy:
<syntaxhighlight lang="bash">
python3 tools/rtc_sync.py --port /dev/ttyACM0 --threshold 0.5 --dry-run
</syntaxhighlight>
Program zwraca kod <code>0</code>, gdy różnica mieści się w progu, kod <code>1</code>, gdy po sprawdzeniu nadal jest zbyt duża, oraz kod <code>2</code> w przypadku błędu komunikacji, braku pakietu <code>pyserial</code> albo nieprawidłowej odpowiedzi urządzenia.


====Linki====
===Linki===
*[https://www.st.com/en/microcontrollers-microprocessors/stm32h503cb.html STM32H503CB — strona produktu]
-----
*[https://www.st.com/en/microcontrollers-microprocessors/stm32h503cb.html Podstawowe informacje o układzie STM32H503CB]
*[https://www.st.com/resource/en/datasheet/stm32h503cb.pdf Karta katalogowa STM32H503xx (DS14053)]
*[https://www.st.com/resource/en/datasheet/stm32h503cb.pdf Karta katalogowa STM32H503xx (DS14053)]
*[https://www.st.com/resource/en/reference_manual/rm0492-stm32h503-line-armbased-32bit-mcus-stmicroelectronics.pdf Reference manual STM32H503 (RM0492)]
*[https://www.st.com/resource/en/reference_manual/rm0492-stm32h503-line-armbased-32bit-mcus-stmicroelectronics.pdf Reference manual STM32H503 (RM0492)]

Latest revision as of 10:48, 20 August 2026

Opis


KAmod STM32H503 - Płytka ewaluacyjna z mikrokontrolerem STM32H503CBU6 Cortex-M33

KAmod STM32H503 jest niewielką płytką ewaluacyjną z mikrokontrolerem STM32H503CBU6. Moduł zawiera elementy niezbędne do uruchomienia mikrokontrolera, rezonatory kwarcowe 8 MHz i 32,768 kHz, złącze USB-C, stabilizator 3,3 V oraz przyciski i diody LED. Na płytce przewidziano również nieobsadzone miejsce na opcjonalną pamięć SPI NOR Flash do samodzielnego wlutowania.

Złącze USB-C może służyć do zasilania, komunikacji USB 2.0 Full Speed oraz programowania mikrokontrolera przez fabryczny bootloader USB DFU. Interfejs SWD wyprowadzono na osobne złącze. Pozostałe sygnały mikrokontrolera są dostępne na dwóch listwach po 20 styków, o rastrze 2,54 mm.

Podstawowe parametry


  • mikrokontroler STM32H503CBU6 w obudowie UFQFPN48:
    • rdzeń Arm Cortex-M33 z FPU i instrukcjami DSP, taktowany do 250 MHz,
    • 128 kB pamięci Flash z ECC,
    • 32 kB pamięci SRAM z ECC oraz 2 kB podtrzymywanej pamięci SRAM,
    • 8 kB pamięci podręcznej instrukcji,
    • 12-bitowy ADC, dwukanałowy 12-bitowy DAC, komparator i wzmacniacz operacyjny,
    • timery 16- i 32-bitowe, RTC, dwa układy watchdog,
    • interfejsy I2C/I3C, USART/LPUART, SPI/I2S, FDCAN oraz USB 2.0 Full Speed,
  • precyzyjny rezonator kwarcowy 8 MHz dla zegara głównego,
  • rezonator 32,768 kHz dla RTC,
  • możliwość dołączenia baterii podtrzymującej RTC,
  • nieobsadzone miejsce U3 na opcjonalną pamięć SPI NOR Flash; W25Q16JV 16 Mbit (2 MB) jest przykładem zgodnego układu,
  • złącze USB-C pracujące w trybie urządzenia,
  • stabilizator 3,3 V MIC5504 o maksymalnym prądzie wyjściowym 300 mA,
  • 33 sygnały GPIO dostępne na złączach P1, P2 i P3; część z nich jest współdzielona z układami płytki,
  • złącze programowania i debugowania SWD,
  • przyciski USER, BOOT i RST,
  • dioda zasilania oraz dioda LED sterowana przez PC13,
  • złącza P1 i P2: po 20 styków, raster 2,54 mm,
  • złącze SWD P3: 4 styki, raster 2,54 mm,
  • wymiary płytki: 53 × 20,75 mm.



Wyposażenie standardowe


Komponent Opis
KAmod STM32H503
  • Zmontowany i uruchomiony moduł
  • 2 x prosta listwa goldpin 20-pin raster 2,54 mm
  • 1 x kątowa listwa goldpin 4-pin raster 2,54 mm

Schemat elektryczny


Zasilanie


Złącze Styki Funkcja
USB-C (J1) VBUS, GND Doprowadzenie napięcia 5 V ze źródła USB
P1

1:+5V, 2:GND, 3:+3.3V

Zasilanie płytki lub dostęp do linii zasilających
P2

17:GND, 18:+5V, 19:GND, 20:+3.3V

Zasilanie płytki lub dostęp do linii zasilających
P1 20:VB Wejście baterii podtrzymującej domenę VBAT i RTC

Optymalnym sposobem zasilania płytki KAmod STM32H503 jest podłączenie do interfejsu USB poprzez złącze USB-C. Napięcie ze złącza USB-C (VBUS) przechodzi przez diodę Schottky'ego D4 na linię +5V. Innym sposobem zasilania płytki jest doprowadzenie stabilizowanego napięcia 5 V bezpośrednio do styku +5V jednego ze złączy P1 lub P2, oraz masę do styku GND. Napięcie zasilające musi mieścić się w przedziale 4,5…5,5 V. Dioda D4 ogranicza możliwość przepływu prądu z płytki do złącza USB.


Stabilizowane napięcie 3,3 V jest otrzymywane ze stabilizatora MIC5504 i jest dostępne na stykach +3.3V przede wszystkim jako wyjście zasilające dla dołączanych układów. Czerwona dioda D3 sygnalizuje obecność napięcia 3,3 V. Maksymalna wydajność tego źródła to 300 mA, ale część tej puli pobiera mikrokontroler i pozostałe elementy modułu. Po zamontowaniu opcjonalnej pamięci Flash należy uwzględnić również pobierany przez nią prąd.


Zasilanie RTC


Wejście VB na styku 20 złącza P1 jest przeznaczone do dołączenia dodatniego bieguna baterii podtrzymującej RTC; biegun ujemny należy połączyć z GND. Układ D1 automatycznie zasila domenę VBAT z linii 3,3 V podczas normalnej pracy, a po zaniku głównego zasilania przełącza ją na baterię. Napięcie na pinie VBAT mikrokontrolera musi mieścić się w zakresie określonym w jego karcie katalogowej (1,2...3,6 V). Należy uwzględnić spadek napięcia na diodzie Schottky'ego D1; typowym wyborem jest bateria litowa 3 V.


Zworka SB1


Otwarta fabrycznie zworka lutowana SB1 jest połączona równolegle do diody D4. Jej zwarcie omija spadek napięcia na diodzie, ale usuwa zabezpieczenie przed przepływem prądu z linii +5V do VBUS złącza USB. W typowym zastosowaniu SB1 powinna pozostać otwarta. Nie należy zwierać SB1, gdy płytka może być jednocześnie zasilana z USB i ze złącza P1 lub P2.

Interfejs USB


Złącze Funkcja
USB-C (J1) Zasilanie 5 V, USB 2.0 Full Speed Device, fabryczny bootloader USB DFU

Mikrokontroler ma zintegrowany kontroler USB 2.0 Full Speed. Linie złącza są połączone bezpośrednio z wyprowadzeniami:

PA11 — USB DM
PA12 — USB DP

Te same sygnały są dostępne odpowiednio na stykach 8 i 9 złącza P2. Gdy używany jest interfejs USB, nie należy obciążać tych styków innymi układami. Rezystory 5,1 kΩ na liniach CC konfigurują złącze USB-C jako urządzenie pobierające zasilanie. Płytka nie zawiera obwodu zasilania VBUS wymaganego do pracy jako host USB, dlatego jest przeznaczona do pracy w trybie Device.

Funkcja USB zależy od oprogramowania mikrokontrolera. Dołączony projekt przykładowy konfiguruje urządzenie CDC ACM, widoczne w komputerze jako wirtualny port szeregowy.

Interfejs programowania i debugowania SWD


Złącze P3 udostępnia interfejs SWD (Serial Wire Debug), który umożliwia programowanie pamięci Flash oraz debugowanie programu przy użyciu zewnętrznego programatora, np. ST-LINK.

Styk P3 Sygnał Funkcja
1 +3.3V Napięcie odniesienia interfejsu programatora
2 PA13/SWDIO Dane SWD
3 PA14/SWCLK Zegar SWD
4 GND Masa

Sygnały należy połączyć z odpowiadającymi im sygnałami programatora. Wyprowadzenie 3,3 V służy programatorowi jako odniesienie poziomów logicznych; płytka powinna mieć własne zasilanie, chyba że używany programator jawnie obsługuje zasilanie układu docelowego.

Programowanie mikrokontrolera


Mikrokontroler można programować przez:

  • złącze P3 i interfejs SWD,
  • złącze USB-C i fabryczny bootloader USB DFU,
  • inne interfejsy obsługiwane przez bootloader STM32H503, jeżeli zostaną odpowiednio dołączone do złączy GPIO.

Programowanie przez SWD

  1. Podłącz programator do złącza P3 zgodnie z tabelą pinów.
  2. Zasil płytkę przez USB-C albo linię +5V.
  3. W STM32CubeProgrammer wybierz interfejs ST-LINK i połącz się z mikrokontrolerem.
  4. Wybierz plik programu, zaprogramuj pamięć Flash i wykonaj weryfikację.

Programowanie przez USB DFU

Fabryczny bootloader znajduje się w pamięci systemowej mikrokontrolera i nie jest kasowany podczas zwykłego programowania pamięci Flash. Aby go uruchomić:

  1. Podłącz płytkę przewodem USB-C do komputera.
  2. Naciśnij i przytrzymaj przycisk BOOT (SW2).
  3. Naciśnij i zwolnij przycisk RST (SW3), nadal trzymając BOOT.
  4. Zwolnij BOOT.
  5. W STM32CubeProgrammer wybierz interfejs USB i połącz się z urządzeniem DFU.

Po zaprogramowaniu upewnij się, że przycisk BOOT jest zwolniony, i zresetuj płytkę. Zamiast opisanej sekwencji można również włączyć zasilanie przy wciśniętym przycisku BOOT.

PA13 i PA14 są zajęte przez SWD podczas programowania i debugowania. PA11 i PA12 są zajęte przez USB podczas programowania DFU lub komunikacji USB.

Dodatkowe elementy - przyciski i diody LED


Element Połączenie Funkcja
SW1 / PA0 USER KEY PA0 - aktywny stan niski Przycisk użytkownika; rezystor szeregowy 330 Ω
SW2 BOOT BOOT0 - aktywny stan wysoki Wybór uruchomienia pamięci systemowej/bootloadera
SW3 RST NRST - aktywny stan niski Reset mikrokontrolera
D2 niebieska PC13 - aktywny stan niski Dioda sterowana przez program użytkownika
D3 czerwona +3.3V Sygnalizacja obecności zasilania 3,3 V

Przycisk USER zwiera wejście PA0 do masy. Oprogramowanie powinno włączyć rezystor podciągający wejście do 3,3 V; tak skonfigurowano dołączony projekt przykładowy. Niebieska dioda świeci po ustawieniu na PC13 stanu niskiego.

Pamięć SPI Flash


Pamięć SPI NOR Flash nie jest montowana fabrycznie. Płytka ma nieobsadzone pola U3, na których użytkownik może samodzielnie wlutować zgodny układ o wybranej pojemności. W25Q16JVSS o pojemności 16 Mbit (2 MB), umieszczony na schemacie, jest przykładem obsługiwanego układu, a nie elementem wyposażenia standardowego.

Montowana pamięć musi spełniać takie warunki:

  • zasilanie napięciem 3,3 V,
  • obudowa SOIC-8 o szerokości 208 mil, wymiarach około 5,3 × 5,3 mm i rastrze 1,27 mm,
  • pinout zgodny z rodziną W25Qxx w trybie SPI,
  • obsługa standardowych poleceń SPI NOR używanych przez oprogramowanie.


Sprzęt nie narzuca pojemności pamięci. Dołączony program testowy używa poleceń z adresem 24-bitowym, dlatego bez modyfikacji oprogramowania może bezpośrednio adresować pierwsze 16 MB pamięci. Układy o większej pojemności mogą wymagać obsługi adresowania 4-bajtowego, jeżeli aplikacja ma korzystać z obszaru powyżej tej granicy.

Pola U3 są połączone z SPI1 mikrokontrolera:

Sygnał pamięci GPIO mikrokontrolera Złącze P1
CS PA4 11
SCK PA5 10
MISO / DO PA6 9
MOSI / DI PA7 8


Wyprowadzenia PA4...PA7 są również dostępne na złączu P1 i trwale połączone z polami U3. Po zamontowaniu pamięci użycie tych linii przez dodatkowy układ wymaga zachowania poprawnych stanów sygnału CS i uwzględnienia obciążenia magistrali.

Złącza GPIO


Złącza P1 i P2 mają po 20 styków w rastrze 2,54 mm. Poziomy logiczne mikrokontrolera wynoszą 3,3 V. Tylko wyprowadzenia oznaczone w karcie katalogowej mikrokontrolera jako FT tolerują napięcie 5 V; nie dotyczy to wszystkich pinów ani trybu analogowego.

Złącze P1

Styk Sygnał Uwagi
1 +5V Linia zasilania 5 V
2 GND Masa
3 +3.3V Linia zasilania 3,3 V
4 PB10 GPIO
5 PB2 GPIO
6 PB1 GPIO
7 PB0 GPIO
8 PA7 GPIO, SPI1 MOSI pamięci Flash
9 PA6 GPIO, SPI1 MISO pamięci Flash
10 PA5 GPIO, SPI1 SCK pamięci Flash
11 PA4 GPIO, CS pamięci Flash
12 PA3 GPIO
13 PA2 GPIO
14 PA1 GPIO
15 PA0 GPIO, przycisk USER
16 NRST Reset, aktywny stan niski
17 PC15 GPIO/LSE; połączenie przez SB3
18 PC14 GPIO/LSE; połączenie przez SB2
19 PC13 GPIO, niebieska dioda LED
20 VB Wejście baterii RTC przez diodę Schottky'ego

Złącze P2

Styk Sygnał Uwagi
1 PB12 GPIO
2 PB13 GPIO
3 PB14 GPIO
4 PB15 GPIO
5 PA8 GPIO
6 PA9 GPIO
7 PA10 GPIO
8 PA11 GPIO, USB DM
9 PA12 GPIO, USB DP
10 PA15 GPIO/JTAG JTDI
11 PB3 GPIO/JTAG JTDO
12 PB4 GPIO/JTAG NJTRST
13 PB5 GPIO
14 PB6 GPIO
15 PB7 GPIO
16 PB8 GPIO
17 GND Masa
18 +5V Linia zasilania 5 V
19 GND Masa
20 +3.3V Linia zasilania 3,3 V

Pełna lista funkcji alternatywnych oraz informacje o tolerancji napięć znajdują się w karcie katalogowej STM32H503CB.

Zworki SB2 (PC14) i SB3 (PC15)

Wyprowadzenia PC14 i PC15 mikrokontrolera są używane przez rezonator 32,768 kHz. Otwarta zworka SB2 odłącza PC14 od styku 18 złącza P1, a otwarta zworka SB3 odłącza PC15 od styku 17. Zwarcie zworek udostępnia na złączu sygnały oscylatora, ale dodaje do nich pojemność przewodów i dołączonych układów, co może zakłócić pracę rezonatora. W typowym zastosowaniu RTC obie zworki powinny pozostać otwarte.

Wymiary


Wymiary płytki KAmod STM32H503 wynoszą 53 × 20,75 mm.

Program testowy


Katalog KAmod_STM32H503 zawiera przykładowy projekt dla STM32CubeIDE. Projekt korzysta z STM32CubeH5 HAL, systemu ThreadX i stosu USBX. Po uruchomieniu płytka zgłasza się jako urządzenie USB CDC ACM, czyli wirtualny port szeregowy. W systemie Linux jest to zwykle /dev/ttyACM0; w systemie Windows urządzenie otrzymuje numer portu COM. Ustawienie prędkości transmisji jest dla USB CDC umowne — można wybrać 115200 bit/s, 8N1.

Komendy należy wpisywać wielkimi literami i kończyć klawiszem Enter. Polecenie HELP wyświetla ich listę.


Komenda Działanie
HELP Wyświetla listę komend
RTC GET Odczytuje datę i czas RTC
RTC SET YYYY-MM-DD HH:MM:SS Ustawia datę i czas RTC
RTC INIT Jednorazowo ustawia wartość początkową RTC
LED ON, LED OFF Steruje niebieską diodą na PC13
BTN GET Odczytuje stan przycisku USER na PA0
FLASH ID Odczytuje identyfikator JEDEC opcjonalnej pamięci Flash
FLASH STATUS Odczytuje rejestr statusu opcjonalnej pamięci Flash
FLASH TEST Kasuje sektor, zapisuje i weryfikuje 256 bajtów; wymaga zamontowanej pamięci
REBOOT Resetuje mikrokontroler

Uwaga: Polecenia FLASH ... wymagają samodzielnie zamontowanej, zgodnej pamięci SPI NOR. FLASH TEST niszczy wcześniejszą zawartość sektora 4 kB rozpoczynającego się pod adresem 0x010000.


Szczegółowy opis protokołu i odpowiedzi

USB CDC CLI — dokumentacja komend

Interfejs CLI jest dostępny jako USB CDC ACM (wirtualny port szeregowy). W systemie Linux urządzenie zwykle pojawia się jako /dev/ttyACM0. Wartość prędkości ustawiona w terminalu jest dla USB CDC umowna; można pozostawić 115200 8N1.

Komendy należy wpisywać wielkimi literami i kończyć klawiszem Enter (CR, LF albo CR+LF). Po aktywacji połączenia oraz po każdej obsłużonej komendzie urządzenie wysyła:

READY
Lista komend
Komenda Działanie
HELP Wyświetla pionową listę dostępnych komend jako linie OK CMD ..., zakończoną OK END.
RTC GET Odczytuje bieżącą datę i czas RTC.
RTC SET YYYY-MM-DD HH:MM:SS Ustawia datę i czas RTC. Dozwolone lata: 2000..2099.
RTC INIT Inicjalizuje RTC wartością 2026-01-01 00:00:00, jeśli nie zapisano wcześniej znacznika inicjalizacji.
LED ON Włącza LED na PC13 (LED jest aktywna stanem niskim).
LED OFF Wyłącza LED na PC13.
BTN GET Odczytuje stan wejścia PA0.
FLASH ID Odczytuje JEDEC ID opcjonalnej pamięci SPI Flash i rozpoznaje producenta.
FLASH STATUS Odczytuje rejestr statusu SR1 (BUSY i WEL) opcjonalnej pamięci.
FLASH TEST Kasuje sektor 4 KiB, zapisuje 256 B i weryfikuje dane; wymaga zamontowanej pamięci.
REBOOT Wysyła potwierdzenie i resetuje mikrokontroler.
Format daty i czasu

Polecenie RTC SET wymaga dokładnie formatu:

RTC SET YYYY-MM-DD HH:MM:SS

Przykład:

RTC SET 2026-07-12 14:30:00
RTC GET

Wymagania:

  • rok: 2000..2099,
  • miesiąc: 01..12,
  • dzień zgodny z miesiącem i rokiem przestępnym,
  • godzina: 00..23,
  • minuta i sekunda: 00..59,
  • wszystkie zera wiodące oraz separatory są obowiązkowe.

Przykładowa odpowiedź:

OK RTC 2026-07-12 14:30:00
READY
Test pamięci SPI Flash

Pamięć SPI NOR nie jest montowana fabrycznie. Polecenia FLASH ID, FLASH STATUS i FLASH TEST działają po samodzielnym wlutowaniu zgodnego układu na pola U3. Pola pamięci są podłączone do SPI1, a sygnał CS znajduje się na PA4. Komenda FLASH TEST używa adresu 0x010000.

Test wykonuje kolejno:

  1. odczyt JEDEC ID,
  2. skasowanie sektora 4 KiB,
  3. sprawdzenie, czy skasowane bajty mają wartość 0xFF,
  4. zapis 256-bajtowego wzorca,
  5. ponowny odczyt i porównanie danych.

Uwaga: FLASH TEST wymaga zamontowanej pamięci i niszczy wcześniejszą zawartość sektora rozpoczynającego się pod adresem 0x010000.

Format odpowiedzi
  • powodzenie zaczyna się od OK,
  • błąd zaczyna się od ERR,
  • nieznana komenda: ERR CLI unknown_command: <komenda>,
  • każda odpowiedź kończy się osobną linią READY,
  • linia dłuższa niż 127 znaków: ERR LINE_TOO_LONG.

Przykłady:

OK
READY
ERR RTC bad_format use: RTC SET YYYY-MM-DD HH:MM:SS
READY
OK BTN PA0=1
READY
OK FLASH SR1=0x00 BUSY=0 WEL=0
READY

Sprawdzanie i synchronizacja RTC z komputerem


Skrypt rtc_sync.py komunikuje się z programem testowym przez USB CDC. Odczytuje czas mikrokontrolera poleceniem RTC GET, porównuje go z lokalnym czasem komputera i - jeśli różnica przekracza ustawiony próg — wysyła polecenie RTC SET. Po synchronizacji ponownie odczytuje RTC i sprawdza wynik.

Skrypt wymaga Pythona 3 i pakietu pyserial:

python3 -m pip install pyserial


Przykładowe uruchomienie w systemie Linux:

python3 tools/rtc_sync.py --port /dev/ttyACM0


W systemie Windows jako port należy podać nazwę przydzieloną urządzeniu, na przykład:

python tools/rtc_sync.py --port COM5


Domyślnie akceptowana różnica wynosi 2 sekundy. Najważniejsze opcje programu:

Opcja Znaczenie
--port PORT Port urządzenia; domyślnie /dev/ttyACM0
--baud N Umowna prędkość portu CDC; domyślnie 115200
--threshold S Maksymalna akceptowana różnica czasu w sekundach; domyślnie 2.0
--timeout S Limit czasu odpowiedzi na jedną komendę; domyślnie 3.0
--dry-run Tylko porównuje czas, bez zmiany RTC
--no-initial-drain Nie usuwa oczekujących komunikatów po otwarciu portu



Przykład samego sprawdzenia czasu z progiem 0,5 sekundy:

python3 tools/rtc_sync.py --port /dev/ttyACM0 --threshold 0.5 --dry-run


Program zwraca kod 0, gdy różnica mieści się w progu, kod 1, gdy po sprawdzeniu nadal jest zbyt duża, oraz kod 2 w przypadku błędu komunikacji, braku pakietu pyserial albo nieprawidłowej odpowiedzi urządzenia.

Linki