CAN仲裁问题
CAN总线同一时间只能有一个设备操作总线发送数据,当多个设备同时发送需求,则会根据资源分配规则,一次满足多个设备的发送需求,确保同一时间只有一条设备操作总线。
CAN总线有两种资源分配规则:先占先得、非破坏者性仲裁
先占先得:若当前已经有设备正在操作总线发送数据帧/遥控帧,则其他任何设备不能再同时发送数据帧/遥控帧,任何设备检测到连续11个隐性电平,即认为总线空闲,只有在总线空闲时,设备才能发送数据帧/遥控帧。若总线活跃状态其他设备有发送需求,则需要等待总线变为空闲,才能执行发送需求。
非破坏性仲裁:若多个设备的发送需求同时到来或因等待而同时到来,则CAN总线协议会根据ID号(仲裁段)进行非破坏性仲裁,ID号小的(优先级高)取到总线控制权,ID号大的(优先级低)仲裁失利后将转入接收状态,等待下一次总线空闲时再尝试发送。
CAN总线非破坏性仲裁的两个要求
线与特性:总线上任何一个设备发送显性电平0时,总线就会呈现显性电平0状态,只有当所有设备都发送隐性电平1时,总线才呈现隐性电平1状态,即:0 & X & X = 0,1 & 1 & 1 = 1
回读机制:每个设备发出一个数据位后,都会读回总线当前的电平状态,以确认自己发出的电平是否被真实的发送出去了,根据线与特性,发出0读回必然是0,发出1读回不一定是1
CAN总线为什么ID号小的优先级高
可以从仲裁过程推理出来,ID号越小,其二进制数据的1出现的就越晚,ID号越大,1就出现的越早,ID号出现差异,且发出数据1的仲裁失利,所以ID号出现的越早,就越容易仲裁失利,ID号1出现的越晚,仲裁就会更晚失利。