CAN总线漫谈

最近要进行工业数据采集,各种协议各种头大,带上一脸懵逼,特此记下这几天的进展——个人对CAN总线的总结及理解,非专业人士,可能存在错误。

CAN总线简介

CAN是Controller Area network的缩写,其实也就是控制局域网。目的是为了实现各节点之间的自由通信。理论上可以挂无数个节点,实际上因为各种原因做不到。
CAN被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置ECU之间交换信息,形成汽车电子控制网络。是ISO国际标准化组织标准化的穿行通信协议。(纯属废话,看了也没用)

CAN总线经过ISO标准化后,有ISO11898标准和ISO11519-2标准,这两种标准,数据链路层定义相同,物理层不同。(知道有这么个东西就行,不知道也无所谓)

重点在这里

CAN总线有数据链路层物理层

数据链路层:细分为逻辑链路控制子层(LLC)和介质访问控制层(MAC)。MAC是CAN协议的核心部分。数据链路层的功能是将物理层收到的信号组织成有意义的消息,并提供传送错误控制等传输控制流程。具体就是消息的帧化仲裁应答错误的检测或者报告。数据链路层的功能通常在CAN控制器的硬件中执行。

物理层:分为物理信令(PLS)、介质附件(PMA)和介质附属接口(MDI)。物理层定义了信号实际的发送方式、位时序、位的编码方式及同步步骤。(就是硬件上的这些东西呗,带上些信号电平等电气性质)

CAN总线电平分为显性电平和隐性电平两种(也只有这两种),注意:显性电平为“0”,隐性电平为“1”(为啥这样那,CAN总线的两条线都处于高电平,没有电压差,为隐性,其中一条线有高电平变为低电平,两条线之间有了电压差,才有显性表现,为显性,就是有两条线之间有电压差,为显性,没有为隐性
其物理层的特征如下,方便理解:
ISO11898和ISO11519-2的物理层特征
ISO11898和ISO11519-2的物理层特征

CAN总线的通讯速度和总线长度是根据系统设定的,通讯速度越快,总线就越短,大概是下图的关系。在这里插入图片描述

CAN总线数据链路层基本原理

首先线介绍个概念,数据通信中最常用的一种方式就是分组交换和传输,就是把传输的文件(比如一个照片)拆分开,按着统一的形式打包成数据包,一个包一个包的传输,等数据到达目的地后,再把数据进行重新组装,形成和发送端相同的文件。这里的同个格式的数据包,称为消息帧,一个帧就是一个包。

消息帧是串行通信的传输基本单元,俗称为数据包、报文。消息帧除了包括需要传输的数据外,还要装入消息帧在网络中传输的各种信息,如目标地址、发送地址、差错控制、同步等附属保障数据的内容。
CAN标准消息帧结构如下图:
在这里插入图片描述

CAN扩展消息帧结构如下在这里插入图片描述
可以看出,标准帧和扩展帧的区别在于仲裁场不同,后面细讲。

按用途上划分,CAN消息帧可以分为数据帧、远程帧、错误帧、过载帧和帧间隔五种。数据帧是发送节点向接受节点传输数据用的。远程帧用于接受节点想发送节点请求发送数据。错误帧是当某个节点检测到总线上有错误时,向其他接待你通知出错,停止错误帧的发送。过载帧用于接收节点通知发送节点,接收方还没有准备好,延迟发送。帧间隔用于将数据帧及遥控帧与前面的帧分离开来。

数据帧
在这里插入图片描述
数据帧由7个不同长度的位场组成。如上图所示。

  1. 帧起始(SOF,start of frame)
    用于标志数据帧或者远程帧的开始,作用是向总线上其他节点表明自己要发送信息。
    帧起始的值为“0”,也就是显性电平。当一个节点要发送数据时,首先要检验总线上有没有数据发送,若持续一段时间无数据发送,则开始发送数据。
  2. 仲裁场(arbitration field)
    仲裁场的作用是给出本帧数据的身份证号码,这号码确定了本帧的优先级和重要性,并向总线上其他接待你标出是数据帧还是远程帧。
    标准格式中,仲裁场由11位标识符和RTR位组成。扩展格式中,仲裁场由29位标识符、SRR位、标识位和RTR组成。
    标识符:CAN给每一条报文分配唯一一个ID,代表着这条报文的重要程度、优先级等信息。
    RTR(远程传输请求):该位为显性电平“0”时,该帧为数据帧,为隐性电平“1”时,为远程帧。
    SRR(替代传输请求):扩展格式中,为隐性电平“1”。
    IDE(标识符扩展):扩展格式中处于仲裁场,为隐性电平“1”,标准格式中,属于控制场,为显性电平“0”。
  3. 控制场(control field)
    控制场的作用是说明这一帧的数据场有多少位。其由6位组成,第一位第二位为保留位,第三到六位为数据长度码(DLC)。长度码含义如下所示,表示数据场位数。
    在这里插入图片描述
  4. 数据场
    用于装载数据帧需要传输的数据,0-8自己组成。由控制场决定第几位开始为要传输的数据。
  5. CRC场
    用于校验传输过程中是否有错,好复杂的说,大家可以自己查下循环冗余码。反正是利用的时除法及余数原理来做错误侦测。
  6. 帧结束
    用于向总线上其他节点宣布此帧到此结束,由7位隐性电平构成,即7个“1”

再啰嗦最后几点,远程帧和数据帧几乎相同,就是没有数据场,RTR位为“1”,DLC值为所请求的数据字节数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值