Un’introduzione ai comandi AT

Ogni sviluppatore che deve lavorare con un modem cellulare dovrà fare uso di quelli che sono chiamati ‘comandi AT’ ad un certo punto. I comandi AT sono essenzialmente istruzioni per il modem. Originariamente sviluppati dal produttore di modem Hayes come mezzi per far funzionare i loro prodotti di linea fissa, i comandi AT – la ‘AT’ sta per ‘come to ATtention’ – sono ora usati da tutti i modem, di tutti i tipi.

I comandi AT sono usati principalmente per configurare un modem e stabilire la sua connessione di rete. Possono anche essere usati per ottenere informazioni sullo stato del modem e della connessione, e questo può essere molto utile per il debug delle applicazioni e per confermare che un modem stia funzionando correttamente: si è connesso alla rete giusta, sta usando la tecnologia cellulare corretta, ha il roaming abilitato, ecc. Vedremo a breve alcuni comandi utili per compiti come questi.

Come inviare i comandi AT

I comandi AT sono inviati al modem come testo semplice attraverso una connessione seriale (UART) che comprende due fili, uno per ricevere (RX) e uno per trasmettere (TX), o via USB. Sul campo, un dispositivo IoT abilitato al cellulare gestirà il suo modem inviandogli comandi AT, ma durante lo sviluppo dell’applicazione e il debug, non è raro toccare la connessione del modem. Questo ti permette di accendere un terminale e interagire direttamente con il modem emettendo i tuoi comandi AT.

Come formattare i comandi AT

I comandi che invii devono obbedire alla seguente sintassi di base:

AT<COMMAND><SUFFIX><DATA>

Questa è chiamata ‘linea di comando’. Come potete vedere, inizia con AT, seguita da un comando, un suffisso per indicare la modalità di comando o ‘tipo’, e infine alcuni dati, anche se non tutti i comandi hanno bisogno che questo campo sia incluso.

Questa struttura è chiamata ‘linea di comando’ ed è sempre terminata da un singolo ritorno a capo. Puoi includere più comandi nella linea, ognuno separato da un punto e virgola:

AT<COMMAND><SUFFIX><DATA>;<COMMAND><SUFFIX><DATA>;<COMMAND><SUFFIX><DATA>

Ogni linea, non importa quanti comandi contiene, ha solo un AT, all’inizio. Avrete un errore se includete AT più di una volta in una singola linea. I comandi nelle linee multi-comando sono processati in modo sequenziale. La lunghezza della linea è solitamente limitata a 80 caratteri.

Campi della linea di comando AT

Il campo <COMMAND> indica cosa volete che il modem faccia. I vecchi comandi ‘base’ hanno nomi di un solo carattere; le aggiunte successive al set di comandi, chiamate comandi ‘estesi’, sono precedute da un segno +, come AT+COPS (scansione delle reti) e AT+CGMI (ottenere il produttore del modem). Alcuni comandi hanno il prefisso & – per esempio, AT&F, che resetta le impostazioni del modem. Tutti i comandi del cellulare sono comandi estesi. Secondo le specifiche dei comandi AT, i comandi devono comprendere caratteri maiuscoli, ma molti modem permettono di inviare i comandi anche in minuscolo. Noi ci atterremo allo standard.

I valori dei campi <DATA> e <SUFFIX> dipendono dal tipo di comando, che sono quattro:

Type Suffix Role
Read ? Prendi un’impostazione di configurazione del modem
Imposta = Imposta una configurazione del modem setting
Execute None Avvia un’operazione modem
Test =? Verifica se un modem supporta il comando nominato – ma nota che AT+COPS=? funziona in modo leggermente diverso, come vedremo tra poco

Vedremo come questi tipi influenzano l’uso dei comandi AT tra un momento, ma prima vediamo come il modem risponde ai comandi.

Risposta ai comandi AT

Quando viene emesso un comando AT, a seconda del comando inviato, il modem può restituire o meno dei dati, cioè fare quella che viene chiamata una ‘risposta informativa’. In entrambi i casi, l’operazione di comando termina sempre con la restituzione da parte del modem di un ‘codice di risultato’.

Per esempio, supponiamo di chiedere il nome del produttore del modem usando il seguente comando:

AT+CGMI

Questo genererà la seguente risposta se chiamato su un modem u-blox:

u-bloxOK

Ogni unità della risposta – l’informazione (linea superiore) e il codice di risultato (linea inferiore) – è racchiusa tra i caratteri Carriage Return e Line Feed (codici Ascii 0x0D e 0x0A, rispettivamente), da cui la linea vuota prima del OK.

OK è un codice di ritorno; l’altro è ERROR – hai fatto un errore. Forse il modem non risponde al comando AT che avete inviato, o lo avete digitato male. Forse avete fornito troppo pochi o troppi valori di dati o parametri di comando. Per impostazione predefinita, i modem possono non fornire molte spiegazioni. Fortunatamente, alcuni di essi possono essere impostati per restituire informazioni di errore estese; di nuovo, dovrete inviare un comando AT per applicare questa impostazione: AT+CMEE=2.

È importante capire che potreste anche ricevere ERROR da un comando AT perfettamente valido. Quando questo accade, è un’indicazione che il modem è in uno stato incompatibile con il comando. Per esempio, se tentate di cambiare il nome del punto d’accesso (APN) di un modem mentre è attivo, ciò restituirà tipicamente ERROR. Il rimedio è disattivare il modem, fare il cambio APN e poi riattivarlo.

Tipi di comandoAT e test

Puoi mitigare il problema dei comandi apparentemente corretti che danno errori facendo uso del suffisso di comando test (=?), che è usato per chiedere al modem se supporta il comando dato. Se non lo fa, riceverete un codice di ritorno ERROR; sapete che non dovete dare questo comando. Se il modem supporta il comando, riceverete una risposta informativa che indica i parametri del comando, se ne ha, seguita da OK.

L’esempio precedente può essere usato per dimostrare il test dei comandi. Possiamo chiedere al modem se supporta il comando +CGMI:

AT+CGMI=?

e ci darà OK perché supporta questo comando. Tuttavia, poiché il produttore del modem è fisso, tentare di cambiarlo darà sempre come risultato ERROR. Come potremmo aver tentato di cambiarne il valore? Con un suffisso di comando impostato (=):

AT+CGMI="Fintlewoodlewix"ERROR

Nota come la stringa di dati è posta tra doppi apici – anche questo è un requisito del comando AT.

Lascia un commento