USB dongle協(xié)議
USB dongle與PC 程序之間的通信例子說明 簡(jiǎn)介USB dongle和PC 之間使用USB 相連,并在PC 上虛擬成一個(gè)串口。PC 程序通過使用相應(yīng)的協(xié)議讀寫該串口,從而操作USB dongl
USB dongle與PC 程序之間的通信例子說明 簡(jiǎn)介
USB dongle和PC 之間使用USB 相連,并在PC 上虛擬成一個(gè)串口。PC 程序通過使用相應(yīng)的協(xié)議讀寫該串口,從而操作USB dongle。
USB dongle在PC 之間起到收發(fā)數(shù)據(jù)的功能:
USB dongle接收來自PC 的數(shù)據(jù)發(fā)送命令,從中解析出目的地址和數(shù)據(jù)內(nèi)容后,將數(shù)據(jù)發(fā)送到該地址的USB dongle;
USB dongle在接受來自其他USB dongle的數(shù)據(jù)包后,從中解析出目的地址、源地址、數(shù)據(jù)內(nèi)容等信息,并將這些信息發(fā)送到PC
串口通信協(xié)議
通信模式
USB dongle和PC 之間以包的形式進(jìn)行通信。這是通過在原始的基于字節(jié)流讀取和寫入的串口的基礎(chǔ)上,使用特定的組包結(jié)構(gòu),對(duì)串口中所傳輸?shù)臄?shù)據(jù)進(jìn)行封包,使用包的方式進(jìn)行串口兩端設(shè)備之間的數(shù)據(jù)傳輸。
這種基于串口包的數(shù)據(jù)傳輸方式將串口兩端的設(shè)備(此處分別為PC 程序和USB dongle)看做一個(gè)擁有唯一地址標(biāo)識(shí)(PAN 和短地址)的通信設(shè)備,并在串口包中攜帶該串口包所對(duì)應(yīng)的目標(biāo)地址和源地址。
使用串口包的通用格式,PC 程序和USB dongle之間可以進(jìn)行各種數(shù)據(jù)的交互(數(shù)據(jù)被存放在有效載荷中),從而實(shí)現(xiàn)相應(yīng)的功能:
通信協(xié)議 串口包格式
各個(gè)字段的說明如下:
前導(dǎo)字符:用于標(biāo)識(shí)一個(gè)包的開始,內(nèi)容為0xF0F0
,●
●
●
●
●
●
●
●
●
●
●
●
包長度:包括從“序號(hào)”到“有效載荷”的長度 序號(hào):取值0到255,總是遞增(255 0除外) 目標(biāo)PAN/目標(biāo)短地址:串口包的目的地址 固定為0xFFFF / 0xFFFF 源PAN/源地址:串口包的源地址 PC 發(fā)包到USB dongle時(shí),總是填寫 0 / 0 USB dongle到PC 的串口包中,該兩字段為USB dongle的地址 包類型:固定填寫0x11(不會(huì)收到包類型不是0x11的串口包) 端口: 發(fā)送串口包到USB dongle時(shí)固定填寫8080(10進(jìn)制) 接受串口包時(shí),過濾(忽略)端口不是8080的串口包 CRC 校驗(yàn):從“序號(hào)”到“有效載荷”的CRC16校驗(yàn)。該CRC 校驗(yàn)代碼可在Demo 程序中找到。
節(jié)點(diǎn)功能
USB dongle和PC 之間的通信協(xié)議主要包括如下三個(gè)功能:
● 獲取USB dongle的節(jié)點(diǎn)地址
● 使用USB dongle發(fā)送數(shù)據(jù)
● USB dongle將接收到的其他節(jié)點(diǎn)的數(shù)據(jù)發(fā)送到PC
下面所述的USB dongle和PC 程序所發(fā)送的各種信息,都是指在串口包中的有效載荷中的內(nèi)容,而串口包本身的結(jié)構(gòu)式固定的。必須先將命令和串口包的包頭等額外內(nèi)容一起打包成串口包,并通過串口發(fā)送。
獲取USB dongle的節(jié)點(diǎn)地址
通信過程:
● PC 端發(fā)送:’ga’(2個(gè)字節(jié))
● USB dongle回復(fù):’100
注意事項(xiàng):
● PC 程序應(yīng)該在啟動(dòng)后就獲取節(jié)點(diǎn)的PANID 和短地址,從而獲知自己的地址,并且
相互之間進(jìn)行通信
● 命令和回復(fù)都是以字符串的形式發(fā)送和返回,其中PanId 和短地址以16進(jìn)制表示 ● USB dongle的回復(fù)分為以空格分隔的3個(gè)部分,其中:
? 第一個(gè)值為錯(cuò)誤碼,’100’代表命令執(zhí)行正確(參見PPT 末尾的錯(cuò)誤碼列表) ? PanId 為USB dongle的PanId
? 短地址為USB dongle的短地址
使用USB dongle發(fā)送數(shù)據(jù)
通信過程:
,● PC 端發(fā)送:發(fā)送命令包
● USB dongle解析并進(jìn)行發(fā)送
● USB dongle將發(fā)送結(jié)果返回到PC
發(fā)送命令包結(jié)構(gòu):
發(fā)送結(jié)果返回:‘100’
注意事項(xiàng):
● 無法確定對(duì)方是否成功接收
使用USB dongle接收數(shù)據(jù)
USB dongle在接收到數(shù)據(jù)時(shí),就將所收包的信息發(fā)送到PC 。 USB dongle發(fā)送到PC 的數(shù)據(jù)回顯包結(jié)構(gòu):
注意事項(xiàng):
● 數(shù)據(jù)回顯中沒有源PAN 的字段,無法得到發(fā)送者的PANID 串口編程
需要使用串口庫進(jìn)行串口的讀寫。Demo 程序中有現(xiàn)成的一個(gè)串口庫。 如何連接串口
? 首先需要安裝USB dongle的驅(qū)動(dòng)
? 按照如下配置打開串口
? 串口號(hào):查看設(shè)備管理器獲得
? 波特率:230400
? 數(shù)據(jù)位:8
? 校驗(yàn)位:無
? 停止位:1
如何發(fā)送串口包
? 將發(fā)送命令、獲取地址命令等有效載荷封裝在串口包中,然后通過串口操作函數(shù)發(fā)
,送到串口
? 必須保證串口包中字段的正確性
? 參考前面的“通信協(xié)議-串口包格式”
如何接受串口包
? 程序必須解析來自串口的字符流,從而讀取串口包
? 注意事項(xiàng)
? 不能保證一個(gè)串口包的數(shù)據(jù)在一次串口消息(串口讀取)中全部獲得
? 程序必須過濾端口不是8080的串口包,因?yàn)閁SB dongle會(huì)向串口打印某些
額外的信息
舉例說明
節(jié)點(diǎn)地址獲取
獲取USB dongle地址是通過發(fā)送”gt ”命令實(shí)現(xiàn)的,一個(gè)典型的通信過程如下:
PC 端程序向串口發(fā)送(使用‘|’分隔各個(gè)字段):
| F0 F0 | 0E | 00 | FF FF | FF FF | 00 00 | 00 00 | 11 | 90 1F | 67 61 | FF 15 |
參考“通信協(xié)議-串口包格式”可以得知如下的信息:
● 包長度為0xE
● 包序列號(hào)為0
● 目標(biāo)PAN 和目標(biāo)短地址都是0xFFFF
● 源PAN 和源短地址都是0
● 包類型為0x11
● 端口為0x1F90,既十進(jìn)制的8080
● 有效載荷為0x67,0x61,既”gt ”
● CRC16校驗(yàn)為 0x15FF
USB dongle向串口發(fā)送:
| 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
● 序列號(hào)為0x83
● 目標(biāo)pan 和目標(biāo)短地址為0xFFFF:0xFFFF
● 源PAN 和源短地址為USB dongle 的PAN 和短地址,分別為0x0001和0x0010,這
是為每個(gè)USB dongle唯一分配的。
● 端口號(hào)為0x1F90,既8080
● 有效載荷為字符串:”100 1 10”
● CRC16校驗(yàn)為0xD0B4
因此,PC 程序在讀取整個(gè)串口包后,可以解析出其中的有效載荷“100 1 10”,既錯(cuò)誤碼:100,PAN :1,短地址:10。
,發(fā)送數(shù)據(jù)到其他節(jié)點(diǎn)
PC 程序發(fā)送攜帶數(shù)據(jù)發(fā)送命令的串口包:
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 根據(jù)串口包協(xié)議,可以獲知:
有效載荷中的數(shù)據(jù)發(fā)送命令為:53 | 01 00 | 11 00 | 05 | 01 02 03 04 05
根據(jù)發(fā)送命令包:
● 命令字符為’S ’
● 目標(biāo)PAN 為0x0001
● 目標(biāo)短地址為:0x0011
● 數(shù)據(jù)長度為:0x05
● 數(shù)據(jù)內(nèi)容為:0x01 0x02 0x03 0x04 0x05
USB dongle 在收到該發(fā)送命令包后,從中解析出目標(biāo)地址為:0x0001:0x0011,和待發(fā)送的數(shù)據(jù)。USB dongle 將數(shù)據(jù)通過無線通信模塊向目的節(jié)點(diǎn):0x0001,0x0011發(fā)送(所發(fā)送包的結(jié)構(gòu)參考P36. CC2420.pdf)。
相應(yīng)的,接收數(shù)據(jù)的USB dongle 在無線通信模塊接收到包后,通過串口發(fā)送如下的數(shù)據(jù)回顯包:
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
根據(jù)USB dongle的數(shù)據(jù)回顯包的格式,可以解析如下:
● 首字符為’R ’
● 遞增序號(hào)為1
● 目標(biāo)PAN 為0x0001
● 目標(biāo)短地址為0x0011
● 源(發(fā)送者)短地址為0x0010
● LQI 為0xFF
● CRC 校驗(yàn)(802.15.4包的CRC 校驗(yàn))為0x9C9D
● 數(shù)據(jù)長度為5
● 數(shù)據(jù)內(nèi)容為0x01 0x02 0x03 0x04 0x05