36 releases (19 breaking)
|0.20.0||Oct 17, 2023|
|0.19.1||Jul 23, 2023|
|0.18.0||Sep 30, 2022|
|0.16.1||Apr 12, 2022|
|0.3.0||Mar 13, 2020|
#142 in Encoding
812 downloads per month
Used in 3 crates (2 directly)
#![no_std] crate for parsing AT commands (Hayes command set)
A driver support crate for AT-command based serial modules.
AT Best practices
This crate attempts to work from these AT best practices:
- The DTE shall flush the AT channel (i.e. check if there are data waiting to be read) before sending a new AT command
- The DTE shall detect/process complete lines (see the S3, S4 and V0/V1 settings), so they can be processed with a function that handles responses
- The DTE shall handle the case of unexpected spaces or line endings
- The DTE shall handle all the URCs: it can simply ignore them (not suggested) or, better, take a proper action
- The DTE shall know what answer is expected and shall wait until it is received (i.e. final result code only or informationtext response + final result code)
- The final result code marks the end of an AT command and can be OK, ERROR or ABORTED: when the final result is an error, be sure to handle it before continuing with the next AT command
- The information text response format is command specific. The DTE will need explicit handling for each one. It is suggested to consult the u-blox AT Commands Manual 
- It is suggested not to strictly parse information text responses but to checkif they contain interesting keywords and/or parameters
- The DTE shall know if the issued AT command can be aborted or not
- Some AT commands could output the final result code after some seconds, in this case check on AT manual for the suggested estimated response time. If the timeout expires then a decision should be taken accordingly: e.g. if the command can be aborted then try to abort it, etc ...
- It is very useful, for debugging an application, to log all the command lines sent to the DCE and what is received from it
- Create a state machine for the AT parser (i.e. idle, waiting_response, data_mode)
- The DTE shall wait some time (the recommended value is at least 20 ms) after the reception of an AT command final response or URC before issuing a new AT commandto give the module the opportunity to transmit the buffered URCs. Otherwise the collision of the URCs with the subsequent AT command is still possible
- The DTE shall be aware that, when using a serial port without HW flow control, the first character is used to wake up the module from power saving
The crate is covered by tests. These tests can be run by
cargo test --tests, and are run by the CI on every push.
The samples can be built using
cargo +nightly run --bin embassy --features embedded --target thumbv6m-none-eabi and
cargo +nightly run --example std-tokio --features std.
Releasing to crates.io
This workspace uses
cargo-release to do workspace releases to crates.io. It can be installed through cargo with
cargo install cargo-release. The steps involved in a new release are:
cargo release --dry-run -- major|minor|patch, and verify the output
cargo release -- major|minor|patch, to release
- Minimum rustc version 1.52
- Tested and built using stable toolchain
The following dependent crates provide platform-agnostic device drivers built on
embedded-hal which also implement this crate's traits:
|Device Name||Description||Crate + Docs|
|ublox-short-range-rs||Driver crate for U-Blox host-based short range devices (wifi and BT) with AT-command interface|
|ublox-cellular-rs||Driver crate for U-Blox host-based cellular devices with AT-command interface|
|esp-at-nal||ESP-AT network layer driver for no_std|
|moko-mkl62ba||Driver crate for the Moko MKL62BA LoRaWAN module|
|seeed-lora-e5||Driver crate for the Seeed Lora-E5 LoRaWAN module|
derive: Enabled by default. Re-exports
atat_deriveto allow deriving
bytes: Enabled by default. Re-exports
heapless-bytesto allow serializing & deserializing non-quoted byte slices correctly.
log: Disabled by default. Enable log statements on various log levels to aid debugging. Powered by
defmt: Disabled by default. Enable defmt log statements on various log levels to aid debugging. Powered by
custom-error-messages: Disabled by default. Allows errors to contain custom error messages up to 64 characters, parsed by
async: Enable the async interfaces on both
hex_str_arrays: Disabled by default. Needs
#![feature(generic_const_exprs)]Nightly feature. This allows for hex strings to be serialized to a fix-width byte array.
Chat / Getting Help
If you have questions on the development of ATAT or want to write a driver
based on it, feel free to join our matrix room at
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.