Přeskočit na hlavní obsah

Konzole AT přes USB-C

Tato stránka popisuje, jak se zařízením GLIDER komunikovat příkazy AT přes konektor USB-C. Konzole AT je doporučené rozhraní pro každodenní práci (zprovoznění, konfigurace, aktualizace firmwaru) a nepotřebuje žádný speciální ladicí hardware.

tip

Pokud potřebujete průběžné logy a plný shell Zephyr, použijte konzoli RTT (J-Link).

Jak to funguje​

Uvnitř zařízení GLIDER je UART0 čipu nRF9151 připojený k převodníku USB-UART FT234XD. Jakmile zapojíte kabel USB-C, firmware převodník zapne a začne přijímat příkazy AT.

SignálPin nRF9151Funkce
UART0 TXP0.25nRF91 → FT234XD RXD
UART0 RXP0.24nRF91 ← FT234XD TXD
USB_ENP0.00Napájí FT234XD (aktivní v log. 1)
USB_DETECTP0.26Detekuje kabel (aktivní v log. 0)

UART0 pracuje rychlostí 1 000 000 baud (nastaveno v gauger_lte_nrf9151_common.dtsi).

Když zapojíte kabel USB-C, firmware:

  1. Detekuje kabel na USB_DETECT (P0.26).
  2. Po 50 ms ošetření zákmitů zapne USB_EN (P0.00) a převodník FT234XD naběhne.
  3. Aktivuje UART0 RX a začne zpracovávat příkazy AT.

Předpoklady​

Systémové balíčky​

sudo apt update
sudo apt install python3 python3-venv git

Členství ve skupině dialout​

V Linuxu mají k sériovým portům přístup jen členové skupiny dialout. Jednou se do ní přidejte:

sudo usermod -aG dialout $USER
pozor

Aby se změna skupiny projevila, musíte se odhlásit a znovu přihlásit. Ověříte to příkazem:

groups | grep -o dialout
# should print: dialout

Ověření, že systém zařízení na USB-C rozpozná​

Zapojte zařízení GLIDER a zkontrolujte:

ls -l /dev/ttyUSB0
# crw-rw---- 1 root dialout ... /dev/ttyUSB0

Pokud se /dev/ttyUSB0 neobjeví, podívejte se na výstup dmesg | tail -20. Měli byste vidět něco jako:

usb 1-2: new full-speed USB device
ftdi_sio 1-2:1.0: FTDI USB Serial Device converter detected
usb 1-2: FTDI USB Serial Device converter now attached to ttyUSB0

Pokud místo toho vidíte chyby, je problém na straně hardwaru (nevhodný kabel, vadný konektor, převodník FT234XD bez napájení).

Kompletní nastavení s virtuálním prostředím Pythonu​

Nástroje HARDWARIO pro příkazovou řádku doporučujeme instalovat do virtualenv Pythonu. Balíčky jsou tak oddělené od systémového Pythonu a postup funguje na každé současné distribuci Linuxu.

Krok 1 – Ověřte, že je nainstalován python3-venv​

dpkg -l python3-venv | tail -1
# expect a line starting with "ii"

Pokud chybí:

sudo apt install python3-venv

Krok 2 – Vytvořte virtualenv​

Ve složce svého projektu:

python3 -m venv .venv

Krok 3 – Aktivujte virtualenv​

source .venv/bin/activate

Na začátku výzvy shellu by teď mělo být (.venv).

Krok 4 – Nainstalujte potřebné balíčky​

pip install --upgrade pip
pip install west pyserial loguru rttt

Co jste právě nainstalovali:

BalíčekÚčel
westMetanástroj pro sestavení, který používají Zephyr a nRF Connect SDK
pyserialKnihovna pro komunikaci po UART
loguruStrukturované logování
rtttKnihovna konzolového UI od HARDWARIO, která zpracovává rámování @LOG:

Krok 5 – Ověřte instalaci​

west --version
python3 -c "import serial, loguru, rttt; print('OK')"

Oba příkazy by měly proběhnout úspěšně.

Spuštění konzole​

V terminálu, kde je virtualenv aktivní:

source .venv/bin/activate
west serial-console

Výchozí hodnoty, které west serial-console používá:

  • --port /dev/ttyUSB0
  • --baudrate 1000000

Pokud máte více zařízení, zadejte port explicitně:

west serial-console --port /dev/ttyUSB1 --baudrate 1000000

Konzole drží odděleně dva proudy:

  • Příkazy AT a odpovědi: co napíšete a co zařízení GLIDER odpoví.
  • Zprávy @LOG:: průběžné řádky logu, které rolují obrazovkou a nepřekážejí na příkazové řádce.

Užitečné soubory, které west serial-console spravuje:

  • Historie příkazů: ~/.serial_console_history
  • Úplný záznam relace: ~/.serial_console_console
  • Trasování modemu: ~/.serial_console.mtrace

Rychlá kontrola funkčnosti​

AT
# OK

ATI
# "GLIDER-R1.1"

Pokud se objeví OK, komunikace se zařízením funguje.

Základní příkazy AT​

PříkazCo dělá
ATTest spojení, vrací OK
AT+CLACVypíše všechny registrované příkazy AT
AT$HELPStejné jako +CLAC, ale s nápovědou
ATIIdentifikace zařízení
AT+CGMINázev výrobce
AT+CGMMNázev produktu
AT+CGMRRevize firmwaru
AT+CGSNSériové číslo
AT$INFO?Výpis všech informačních polí (sériové číslo, claim token, …)
AT$REBOOTRestartuje zařízení
AT&WUloží konfiguraci do flash paměti
AT&FObnoví tovární nastavení (vymaže celou konfiguraci)

Konfigurace přes AT​

AT$CONFIG=? # list every configurable key
AT$CONFIG="therm config show" # current thermometer slot bindings
AT$CONFIG="therm config 1 28ab12cd…" # bind slot 1 to a specific DS18B20
AT&W # save and reboot

Spouštění příkazů shellu z konzole AT​

Konzole AT umí přes AT$SHELL spustit i libovolný příkaz shellu Zephyr:

AT$SHELL="therm state"
AT$SHELL="therm scan"
AT$SHELL="therm scan --save"
AT$SHELL="kernel reboot cold"
AT$SHELL="log disable"
AT$SHELL="log enable wrn"

Aktualizace firmwaru​

Skriptovanou aktualizaci firmwaru popisuje reference Příkazy AT (AT$FW).

Údržba​

AkcePříkaz
Ukončení virtualenvdeactivate
Aktualizace nástrojůpip install --upgrade west pyserial loguru rttt
Odstranění virtualenvrm -rf .venv
Výpis nainstalovaných balíčkůpip list

Řešení problémů​

Permission denied na /dev/ttyUSB0​

ls -l /dev/ttyUSB0
# crw-rw---- 1 root dialout ...

groups | grep dialout
# if "dialout" is missing:
sudo usermod -aG dialout $USER
# then log out / log in (or run: newgrp dialout)

Port je obsazený​

Port už drží jiný terminál (screen, minicom, picocom, tio, …):

sudo lsof /dev/ttyUSB0
screen -ls && screen -wipe
killall screen minicom picocom tio 2>/dev/null

Logy přicházejí, ale příkazy AT nemají echo​

Terminál posílá pouze CR místo LF nebo CRLF. Nástroj west serial-console konce řádků upraví automaticky, jiné terminály ale ne vždy. Například u tio:

tio -b 1000000 -m INLCRNL,OCRNL /dev/ttyUSB0

OCRNL převádí odchozí CR na LF.

Alternativní terminály​

Pokud west serial-console není k dispozici, funguje jakýkoli terminál, který zvládne 1 000 000 baud:

# tio (recommended alternative)
tio -b 1000000 -m INLCRNL,OCRNL /dev/ttyUSB0
# exit: Ctrl-T Q

# picocom
picocom -b 1000000 --omap crlf /dev/ttyUSB0
# exit: Ctrl-A Ctrl-X

# pyserial miniterm
python3 -m serial.tools.miniterm /dev/ttyUSB0 1000000
# exit: Ctrl-]