CAN学习总结与LINUX CAN指令 您所在的位置:网站首页 can扩展帧格式 CAN学习总结与LINUX CAN指令

CAN学习总结与LINUX CAN指令

2023-04-13 06:42| 来源: 网络整理| 查看: 265

引言为什么需要can?现在汽车逐渐走向智能化。传统汽车目标已经不在是像以前追求速度、舒适、经济安和全等多因素,主要以车为中心。现代汽车而是更加注重环保、智能、舒适度等以人、环境为中心。所以不断增加传感器、逆变电路换电机和动力电池,使得汽车稳定的机械结构,不断被替换成各种各样的电器设备。而这些众多繁杂的电器设备又使得汽车上线束繁杂、数据互通麻烦。这时候我们汽车线束救世主BOSCH博世在80年代初为解决现代汽车中众多的控制与测试仪器之间的数据交换而开发了一种串行数据通信协议-CAN总线。CAN什么是CAN?CAN全称是Controller Area Network(控制器局域网)。是ISO国际标准化的串口通信协议。是一种多主总线,具有突出的可靠性、实时性和灵活性。CAN总线通常采用双绞线或光纤总线传输介质。CAN的历史1983年:BOSCH公司内部启动研究车内网络。1986年2月:在密西根州底特律的汽车工程师SAE会议上,BOSCH公布CAN总线协议作为汽车电子解决方案。1987年:同一年CAN控制器芯片由英特尔和飞利浦生产的先后上市,英特尔先发布82526,不久飞利浦随后发布82C200.1991年:梅赛德斯奔驰W140是第一款采用基于CAN的多路布线系统的量产车;BOSCH公司发布CAN2.0,分CAN2.0A(11位标识符标准CAN)和CAN2.0B(29位标识符扩展CAN)。1993年11月:CAN总线被接受并列入国际标准组织IOS的国际标准中,并发布ISO 11898(高速CAN)和ISO 11519(低速CAN).高速CAN与低速CAN 对立统一统一性:架构相同,都有电阻、总线和节点;作用相同,都是局域网内设备之间通信。对立性:通信速率不一样,高速CAN通信速率可高达1Mbps,低速CAN通信速率可高达125Kbps;电阻值不一样,高速CAN总线之间并联一个120Ω的电阻,低速CAN总线之间并联一个2.2KΩ电阻;帧类型不一样,高速CAN有两种类型,标准帧和扩展帧,低速CAN只有标准帧。1994年:美国汽车工程师协会SAE制定SAEJ1939标准,用于卡车和巴士控制和通信网络。2003年:ISO开始将原先的ISO 11898CAN标准逐步分离为相互独立6个部分(ISO 11898CAN-X)。2016年:ISO把6个相互独立部分又整合在一起。ISO 11898六个部分及介绍CAN数据总线的数据传输终端数据传输信号终端需要电阻隔离。电阻作用是防止差分信号在CAN_H与CAN_L的回路之间产生影响。一个CAN节点即一个CAN设备都有一个CAN控制器和一个CAN收发器。控制器接收MCU数据并发送给CAN。CAN信号是由收发器将数字信号高低电平转换为差分CAN信号进行传送:逻辑1(隐形):CANH=CAN_L=2.5V左右 ;逻辑0(显性):CAN_H比CAN_L高,CAN_H=3.5V ,CAN_L=1.5V 。线与机制。当总线挂着多个设备节点且同时发送时,总线会是什么状况呢?多个节点都发隐形电平(1)时,总线状况是1,只要一个节点发送显性电平(0),总线状态是0。线与机制节点1节点2总线状况000010100111CAN节点内部框架与CAN总线CAN数据传输系统基本特点:标识符优先权的多主方式在网络中,标识符ID唯一的。标识符越小,优先级越高。ID并不是地址,而是优先级。仲裁机制载波监测。总线上的节点发送信息报文前要先检测总线是空闲状态。当节点发送数据冲突时,优先级高的节点报文先发,低的会被暂停。NRZ不归零编码 数据位按照CAN_H与CAN_L的逻辑关系,显性为0,隐形为1。消息以固定格式发送接收滤波 节点的接收器是如何判断CAN总线上CAN帧是否与自己有关是通过一种帧接收滤波的处理方法判断支持远程请求 CAN帧中有远程帧。配置灵活。与总线相连的节点没有类型“地址”的信息,在总线增加设备时,所以在软硬件及应用层不需要改变。可配置通信速度即比特率(差分信号不太准确) 在同一网络所以节点的通信速度一致。若通信速度不一致就会报错,妨碍同一网络的通信。不同CAN网络间可有不同通信速度。差错管理机制 能自动检测错误信息并由出错计数器记录次数。 当出错严重时,节点会与总线隔离。这种根据监测故障节点是短期还是永久故障,并采取“故障界定隔离”。CAN总线速率可高达1Mbit/S。CAN结构CAN的分层结构遵循ISO/OSI标准模型,CAN分数据链路层和物理层。数据链路层又分逻辑链路控制子层LLC和媒体访问控制子层(MAC)报文什么是报文?报文也叫消息帧,报文是网络中数据交换与传输的数据单元。报文包含了优先级标识和数据内容。报文的帧格式RTR: 远程传输请求位,在数据帧结构中RTR为显性电平(0),在远程帧中,为隐性电平(1)SRR: 替代传输请求位,在扩展格式中始终为隐性位(1)IDE: 标识符扩展位,在扩展格式中为隐性电平(1)报文的分类

根据用途不同分为4类

数据帧 发送数据远程帧 向其他节点请求发送同一标识符(ID)的数据帧错误帧 指明已检测到总线错误超载帧 在数据帧(或远程帧)之间提供一附加延时数据帧的组成数据帧由7个场组成:帧起始、仲裁场、控制场、数据场、CRC场、应答场和帧结束帧起始(Start of frame,SOF):标志着数据帧和远程帧的起始,仅由一位显性组成。总线空闲时,才允许开始发送。仲裁场:判断报文ID的优先权,ID越小,优先级越高。标识符的位从高位到低位顺序发送,ID.0是最低位,是最后发送。按照帧分类的帧优先级:数据帧>远程帧 标准帧>扩展帧组成在标准帧格式中,仲裁场由11位标识符和RTR位(远程请求位)组成在扩展帧格式中,仲裁场由29位标识符、SRR(替换传输请求)位、标识扩展位IDE和RTR组成。IDE位(标识符扩展位):只有扩展帧存在时,IDE为隐形电平。SRR(代替传输请求位):扩展帧格式中始终位隐形位。控制场:控制场由6位组成,包括数据长度码DLC和两个保留位,保留位且为显性位。数据长度码DLC指出了数据场里的字节数目(0~8个字节)CRC(循环冗余码)场由CRC序列(15bit)和CRC界定符(1bit)。作用:可以判断帧是否出错,但并不能指出那个数据位出错和纠错。应答场:两位,包含应答间隙和应答界定符。应答过程发送器发送两个隐形位。正确接收有效报文的接收器,在应答间隙发一个显性位给发送器。帧结束 每个数据帧和远程帧均由7个隐位组成的标志序列界定。远程帧组成:由6个分位场组成帧起始、仲裁场、控制场、CRC场、应答场和帧结束。作用:接收数据的节点可以通过发送一个远程帧来要求源节点发送数据。特点:远程帧RTR(远程传输请求)位是隐位、不存在数据场。

出错帧

组成:由两个不同的场组成,第一个场由来自各节点的出错标志叠加而成。第二场是错误标定符。作用:区分错误帧并计数错误次数。在接收和发送消息时检查错误、通知错误的帧。出错标记标记有两类主动错误标志(ERROR-ACTIVE):由6个连续的显性位组成,由处于主动错误状态的节点检测出错误时输出的错误标志;被动错误标志:由6个连续的隐性位构成,可被来自其他节点的显性位改写;处于被动错误状态的单元检测出错误时输出的错误标志。接收节点发现总线上的报文有错误时将会自动发出主动错误标志(6个连续显性位)。其他节点检测到主动错误标志位后发送被动错误标志(6个连续隐性位)

超载帧

组成:由超载标志和超载界定位场组成。作用:用于接收节点通知尚未完成接收准备的帧。过载情况: 接收器的内部情况(此接收器对于下一数据帧或远程帧需要一定延时)在间隔的第一和第二字节检测到一个“显性”位。CAN节点在错误界定符或过载界定符的第8位采样到显性位,节点会发送一个过载帧。错误计数器不会计数。

帧间空间

数据帧和远程帧均以一种称为帧间空间的位场与先前各种类型的帧(数据帧、远程帧、出错帧或超载帧)相分隔。超载帧和出错帧前面没有帧间空间。组成包括帧间歇场(ITM)、总线空闲场(bus idle)、以及暂停发送位(延迟发送)等场构成。其中暂停发送只用于错误认可状态下的节点刚完成发送动作的场合。帧间空间各个场的介绍间隙帧由3个隐形位组成。间歇期间,不允许启动发送数据帧或远程帧。可操作通报超载状态。总线空闲总线空闲时间长短不限。总线一经确认处于空闲状态,则任何节点都可以访问总线来传送信息。发送帧总线冲突后,优先级低的帧从间歇后的第一位开始送出。对总线检测,出现在总线空闲期间的显性位被认为是帧起始。暂停发送处于错误认可状态的节点完成其发送动作后,在被容许发送下一帧以前,它要在间歇之后发送8个隐形位。若间歇期间,另外一个节点执行了发送动作,则本节点将会变成正在发送帧的接收器。

CAN负载与网络延时

总线负载与消息延时对应图表CAN总线消息帧编码说明-位填充构成一消息帧的帧起始、仲裁场、控制场、数据场和CRC序列均借助位填充规则进行编码,以减少传送过程中的突发错误当发送器在发送的位流中检测到5位连续的相同数值时,将自动地在实际发送的位流中插入一个补码位数据帧和远程帧的其余位场(CRC界定符、ACK场、帧结束)采用固定格式,不进行填充出错帧和超载帧同样是固定格式,也不进行位填充报文中的位流按照非归零(NRZ)码方法编码,这意味着一个完整位的位电平要么是显性,要么是隐性。

CAN的错误类型(两类5种)

发送位错误:向总线发送差分信号同时也在监视总线,当监视到总线位 数值与送出的位 数值不同时,则在该时刻检出一个位错误。应答错误:在应答间隙,发送器未检测到显位时,则由它检出一个应答错误。应用于数据帧和远程帧接收部分填充错误:在需要位填充的段内,连续检测到 6位相同的电平时所检测到的错误。CRC错误:CRC 序列是由发送器 CRC 计算的结果组成的。接收器以与发送器相同的方法计算 CRC。如发送器CRC计算结果与接收到的 CRC 序列不相同,则检出一个 CRC 错误格式错误:当固定形式的位场中出现一个或多个非法位时,则检出一个格式错误。

错误标定的发送

检测到出错条件(位错误、填充错误、格式错误或应答错误)的节点通过发送错误标志进行标定。当节点检测出错误条件,在下一帧发送出错标志。当检测到CRC错误时,出错标志在应答界定符后面那位开始发送。

CAN的故障界定

作用:区分临时错误和永久故障的方法目的:防止连续发生错误的节点干涉无错节点之间的通信,实现数据传输系统即使在节点发生故障的情况下也能维持很高的可用性。故障界定策略 各个CAN节点配置发送错误计数器(TEC:transmit error counter)和接收错误计数器(REC:receive error counter)故障界定状态(节点状态)节点模式及节点状态错误计数器正常模式 正常参与总线通信TEC=REC=0主动错误ERROR-ACTIVE模式 检错到错误时发送主动错误标记TEC=128总线脱离BUS-OFF模式 不参与总线通信 当总线监听到128次11个连续隐性位可进入主动错误模式,TEC和REC复位为0TEC>255

CAN的物理层

PLS物理信令子层规范CAN的传输速率可以达到1Mbps,通常由石英晶振体作为时钟发生器;但不稳定(温度、电压及器件异常);ECU节点需通过再同步进行弥补。位时间:一位持续时间。ECU同步化动作、网络传输延时补偿、采样点定位等总线管理功能,均以位时间位框架执行,并由CAN协议的可编程位定时逻辑实现。组成同步段SYNC_SEG:这一段时间用来使总线上的各ECU同步。在该段内会出现一个跳变沿传播段PROP_SEG:用来对出现在网络内部的物理延迟时间进行补偿;该延迟时间由信号在总线上的传播时间和ECU内部的延迟时间组成相缓冲段1( PHASE_SEG1 )和相缓冲段2( PHASE_SEG1 用来补偿跳变沿的相位误差;可以被再同步处理延长或缩短。采样点是读取总线电平并将其转换成位值的时刻,位于PHASE_SEG1的结尾信息处理时间:从采样点开始留出的一段用于计算后续位电平的时间

LINUX CAN指令

1.sudo modprobe can //加载can模块

2.sudo ip link add dev can0 type vcan //添加can0网卡

3.ifconfig -a //可以查到当前can网络 can0 can1,包括收发包数量、是否有错误等等

4.ip link set can0 up type can bitrate 800000 //设置can0的波特率为800kbps,CAN网络波特率最大值为1Mbps

5.ip link set can0 up type can bitrate 800000 loopback on

设置回环模式,自发自收,用于测试是硬件是否正常,loopback不一定支持

6. ip link set can0 down //关闭can0 网络

ip link set up can0 //启动CAN0网络

7.cansend can0 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88

发送默认ID为0x1的can标准帧,数据为0x11 22 33 44 55 66 77 88

每次最大8个byte

cansend can0 123#11223344//测试can0发送数据 发送单位byte 理论上0~8字节

8.cansend can0 -i 0x800 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88 -e

-e 表示扩展帧,CAN_ID最大29bit,标准帧CAN_ID最大11bit

-i表示CAN_ID 0x800

9. cansend can0 -i 0x02 0x11 0x12 --loop=20 //--loop 表示发送20个包

10.candump can0 //接收CAN0数据

11.ip -details -statistics link show can0 //统计CAN0信息



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有