串口协议分类
串口作为物理层/传输层的设计中,存在大量的协议,包括:
- STX/ETX,以STX/ETX为首尾隔断符,实现类似HDLC/TLV的消息报文结构,面向字节;
- SLIP,基于拨号上网的协议;
- AT Modem,以贺氏Hayes MODEM为标杆,成为M2M的参考基准,字符型/二进制协议,并支持透传;
- Firmata,MIDI行业用的字符型/二进制协议,7bit传输;
- mbed RPC,HTTP REST风格的字符型协议;
前两种都是二进制协议,后几种是字符型即混合型协议。
以IoT和M2M行业的渊源,理应继承AT Modem的协议。LoRa以长距离为卖点,所以波特率都不高,传输的二进制数据可以转换成Hexdecimal字符传输。
LoRaHAM AT指令
以STM提供的AT_SLAVE工程作为蓝本,适当添加ALOHA HAM电台所需指令。AT基本格式是:
- 无参数:ATZ\r\n
- 有参数:AT+MDM=1\r\n,参数以逗号隔断,必要时添加双引号;
- 查询:ATZ?
- 查询参数:ATZ=?
除单独约定外,其他格式均不支持。
命令 | 解释 | 备注 |
---|---|---|
AT\r\n | Attention | |
AT+DEUI | get Device IEEE-EUI | |
AT+DADDR | set/get Device Addr | |
AT+APPKEY | set/get App Key | N/A |
AT+NWKSKEY | set/get NWK Session Key | N/A |
AT+APPSKEY | set/get App Session Key | N/A |
AT+APPEUI | set/get App EUI | N/A |
AT+ADR | set/get ADR mode | N/A |
AT+TXP | set/get TX Power | |
AT+DR | set/get Data Rate | |
AT+DCS | set/get Duty Cycle | N/A |
AT+PNM | set/get Public Network | N/A |
AT+RX2FQ | set/get RX2 Win-Freq | N/A |
AT+RX2DR | set/get RX2 Data Rate | N/A |
AT+RX1DL | set/get RX1 delay | N/A |
AT+RX2DL | set/get RX2 delay | N/A |
AT+JN1DL | set/get JOIN Win1 delay | N/A |
AT+JN2DL | set/get JOIN Win2 delay | N/A |
AT+NJM | set/get NWK JOIN mode | N/A |
AT+NWKID | set/get NWW ID | N/A |
AT+FCU | set/get UPLINK Counter | N/A |
AT+FCD | set/get DOWNLINK Cnt | N/A |
AT+CLASS | set/get Device Class | N/A |
AT+JOIN | JOIN Network | N/A |
AT+NJS | get Network JOIN status | N/A |
AT+SENDB | Send Binary | |
AT+SEND | Send ASCII | |
AT+RECVB | get Received in Binary | |
AT+RECV | get Received in ASCII | |
AT+VER | get Version of Firmware | |
AT+CFM | set/get Confirm/ACK msg | |
AT+CFS | get isACK of last msg | |
AT+SNR | get SNR of MCU/Dev | |
AT+RSSI | get RSSI | |
AT+BAT | get Battery level | |
AT+MDM=<n> | n=[0,1], 0:LoRa, 1:FSK | 暂不支持FSK |
AT+FREQ=<n> | n=freq | N/A |
大部分N/A的指令针对LoRaWAN/LoRaMAC有效,而LoRaHAM(即采用ALOHA协议的adhoc网络节点)设备暂时不需要这些指令。
表中所列指令都是从主机端发给MODEM的。许多数据是MODEM异步发送给主机的,这在蜂窝数据行业中被称为URC(Unsolicited Result Code)。URC需要额外定义,主要有远端发送给本地设备的业务消息,以及本地网络事件,或硬件事件等。理论上说,大多数接收指令都可以有URC代码,如电压报警、来电呼叫、消息到达、网络配置更新等。对于LoRa来说,来电呼叫(+RING)是不存在的,其他都有。
有了这些指令,软件和固件可以分头开发了。主机软件可以使用Python来仿真设备。