CAN转RS232接口卡的设计方案
然后将帧通过串口送给PC处理和显示。
各种类型的帧以0X33H作为帧结束标识。校验和字节用来保证数据的准确性,单片机在发送数据前将各个字节相加,并将结果填人校验字节。PC端接收到数据后,重新计算校验和,并与单片机发送的校验和相比较,相同则正确接收,否则要求单片机重新发送。
2.2 协议的透明性分析
在同步传输数据的过程中,帧的起始字节和结束字节是非常重要的,它能够保证数据帧的准确性。但因为这两个字节的存在,同时也引出了另一个待解决的问题,就是当数据场中出现了与起始字节相同的数据时,很有可能会导致PC端把它看成一个新的帧起始,从而导致数据的处理和显示错误,这也就是数据传输的透明性问题。针对串口的数据传输,有一种比较好的解决方案。该方法将数据转换成为ASCII字符来进行传送,就是将每个字节的数据进行拆分,将一个16进制的字节拆分成两个字节,如5AH,5BH,5CH,…,可以拆分为50H,0AH,50H,0BH,50H,OCH,…,PC机再接收到数据后,再将数据进行两两相或组合。这样,只需要32个字节就可以组合成为00H~0FFH中任一个数据。但这种办法的缺点也是显而易见的,应用它所发送的有效数据量是正常发送的两倍,对于串口这种传输速度不高的通信介质而言,在数据量较大的情况下,不是一种可取的方法。
在该接口卡中作者采取了另一种转义字符的方法。首先定义一个转义字符标识OXDBH。对于CAN总线而言,其每个帧的最大数据长度为8,即使将CAN的帧信息和识别码全部当作数据发送,其长度最大也只有13 B。这样可以肯定的是,正常情况下数据帧中数据长度字节的高4位必然为0。因此在数据发送之前,首先检查该数据中是否有与起始字节0X22H、结束字节 0X33H和转义标识0XDBH相同的数据,如果没有,则正常发送;如果有,则检测出与这两个字节相同数据的个数,并将该个数填充到数据长度字节的高4位中;同时,将这些数据前添加转义字符标识,并将该数据进行转义。如数据0X22H。0X33H,0XDBH…,则转义成0XDBH。0XD2H。 0XDBH,0XD3H,0XDBH,0XDDH…。PC机在接收到数据帧后,首先检查数据长度字节,看其高4位是否为0,如果为0,说明该数据组不存在转义字符,可以直接处理;如果为N。则表明数据组中存在N个转义字符,并且每个转义字符都以0XDB开始,需要首先将它们重新修改回原始数据。相比而言,这种办法有很好的稳定性和接口利用率,其数据流量也不会很高。
2.3 CAN接口程序设计
CAN总线的接口程序主要就是进行SJA1000的初始化过程和后面的接收中断处理过程。CAN初始化主要是设置CAN的通信参数。需要初始化的CAN控制寄存器有:模式寄存器(MOD)、验收代码寄存器(ACR)、验收屏蔽寄存器(AMR)、总线定时寄存器(RTR)、输出控制寄存器(OC)、中断寄存器(IR)和中断使能寄存器(IER)等。这些寄存器都只能在SJA1000处于复位状态下才可写访问。当SJA1000进入工作模式后,就能够自动接收总线上的数据,并将其放入接收缓冲区,同时产生接受中断,单片机进入中断后将数据从缓冲区中读出,并释放缓冲区。中断返回后,再将数据封装成帧发送给PC 机。
2.4 PC端程序设计
PC端程序使用VB 6.0进行开发。VB 6.O在图形界面的制作上比较方便,使用Mscomm组件能够轻松地制作串口的监视环境。只要在软件设计时将上述协议添加进行。图5给出了使用VB 6.0开发的软件调试情况。
3 结 语
该CAN总线接口卡经过实验验证,证明可以达到预期的要求,能够良好地监视总线上的数据,而且结构简单,有较大的利用价值。当CAN总线系统数据流量较大时,可以考虑使用USB接口和PC机进行通信,这样就能够更好地解决速度匹配和应用场合受限的问题。
- 大唐电信胖瘦可转型WLAN整体解决方案(03-14)
- 巨型无线城市天馈解决方案(06-01)
- TD-LTE/GSM共站部署技术(06-17)
- RFID工厂仓储物流解决方案(12-21)
- 3G4G应用中MIMO技术的实现挑战与解决方案(01-17)
- 联欣RFID无线作业管理系统解决方案 (05-07)