USB dongle协议

USB dongle与PC 程序之间的通信例子说明 简介USB dongle和PC 之间使用USB 相连,并在PC 上虚拟成一个串口。PC 程序通过使用相应的协议读写该串口,从而操作USB dongl

USB dongle与PC 程序之间的通信例子说明 简介

USB dongle和PC 之间使用USB 相连,并在PC 上虚拟成一个串口。PC 程序通过使用相应的协议读写该串口,从而操作USB dongle。

USB dongle在PC 之间起到收发数据的功能:

USB dongle接收来自PC 的数据发送命令,从中解析出目的地址和数据内容后,将数据发送到该地址的USB dongle;

USB dongle在接受来自其他USB dongle的数据包后,从中解析出目的地址、源地址、数据内容等信息,并将这些信息发送到PC

串口通信协议

通信模式

USB dongle和PC 之间以包的形式进行通信。这是通过在原始的基于字节流读取和写入的串口的基础上,使用特定的组包结构,对串口中所传输的数据进行封包,使用包的方式进行串口两端设备之间的数据传输。

这种基于串口包的数据传输方式将串口两端的设备(此处分别为PC 程序和USB dongle)看做一个拥有唯一地址标识(PAN 和短地址)的通信设备,并在串口包中携带该串口包所对应的目标地址和源地址。

使用串口包的通用格式,PC 程序和USB dongle之间可以进行各种数据的交互(数据被存放在有效载荷中),从而实现相应的功能:

通信协议 串口包格式

各个字段的说明如下:

前导字符:用于标识一个包的开始,内容为0xF0F0

,

包长度:包括从“序号”到“有效载荷”的长度 序号:取值0到255,总是递增(255 0除外) 目标PAN/目标短地址:串口包的目的地址 固定为0xFFFF / 0xFFFF 源PAN/源地址:串口包的源地址 PC 发包到USB dongle时,总是填写 0 / 0 USB dongle到PC 的串口包中,该两字段为USB dongle的地址 包类型:固定填写0x11(不会收到包类型不是0x11的串口包) 端口: 发送串口包到USB dongle时固定填写8080(10进制) 接受串口包时,过滤(忽略)端口不是8080的串口包 CRC 校验:从“序号”到“有效载荷”的CRC16校验。该CRC 校验代码可在Demo 程序中找到。

节点功能

USB dongle和PC 之间的通信协议主要包括如下三个功能:

● 获取USB dongle的节点地址

● 使用USB dongle发送数据

● USB dongle将接收到的其他节点的数据发送到PC

下面所述的USB dongle和PC 程序所发送的各种信息,都是指在串口包中的有效载荷中的内容,而串口包本身的结构式固定的。必须先将命令和串口包的包头等额外内容一起打包成串口包,并通过串口发送。

获取USB dongle的节点地址

通信过程:

● PC 端发送:’ga’(2个字节)

● USB dongle回复:’100 <短地址>’

注意事项:

● PC 程序应该在启动后就获取节点的PANID 和短地址,从而获知自己的地址,并且

相互之间进行通信

● 命令和回复都是以字符串的形式发送和返回,其中PanId 和短地址以16进制表示 ● USB dongle的回复分为以空格分隔的3个部分,其中:

⏹ 第一个值为错误码,’100’代表命令执行正确(参见PPT 末尾的错误码列表) ⏹ PanId 为USB dongle的PanId

⏹ 短地址为USB dongle的短地址

使用USB dongle发送数据

通信过程:

,

● PC 端发送:发送命令包

● USB dongle解析并进行发送

● USB dongle将发送结果返回到PC

发送命令包结构:

发送结果返回:‘100’

注意事项:

● 无法确定对方是否成功接收

使用USB dongle接收数据

USB dongle在接收到数据时,就将所收包的信息发送到PC 。 USB dongle发送到PC 的数据回显包结构:

注意事项:

● 数据回显中没有源PAN 的字段,无法得到发送者的PANID 串口编程

需要使用串口库进行串口的读写。Demo 程序中有现成的一个串口库。 如何连接串口

∙ 首先需要安装USB dongle的驱动

∙ 按照如下配置打开串口

• 串口号:查看设备管理器获得

• 波特率:230400

• 数据位:8

• 校验位:无

• 停止位:1

如何发送串口包

∙ 将发送命令、获取地址命令等有效载荷封装在串口包中,然后通过串口操作函数发

,

送到串口

∙ 必须保证串口包中字段的正确性

• 参考前面的“通信协议-串口包格式”

如何接受串口包

∙ 程序必须解析来自串口的字符流,从而读取串口包

∙ 注意事项

• 不能保证一个串口包的数据在一次串口消息(串口读取)中全部获得

• 程序必须过滤端口不是8080的串口包,因为USB dongle会向串口打印某些

额外的信息

举例说明

节点地址获取

获取USB dongle地址是通过发送”gt ”命令实现的,一个典型的通信过程如下:

PC 端程序向串口发送(使用‘|’分隔各个字段):

| F0 F0 | 0E | 00 | FF FF | FF FF | 00 00 | 00 00 | 11 | 90 1F | 67 61 | FF 15 |

参考“通信协议-串口包格式”可以得知如下的信息:

● 包长度为0xE

● 包序列号为0

● 目标PAN 和目标短地址都是0xFFFF

● 源PAN 和源短地址都是0

● 包类型为0x11

● 端口为0x1F90,既十进制的8080

● 有效载荷为0x67,0x61,既”gt ”

● CRC16校验为 0x15FF

USB dongle向串口发送:

| F0 F0 | 14 | B3 | FF FF | FF FF | 01 00 | 10 00 | 11 | 90 1F | 31 30 30 20 31 20 31 30 | B4 D0 | 参考串口包格式,可以得知如下的信息:

● 包长度为0x14

● 序列号为0x83

● 目标pan 和目标短地址为0xFFFF:0xFFFF

● 源PAN 和源短地址为USB dongle 的PAN 和短地址,分别为0x0001和0x0010,这

是为每个USB dongle唯一分配的。

● 端口号为0x1F90,既8080

● 有效载荷为字符串:”100 1 10”

● CRC16校验为0xD0B4

因此,PC 程序在读取整个串口包后,可以解析出其中的有效载荷“100 1 10”,既错误码:100,PAN :1,短地址:10。

,

发送数据到其他节点

PC 程序发送携带数据发送命令的串口包:

F0 F0 17 1F FF FF FF FF 00 00 00 00 11 90 1F 53 01 00 11 00 05 01 02 03 04 05 59 ED 根据串口包协议,可以获知:

有效载荷中的数据发送命令为:53 | 01 00 | 11 00 | 05 | 01 02 03 04 05

根据发送命令包:

● 命令字符为’S ’

● 目标PAN 为0x0001

● 目标短地址为:0x0011

● 数据长度为:0x05

● 数据内容为:0x01 0x02 0x03 0x04 0x05

USB dongle 在收到该发送命令包后,从中解析出目标地址为:0x0001:0x0011,和待发送的数据。USB dongle 将数据通过无线通信模块向目的节点:0x0001,0x0011发送(所发送包的结构参考P36. CC2420.pdf)。

相应的,接收数据的USB dongle 在无线通信模块接收到包后,通过串口发送如下的数据回显包:

F0 F0 1D 7B FF FF FF FF 01 00 11 00 11 90 1F 52 18 01 00 11 00 10 00 FF 9D 6C 05 01 02 03 04 05 02 BB

从中我们可以看出该串口包的有效载荷为:| 52 | 18 | 01 00 | 11 00 | 10 00 | FF | 9D 6C | 05 | 01 02 03 04 05

根据USB dongle的数据回显包的格式,可以解析如下:

● 首字符为’R ’

● 递增序号为1

● 目标PAN 为0x0001

● 目标短地址为0x0011

● 源(发送者)短地址为0x0010

● LQI 为0xFF

● CRC 校验(802.15.4包的CRC 校验)为0x9C9D

● 数据长度为5

● 数据内容为0x01 0x02 0x03 0x04 0x05

标签: