AT command interface
AT commands are the primary control interface for an nRF93M1 module. Using this method, you can access every feature of the module, including cloud services, location, and power-saving modes.
This page covers how to drive the interface from a host application. For the command syntax and the full command list, see the nRF93M1 AT Commands Reference Guide.
Command categories
The command set has three origins, which is useful to know when you are searching for a command.
Prefix |
Origin |
Examples |
|---|---|---|
|
3GPP standardized |
|
|
Nordic proprietary |
|
|
Basic |
|
Standardized commands work similarly to those on other cellular modules, allowing existing host code to be reused with minimal modifications. Nordic proprietary commands cover module-specific functionality such as power state control, band selection, and the nRF Cloud client.
Command families
The command set does more than control the modem. The entire modem subsystem is accessible through AT commands, so a host device does not need a networking stack of its own.
Family |
Prefix |
What it covers |
|---|---|---|
Sockets |
|
Create, bind, connect, listen, accept, send, and receive TCP and UDP sockets, with receive and error notifications. A transparent send mode is available. |
HTTP and HTTPS |
|
Configuration, URL, GET, range GET, POST, POST from file, read to file, and cancel. |
MQTT |
|
Configure, open, connect, subscribe, unsubscribe, publish, disconnect, and close, across up to six contexts. |
Cloud |
|
Identity, location, messaging, shadow, FOTA, and Memfault observability. |
File system |
|
Open, read, write, delete, close, SHA-256 hash, and file system information. |
Packet domain |
|
PDP contexts, attach, DNS, ping, and data counters. |
Power |
|
|
RF and production |
|
Non-signalling test, band coexistence, antenna tuner control, production test completion. |
Security |
|
TLS configuration. |
Note
The nRF93M1 DK Hardware User Guide tags each command and parameter with the firmware version that supports it, written as vx.x.x.
For example, a command tagged v1.5.x is supported on any 1.5 firmware, regardless of the patch number.
Verify the tags before you rely on a command, at both command and parameter level, because a supported command can still have unsupported parameters
Getting a first response
The fastest way to reach the AT interface is the nRF93M1 DK: Modem bypass sample, which puts the modem UART switch in bypass mode and forwards it to a USB CDC-ACM VCOM port on the DK. Program the sample, open the port in the Serial Terminal app at 115200 baud, and send commands directly.
The sample also handles module power sequencing at startup, and maps Button 1 to POWER_KEY and Button 2 to RESET, in case you need to power cycle or recover the module without reprogramming.
A minimal bring-up sequence is as follows:
AT
OK
AT+CGMR
<firmware version>
OK
AT%BAND=?
<supported band bitmap>
OK
AT+CLAC
<list of all supported AT commands>
OK
AT+CFUN=1
OK
AT+CEREG?
+CEREG: 1,1,"1A2B","01234567",7
OK
AT+CGMRreturns the modem firmware version. Use it when reporting issues.AT%BAND=?returns the variant and supported band set.AT+CLAClists every command the running firmware supports, which is the fastest way to check availability without cross-referencing version tags.AT+CEREG?reports network registration status. A second parameter of1or5means the module is registered.
Sending commands from a Zephyr host
Zephyr provides modem_chat, a script-driven AT command handler that manages request and response matching, timeouts, and unsolicited result codes.
Enable it with the following options:
CONFIG_MODEM_MODULES=y
CONFIG_MODEM_CHAT=y
CONFIG_MODEM_BACKEND_UART=y
The pattern is to define a chat script of request and expected response pairs, then run it against the UART backend.
See the nRF93M1 DK: PPP shell sample, which uses this mechanism through the Zephyr modem cellular driver, and the Zephyr modem_chat API documentation.
If you use the PPP model, the cellular modem driver owns the AT channel and runs its own chat scripts during initialization and monitoring. Do not inject commands onto that channel yourself, because the driver’s state machine tracks what it expects to receive.
Instead, enable the CONFIG_MODEM_AT_SHELL option, which exposes the AT channel through a shell backend that shares the driver’s CMUX DLCI properly.
This is what the nRF93M1 DK: PPP shell sample does.
Handling unsolicited result codes
The module reports asynchronous events as unsolicited result codes (URCs).
A host application that only sends commands and waits for OK will miss them.
Subscribe to the following common events:
Event |
Command to enable |
Why it matters |
|---|---|---|
Network registration changes |
|
Detect loss of coverage without polling |
Incoming SMS |
|
Required if your design uses SMS |
Subscribe to all URCs you need during initialization, before you bring the radio up with AT+CFUN=1.
Events that occur during registration are lost if you subscribe afterwards.
Enable verbose errors early as well:
AT+CMEE=2
OK
Without it, a failing command returns a bare ERROR with no indication of the cause.
Note
URCs arrive at any time, including in the middle of a command exchange.
modem_chat handles this correctly, unlike a hand-written parser.
Limitations
- Baud rate and sleep
If the module enters a deep sleep state while the UART is above 9600 bps, the host cannot wake it over UART. Set
AT+IPRbefore allowing deep sleep. See Optimizing power consumption.- Flow control
Enable
RTSandCTS. Without flow control, high baud rates lose bytes, which usually presents as intermittent parse failures rather than an obvious error.- Blocking on long operations
Network registration, provisioning, and firmware updates take seconds to minutes. Do not use a short fixed timeout for every command.
- Test-only commands in production
The
%RFTESTcommand is a characterization tool. Do not ship it in production firmware,%PRODDONEmust be enabled when production is complete.