串口 ==== 概述 ---- Air720UH/Air720UG模块提供了五个通用异步收发器:主串口UART1、下载和校准串口UART2、通用串口UART3、调试串口HOST UART和ZSP UART。 UART1 ----- UART1管脚定义 ========= ==== == ======================== 名称 管脚 IO 作用 ========= ==== == ======================== UART1_TXD 67 O 发送数据到DTE设备的RXD端 UART1_RXD 68 I 从DTE设备TXD端接收数据 UART1_RTS 65 O DTE请求发送数据给DCE UART1_CTS 64 I 清除发送 ========= ==== == ======================== UART1通常用来和模块进行AT指令通讯。UART1支持固定波特率和自适应波特率。自适应波特率支持范围9600bps到115200bps。 在默认情况下,模块的硬件流控是关闭的。当客户需要硬件流控时,管脚RTS,CTS必须连接到客户端,AT命令“AT+IFC=2,2”可以用来打开硬件流控。AT命令“AT+IFC=0,0”可以用来关闭流控。具体请参考《AirM2M无线模块AT命令手册》。 UART1的特点如下: • 包括数据线TXD和RXD,硬件流控控制线RTS和CTS。 • 8个数据位,无奇偶校验,一个停止位。 • 硬件流控默认关闭。 • 用以AT命令传送,数传等。 • 支持波特率如下:1200,2400,4800,9600,14400,19200,28800,38400,57600,115200,230400,460800,921600bps • AT指令版本默认情况下模块是自适应波特率(AT+IPR=0),在自适应波特率模式下,开机后初始化信息(开头是“RDY”)不会回发给主控机。在模块开机2-3秒后,可以给模块发送AT命令。主控机需首先发送“AT”字符给模块来训练主控机的波特率,此时模块会上报初始化信息,表明训练成功。用户可以发送一个“AT+IPR=x :&W”命令给模块(x是波特率,比如9600),此命令的作用是设置一个固定的波特率并保存,在完成这些配置之后,每次模块开机以后,会自动串口返回URC初始化信息(开头是“RDY”)。 为了更好的使用自适应波特率功能,以下的使用条件需要注意: 模块和上位机之间同步: 自适应波特率功能开启情况下,当模块上电,在发送“AT”字符前最好等待 2~3秒钟。当模块上报开机初始化信息,表明波特率训练成功,和上位机完成了同步。 在自适应波特率模式下,主控器如果需要开机信息,必须首先进行同步。否则开机初始化信息将不会上报。 自适应波特率操作配置: • 串口配置为8位数据位,无奇偶校验位,1位停止位(出厂配置) • 模块开机时只有字符串“AT”可以训练波特率。(“at”、“At”或者“aT”无法被识别) • 波特率训练成功后,可以识别大写、小写或大小写组合的AT命令。 • 自适应波特率模式下,如果模块开机没有先同步,如“RDY”,“+CFUN: 1”和“+CPIN: READY”这样的URC信息将不会上报。 • 不推荐在固定波特率模式时切换到自适应波特率模式。 • 在自适应波特率模式下,不推荐切换到软件多路复用模式。 UART2 ----- UART2管脚定义 ========= ==== == ======================== 名称 管脚 IO 作用 ========= ==== == ======================== UART2_TXD 23 O 发送数据到DTE设备的RXD端 UART2_RXD 116 I 从DTE设备TXD端接收数据 ========= ==== == ======================== UART2 可以用来下载软件和射频校准,同时UART2 还用来和内部的蓝牙进行通讯,如果用到了蓝牙功能,则UART2 不可用作其他用途。 **注意:UART2 在开机后会自动打印一段LOG,波特率921600,这段LOG不能通过修改软件来关闭,推荐优先使用UART3** UART2开机自动打印的Log如下: > RDA8910m Boot_ROM V1.0-17b887ec HW_CFG: 36 SW_CFG: 0 SE_CFG: 0 check flash img load complete! checking…… Security Disabled Check uImage Done Run … UART3 ----- ========= ==== == ======================== 名称 管脚 IO 作用 ========= ==== == ======================== UART3_TXD 143 O 发送数据到DTE设备的RXD端 UART3_RXD 144 I 从DTE设备TXD端接收数据 ========= ==== == ======================== UART3 是一个通用串口,可以用作外接GPS等外设。 HOST UART --------- ======== ==== == ======================== 名称 管脚 IO 作用 ======== ==== == ======================== HOST_TXD 12 O 发送数据到DTE设备的RXD端 HOST_RXD 11 I 从DTE设备TXD端接收数据 ======== ==== == ======================== HOST UART 用来软件调试时输出AP trace ZSP UART -------- ============ ==== == ======================== 名称 管脚 IO 作用 ============ ==== == ======================== ZSP_UART_RXD 66 O 发送数据到DTE设备的RXD端 ============ ==== == ======================== ZSP UART 用来软件调试时输出CP trace 串口连接方式 ------------ 串口的连接方式较为灵活,如下是常用的连接方式。 1. 三线制的串口请参考如下的连接方式: |image1| 2. 带流控的串口连接请参考如下电路连接,此连接方式可提高大数据量传输的可靠性,防止数据丢失。 |image2| 串口电压转换 ------------ Air720UH/Air720UG模块的串口电平都是1.8V的,如果要和3.3V/5V 的MCU通信,必须要加电平转换电路: 电平转换电路如下: |image3| V_GLOBAL_1V8是模块输出的I/O电平电压。VDD_MCU是客户端的I/O电平电压。D2 选低导通压降的肖特基二极管。 也可以通过外加电平转换芯片来实现电压转换。 AT版本相关控制指令 ------------------ 设置流控AT+IFC -------------- **流控简介** >对 模块与 DTE 之间可靠的通信而言, 流控是很重要的。 假使一次数据或传真呼叫中, 发送端的发送速度大于接收端的接收速度, 当接收缓存接近满的时候, 接收端应该有方法让发送端暂停发送, 直到它重新赶上。 这就是流控。 **语法规则:** +----------+--------------------------------------------+------------+ | 命令类型 | 语法 | 返回 | +==========+============================================+============+ | 设置指令 | AT+IFC=,[< dte_by_dce>] | OK | +----------+--------------------------------------------+------------+ | 查询指令 | AT+IFC? | +IFC: , OK | +----------+--------------------------------------------+------------+ | 测试指令 | AT+IFC=? | +IFC: , OK | +----------+--------------------------------------------+------------+ | 注意事项 | 模块缺省无流控。 如果需要硬件流量控制, | | | | 请输入”AT+IFC=2,2;&W”, | | | | 重启模块就一直生效了 | | +----------+--------------------------------------------+------------+ **参数定义:** ==== ==================================== ==== ============ 参数 定义 取值 对取值的定义 ==== ==================================== ==== ============ \ TE 接收来自 TA 数据 时采用的流控方法 0 无流控 \ 1 软件流控 \ 2 硬件流控 \ TA 接收来自 TE 数据时采用的流控方法 0 无流控 \ 1 软件流控 \ 2 硬件流控 ==== ==================================== ==== ============ **举例:** +--------------------+--------------------+--------------------+---+ | 命 令 (→ | 实例 | 解释和说明 | | | )/返回(←) | | | | +====================+====================+====================+===+ | → | AT+IFC=? | 查询< | | | | | dce_by_dte>和< | | | | | d | | | | | te_by_dce>取值范围 | | +--------------------+--------------------+--------------------+---+ | ← | +IFC: (0-2),(0-2) | 查询结果 | | | | OK | | | +--------------------+--------------------+--------------------+---+ | → | AT+IFC? | 查询 | | | | | 当前的流量控制方式 | | +--------------------+--------------------+--------------------+---+ | ← | +IFC: 2,2 OK | 硬件流控 | | +--------------------+--------------------+--------------------+---+ LUAT开发相关接口 ---------------- 相关的UART控制接口可以参考LUAT_API UART章节 相关示例,请参考:raw-latex:`\script`\_LuaTask_VX.X.X:raw-latex:`\demo`:raw-latex:`\uart` **uart 与虚拟 AT 交互接口** ###uart.setup() uart通讯 - 语法 ``baud = uart.setup( id, baud, databits, parity, stopbits,[msgmode,txDoneReport] )`` - 参数 +-----------------------------------+-----------------------------------+ | 参数 | 释义 | +===================================+===================================+ | id | 串口号,可选0,1,2 | +-----------------------------------+-----------------------------------+ | baud | 波特率,可 | | | 选1200,2400,4800,9600,10400, | | | 14400,19200,28800,38400,5760 | | | 0,115200,230400,460800,921600 | +-----------------------------------+-----------------------------------+ | databits | 数据位,7或8 | +-----------------------------------+-----------------------------------+ | parity | 校验位,可选uart.PAR_EVEN, | | | uart.PAR_ODD或uart.PAR_NONE | +-----------------------------------+-----------------------------------+ | stopbits | 停止 | | | 位,可选uart.STOP_1,uart.STOP_2 | +-----------------------------------+-----------------------------------+ | msgmode | 0 或者默认 - 消息通知,1 - | | | 无消息上报需要用户主动轮询 | +-----------------------------------+-----------------------------------+ | txDoneReport | txd | | | one消息上报开关。0:关闭,1:打开 | +-----------------------------------+-----------------------------------+ - 返回值 串口的真实波特率 ###uart.write() 向串口写字符串或者整型数据 - 语法 ``uart.write( id, data1, [data2], ..., [datan] )`` - 参数 =========== ========================= 参数 释义 =========== ========================= id 串口号,可选0,1,2 data1 第一个字符串或8位整型数据 data2 第二个字符串或8位整型数据 datan(可选) 第n个字符串或8位整型数据 =========== ========================= - 返回值 无 ###uart.getchar() 从串口读取单字符 - 语法 ``str = uart.getchar( id )`` - 参数 ==== ================= 参数 释义 ==== ================= id 串口号,可选0,1,2 ==== ================= -返回值 串口读出来的字符 ###uart.read() 从串口读取字符串 - 语法 ``str = uart.read( id, format)`` - 参数 +--------+------------------------------------------------------------+ | 参数 | 释义 | +========+============================================================+ | id | 串口号 | +--------+------------------------------------------------------------+ | 格式化 | \*l:读取 | | | 到结束字符:raw-latex:`\n或者阻塞发送 `\*n:读取整型数据 | | | \ | | | *s:读取到空格字符数字,number类型:只读取number长度的数据 | +--------+------------------------------------------------------------+ - 返回值 串口读出到的数据 ###uart.set_rs485_oe() - 语法 ``uart.set_rs485_oe(id, io[, level])`` - 参数 +-------+-------------------------------------------------------------+ | 参数 | 释义 | +=======+=============================================================+ | id | 串口id | +-------+-------------------------------------------------------------+ | io | GPIO值 pio.Pxx | +-------+-------------------------------------------------------------+ | level | 输出使能电平有效 | | | 值,默认1,配置为1时表示高电平发送,配置为0时表示低电平发送 | +-------+-------------------------------------------------------------+ - 返回值 无 - 例子 :: uart.setup(UART_ID,115200,8,uart.PAR_NONE,uart.STOP_1,nil,1) --必须先使用setup,并且最后一个参数是1(打开发送完成后的通知功能) uart.set_rs485_oe(UART_ID, pio.P2_0) --仅4G 0013版本之后支持 uart.close() ~~~~~~~~~~~~ 关闭 uart 接口 - 语法 ``uart.close(id)`` - 参数 ==== ================= 参数 释义 ==== ================= id 串口号,可选0,1,2 ==== ================= - 返回值 无 CSDK开发相关接口 ---------------- 相关的UART控制接口可以参考CSDK的iot_uart.c文件 iot_uart_open ~~~~~~~~~~~~~ 打开uart - 语法 :: BOOL iot_uart_open( E_AMOPENAT_UART_PORT port, T_AMOPENAT_UART_PARAM *cfg ); - 参数 ==== ========= 参数 释义 ==== ========= port UART 编号 cfg 配置信息 ==== ========= - 返回值 TRUE: 成功 FALSE: 失败 iot_uart_close ~~~~~~~~~~~~~~ 关闭uart - 语法 :: BOOL iot_uart_close( E_AMOPENAT_UART_PORT port ); - 参数 ==== ========= 参数 释义 ==== ========= port UART 编号 ==== ========= - 返回值 TRUE: 成功 FALSE: 失败 iot_uart_read ~~~~~~~~~~~~~ uart读取数据 - 语法 :: UINT32 iot_uart_read( E_AMOPENAT_UART_PORT port, UINT8* buf, UINT32 bufLen, UINT32 timeoutMs ); - 参数 ========= ============ 参数 释义 ========= ============ port UART 编号 buf 写入数据地址 bufLen 写入数据长度 timeoutMs 读取超时 ms ========= ============ - 返回值 实际读取长度 iot_uart_write ~~~~~~~~~~~~~~ uart发送数据 - 语法 :: UINT32 iot_uart_write( E_AMOPENAT_UART_PORT port, UINT8* buf, UINT32 bufLen ); - 参数 ====== ============ 参数 释义 ====== ============ port UART 编号 buf 写入数据地址 bufLen 写入数据长度 ====== ============ - 返回值 实际写入长度 -------------- .. |image1| image:: http://openluat-luatcommunity.oss-cn-hangzhou.aliyuncs.com/images/20200806225845383_UART1.png .. |image2| image:: http://openluat-luatcommunity.oss-cn-hangzhou.aliyuncs.com/images/20200806230222657_流控.png .. |image3| image:: http://openluat-luatcommunity.oss-cn-hangzhou.aliyuncs.com/images/20200806230416831_电平转换.png