在嵌入式程序猿的公众号里,曾多次介绍过NXP的flexcan以及基于flexcan的一些其他协议和开发,最近在用NXP的另外一款片子,使用的是mscan,这两种在底层存在很大区别,所有寄存器和配置都不一样,但都遵守CAN2.0A/B大家在使用时候要注意。flexcan 里面寄存器都是32位,而mscan都是8位,且二者在结构机制上有不同,在芯片级是两个IP。mscan是之前NXP的8位机上普遍采用的机制,而在kinetis32位上基本都是flexcan。
在CAN中大家一定要记住隐性代表就是1,显性代表就是0,如果记不住,可以这样记,0比较胖不容易隐藏,所以就是显性,1比较瘦所以容易隐藏就是隐性
还有最最重要的一点,个人认为就是要会配置跟波特率位时间相关的几个参数,曾经推送过的计算文章和实用,如果忘记了可以去在反复看下,希望能帮到各位。
在配置位速率相关参数时候都必须遵循CAN标准的位时间要求
同步段:
位时间的同步段用于同步总线上不同的节点。这一段内要有一个跳变沿。
传播段:
传播段用于补偿网络内的物理延时时间。它是总线上输入比较器延时和输出驱动器延时总和的两倍。
相位缓冲段 1、相位缓冲段 2( PHASE SEG1、 PHASE SEG2):
相位缓冲段用于补偿边沿阶段的误差。这两个段可以通过重新同步加长或缩短。
采样点:
采样点是读总线电平并解释各位的值的一个时间点。采样点位于相位缓冲段1( PHASE_SEG1)之后。
在mscan中配置传播段和相位缓冲端在一个地方,在flexcan中配置这两个值是分开的。在flexcan中
mscan配置