Xbee模块API指令技术文档
——by 宋涛 2008-11-19
参数和固件烧录:
xbee模块使用API指令必须先将Module烧录入API参数和固件(另一种为AT,在AT指令时烧录)。方法为在X-CTU软件的Modem Configuration选项卡内的Modem项选中XB24-B,Fuction Set 内选中Znet 2.5 Coordinator API或者Znet 2.5 Router/End Device API选项(根据该module要扮演的角色决定,在烧录AT情况下,选择类似的选项。),Version选项不用选择,会自动调整。然后在Modem Parameters and Firmware下点击write进行烧录。强烈建议在write前先勾选中always update firmware选项。
注意:
1.烧录完成前,如是模块状态是AT指令状态下,不能先勾选上PC settings里面的Enable API。如果模块状态是API指令状态下,必须先勾选上PC settings里面的Enable API。否则,烧录会失败。
2.烧录完成后,如果PC settings里面的Enable API项没有选中,必须勾选上,如果要使用逃脱字,则需要勾选上ATAP=2项。
3.当前烧录版本是针对当前实验室版本,如果版本变化,烧录过程会有部分调整。
4.Modem Configuration里面Read为读取当前module参数状况,主要用于调试中网络不通时,检查modules之间参数设置是否正确时使用。Restore为重置module的状态为最近一次烧录入firmware后的初始状态。
API Operations:
注意:
1.xbee目前的各个版本之间的API Operation是有区别的,该文档以Znet 2.5版本为准。
2.该文档对API Operation的讲述以在实验过程中常遇到的指令为主,若本文档中未包含的API frame,请参见《XBee™ ZNet 2.5/XBee-PRO™ ZNet 2.5 OEM RF Modules》。
串口数据帧格式说明
Start Delimiter:
均为0x7E,表示一个帧的开始,占据第一个字节。
Length:
表示帧数据的长度,占据第二个和第三个字节,分成高字节和低字节,内容由Frame Data(即上图API-specific Structure)的长度决定,例如Frame Data的长度(不包含Start Delimiter,Length,和Checksum)为6个字节,那么Length的内容为0x00 06。
Frame Data:
由内容不同帧的类型决定,长度不确定,从第4字节到第N字节。API Identifier是必须的,占据第4字节,该字节表示API Operation的类型。
Checksum:
用来校验数据帧的正确与否,占据第N+1个字节的位置,计算方法为FF—(除去start delimiter和 API length之外的所有字节之和的最后两位)。
API帧名称和API ID
Module 状态帧
该帧是在模块为响应特定状态时自动发送的,往往是本身接受到(实验中得出的结论,会在刚刚重启时得到)。
实验例子:
第4个字节和第5个字节为该数据帧内容。
第4字节,8A,API ID,标识该帧为Module状态帧。
第5字节,00,状态表示字节,00表示硬件重启,01表示看门狗计时器重启,02表示 ,03表示 ,04表示,05表示,06表示coordinator启动。
AT指令帧(*)
该帧用于AT指令的使用,用以查询或者设置模块的参数。
AT指令回复帧
该帧用于响应AT指令,对一些命令(例如ND)指令,则会有多帧回复帧。
实验例子:
上图蓝色部分为AT指令帧,从第4字节到倒数第2字节。
第4字节08,为API ID,表示该帧为AT指令帧;
第5字节52,Frame ID,为了和稍后的AT回复帧识别相匹配,可以随便设置,但若设置成00,则表示不需要回复帧。
第6-7字节,AT命令,使用什么AT指令,只需要将它的ASCII码转化为HEX即可,这里用NJ指令,则为4E 4A;
第8-n字节,参数设定,如需要则设置,如只是查询,则不用设置。
上图红色部分为指令回复帧,从第4字节到倒数第2字节。
第4字节88,为API ID,表示该帧为AT指令回复帧;
第5字节52,Frame ID,和之前的AT指令帧相匹配,确认该帧为之前AT指令帧的回复帧。
第6-7字节,之前AT命令的名字,这里前面用的是NJ指令,则为4E 4A;
第8字节,状态字,OO表示OK,01表示Error,02表示有问题的不可用的AT指令,03表示不可用的参数;
第9-n字节,查询或设置的参数值,这里查出来的NJ值为FF,表示coordinator总是允许加入。
另一个实验例子:*****(非常重要)
使用的ND指令,查询到网络内有两个router/end device,因此回复帧有2个。
回复帧会将网内结点的详细信息列出。
以7E 00 19 88 51 4E 44 00 0F 6F 00 13 A2 00 40 4A 4B F9 20 00 FF FE 01 00 C1 05 10 1E 81为例解释一下:
第4字节,88,API ID,表示该帧为AT指令回复帧;
第5字节51,Frame ID,和之前的AT指令帧相匹配,确认该帧为之前AT指令帧的回复帧。
第6-7字节,之前AT命令的名字,这里前面用的是ND指令,则为4E 44;
第8字,状态字,OO表示OK,01表示Error,02表示有问题的不可用的AT指令,03表示不可用的参数;
第9字开始为结点信息,即返回ND指令要查询的信息。
第9-10字,0F 6F,即查询到的网内结点的16位地址;
第11-18字,00 13 A2 00 40 4A 4B F9,即查询到的网内结点的64位地址;
第19-20字,20 00,为查询到的网内结点的NI值,该值为变长的;00结束,表示NI值未设定(未设定的实验发现都返回的是20 00);
第21-22字,FF FE,父结点的16位地址信息,如没有父节点则为FF FE;
第23字,01,类型字节,表示该结点的类型,00为coordinater,01为router,02为end device。
第24字,00,状态字节(没有查到各数字表示什么状态,00应该是表示成功或者OK的意思)
第25-26字,C1 05,外形ID,应该是表示什么样的外观。(对我们实验也无用处)
第27-28字,10 1E,厂商ID,表示制造的厂商(对我们实验无用)。
Zigbee传送请求帧
用于xbee传送数据时使用的帧(数据已经包含在里面了),下图中的蓝色部分为实验中的该帧发送。
Zigbee传送状态帧
用于xbee传送数据后回复传送成功或失败的帧,下图的红色部分为实验中的接收的该帧。
实验例子:
上图蓝色的为传送请求帧内容,从第4个字节10到倒数第2个字节38,均为该数据帧内容。
第4个字节10为API ID,表示该帧为传送请求帧;
第5个字节22为Frame ID,表示你要发送串口数据的ID,由你自己规定,在随后收到的回馈帧(即实验中的红色字串)里面的Frame ID会和该自己相同。
第6-13字节00 13 A2 00 40 4A 4B F9 为目的模块的64位地址,如想通过广播的形式发送应该为00 00 00 00 00 00 FF FF。
第14-15字节0F 6F为目的模块的16位地址,如果不知道目标地址或者想进行广播可以设置成FF FE。
第16字节00 为广播范围的设置,如果设置为00,则为最大的广播范围10hops。
第17字节00,如设置为08,为多点传输,其他的都设置为0。
第18-n字节为数据内容,实验中为41 42 38(实际内容为AB8)填写你要发送的数据(对应的ASCII码转换成的HEX码)。
上图红色的为传送状态帧内容,从第4个字节8B到倒数第2个字节00,均为该帧内容。
第4个字节8B为API ID,表示该帧为传送状态帧;
第5个字节22为FrameID,表示刚才发送的数据内容的ID。(注意这里的22跟前面请求帧里面的内容相等了)
第6-7字节0F 6F,如果成功发送,将会显示接收到模块的16位地址;如果不成功,它会与传送请求帧中的目的地址匹配(有区别吗?在实验中如果点对点发送这是一样的,而使用广播,不管成不成功返回的都是FF FE)
第8字节00,该字节表示传输重试的次数。
第9字节00,该字节就表示传送数据后回复的状态,00表示成功,02表示CCA失败,15表示有故障的终端结点,21表示网络ACK失败,22表示该模块未加入网络,23表示寄给自己的,24表示地址未找到,25表示router未找到。(如果广播的话,只要器件没有出问题,接收到的大多都会是00,不管其他的模块有没有接收到)
第10字节00,该字节表示探索状态,00表示不需要进行探索,01表示对地址进行探索,02表示对路由进行探索,03表示对地址和路由都需要进行探索。
Zigbee接收帧
表示该模块接收到别的模块向它发送的数据帧。
实验例子
上图从第4个字节90到倒数第2个字节38,均为该数据帧内容。
第4字节90为API ID,表示该帧为接收帧;
第5-12字节00 13 A2 00 40 3E 12 E6,表示将数据发送过来的模块的64位地址;
第13-14字节00 00,表示发送模块的16位地址。
第15字节02,表示发送过来包的类型,01表示点对点发送,02表示广播发送;
第16-n字节,这里为41 42 38,表示发送的数据内容。。
结点辨认指示帧:
该帧会由结点自动向coordinator发送,用来告诉coordinator它的信息(前提是AO=0,缺省情况下为该设置)。
实验例子:
该例子中从第4个字95开始到倒数第2个字1E,均为该帧数据内容。
第4个字节95为API ID,表示该帧为结点辨识帧;
第5-12字节00 13 A2 00 40 4A 4B F9,表示发送结点的64位地址;
第13-14字节0F 6F,表示发送结点的16位地址,如果未知会为FFFE;
第15字节02,表示该帧是被广播发送的,若为01则表示该包是确认地址发送。
第16-17字节0F 6F, 表示发送结点的16位地址,如果未知会为FFFE;(奇怪,出现了两次)
第18-25字节00 13 A2 00 40 4A 4B F9,表示发送结点的64位地址;(又是诡异的
出现了两次,没明白为啥)
第26-N字节,该实例中为20 00,结点的NI-string,为变成20表示空格的意思,00表示NI字的结束。
第N+1 - N+2字节,Parent字节,FFFE,表示父结点的16位地址,若结点没有父节点则为FFFE。
第N+3字节,01,类型字节,表示该结点的类型,00为coordinater,01为router,02为end device。
第N+4字节,03,表示源活动信息,已知01为结点确认按钮事件发生,02为网络join事件发生后(不太明白,不过实验中没用到过)。
第N+5 – N+6字节,C1 05,外形ID,应该是表示什么样的外观。(对我们实验也无用处)
第N+7 – N+8字节,10 1E,厂商ID,表示制造的厂商(对我们实验无用)。
使用技巧:
由于很多时候API的参数太多,会弄不清API的参数情况,我们可以通过使用AT指令发送信息,然后使用show hex选项,可以显示出指令的16进制的编码。
因篇幅问题不能全部显示,请点此查看更多更全内容