CAN通信

目录

CAN总线特点

负载率计算 

CAN的分层结构 

CAN总线结构

Node 

Message 

Signal

信号可靠性

过滤码(Filter Code )和掩码(Mask Code):

CANalyst-II_CAN分析仪滤波设置

Motorola和Intel


CAN总线特点

CAN总线特点如下:

可以点对点、一点对多点(成组)及全局广播几种传送方式接收数据。

通信速率最高可达1MB/s(此时距离最长40m)。

通信介质可采用双绞线,同轴电缆和光导纤维,一般采用廉价的双绞线即可,无特殊要求。

负载率计算 

CAN的分层结构 

CAN总线结构

CAN-bus采用总线网络拓朴结构,在一个网络上至少需要有2个CAN-bus 节点存在。在总线的2个终端,各需要安装1个120Ω的终端电阻;如果节点数目大于2个,中间节点就不要求安装120Ω终端电阻。 

Node 

一条CANBus上面有多个节点(Node ),如下图的IOB和VCU

一个节点(Node) 可配置总线名(Network Name)和节点名( Node Name)

一个节点下可以有多条消息(message)如下图

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使能发送。

Signal

一条消息(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)

节点通过控制器中过滤码(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,节点接收总线上所有消息。

CANalyst-II_CAN分析仪滤波设置

屏蔽寄存器的某一位等于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

Motorola-大端模式:低字节放在高地址位

Intel-小端模式:低字节放在低地址位

先发送LSB举例。当数据小于1字节(8位)的时候,Intel和motorola对数据存放方式相同,如图

例如0x12(0~8bit)转换为二进制为 

因为小于8位,都是在一个字节内,字节内都是从低位排到高位,所以方式相同

 因此采用Intel模式和Motorola模式存放都为0x12

当数据大于1字节(8位)的时候,Intel和motorola对数据存放方式如图

例如0x123(8~32bit)转换为二进制为

例如0x123456789(32bit~64bit)转换为二进制为

例如0x123456789(32bit~64bit)转换为二进制为

  

  • 12
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值