典型的2种帧格式
标准帧:具有11位标识符
扩展帧:具有21位标识符
两种帧格式的区别通过控制场“control frame”中的识别符扩展位IDE来实现
每部分的含义
数据帧和远程帧都可以使用标准帧格式或者扩展帧格式
RTR:远程发送请求位,数据帧为显性,远程帧为隐性。
SRR:代替远程请求位(在扩展格式中在RTR位置,所以得此名),该位为隐性位。在这个地方占个位以保持标准帧和扩展帧IDE对齐,便可以判断标 准帧优先于扩展帧。
IDE:标识符扩展位,标准帧为显性,扩展帧为隐性。
R0、R1:保留位。
DLC:数据长度位。
CRC:校验位。
CRC分隔符:隐性位
ACK:应答位和应答界定位。在应答域中,发送器发出两个隐性位。接收器接收到报文后,在应答位期间,用显性位填充应答位作为回应,应答界定 则为保持隐性。
帧结束:由7个隐性位组成。
电压波形
双通道示波器记录的CANH-CANL线之间的电压。
CANopen从站中波特率设置为50Kbit/s,那么最小的脉冲宽度为20us,也就是传输1bit的时间为20us。其中,示波器的采样时间为2us。
CANopen主站发送数据
CANopen主站中发送的数据为如下
相关硬件
CANopen从站为Kollmorgen RGM,CANopen主站为USBCAN的工具,未采用商用控制器。示波器为泰科的双通道,通道1和通道2分别连接CANH和CANL,因为RGM没有CAN GND印出来,所以参考地连接到48VDC供电的负端(不知道是否有问题)。
电压波形转换为逻辑值
把读到的总线电压转换为二进制电平,下面波形中可以明显的看到SOF和EOF,前面一组为主站发送的数据,后半部分为从站返回的数据。
删除填充位
在can的协议中当连续出现5个高电平时就需要插入一个低电平,所以在解析的过程中需要将这些插入的数据删除。第500-1000个数据中,就可以明显看到低电平作为填充位。
逻辑电平
CANH和CANL的电压差值中,高电平为显性,逻辑上表示为0,低电平为隐性,逻辑上表示为1。所以,把示波器中的电压转换为CAN逻辑电平时,注意取反。我们在看CAN总线资料的时候,总会看到一个线与的概念,显性电平的逻辑为0,隐性电平的逻辑为1,所以在仲裁的时候ID越小的帧优先级越高。显性电平为什么逻辑为0呢,其实,这都是CAN收发器芯片完成的工作,在收到显性电平的时候,芯片会在Rx脚输出低电平,即0,这样就实现了CAN差分电平与TTL电平的转换。
如果有逻辑分析仪,就可以方便从采集到的波形中解析成实际的报文数据格式。如ZEROPLUS,可以作为CAN2.0逻辑分析仪。
。。。。。。略