标签:
CRC STC12C2052 SM36C
接口
1 接口设计
1.1通信协议接口:
1.1.1波特率:9600bps,数据位8,停止位1,无校验;
1.1.2数据帧:11字节,其中帧头1字节(3EH),地址码5字节(XX xx xx xx xx,XX可以设计为地区码),控制码1字节,指令1字节,CRC校验2字节,结束码1字节(0DH);
帧结构如下:
|
帧头 |
地址码 |
控制码 |
指令 |
CRC校验 |
结束码 |
|
3E |
00-FF |
00-FF |
00-FF |
00-FF |
00-FF |
55 |
00-FF |
00-FF |
00-FF |
0D |
|
|
|
|
|
|
|
|
|
|
|
帧头作为一个数据包的开始,不是以此字符开始的包无效,直接丢弃;
地址码占了5字节,共40位,理论上可以容纳2的40次方约1亿亿个被控终端;
控制码这里沿用之前的55,表示此数据包是控制包,调试中还使用66,表示回传;
指令码结合控制码,表示控制的具体内容,如闭合命令,开启命令,命令可以自定义,这里设计0X00表示开启,0XFF表示闭合;
这里CRC校验使用CRC-CCITT:(由欧洲CCITT 推荐)
G(X ) = X16 + X12 + X 5 +1 对应16进制多项式0x11021。发送端对地址码、控制码、指令码共7字节进行CRC求余项式,并将其填入CRC校验字节,打包发送;在接收端对除帧头和结束码在内的其余字节进行校验,若数据包正确,CRC校验值应为0。
考虑到MCU计算能力和资源的局限性,采用半字节校验法,使用查表法进行CRC校验,每个字节算两次(半字节算一次),可以在速度和内存空间取得均衡;
按多项式0x11021实现算得CRC余式项(半字节4位16种情况)如下:
unsigned int code crc_ta[16]={ /* CRC 余式表 */
0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,
0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,
};
1.1.3接收数据帧正确性判断:帧头正确、结束码正确、5字节地址码全部正确并且CRC校验正确为正确数据包,其它为错误包,MCU主动丢弃;
1.1.4收发中心频率915MHz;
程序
电路
系统分类:
工业控制 | 用户分类:
单片机相关 | 来源:
原创 | 【推荐给朋友】 | 【添加到收藏夹】