目录
CAN总线特点
负载率计算
CAN的分层结构
CAN总线结构
Node
Message
Signal
信号可靠性
过滤码(Filter Code )和掩码(Mask Code):
CANalyst-II_CAN分析仪滤波设置
Motorola和Intel
CAN总线特点如下:
可以点对点、一点对多点(成组)及全局广播几种传送方式接收数据。
通信速率最高可达1MB/s(此时距离最长40m)。
通信介质可采用双绞线,同轴电缆和光导纤维,一般采用廉价的双绞线即可,无特殊要求。
CAN-bus采用总线网络拓朴结构,在一个网络上至少需要有2个CAN-bus 节点存在。在总线的2个终端,各需要安装1个120Ω的终端电阻;如果节点数目大于2个,中间节点就不要求安装120Ω终端电阻。
一条CANBus上面有多个节点(Node ),如下图的IOB和VCU
一个节点(Node) 可配置总线名(Network Name)和节点名( Node Name)
一个节点下可以有多条消息(message)如下图
一条消息可以配置以下信息:
Name:名字。
Type:CAN类型,CAN Standard标准帧-11位CAN ID;CAN Extended扩展帧-29位CAN ID。
ID:十六进制数,ID值越小,Message优先级越高。
标准帧ID最大7FFH,扩展帧ID最大1FFFFFFFH。
DLC:数据长度。取值范围0~8,决定数据部分字节数。
Transmiter:发送节点。
Cycle Time:循环时间,ms 为单位。
TxMethod:报文发送方式,Cycle循环帧发送;Event帧发送;If active使能发送。
一条消息(message)下可以有多个信号(signal)如下图
一个信号可以配置以下信息:
Name:名字。
length[bit]:信号长度,单位bit。
Byte Order:字节序。 Motorola:大端模式 Intel:小端模式
Unit:信号单位。如信号是电压值,单位可 为V。
Value Type:数据类型。
Signed:有符号数最高位是符号位,最高位为0代表正数,最高位为1代表负数;
Unsigned:无符号数最高位是数据位。
Init Value:初始值。
Factor:限定物理值的精度,根据需求指定,非零的值,默认为1。
Offset:偏移量。
物理值Physical value :程序中用的值。
总线值Raw value :实际传输的值。
物理值和总线值关系:
物理值[Physical value]=总线值[Raw value]*因子[Factor]+偏移量[Offset];
Minimum:最小值。
Maximum:最大值。
例如我们计算温度的时候,用无符号型数据,但是温度有零下,怎么表示呢,我们用这个偏移量,比如Factor=0.5,Offset=-40就表示得这个数据乘以0.5,再减去40,这样就能表示零下40度的数据,精度是0.5度。一个字节最大能表示255,乘以0.5大概剩下127.5,然后减掉40,就得出,我们数据的范围是从(-40度到87.5度)。
报文发送方式
周期型: Periodic;
事件型: On event;
使能型: If active;
周期事件型: Periodic and On event;
周期使能型: Periodic and If active
CRC:循环冗余校验,数据发送时通过一些计算公式算出随数据发送,数据接收时采用相同的计算公式再次计算,若相同则数据接收正确,若不同,则说明接收到的数据是错误数据。
Checksum: 防止信号改变 例如: Checksum =(byte0+byte1+…+byte6)XOR 0xFF
AliveCount: 消息计数
Heartbeat信号: 防止报文丢失 避免应用程序误操作
节点通过控制器中过滤码(Filter Code)和掩码(Mask Code),再检验总线上消息的标识符,来判断是否接收该消息(Message Filtering)。对于掩码,“1”表示该位与本节点相关,“0”表示该位与本节点不相关。
例1:仅接收消息标识符为00001567(十六进制)的帧,设置过滤码为00001567, 转换成二进制数
节点检测消息的标识符的所有位(29位),如果标识符为00001567接收,否则舍弃。
例2:接收消息标识符为00001567到 0000156F的帧,设置过滤码为00001560, 转换成二进制数
节点检测消息的标识符的高25位,最低的4位则不care。如果标识符最高25位相同则接收,否则舍弃。
例3:接收消息标识符为00001560到 00001567的帧,设置过滤码为00001560, 转换成二进制数
节点检测消息的标识符的高26位,最低的3位则不care。如果标识符最高26位相同则接收,否则舍弃。
例4:接收所有消息帧,设置过滤码为0,设置掩码为0,节点接收总线上所有消息。
屏蔽寄存器的某一位等于1时,表示忽略对该位对应ID位的滤波,如屏蔽寄存器值=FFFFFFFF,则可接收所有消息。 验收滤波器ACR,验收屏蔽器AMR都是32bits(4bytes)。对于需要验收滤波的ID值,ID的最高位(标准帧ID最高位为Bit10,扩展帧为Bit28)与ACR/AMR的最高位(Bit31)位对齐,即左对齐方式。
例1:适配器接收ID为0x378到0x37F的标准帧。 0x378转换为二进制是001101111000,左对齐即左移21位, 0x37F转换为二进制是001101111111
Motorola-大端模式:低字节放在高地址位
Intel-小端模式:低字节放在低地址位
先发送LSB举例。当数据小于1字节(8位)的时候,Intel和motorola对数据存放方式相同,如图
因为小于8位,都是在一个字节内,字节内都是从低位排到高位,所以方式相同
因此采用Intel模式和Motorola模式存放都为0x12
当数据大于1字节(8位)的时候,Intel和motorola对数据存放方式如图
例如0x123(8~32bit)转换为二进制为
例如0x123456789(32bit~64bit)转换为二进制为
例如0x123456789(32bit~64bit)转换为二进制为