了解CAN功能,学习CAN功能,理解CAN和串口的区别,以及它和RS485的相似之处。
1、“多主机”特性
在CAN网络通讯中,无需其它设备同意,每个CAN设备都可以主动向外发送数据,且所有设备都会收到数据,包括它自己。而在RS485网络中,其它设备通常需要在主机的协调下才可以进入正常的通讯。
2、“高优先级的标识符设备”优先发送特性
假如网络中有设备在发送“标识符数据”,“高优先级的标识符设备”会打断发送方,进入优先发送“标识符”。如果它发现设备正在发送“非标识符数据”,它会主动让对方发送完成。为了保证多主机特性,“高优先级的标识符设备”的发送频率不要过高。
3、发送方知道发送的数据被正确接收
在CAN网络通讯中,每帧数据发送完成,所有的CAN设备都会给出应答,发送方应答隐性电平,而接收方均回答显性电平。由于显性电平优先,发送方会接收到正确的应答。在TTL串口和RS485网络中,发送方不知道发送是否被对方接收了,也就是说,发送了,对方是否正确收到,它不管。而在CAN中,发送方不仅知道发送,还知道发送是否被正确接收。即使接收方知道“解析标识符”不正确,它们也会给出接收正确的应答。
4、知道网络是否繁忙
在CAN总线空闲时,总线上为隐性电平,而CAN会时刻接收网路中的这些位数据,通过空闲位,它会知道网络是否繁忙。
5、CAN收发器和RS485收发器
通过上图,我们发现CAN收发器和RS485收发器有点相似,但CAN收发器没有“使能发送和使能接收”控制引脚,因此,CAN收发器在发送的同时,也可以接收自己发送的数据,以及其它设备发送来的显性位。CAN允许发送和接收同时进行,但它接收的是自己发送的数据或是显性数据位。TTL串口也可以收发同时进行,但是,它收到的是其它设备的数据。有人会说,把TXD和RXD连接到一起,使用单线通讯,采用软件实现,但方法复杂。如果RS485在发送时,使能了RS485接收,这样就和CAN有点相似了,但是,它不是知道总线是否空闲。即使知道,效率也很低下。CAN采用硬件实现,效率更高,更快。
6、CAN过滤器
CAN过滤器会对指定的标识符进行过滤,但不影响CAN的FIFO工作,即使标识符不匹配,FIFO一样会移入新数据位。经过标识符过滤后,硬件会快速告诉CPU接收到正确的数据。
7、CAN标识符
CAN的硬件决定了一个CAN设备可能有多个设备标识符,也可能只有一个设备标识符。这个标识符,可以理解为地址,也可以理解为ID。在CAN网络中,可能会有多个设备拥有相同的标识符。这样,CAN通讯会更加自由,更加灵活。它不再象串口那样,设备地址需要唯一性才可以实现正确的多机通讯。当然你也可以通过复杂的程序去实现,那样做,实在是太复杂了。
8、CAN空闲位
CAN总线空闲的定义是连续11个位的隐性电平(逻辑为1)。而CAN的显性电平逻辑为0,一旦有显性就说明肯定至少有1个设备节点在发送数据,那就表明总线不是空闲了。CAN的帧间隙是连续3个以上隐性电平。具体多少个空闲位,没有测试。这个是搜索得到的。
以上内容,通过实验总结得到的,可能存在理解偏差。