一、硬件设备支持
1.1 Cortex-M0的MiniUSB的电路图
1.2 PL-2303转换芯片的电路图
1.3 MCU的部分管脚
1.4 DCE(Data-Circuit Equipment)和DTE(Data Terminal Equipment)通讯的RS232的定义
说明:(1)标有“X”的信号只有在选择执行RS232-MODBUS时才需要。
(2)信号都要符合EIA/TIA-232的标准。
(3)每个TXD都与另一个设备的RXD连接。
(4)RTS可以与另一设备的CTS连接。
(5)DTR可以与另一设备的DSR连接。
二、软件协议支持
2.1 ASCII传输模式
说明:报文中数据域每个8位的字节以两个ASCII字符发送。
例子:一个字节0x5B被编码两个字符:0x35和0x42(ASCII编码‘5’= 0x35,‘B’= 0x42)。
2.2 ASCII模式每个字节(10位)的格式
编码系统:(1)十六进制,ASCII字符0 - 9,A - F。
(2)报文中每个ASCII字符含有1个十六进制的字符。
Bits per Byte:
(1)1位起始。
(2)7位数据,首先发送低有效位。
(3)1位作为奇偶校验。
(4)1位停止。
2.3 ASCII报文帧,表中的字符为ASCII字符
起始 地址 功能 数据 校验 LRC 结束
1byte 1byte 1byte N*8 Bit 1byte 1byte 1byte
1字符(:) 2字符 2字符 0 to 2*252字符 1字符 2字符 2字符(CR,LF)
说明:(1)起始和结束是有发送设备构造,由接收设备来识别。
(2)接收设备接收到字符“:”表示帧起始,接收到“CR”,“LF”表示帧结束。
(3)“:”是ASCII十六进制3A,“CR”“LF”分别是ASCII十六进制0D、0A,回车换行。
(4)报文帧中字符间的时间间隔可以达到1秒,如果大于1秒表示接收错误。
(5)数据 = 256 -(地址 + 功能 + LRC) = 252,单位是字节。
三、软件状态图包括主节点和子节点
解释:(1)“空闲”状态是没有发送和接收报文要处理的正常状态。
(2)接收到“:”字符表示新的帧开始。
(3)如果在一个帧接收中出现“:”,则丢弃当前当前帧。重新分配新的接收缓冲。
(4)检测到帧结束(LF),完成LRC计算和校验。
(5)分析地址域以确定帧是否发往此设备,如果不是,则丢弃此帧。
(6)为了减少接收处理事件,地址域可以在一接收到就分析,而不需要等到整个帧完。
四、校验算法
4.1 纵向冗余校验(LRC校验)
校验内容:地址域、功能域、数据域。
校验方式:发送设备计算放在报文帧的LRC校验域中,由接收设备再计算与比较。
计算方法:对报文帧校验内容的数据连续8位字节相加,忽略进位,求其二进制补码。
注意:不管有无奇偶校验都要有LRC校验。
4.2 LRC校验源码
static unsigned char LRC(auchMsg,usDataLen)
unsigned char *auchMsg ; /* 要进行计算的消息 */
unsigned short usDataLen ; /* LRC 要处理的字节的数量*/
{
unsigned char uchLRC = 0 ; /* LRC 字节初始化 */
while (usDataLen--) /* 传送消息 */
uchLRC += *auchMsg++ ; /* 累加*/
return ((unsigned char)(-((char_uchLRC))) ;
}
4.2 差错校验(奇偶校验)
校验内容:数据域。
校验方式:统计一个帧的数据域中含有1的个数,奇偶位被设置相应的0或1。
注意:(1)只能检测到一个字符帧在传输过程过程中增加或丢失的位。
(2)如果没有指定奇偶校验,奇偶位不会被传送。
(3)可以不进行奇偶校验,一个附加位被传送填充字符帧。