自定义通信协议--汇总

自定义通信协议–汇总

自己想尝试写一种轻量级、裁剪过的通信协议,能够兼容单片机和上位机

想破了头,也没想到太合适的,于是在此汇总一下人家的协议。
1. http://www.codeproject.com/Articles/992/Serial-library-for-C
这是人家的Serial library for C++协议源码,有空研究下
2. 指纹模块通信协议

这里写代码片
最近搞了个指纹模块,没有资料,上电监视串口数据如下:
 单片机发:
 C0 07 00 00 00 00 00 01 02 00 0A C0
 C0 07 00 00 00 00 00 01 00 00 08 C0
 C0 07 00 00 00 00 00 01 00 00 08 C0
 C0 07 00 00 00 00 00 01 00 00 08 C0 
 C0 07 00 00 00 00 00 01 00 00 08 C0
 C0 07 00 00 00 00 00 01 02 00 0A C0 
 C0 07 00 00 00 00 00 01 02 00 0A C0
 C0 07 00 00 00 00 00 01 02 00 0A C0 
 C0 07 00 00 00 00 00 01 00 00 08 C0
 C0 07 00 00 00 00 00 01 00 00 08 C0
 C0 07 00 00 00 00 00 06 00 5F 08 06 03 03 00 80 C0 
 C0 07 00 00 00 00 00 01 00 00 08 C0
 C0 07 00 00 00 00 00 03 08 00 04 00 16 C0
 C0 07 00 00 00 00 00 01 00 00 08 C0
 C0 07 00 00 00 00 00 03 08 00 05 00 17 C0

 指纹模块发:
 C0 01 00 00 00 00 00 01 01 00 03 C0  
 C0 01 00 00 00 00 00 02 12 01 00 16 C0 
 C0 01 00 00 00 00 00 02 0A 02 00 0F C0
 C0 02 00 00 00 00 00 80 03 02 56 25 00 00 FF FF 80 03 80 01 80 01 80 01 80 01 80 01 80 01 80 01 80 01 80 01 80 01 80 01 80 01 80 01 80 01 80 01 80 01 FF FF 38 48 00 00 00 00 00 00 00 00 00 00 57 85 55 5E 20 89 E9 FE 4D 89 DB DC FE 6A 8A 1A 7E 3D 0D DB DC 1E 57 1F 46 FE 75 9F 46 5E 4B 21 47 3E 42 24 C8 7E 77 A5 08 5E 59 32 CA FE 73 37 09 7E 2D B9 4E 7E 76 41 4A DE 18 C3 65 3E 5B C6 0E 56 5A 15 84 9F 1F 97 69 BF 2C 91 C0 
 C0 08 00 00 00 00 00 80 31 1D 11 DF 37 A3 0E DF 1B A5 66 5F 42 2C 4A BF 40 B2 0B FF 62 B3 09 FF 5E 3B 8B BF 20 92 E9 9C 2B 90 13 5A 15 2E CD 12 26 46 90 DA 68 C1 4C FB 14 30 E3 92 18 B4 CC 78 64 42 E1 78 26 8E EA B9 21 C6 26 19 3E BA 62 D7 19 BC 61 EE 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 22 E6 C0
 C0 01 00 00 00 00 00 02 0A 01 00 0E C0
 C0 02 00 00 00 00 00 80 03 02 52 27 00 00 FF FF DB DC 03 80 01 80 01 80 01 80 01 80 01 80 01 80 01 80 01 80 01 80 01 80 01 80 01 80 01 80 01 80 01 80 03 FF FF 44 48 6C 70 00 00 00 00 00 00 00 00 53 86 58 3E 13 07 A8 BE 3F 88 15 7E 14 13 50 FE 3F 96 93 9E 09 18 E7 5E 46 19 94 BE 24 A2 0E BE 0C 23 CE 5E 3C A7 C9 5E 0C AA CC BE 19 B0 CA DE 10 3E 49 5E 3C C3 04 FE 5F 84 19 37 33 99 AA 5F 5E A5 1C 1F 60 B0 1D BF 2C E4 C0
 C0 08 00 00 00 00 00 80 3E 3A 86 1F 4C 8D 97 1C 37 9D 11 DC 0A 43 20 14 12 8E E8 9D 3F A0 90 1A 1B A5 4D 3A 68 BE 57 3A 31 21 8F 3B 1F 27 64 7B 08 DB DC 0A 93 31 1F A8 38 76 3C 91 D9 19 8B 51 36 35 8E AB 36 38 10 D4 16 43 A4 88 56 1A 0D 29 F7 44 A3 45 17 67 B4 1E B3 70 B5 0C 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1E 89 C0 
 C0 01 00 00 00 00 00 03 20 01 03 00 28 C0
 C0 01 00 00 00 00 00 01 01 00 03 C0 
 C0 01 00 00 00 00 00 01 01 00 03 C0 
 C0 01 00 00 00 00 00 01 01 00 03 C0 
 C0 01 00 00 00 00 00 01 01 00 03 C0
 C0 01 00 00 00 00 00 01 01 00 03 C0 
 C0 01 00 00 00 00 00 01 01 00 03 C0 
 C0 01 00 00 00 00 00 01 01 00 03 C0 
 C0 01 00 00 00 00 00 01 01 00 03 C0 
 C0 01 00 00 00 00 00 01 01 00 03 C0 
 C0 01 00 00 00 00 00 01 01 00 03 C0 
 C0 01 00 00 00 00 00 01 01 00 03 C0 
 C0 01 00 00 00 00 00 01 01 00 03 C0 
 C0 01 00 00 00 00 00 01 01 00 03 C0 
 C0 01 00 00 00 00 00 01 01 00 03 C0 
 C0 01 00 00 00 00 00 01 01 00 03 C0 
 C0 01 00 00 00 00 00 01 01 00 03 C0 
 C0 01 00 00 00 00 00 01 01 00 03 C0 
 C0 01 00 00 00 00 0`
 01 01 00 03 C0 


 不知道谁有这个通信协议的资料,能否上传一份

简单分析下
- 帧头、帧尾都是0xC0,不利于解析
3. modbus协议
改天专门写一篇博客
4.
http://www.amobbs.com/forum.php?mod=viewthread&tid=5586465&highlight=%E9%80%9A%E4%BF%A1%E5%8D%8F%E8%AE%AE
这个就比较给力了,45份文件3GPP无线通信协议集
5. 航天数据系统 通信协议
http://www.amobbs.com/forum.php?mod=viewthread&tid=5615496&highlight=%E9%80%9A%E4%BF%A1%E5%8D%8F%E8%AE%AE

哥,我只想搞一个小协议,度娘让我搜到这个,难啃啊

  1. 阿莫论坛一同学给出了非常常见的协议:
    http://www.amobbs.com/forum.php?mod=viewthread&tid=5494704&highlight=%E9%80%9A%E4%BF%A1%E5%8D%8F%E8%AE%AE
    我们在做串行通信程序设计的时候都会碰到此类问题,不论是采用MODBUS标准协议,还是自定通信协议,在我们的程序中如何来实现这个协议呢?
    先说说我自己采用的方法:
    1.数据包结构:
    帧头(4个字节) + 地址码(1个字节) + 功能码(1个字节) + 数据长度(1个字) + 数据(N个字节) + 校验(CRC16 2个字节,高字节在前) + 帧尾(4个字节)

    2.通信处理方式:
    中断接收/发送 + 缓冲区

    3.协议的实现:
    1)接收: 我是在接收中断去实现协议功能的,即每接收中断一次(接收到一个字节)的时候,按照协议的要求去进行处理,如果这帧数据是正确的就置位Flag标志位,在大循环中再去进命令的解析,错误时则丢弃。

    我想还有一种方法是, 使用循环队列(缓冲区)的方法, 在中断接收的时候只管去接收数据而不进行数据的处理,而是在大循环中进行数据的处理,来实现协议功能,以及命令的解析。 这种方法我目前还没有去实现。

    2)发送:按照协议的要求去组织数据,把数据装入发送缓冲区,由中断来完成发送。

    另外,还想请教 对于 在超时及容错方面的处理。

    在此请教各位大侠,谈谈你们的看法或自己实际工程中采用的方法,小弟在此先感谢了。 同时,也希望对于像初学者有所帮助。

我使用的是 使用循环队列(缓冲区)的方法, 在中断接收的时候只管去接收数据而不进行数据的处理,而是在大循环中进行数据的理
实现协议功能,以及命令的解析。 7.

你可能感兴趣的:(日常博客)