Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2018:gsm-retransmitter

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
2018:gsm-retransmitter [2019/01/14 09:57]
Vladimír Šustek [Závěr]
2018:gsm-retransmitter [2019/01/14 10:14] (aktuální)
Vladimír Šustek [Materiály a zdroje]
Řádek 24: Řádek 24:
 přijetí jako odezvu na prázdný AT command. Daná SMS musí být nejprve otevřena a její obsah zkrácen o hlavičku (data o odesílateli,​ čas odeslání, status SMS) a bezprostředně za textem ukončena, jinak nebude taková zpráva měřidlem správně vyhodnocena. Z důvodu limitované počtu SMS (24) je SMS následně smazána. Modul disponuje i interupt pinem, který v případě speciální akce změní stav, nicméně z preventivních důvodů není využit (zaseknutí - zamrznutí). přijetí jako odezvu na prázdný AT command. Daná SMS musí být nejprve otevřena a její obsah zkrácen o hlavičku (data o odesílateli,​ čas odeslání, status SMS) a bezprostředně za textem ukončena, jinak nebude taková zpráva měřidlem správně vyhodnocena. Z důvodu limitované počtu SMS (24) je SMS následně smazána. Modul disponuje i interupt pinem, který v případě speciální akce změní stav, nicméně z preventivních důvodů není využit (zaseknutí - zamrznutí).
  
-Pokud je modul hovorově vyzváněn, jako v předchozím případě, je odpovězeno na prázdný AT příkaz notifikací '​RING'​ časově podobně se opakující přerušovanému vyzváněcímu tónu u mobilního telefonu (myšleno ze strany volajícího). Z praktického hlediska je až 4. posloupná ​zpráva ​RING vyhodnocena jako žádost o kompletní reset - vzdálené resetování systému.+Pokud je modul hovorově vyzváněn, jako v předchozím případě, je odpovězeno na prázdný AT příkaz notifikací '​RING'​ časově podobně se opakující přerušovanému vyzváněcímu tónu u mobilního telefonu (myšleno ze strany volajícího). Z praktického hlediska je až 4. posloupná ​hláška ​RING vyhodnocena jako žádost o kompletní reset - vzdálené resetování systému.
  
 V případě přijatých dat UART1 spojujícím měřidlo a Re-Transmitter je vyvolána obsluha MMS. Obluha MMS svojí dobou trvání převyšuje periodu Watch Dog a tedy je resetován i v této rutině. MMS adresátem je recipient, jenž byl obsažen v SMS, která měření a tedy příjem dat na UARTu způsobila, nebo je MMS poslána na defaultní adresu. Při MMS obsluze není rozbalena případně přijatá SMS ani není reagováno na vyzvánění hovoru. Při odesílání MMS jsou jednotlivé příkazy nutné k odeslání akumulovány do jedné hodnoty, kde je zásádní GSM_MMS_SENT s hodnotou 1000 - výsledek rutiny musí být vyšší 1000.  V případě přijatých dat UART1 spojujícím měřidlo a Re-Transmitter je vyvolána obsluha MMS. Obluha MMS svojí dobou trvání převyšuje periodu Watch Dog a tedy je resetován i v této rutině. MMS adresátem je recipient, jenž byl obsažen v SMS, která měření a tedy příjem dat na UARTu způsobila, nebo je MMS poslána na defaultní adresu. Při MMS obsluze není rozbalena případně přijatá SMS ani není reagováno na vyzvánění hovoru. Při odesílání MMS jsou jednotlivé příkazy nutné k odeslání akumulovány do jedné hodnoty, kde je zásádní GSM_MMS_SENT s hodnotou 1000 - výsledek rutiny musí být vyšší 1000. 
Řádek 126: Řádek 126:
 === GSM MODULE STATE MACHINE, PROCESSING SECTION - SOLVE THE STATE === === GSM MODULE STATE MACHINE, PROCESSING SECTION - SOLVE THE STATE ===
  
-V defaultním případě (po resetu) začíná cyklus ve stavu GSM_OK, který vyšle prázdný AT příkaz. V případě příjmu SMS je sekvečně ​její čtení ​rozděleno podle stavů GSM_SMS_RCVD - vyšle příkaz pro přečtení SMS, jenž je bezprostředně následován stavem GSM_SMS_READ kdy je SMS zpráva ošetřena o hlavičku a zápatí, případně získán příjemce MMS a finální smazání zprávy. Po těchto třech úkonech získává měřidlo pomocí UART1 extrahovaný příkaz z SMS a měří.+V defaultním případě (po resetu) začíná cyklus ve stavu GSM_OK, který vyšle prázdný AT příkaz. V případě příjmu SMS je její čtení ​sekvečně ​ rozděleno podle stavů GSM_SMS_RCVD - vyšle příkaz pro přečtení SMS, jenž je bezprostředně následován stavem GSM_SMS_READ kdy je SMS zpráva ošetřena o hlavičku a zápatí, případně získán příjemce MMS a finální smazání zprávy. Po těchto třech úkonech získává měřidlo pomocí UART1 extrahovaný příkaz z SMS a měří.
  
 Stavy GSM_RING, GSM_NOCRR ošetřují případné volání na číslo jednotky, kde GSM_RING detekuje aktivní volání a GSM_NOCRR zavěšení hovoru. Pro opakování - nutno volat modul nejméně na zaznění 4. tónu pro vyvolání akce resetu. Rutina přiřazena k hodnotě GSM_RING v tomto případě nastaví flag rst_req na log. 1. Nakonec je zapnut 2 vteřinový timer (nedojde k jeho zapnutí pouze mezi stavy GSM_SMS_READ a GSM_SMS_DEL). Stavy GSM_RING, GSM_NOCRR ošetřují případné volání na číslo jednotky, kde GSM_RING detekuje aktivní volání a GSM_NOCRR zavěšení hovoru. Pro opakování - nutno volat modul nejméně na zaznění 4. tónu pro vyvolání akce resetu. Rutina přiřazena k hodnotě GSM_RING v tomto případě nastaví flag rst_req na log. 1. Nakonec je zapnut 2 vteřinový timer (nedojde k jeho zapnutí pouze mezi stavy GSM_SMS_READ a GSM_SMS_DEL).
Řádek 132: Řádek 132:
 === GSM MODULE RECEIVING SECTION - GET STATE === === GSM MODULE RECEIVING SECTION - GET STATE ===
  
-Funkcemi refresh_uart1(gsmod) a refresh_uart3(gsmod) jsou zkontrolovány a vyhodnoceny DMA buffery UART periferií, kde UART1 obsluhuje linku s naměřenými daty (výstup z měřidla), či UART3 neustálou komunikaci mezi GSM modulem a procesorem. ​+Funkcemi refresh_uart1() a refresh_uart3() jsou zkontrolovány a vyhodnoceny DMA buffery UART periferií, kde UART1 obsluhuje linku s naměřenými daty (výstup z měřidla), či UART3 neustálou komunikaci mezi GSM modulem a procesorem. ​
  
-V případě příjmu znaku '​\n'​ (uart3_received_flag) na UART3 sběrnici a vypršení časového úseku timeru tim_gsm_respnd() je vyhodnocena přijmutá odpověď na zaslaný AT command pomocí gsm_rec_respond2(),​ je vyresetován timer i Watch Dogpomocná signalizační ​LED nastavena na mód jednoho blinknutí za sekundu ​ONE_FLASHTato LED bliká neustále přinicializaci = FAST_FLASH a dvakrát ​za sekundu - TWICE_FLASH při pokusu o restart UART3 gsm_missed_response(gsmod) )+V případě příjmu znaku '​\n'​ (uart3_received_flag) na UART3 sběrnici a vypršení časového úseku timeru tim_gsm_respnd() je vyhodnocena přijmutá odpověď na zaslaný AT command pomocí gsm_rec_respond2(),​ je vyresetován timer i Watch Dog pomocná signalizační ​Green_LED ​nastavena na mód jednoho blinknutí za sekundu ​ONCE_FLASH (pracovní mód). LED může blikat ​2x za vteřinu (TWICE_FLASH) pokud modul neodpovídá a při pokusu o restart UART3 gsm_missed_response() )
  
-Pokud vypršel časovač tim_gsm_respnd(),​ pomocí funkce gsm_missed_response(gsmod) je při opakovaném vypršení času restartováno rozhraní UART3, přičemž je vždy nastaven cmd_val na GSM_OK, aby byl zaslán další prázdný AT command na začátku smyčky. Pokud se nepodaří navázat delší dobu, Watch Dog způsobí restart celého systému (zmíněných 26s).+Pokud vypršel časovač tim_gsm_respnd(),​ pomocí funkce gsm_missed_response() je při opakovaném vypršení času restartováno rozhraní UART3, přičemž je vždy nastaven cmd_val na GSM_OK, aby byl zaslán další prázdný AT command na začátku smyčky. Pokud se nepodaří navázat delší dobu, Watch Dog způsobí restart celého systému (zmíněných 26s).
  
 === USER REMOTE RESET ROUTINE === === USER REMOTE RESET ROUTINE ===
Řádek 145: Řádek 145:
   * dlouhé vyvolávání modulu (vzdálený reset uživatelem)   * dlouhé vyvolávání modulu (vzdálený reset uživatelem)
  
-Je využita CSMSIS funkce ARM NVIC_SystemReset,​ která způsobí reset ekvivalentní hardwarovému resetu pinu procesoru. ​Nunto podotknout, že procesor ovládá GPIO pin v módu otevřeného kolektoru jenž je připojen přímo na reset pin kontroléru měřidla - možnost tvrdého resetu měřidla.+Je využita CSMSIS funkce ARM NVIC_SystemReset(), která způsobí reset ekvivalentní hardwarovému resetu pinu procesoru. ​Nutno podotknout, že procesor ovládá GPIO pin v módu otevřeného kolektoru jenž je připojen přímo na reset pin kontroléru měřidla - možnost tvrdého resetu měřidla.
  
 =====Bezpečnostní prvky===== =====Bezpečnostní prvky=====
Řádek 151: Řádek 151:
 Projekt je psán protektivní medodou, kde důležité funkce vracejí výsledek, jenž je dále vyhodnocován - detekce špatné odezvy GSM modulu. Důležitou součastí je vícekrate zmíňovaný 26 vteřinový Watch Dog, jenž běží ze samostatného zdroje hodinového signálu 40 kHz, WatchDog není zastaven ani při zastavení procesoru v obyčejném debug módu ST-LINK. Projekt je psán protektivní medodou, kde důležité funkce vracejí výsledek, jenž je dále vyhodnocován - detekce špatné odezvy GSM modulu. Důležitou součastí je vícekrate zmíňovaný 26 vteřinový Watch Dog, jenž běží ze samostatného zdroje hodinového signálu 40 kHz, WatchDog není zastaven ani při zastavení procesoru v obyčejném debug módu ST-LINK.
  
-Pomocí dvou-vteřinového časovače tim_gsm_respnd() lze v přetrvávající neaktivitě restartovat UART3, stejně jako při jakékomkoliv detekovatelném problému UARTu - Využit HAL_UART_ErrorCallback(UART_HandleTypeDef *huart), jenž je schopen zaznamena například šum na RX terminálu, stejně jako zapnutí nového příjmu UART.+Pomocí dvou-vteřinového časovače tim_gsm_respnd() lze v přetrvávající neaktivitě restartovat UART3, stejně jako při jakékomkoliv detekovatelném problému UARTu - Využit HAL_UART_ErrorCallback(UART_HandleTypeDef *huart), jenž je schopen zaznamena například šum na RX terminálu, stejně jako zapnutí nového příjmu UART. Poznámka, při rádiové aktivitě modulu občas dochází k šumu na UART3 sběrnici (modul vysílá až 2 watty výkonu).
  
-Vzdálené resetování je patrné voláním na modul - číslo není veřejné, pokud modul neodpovídá je sám WatchDogem ​zresetován.+Vzdálené resetování je patrné voláním na modul - číslo není veřejné, pokud modul neodpovídá je sám Watch Dogem zresetován.
  
 =====Detaily při implementaci==== =====Detaily při implementaci====
-Pro vytvoření projektu byl využit nástroj MX Cube V1 4.27.00 a ATTOLIC true studio 9.00. Pomocí MX Cube byl vygenerován projekt s patřičnými periferiemi do párovaných c-file/​header-file a nevyužité piny nastaveny jako analogové. Vytvořené projektové soubory jsou poté na nejnižší vrstvě gsm_driver.c a gsm_driver.h obsahující rozhraní mezi STM HAL periferálními funkcemi pro komunikaci s GSM modulem či měřidlem anebo Callbacky pomocných periferie jako například časovač. Aplikačními vrstvami gsm_dal.c/​gsm_dal.h (driver above layer) je zajištěn chod celého popsaného stavového automatu switch-case. ​Není využito IRQ handlerů, pouze Callback funkcí. Komunikace s GSM modulem je (UART3) je 9600 baud, s měřidlem (UART1) 115200 baud. Funkce printf tiskne pomocné hlášky pomocí nezávislého UART2 115200 baud (jako jediný nemá zapnut RX DMA mód).+Pro vytvoření projektu byl využit nástroj MX Cube V1 4.27.00 a ATTOLIC true studio 9.00. Pomocí MX Cube byl vygenerován projekt s patřičnými periferiemi do párovaných c-file/​header-file a nevyužité piny nastaveny jako analogové. Vytvořené projektové soubory jsou poté na nejnižší vrstvě gsm_driver.c a gsm_driver.h obsahující rozhraní mezi STM HAL periferálními funkcemi pro komunikaci s GSM modulem či měřidlem anebo Callbacky pomocných periferie jako například časovač. Aplikačními vrstvami gsm_dal.c/​gsm_dal.h (driver above layer) je zajištěn chod celého popsaného stavového automatu switch-case. ​V programu není využito IRQ handlerů, pouze Callback funkcí. Komunikace s GSM modulem je nastavena na rychlost v případě ​UART3 na 9600 baudů, s měřidlem (UART1) ​na 115200 baudů. Funkce printf tiskne pomocné hlášky pomocí nezávislého UART2 (115200 baudjako jediný nemá zapnut RX DMA mód).
  
 Prvotní verze projektu byla napsána na procesoru STM32F303 - Nucleo 144 a vytvořeném Zio shieldu. Z důvodu vzájemné kompatibility HAL knihoven nebylo těžké přejít na procesor STM32F373RCT6. Důvod změny procesoru byla jeho cena a fakt že byl ve větším množstvím na firemním skladě. Vlevo je zmíněný Nucleo 144, vpravo již finální modul jenž je použit v měřidle. Footprint zkompilované aplikace bez optimalizací je 21kB SRAM, 8,7kB FLASH. Z toho buffer UART1 zabírá 16384 Bytů SRAM - pro případné zpracování velkého počtu naměřených hodnot. Prvotní verze projektu byla napsána na procesoru STM32F303 - Nucleo 144 a vytvořeném Zio shieldu. Z důvodu vzájemné kompatibility HAL knihoven nebylo těžké přejít na procesor STM32F373RCT6. Důvod změny procesoru byla jeho cena a fakt že byl ve větším množstvím na firemním skladě. Vlevo je zmíněný Nucleo 144, vpravo již finální modul jenž je použit v měřidle. Footprint zkompilované aplikace bez optimalizací je 21kB SRAM, 8,7kB FLASH. Z toho buffer UART1 zabírá 16384 Bytů SRAM - pro případné zpracování velkého počtu naměřených hodnot.
Řádek 204: Řádek 204:
 {{ :​2018:​gsm:​gsm_modul_schema.pdf |Schéma finálního přípravku (deska vpravo - sekce detaily implementace)}} {{ :​2018:​gsm:​gsm_modul_schema.pdf |Schéma finálního přípravku (deska vpravo - sekce detaily implementace)}}
  
- --- //​[[xsuste08@stud.feec.vutbr.cz|Vladimír Šustek]] 2019/​01/​10 ​12:31//+ --- //​[[xsuste08@stud.feec.vutbr.cz|Vladimír Šustek]] 2019/01/14 10:14//
2018/gsm-retransmitter.1547456231.txt.gz · Poslední úprava: 2019/01/14 09:57 autor: Vladimír Šustek