本文共 2117 字,大约阅读时间需要 7 分钟。
AT指令和AT组件是嵌入式开发中非常重要的技术工具,尤其在串口通信和设备控制方面具有广泛应用。本文将从AT指令的历史、应用、AT组件的功能以及服务器和客户端的实现细节等方面进行详细介绍。
AT指令最初是由 Hayes 公司发明的,用来控制拨号调制解调器(MODEM)。随着网络带宽的提升,MODEM逐渐退出了主流市场,但AT指令却得到了进一步的发展和标准化。特别是在GSM网络中,AT指令被整合到GSM 07.05和GSM 07.07标准中,并扩展到GPRS控制和3G模块等领域。如今,AT指令已成为嵌入式开发中不可或缺的协议接口工具。
AT指令的核心优势在于其作为一种标准化的协议接口,能够通过简单的命令和硬件设计实现多种操作。它广泛应用于串口通信中,通过UART等接口实现设备间的数据传输和控制。AT指令的命令结构分为前缀、主体和结束符三部分,前缀为“AT”,主体包含命令、参数和可能的数据,结束符通常为\r\n。
AT组件基于RT-Thread系统,提供了AT服务器和AT客户端两种功能模式。AT服务器负责接收来自AT客户端的命令并返回响应数据,而AT客户端则负责发送命令并处理服务器的响应。
在使用AT服务器之前,需要在配置文件rtconfig.h中定义以下宏定义:
RT_USING_AT:开启AT组件功能。AT_USING_SERVER:开启AT服务器功能。AT_SERVER_DEVICE:定义使用的串口设备名称,例如uart3。AT_SERVER_RECV_BUFF_LEN:设置接收数据的最大长度。AT_CMD_END_MARK_CRLF、AT_CMD_END_MARK_CR和AT_CMD_END_MARK_LF:根据不同设备的结束符选择对应的宏定义。AT服务器初始化时,需要调用at_server_init()函数。该函数会创建一个用于接收和解析数据的线程。此外,AT服务器支持自定义命令添加,用户可以通过提供的API定义新的AT命令及其对应的功能实现。
AT客户端的配置同样需要在rtconfig.h中定义相关宏定义:
RT_USING_AT:开启AT组件功能。AT_USING_CLIENT:开启AT客户端功能。AT_CLIENT_NUM_MAX:设置最大同时支持的客户端数量。AT_USING_SOCKET:开启标准BSD socket API支持。AT_USING_CLI:开启命令行交互模式。AT客户端初始化时,需要调用at_client_init()函数,完成设备初始化和线程调配。AT客户端支持多种数据传输方式,目前最常用的是UART串口通讯。通过AT指令,客户端可以实现设备控制、数据收发以及网络通信。
AT服务器负责接收并解析AT客户端发送的命令,返回相应的响应数据。AT客户端则负责发送命令并处理服务器返回的响应数据。两者之间通过串口通讯实现数据传输,支持多种数据格式和通信方式。
AT客户端在发送命令后,通过响应结构体接收服务器返回的数据。响应结构体包含数据缓冲区、最大接收长度、需要接收的数据行数以及响应超时设置。AT客户端支持自定义响应数据的解析,能够根据需求处理不同类型的响应数据。
URC数据是AT服务器主动发送给AT客户端的数据,通常用于通知设备某些重要事件,如WiFi断开、TCP接收数据等。AT客户端需要自定义URC数据的处理方式,包括匹配数据的前缀和后缀,并定义相应的执行函数。
AT组件设计非常高效,资源占用极小。无论是AT服务器还是AT客户端,其所占用的ROM和RAM资源都非常有限:
AT、ATZ、AT+RST、ATE等。AT组件的源码中提供了移植接口,用户可以根据需求自定义实现。例如,设备重启函数at_port_reset()用于实现AT+RST命令,设备恢复出厂设置函数at_port_factory_reset()用于实现ATZ指令。这些接口可以通过gcc工具链或Keil、IAR等开发工具链进行移植和集成。
AT指令和AT组件是嵌入式开发中不可或缺的工具,尤其在串口通信和设备控制方面具有重要作用。AT组件通过AT服务器和AT客户端提供了灵活的命令控制和数据处理能力,极大地简化了设备间的通信和控制流程。通过合理配置和开发,AT组件能够在多种嵌入式系统中实现高效、可靠的功能。
转载地址:http://fbgxz.baihongyu.com/