一、can电平与逻辑值:
显性Vh-Vl>0.9 逻辑0
隐性Vh-Vl<0.9 逻辑1
接线方式1:闭环总线网络
CAN物理层的形式主要分为闭环总线及开环总线网络两种,一个适合于高速通讯,一个适合于远距离通讯。CAN闭环通讯网络是一种遵循ISO11898标准的高速、短距离网络,它的总线最大长度为40m,通信速度最高为1Mbps,总线的两端各要求有一个
“120欧”的电阻。来做阻抗匹配,以减少回波反射。
为什么是120欧姆的:
按照ISO 11898规范,为了增强CAN-bus 通讯的可靠性,CAN-bus 总线网络的两个端点通常要加入终端匹配电阻(120Ω)。终端匹配电阻的大小由传输电缆的特性阻抗所决定,例如,双绞线的特性阻抗为120Ω,则总线上的两个端点也应集成120Ω终端电阻。CAN总线在长距离通信的情况下,120Ω的电阻也未必合适,此时就需要调整。以标准的1.5平方毫米线径的屏蔽双绞线为例:1KM~2KM终端电阻值120Ω;3KM—160Ω;4KM—220Ω;10KM—390Ω。用到CANscope的眼图分析,可以很直接的观察到因导线阻抗、干扰问题而导致的通信电平幅值不标准,从而排查到总线错误原因。
接线方式2:CAN开环总线网络是遵循ISO11519-2标准的低速、远距离网络,它的最大传输距离为1km,最高通讯速率为125kbps,两根总线是独立的、不形成闭环,要求每根总线上各串联有一个“2.2千欧”的电阻
二、数据帧、远程帧、错误帧、过载帧、帧间隔
数据帧:节点向节点发送数据
远程帧:接受节点向具有相同ID的节点请求数据帧
错误帧:检测到错误是向其他节点通知错误
过载帧:通知节点自己还没做好准备
间隔帧:用于将数据帧和远程帧分离的帧
三、can帧格式有两种,一种是标准帧一种是扩展帧
作用:扩展更多的CAN节点
标准帧2^11(ID 标识符)
扩展帧2^29(ID 标识符)
关于仲裁机构(can总线显性可以覆盖隐性):所有节点共同遵循一个协议(形成一个仲裁机构),也就是在发送数据的同时监控数据的仲裁域,如果发送的是隐性检测到的是显性,本节点自动退出,具体如下:(来源于百度)
仲裁
只要总线空闲,总线上任何节点都可以发送报文,如果有两个或两个以上的节点开始传送报文,那么就会存在总线访问冲突的可能。但是CAN使用了标识符的逐位仲裁方法可以解决这个问题。
在仲裁期间,每一个发送器都对发送的电平与被监控的总线电平进行比较。如果电平相同,则这个单元可以继续发送。如果发送的是一"隐性"电平而监视到的是一"显性"电平,那么这个节点失去了仲裁,必须退出发送状态。如果出现不匹配的位不是在仲裁期间则产生错误事件。
帧ID越小,优先级越高。由于数据帧的RTR位为显性电平,远程帧为隐性电平,所以帧格式和帧ID相同的情况下,数据帧优先于远程帧;由于标准帧的IDE位为显性电平,扩展帧的IDE位为隐形电平,对于前1位ID相同的标准帧和扩展帧,标准帧优先级比扩展帧高。
can总线是基于广播的数据传播方式也就是每个节点都能收到其他节点的数据,但是每个节点都能设置相应过滤器(具体可以参考STM32相关CAN配置),可以不接收不需要的数据,
can系统中所有ID是不想同的,也可以说所有优先级没有相同的,
但是,can的远程数据请求(Remote Data Request) 通过发送远程帧,需要数据的节点请求另一节点发送相应的数据。回应节点传送的数据帧与请求数据的远程帧由相同的标识符命名(也就是相同的ID)。同时仲裁会确定数据帧优先级大于远程帧优先级(确保数据的实时性)
关于仲裁机构有一个自己的理解,现在还没有找到资料证实,也就是仲裁机构在仲裁过程中,数据是同步进行的,一位都不能有差错,这样优先级(ID)才能起到优先级的作用,如果一个节点在发送数据的时候,有其他节点也在发数据,但是不是同步的进行的,这样仲裁机构就会出错,然后应该有相关的协议一直在检测can总线是否是在空闲状态,这种状态肯定是检测一定的时间,
以下来源于百度:
判断总线状态可以监测总线电压,简单来说CAN_H和CAN_L之间的差分电压大的(一般在2V左右)就是显性状态,差分电压小的(理论上是0V)就是隐性,当然容错CAN要复杂很多,就不是这样的。当你一值监测到总线都处于隐性状态(就是两根线电压值差不多)那就说明总线处于空闲状态,如果是显隐交替,那就是总线不处于空闲状态。CAN总线空闲的定义是连续11个位的隐性电平(逻辑为1),一般用于总线关闭时的自动恢复。而CAN的显性电平逻辑为0,一旦有显性就说明肯定至少有1个节点在发送波形,那就不是空闲了。CAN的帧间隙是连续3个以上隐性电平。
关于can的数据填充连续5个逻辑以后需要填充一个数据,这样会造成可能和真是的数据相互冲突,这种放冲突的机制具体是什么后续查询资料。
位填充的作用是:
避免总线上出现太多的连续相同码时,收发双方失步,因为CAN总线是NRZ编码的。位填充可以确保至少每6个位时间就会产生跳变沿,这样的话才能让接收端的锁相环保持与发送端同步。
以上算是一个学习记录,有什么不对的望指出。