AT COMMAND(转载)

news2024/9/23 23:24:33

AT(Attention)指令是由 Dennis Hayes 发明的,所以也称为 Hayes command set。AT 指令最初是用来指导 modem 工作的,后面随着技术的发展,低速 modem 已经退出了市场,但 AT 指令却不断发展,并且在今天 AT 指令依旧扮演这非常重要的角色。

虽然在 PC 端、手机上已经没有了 AT 的使用,但其却在嵌入式行业里各类联网模块中发挥着重要的作用,而且不仅仅只应用在蜂窝模块,还应用到了 WiFi、BLE 等模块中。

1. 相关标准

随着技术的发展,目前 AT 指令发展过程中形成两个重要标准:

  • V.250:该标准于 1995 年建立,1998 年重命名为 V.250
  • ETSI GSM 07.07(3GPP TS 27.007):用于控制 GSM modem 的 AT 指令集
    GSM 07.07 是基于 V.250 标准的。是目前最新的 AT 标准。

当下 AT 指令的应用

目前的 AT 指令着重应用在蜂窝模块、WiFi 模块、BLE 模块中,目的是为了简化嵌入式设备联网的复杂度。

AT 标准定义了 AT 命令的格式本身,比如命令以 AT 为前缀开头,以 或者 结尾,这被现有的 AT 模块所延用。

但是,由于每个厂家的模块不一样,实现的功能不一样,导致每个 AT 模块厂家有自己的一套私有的 AT 命令集,每一个 AT 模块厂家实现的 AT 指令集解析器也不一样(解析器实现的 AT 标准功能也参差不齐)。

2. AT 模块的应用框图

既然是指令集,那么必然会有指令集的解析处理,通常,我们把 AT 模块端的解析处理程序称为 AT Server,而将控制 AT 模块的处理器端的解析处理程序称为 AT Client。由 AT Client 发起命令请求,AT Server 回应处理结果。另外 AT Server 通过 URC(Unsolicited result code) 来主动给 AT Client 发送数据。

应用框图如下所示:

3. 一些约定

AT 命令的常用格式:

AT+CMD=<xxx>[,<xxx>,<xxx>]

AT 指令以 AT 开始,以 \r 或者 \r\n 结尾,参数之间使用 , 隔开,字符串参数使用双引号 "" 包裹,整形参数不适用双引号。

  • <CR>:回车符
  • <LF>:换行符
  • <xxx>
    尖括号中的名称 xxx 在 AT 里是一个语法元素,要求必须指定。尖括号本身不会出现在命令行里。
  • [xxx]
    中括号中的名称 xxx 在 AT 里是一个语法元素,表示可选择指定。中括号本身不出现在命令行里。

4. 四类 AT 命令

  • Test 命令:AT+<x>=?
    测试指令类似于命令行里的 help 指令,用于提供该命令的使用信息,以及命令参数的取值范围。
  • Read 命令:AT+<x>?
    用于查询该指令对应功能的当前值。
  • Set 命令:AT+<x>=<...>
    设置用户指定的参数到对应的功能里。
  • Execute 命令:AT+<x>
    执行相关操作。
  • \r\nOK\r\n
    如果 AT 指令被 AT Server 识别,并正确执行,则返回该结果。
    “ 标准中的 V1 模式下响应结果代码的方式。V0 模式下返回 0\r
  • \r\nERROR\r\n
    “ 标准中的 V1 模式下响应结果代码的方式。V0 模式下返回 4\r

5. 数据模式与指令模式

在收到 +++,并且接下来 1s 内未收到其他数据的话,将从数据模式切换到指令模式。

数据模式,可以透传数据,client 发什么,server 就原封不动发出去。指令模式时,AT Server 需要解析 AT 指令,并作出响应。

6. 乐鑫中数据透传发送与退出透传发送

  1. 模块透传发送数据
    首先设置数传模式为透传模式,指令 AT+CIPMODE=1。1:透传模式;0:普通模式。他们的主要区别是在透传模式可以在 AT+CIPSEND 指令后一直发送数据(直到退出透传发送),而普通模式下每次发送数据必须使用 AT+CIPSEND=x 来指定数据长度。
    AT+CIPMODE=1

    OK
    AT+CIPSEND

    OK

    >

    这个时候就可以发送数据直达模块了。
  2. 模块退出透传发送
    发送 +++ 后停顿 1 秒。使用串口工具一次性发送 +++ 而不是手动一个个发送,否则会导致误检测成数据。
    这是 AT 指令的一个标准约定。
    如果此时想切换成 普通数传模式,发送 AT+CIPMODE=0 指令。

7. 少有人关注的 AT 解析器

互联网上很多 xxx AT 指令使用教程,为何少有人关注 AT 解析器呢?

情况是这样的,绝大部分开发者是拿 AT 固件来开发产品的,只有很少一部分人是开发 AT 固件的。AT 固件通常是由芯片原厂、模组厂商来提供的,并且大多模组厂商也仅基于芯片原厂提供的 AT 解析器自定义 AT 指令。所以设计 AT 解析器的人就更少了,由于芯片原厂通常又不会提供 SDK 源码到互联网上,因此也基本上看不到 AT 解析器分析的文章。所以,互联网上关于 AT 的文章大都是某某模块都 AT 指令如何使用、怎么使用 MCU 控制 AT 指令模块。

总结:用 AT 固件都多,开发 AT 固件的少,设计 AT 解析器的人更少。

7.1 AT 指令共性的内容

  1. 遵循 AT 规范,AT 开头,CRLF 结尾(考虑到有些平台只用 LF 的情况,CRLF 结尾还需要容错);
  2. 有五类 AT 指令(TEST, GET, SET, EXEC),这里不带加号算作是 basic 指令;
  3. 字符串类型使用双引号("string")括起来;
  4. 整数类型不实使用双引号;
  5. 特殊字符需要转译;
  6. 等号后面必须有一个参数(当然你的解析器也可以容忍等号后面无参数,作为默认参数填充,这样的话跟执行命令又有什么不同呢);
  7. 支持省略参数。

以上这些都是需要基于 AT 解析器实现。

7.2 AT 指令差异的内容

  1. 参数数量不定
  2. 参数类型不定
  3. 是否有 省略参数
  4. 参数内容不同
  • 是否使用来非 ascii 文本
  • 是否使用来特殊符号
  • 各种可能性的 AT 指令格式错误(人为原因)
  • 是否有需要 转译 的字符,转译规则是怎么样的

由于这些都是跟用户输入紧密相关的,解析器事先并不知道,要想解析这些情况下的文本,我们需要先定好规则,告诉解析器支持什么、不支持什么、特殊特性如何支持等,然后用户按照既定的规则输入正确的指令,同时解析器也应该能检测到错误格式的指令并报告错误。

以上 4 条里,最麻烦的就是第四条——用户可能使用任何可打印文本,另外最复杂的还是处理 待转译的字符

7.3 转译字符语法

乐鑫给出里下面几个需要转译的字符:

  • 反斜杠本身 \,转译用法 \\
  • 逗号 ,,转译用法 \,
  • 双引号 ",转译用法 \"
  • \<any>,意思是使用 \ 后面的所有字符 <any> 替代这里的 \

用 AT+CWSAP=<ssid>,<pwd>,<channel>,<ecn> 指令举例,改指令用于启动一个 AP 热点,举例如下:

AT+CWJAP="ssid_\\\"\,\"\<any>\<\"\,\\\123中文>", "12345678",6,0

上面这条指令会启动一个 AP 热点,ssid 名称将是 ssid_\","<any><",\123中文>,密码是 12345678,信道是 6,加密方式是 open。有硬件条件的用户可以验证下。

7.4 指令和数据混合传输

除了对特殊格式的 AT 指令解析外,还有一个难点,就是使用 AT 串口进行数据传输(后面简称数传)。AT 指令模块串口的另外一端通常连接着一个 MCU,MCU 通过 AT 串口发送数据给 Wi-Fi 模块,Wi-Fi 模块再发送到网络上;Wi-Fi 模块收到数据后,也是通过 AT 串口发送数据到 MCU。通常,还不仅仅存在一路数据传输,还会有多路数据传输(比如两路 TCP),这个时候怎么管控他们使用 AT 串口呢,以及什么时候发送数据,又什么时候发送 AT 指令呢?

在 MCU 通过 AT 串口给 Wi-Fi 模块发送数据的时候,乐鑫有两种数传模式:normal 模式 和 passthrough 透传模式。透传模式只支持单个连接。

  • 在 normal 模式下,MCU 需要先告诉对端 Wi-Fi 模块我要发多少数据,然后再发送数据;
    在 normal 模式下 MCU 使用 AT+CIPSEND=<len> 指令,告诉 Wi-Fi 模块我要发 len 字节数据,请进入 数据传输模式,我这个指令后就发数据了。
  • 在 透传 模式下,每 20ms 或者每 2048 字节发送一次,哪个方式先到用哪个方式。
    在透传模式下 MCU 使用 AT+CIPSEND 执行指令,告诉 Wi-Fi 模块我要发数据了,请进入 数据透传模式,我这个指令后就发数据了。
    AT 标准规定从数据透传模式切换到 AT 指令模式需要单独发送一包 +++ 的数据,并在紧接着的 1s 内不发送任何内容,这样 AT 解析器就会从数据透传模式切换到 AT 指令模式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1285432.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

掌握Python异步IO利器:深入解读Asyncio

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 异步 IO 与 Asyncio 在 Python 中的应用 在当今互联网时代&#xff0c;处理大量并发请求或I/O密集型任务对于软件应用程序至关重要。Python的异步IO框架——Asyncio成为了处理此类问题的有力工具。本文将深入介…

吉客云与金蝶云星辰业财一体化数据集成

吉客云与金蝶云星辰业财一体化数据集成为例&#xff0c;探讨如何利用轻易云数据集成平台高效整合企业系统。金蝶云星辰在供应链和财务管理方面具有显著优势&#xff0c;而吉客云则专注于订单处理和发货。两者的协同运作&#xff0c;是企业数字化转型的典型案例。 二、集成总体蓝…

java:封装统一的响应体code、data、msg、paging

背景 我们在写接口的时候一般不会直接返回给前端数据&#xff0c;而是会有响应体&#xff0c;比如 code、data、msg&#xff0c;这样就有一个统一的结构方便前端处理&#xff0c;那么今天就来封装一个统一的响应体 封装基本响应体 1、在 config 包里新建 ApiResponse.java …

03、pytest初体验

官方实例 # content of test_sample.py def func(x):return x 1def test_ansewer():assert func(3) 5步骤解释 [100%]指的是所有测试用例的总体进度&#xff0c;完成后&#xff0c;pytest显示一个失败报告&#xff0c;因为func(3)没有返回5 注意&#xff1a;你可以使用ass…

smartkit巡检E9000设备

https://support.huawei.com/enterprise/zh/doc/EDOC1100325140/f6eeacd6 打开链接&#xff0c;里面的内容很详细。

2023年【道路运输企业主要负责人】最新解析及道路运输企业主要负责人模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 道路运输企业主要负责人最新解析是安全生产模拟考试一点通总题库中生成的一套道路运输企业主要负责人模拟考试&#xff0c;安全生产模拟考试一点通上道路运输企业主要负责人作业手机同步练习。2023年【道路运输企业主…

继上海车展后,英信翻译再进广州车展大显身手

第二十一届广州车展于2023年11月17日-26日在广州琶洲盛大举行 &#xff0c;历时十天的展会共吸引到场观众84.7万人次&#xff0c;举办了67场新闻发布会&#xff0c;近5000家海内外媒体机构的1.2万名媒体人员参与报道了展会盛况&#xff0c;再创历史新高。本届广州车展在国内外企…

学生信息管理系统

摘 要 学生成绩管理系统是典型的信息管理系统(MIS)&#xff0c;其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。经过分析&#xff0c;我们使用Microsoft公司的C语言开发工具&#xff0c;将与C语言技术与数据库SQL2008相结合进行设计。首先&#xff0c;…

C# WPF上位机开发(图形显示软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在实际应用中&#xff0c;有一种情况就是&#xff0c;我们需要经常对数据进行图形化显示&#xff0c;这样会比较直观一点。比如经济统计里面的同比…

java每日一记 —— BeanFactory 与 ApplicationContext 的区别

BeanFactory 与 ApplicationContext 1.容器与 bean1.BeanFactory 接口2.ApplicationContext 接口 2.测试几个小案例 此篇代码在jdk11上正常运行&#xff0c;springBoot版本为2.7.14 1.容器与 bean 1.BeanFactory 接口 1.先看下源码&#xff1a; 2.从源码中的接口中可以得出…

Netty01-NIO与BIO

NIO 什么是NIO Java NIO 全称 java non-blocking IO&#xff0c;是指JDK 1.4 及以上版本提供的新API&#xff08;New IO&#xff09;。从 JDK1.4 开始&#xff0c;Java 提供了一系列改进的输入/输出的新特性&#xff0c;为所有的原始类型&#xff08;boolean类型除外&#xf…

亲测体验Go语言PGO

本文是对官方 Profile-guided optimization in Go 1.21[1] 的学习与实践. 对于PGO的思路,之前就有过类似的想法,有些许差异. 但本质都是通过对以往运行情况的"学习",优化以后程序的运行(有点以史为鉴和鉴于往事,资于治道的感觉) 过程很简单: 收集程序运行过程中的数据…

zabbix的自动发现机制:

zabbix的自动发现机制: zabbix客户端主动的和服务端联系&#xff0c;将自己的地址和端口发送给服务端&#xff0c;实现自动添加监控主机 客户端是主动的一方 缺点&#xff1b;如果自定义网段中主机数量太多&#xff0c;等级耗时会很久&#xff0c;而且这个自动发现机制不是很…

银河麒麟服务器部署Prometheus+Grafana

#年薪百万# 一、环境准备 操作系统&#xff1a;Operating System: Kylin Linux Advanced Server V10 (Sword) (X86-64) prometheus&#xff1a;prometheus-2.48.0.linux-amd64 grafana&#xff1a;grafana-enterprise-10.2.2.linux-amd64 node_exporter&#xff1a;node_expor…

个体诊所电子处方系统哪个好用,推荐一款可以自由设置配方模板能够填写病历可以查询历史病历的门诊处方笺软件

一、前言 1、功能实用&#xff0c;操作简单&#xff0c;不会电脑也会操作&#xff0c;软件免安装&#xff0c;已内置数据库。 2、中医西医均可用此软件开电子处方&#xff0c;支持病历记录查询&#xff0c;药品进出库管理&#xff0c;支持配方模板一键导入电子处方。 二、电子…

Anaconda创建虚拟环境以及Pycharm和Jupyter如何切换虚拟环境

文章目录 Anaconda创建管理虚拟环境0. 进入到终端1. 创建新环境2. 切换环境3. 删除环境4. 查询当前已有的环境 Pycharm切换虚拟环境0. 更换解析器1. 添加虚拟环境&#xff08;之前默认的是base环境&#xff09;2. 验证切换虚拟环境 Jupyter Notebook 切换虚拟环境1. 安装ipyker…

FPGA串口接收解帧、并逐帧发送有效数据——1

FPGA串口接收解帧、并逐帧发送有效数据 工程实现的功能&#xff1a;FPGA串口接收到串口调试助手发来的数据&#xff0c;将其数据解帧。判断到正确的帧头和帧尾之后&#xff0c;将有效数据存入rx_data中&#xff1b;另一方面发送端将有效数据逐帧发送出去。 参考&#xff1a;正…

嵌入式门槛高吗?

今日话题&#xff0c;嵌入式门槛高吗&#xff1f;在嵌入式领域&#xff0c;门槛因公司和职位的不同而异。普通的嵌入式岗位门槛相对较低&#xff0c;通常要求掌握一些C语言编程和单片机相关知识&#xff0c;可以制作简单的电子产品&#xff0c;但相应的工资较低。然而&#xff…

HNU-电路与电子学-未知年份(不含解析)

【写在前面】 电路与电子学好像是从2020级开设的课程&#xff0c;故实际上目前只有2020与2021两个年级考过期末考试。 这门课程主要由所谓的“数电”与“模电”组成。而且先学的“模电”后学的“”数电&#xff0c;故期中考试主要以“模电”为主&#xff0c;期末考试主要以“…

编译WSL内核,用于操作usb读卡器

wsl2默认不能操作usb读卡器&#xff0c;但是对于嵌入式linux开发来说&#xff0c;需要经常对tf卡进行操作&#xff0c;随时都会使用到usb读卡器的访问。下面讲述如何开启wsl2的usb读卡器的访问&#xff0c;主要涉及到以下2个步骤&#xff1a; wsl2本质是一个虚拟机&#xff0c…