Data mode
The nRF91M1 module can run in the two operation modes defined by the AT command set: AT-command mode and data mode.
When running in data mode, the application does the following:
It considers all the data received from the MCU over the UART bus as arbitrary data to be streamed through the LTE network by various service modules.
It buffers the URCs received from modem and threads and sends them to the MCU only after exiting data mode.
For the socket that is in data mode with automatic data reception, the data streamed from a remote service is considered binary data to be sent to the MCU over the UART.
Overview
You can manually switch between AT-command mode and data mode. However, the nRF91M1 module data mode is applied automatically when any of the following AT commands are issued:
Socket
AT#XSENDandAT#XSENDTOMQTT publish
AT#XMQTTPUBnRF Cloud send message
AT#XNRFCLOUDDFU write
AT#XDFUWRITE
Entering data mode
The nRF91M1 module enters data mode when an AT command to send data out does not carry the payload. See the following examples:
AT#XSEND=0,2,0makes nRF91M1 module enter data mode to receive arbitrary data to transmit for socket 0.AT#XSEND=0,2,0,<data_len>makes nRF91M1 module enter data mode to receive arbitrary data of the specified length to transmit for socket 0.AT#XSEND=0,0,0,"data"makes nRF91M1 module transmit data in normal AT Command mode for socket 0.
Note
If the data contains either , or " as characters, it can only be sent in data mode.
A typical use case is to send JSON messages.
Other examples:
AT#XMQTTPUB=<topic>,"",<qos>,<retain>AT#XNRFCLOUD=2AT#XDFUWRITE=0,0,4096
The nRF91M1 module sends an OK response when it successfully enters data mode.
Sending data in data mode
Any arbitrary data received from the MCU is sent to LTE network as-is.
Note
If sending fails while in data mode, the nRF91M1 module drops any further data received from the UART until data mode is exited, as described in the Exiting data mode section.
When data mode was entered with <data_len>, no termination string is sent.
The MCU receives #XDATAMODE at the expected byte boundary instead.
When the data mode was entered without <data_len>, the nRF91M1 module also sends the termination string +++ to the MCU to signal the error.
Exiting data mode
To exit the data mode without the specification of <data_len>, the MCU sends the termination command +++ over UART.
The pattern string could be sent alone or as an affix to the data. The pattern string must be sent in full.
If <data_len> is specified in the AT command and the specified data length is reached, the nRF91M1 module exits data mode.
The termination command is not used in this case.
If a send operation fails while in data mode, such as when the socket in data mode encounters an error, the same exit conditions apply.
The MCU must send the termination command if <data_len> was not specified.
If <data_len> was specified, the MCU must send the remaining bytes required to reach the specified length.
When exiting the data mode, the nRF91M1 module sends the #XDATAMODE unsolicited notification.
After exiting the data mode, the nRF91M1 module returns to the AT command mode.
Triggering the transmission
The nRF91M1 module buffers all the arbitrary data received from the UART bus before initiating the transmission.
The transmission of the buffered data to the LTE network is triggered in the following scenarios:
Time limit when the defined inactivity timer times out.
Reception of the termination string.
Filling of the data mode buffer.
If there is no time limit configured, the minimum required value applies. For more information, see the Data mode control #XDATACTRL command.
Flow control in data mode
When nRF91M1 module fills its UART receive buffers, it disables UART reception. If hw-flow-control is enabled for the UART, hardware flow control is imposed. Without hardware flow control, the nRF91M1 module will drop incoming data while the UART reception is disabled.
nRF91M1 module reenables UART reception when the data has been moved to the data mode buffer.
If the data mode buffer fills, the data are transmitted to the LTE network.
Note
There is no unsolicited notification defined for this event. UART hardware flow control is responsible for imposing and revoking flow control.
Note
The whole buffer is sent in a single operation. When transmitting UDP packets, only one complete packet must reside in the data mode buffer at any time.
The data mode buffer size is 4096 bytes.
Data mode control #XDATACTRL
The #XDATACTRL command allows you to configure the time limit used to trigger data transmissions.
It can be applied only after entering data mode.
When the time limit is configured, small-size packets will be sent only after the timeout.
Set command
The set command allows you to configure the time limit for the data mode.
Syntax
AT#XDATACTRL=<time_limit>
The parameters and their defined values are the following:
- <time_limit>
Integer. The timeout value in milliseconds. The default value is the minimum required value, based on the configured UART baud rate.
This value must be long enough to allow for a DMA transmission of an UART receive (RX) buffer (532 bytes).
Read command
The read command allows you to check the current time limit configuration and the minimum value required, based on the configured UART baud rate.
Syntax
AT#XDATACTRL?
Response syntax
#XDATACTRL: <current_time_limit>,<minimal_time_limit>
Test command
The test command tests the existence of the command and provides information about the type of its subparameters.
Syntax
AT#XDATACTRL=?
Response syntax
#XDATACTRL=<time_limit>
Exit data mode notification #XDATAMODE
When the application receives the termination command +++ in data mode, it sends the #XDATAMODE unsolicited notification.
Unsolicited notification
#XDATAMODE: <status>
The parameters and their defined values are the following:
- <status>
0- Success.-1- Failure.
Example
AT#XSEND=0,2,0
OK
Test datamode
+++
#XDATAMODE: 0