您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 综合/其它 > 测距模块通讯规约-7
测距模块通讯协议V1.0-1-此协议分为用户方和测距模块方,文中出现的send都是由用户方来发送的数据帧,文中出现的receive都是由测距模块方来发送的数据帧。下文中的“模块”特指测距模块。协议使用UART口发送和接收,点对点模式,所有数据都使用HEX表示,一个起始位,8位数据,无校验位,低位在前。检验一帧是否为合法帧,需注意以下几点:1、起始位。2、结束位。3、两个长度(L)是否相等。4、校验和。5、序列域是否在变化,如果不变,视为重发,可能会不响应。6、根据功能码来决定所要的操作。数据格式起始位(S)0x68长度(L)长度(重复)(L)功能码AFN序列域SEQ数据区(由长度决定)(D)校验和CS结束位(E)0x16长度L:由1字节组成,表示从AFN开始,到CS之前的字节数总和,即数据区的长度+2。功能码AFN:1字节,指定所传输帧的内容。帧序列域SEQ:1字节,每启动一帧,D0–D3从0–15循环加1,重发帧和响应帧不加1。D7为启动帧标志位,启动帧置1,响应帧置0。对于此规约大部分情况下用户为启动方,模块为响应方,只有“测距结果帧”相反。用户编程时,每发送一帧新的数据,应使D0–D3变化,否则视为上一帧的重发帧,有可能得不到模块的响应。数据区:由AFN和数据单元标所确定下的具体数据,长度为0–127之间的任意数。校验和CS:1字节,是长度L之后到CS之前的算术和,不考虑进位。用户和测距模块双发都根据串口接收到的帧内容进行相应的操作,通讯采用一问一答的方式,启动方每发送一帧数据或者操作,都必须要收到应答帧,应答帧可以是数据帧、确认帧或否认帧,应答帧的SEQ应与所收到的帧一致。当没有收到应答帧时,建议重发上次的帧,并且SEQ不应改变。应答帧格式为:1、确认帧(AFN=10H)表示操作成功。例帧:68(S)02(L)02(L)10(AFN)01(SEQ,此值应与接收到的SEQ值相同,且作为从动帧的SEQ的D7位置0,以下同理)11(CS)16(E)2、否认帧(AFN=11H)测距模块通讯协议V1.0-2-表示不支持此操作,或者硬件损坏,或者MAC层此时不能响应此操作。建议出现否认帧时,再重发2次。例帧:68(S)02(L)02(L)11(AFN)01(SEQ,此值应与接收到的SEQ值相同)12(CS)16(E)数据帧格式为:1、设置节点地址(AFN=12H)数据内容数据格式字节数测距模块地址HEX2例:设置测距模块地址为0x1122。(节点地址为模块的唯一地址,transceiver的源地址也使用此地址)Send:68(S)04(L)04(L)12(AFN)81(SEQ,启动帧的SEQ的D7位置1,以下同理)22(地址低字节)11(地址高字节)C6(CS)16(E)设置成功测距模块应答确认帧,不成功应答否认帧。2、设置transceiver的RTC值(AFN=13H)数据内容数据格式字节数RTC值HEX6例帧:设置的RTC值为0x112233445566。Send:68(S)08(L)08(L)13(AFN)81(SEQ)665544332211F9(CS)16(E)62uS后,设置成功测距模块应答确认帧,不成功应答否认帧。3、查询测距模块地址(SENDAFN=14H,RECEIVEAFN=15H)例Send:68(S)02(L)02(L)14(AFN)81(SEQ)95(CS)16(E)如果测距模块地址为0x1122,Receive:68(S)04(L)04(L)15(AFN)01(SEQ)22(地址低字节)11(地址高字节)49(CS)16(E)此帧的对用户来说应答帧就是receive里的数据帧,这样也构成了一问(send)一答(receive)的形式,所以,用户和模块都不用发送确认帧。(以下同理)4、查询transceiver的RTC值(SENDAFN=16H,RECEIVEAFN=17H)例Send:68(S)02(L)02(L)16(AFN)81(SEQ)97(CS)16(E)如果测距模块的RTC值为0x112233445566Receive:68(S)08(L)08(L)17(AFN)01(SEQ)6655443322117D(CS)16(E)5、启动快速测距(AFN=18H)例如对地址为0x3344的节点测距,并设定测距不成功时的重发次数为0次。Send:68(S)05(L)05(L)18(AFN)81(SEQ)00(重发次数,最大5次)44(目的地址低字节)33(目的地址高字节)10(CS)16(E)如果测距并且带有数据传输,数据内容装填在目的地址和CS之间,长度0-116字节。测距模块通讯协议V1.0-3-启动成功测距模块回确认帧,启动不成功模块回否认帧。至少等待1.5mS,模块才会发出测距结果帧。超时未发出说明测距不成功,不成功的原因有可能是目的地址写错,或者目的节点没收到数据包。重发次数越多,测距不成功时所耗费的时间越长,重发时会自动启动CSMA机制以避免多个节点之间占用空中信道的碰撞,但也可能会造成信道不断的碰撞和回避,使信道资源在时间上的大量浪费。6、启动正常测距(AFN=19H)正常测距也就是双边测距,比快速测距时间长,但有助于提高测距精度。例如对地址为0x3344的节点测距,并设定测距不成功时的重发次数为0次。Send:68(S)05(L)05(L)19(AFN)81(SEQ)00(重发次数,最大5次)44(目的地址低字节)33(目的地址高字节)11(CS)16(E)如果测距并且带有数据传输,数据内容装填在目的地址和CS之间,长度0-116字节。启动成功测距模块回确认帧,启动不成功模块回否认帧。至少等待2.3mS,模块才会发出测距结果帧。超时未发出说明测距不成功,不成功的原因有可能是目的地址写错,或者目的节点没收到数据包。重发次数越多,测距不成功时所耗费的时间越长,重发时会自动启动CSMA机制以避免多个节点之间占用空中信道的碰撞,但也可能会造成信道不断的碰撞和回避,使信道资源在时间上的大量浪费。7、测距结果帧(AFN=1AH)节点测距完成后,发出此帧,此时测距模块作为启动方,用户作为从动方。数据内容数据格式字节数被测距节点的地址HEX2测距值,比实际值扩大10倍HEX2接收到被测节点数据包时的信号强度RSSIHEX1例:被测节点地址0x4003,测距值125.5米,接收RSSI=0。RSSI=0为信号最强,=30为信号很弱。Receive:68(S)07(L)07(L)1A(AFN)81(SEQ)03(被测节点地址低字节)40(被测节点地址高字节)E7(测距结果值低字节)04(测距结果值高字节)00(RSSI)C9(CS)16(E)用户接收到此帧需要向测距模块发送确认帧,格式请参考确认否认帧的例帧。8、启动时间同步帧(AFN=1BH)使用时间信标帧有助于TDMA的实现,时间同步帧以广播形式发出。下例发送时间同步帧,并附带一个字节数据0x99。例Send:68(S)03(L)03(L)1B(AFN)81(SEQ)99(数据)35(CS)16(E)如果带有数据传输,数据内容装填在SEQ和CS之间,长度1-127字节,最少1字节。启动成功测距模块回确认帧,启动不成功模块回否认帧。9、校正模块的日历(AFN=1CH)数据内容数据格式字节数测距模块通讯协议V1.0-4-秒HEX1分HEX1时HEX1日HEX1星期(D6-D4),0代表星期天,6带便星期六。月(D3-D0)HEX1年HEX1例:设置时间为12年7月6号5点4分1秒星期5,Send:68(S)08(L)08(L)1C(AFN)81(SEQ)01(秒)02(分)03(时)04(日)57(星期月)0C(年)0A(CS)16(E)设置成功测距模块回复确认帧,不成功回复否认帧。10、读取模块的日历(SENDAFN=1DH,RECEIVEAFN=1EH)例Send:68(S)02(L)02(L)1D(AFN)81(SEQ)9E(CS)16(E)如果测距模块的日历为12年7月6号5点4分1秒星期5,Receive:68(S)08(L)08(L)1E(AFN)01(SEQ)01(秒)02(分)03(时)04(日)57(星期月)0C(年)8C(CS)16(E)11、本地振荡器校准(AFN=1FH)模块内部已经有定时校准的机制,此项功能用户可不必关心,只有特殊情况下需要使用。例Send:68(S)02(L)02(L)1F(AFN)81(SEQ)A0(CS)16(E)6mS后,校准成功回复确认帧,不成功回复否认帧。12、使模块进入休眠状态(AFN=20H)通过此命令使整个模块进入深度休眠模式,进入休眠模式后只能通过唤醒管脚才能使模块醒来。例Send:68(S)02(L)02(L)20(AFN)81(SEQ)A1(CS)16(E)能够进入休眠模式回复确认帧,并马上休眠,回复否认帧表示此时不能休眠。13、数据传输帧(AFN=21H)数据内容数据格式字节数重发次数HEX1目的地址HEX2数据区HEX1–127例:向地址为0x3344的节点发送数据0xee。Send:68(S)06(L)06(L)21(AFN)81(SEQ)00(重发次数,最大5次)44(目的地址低字节)33(目的地址高字节)EE(数据)07(CS)16(E)如果发送1字节数据,最少等待500uS后,发送成功回复确认帧,不成功回复否认帧。要发送的数据区字节数越多等待时间越长。建议重发次数设为0,。如果大于0,会造成无法判定是否收到ACK包。14、接收到数据帧(AFN=30H)测距模块通讯协议V1.0-5-节点测距模块接收到其他模块从控制发来数据时,发出此帧告知用户,此时测距模块作为启动方,用户作为从动方。数据内容数据格式字节数数据的来源地址HEX2接收的RSSIHEX1接收到数据帧的类型HEX1接收到的数据HEX1-127,最少1字节数据类型定义:0=数据帧,1=测距中附带的数据,2=TimeB帧,3=广播帧例:收到地址为0x4003的节点发来的数据帧,数据为0xee。接收的RSSI为01Receive:68(S)07(L)07(L)30(AFN)81(SEQ)03(数据来源地址低字节)40(数据来源地址高字节)01(RSSI)00(帧类型)EE(数据内容)E3(CS)16(E)用户接收到此帧需要向测距模块发送确认帧,格式请参考确认否认帧的例帧。15、发送广播帧(AFN=22H)数据内容数据格式字节数数据区BIN1–127,最少1字节例:向所有节点发送广播数据0xee。Send:68(S)03(L)03(L)22(AFN)81(SEQ)EE(数据)91(CS)16(E)发送成功回复确认帧,不成功回复否认帧。16、复位模块(AFN=23H)例:Send:68(S)02(L)02(L)23(AFN)81(SEQ)A4(CS)16(E)17、控制其他两个节点测距(AFN=24H)此命令可以通过A节点来控制B节点向C节点测距,B节点测距完成后,将测距结果帧(AFN=1AH)发送给A节点,A节点返回给用户的帧格式应为接收到数据帧(AFN=30H),在接收到数据帧(AFN=30H)内包含了一个测距结果帧(AFN=1AH)。数据内容数据格式字节数B节点地址HEX2C节点地址HEX2例:向地址为0x0002的节点发送数据,要求0x3344向0x0001测距。Send:68(S)06(L)06(L)24(AFN)81(SEQ)02目的地址低字节)00(目的地址高字节)01(被测距目的地址低字节)00(被测距目的地址高字节)a8(CS)16(E)
本文标题:测距模块通讯规约-7
链接地址:https://www.777doc.com/doc-2229507 .html