目录
前言:该文章会持续更新
A.基础概念
A.1 字节
byte,1byte=8位(bit);
A.2 波特率
bps,表示每秒钟传送bit的数量,即传送二进制位的数量;
A.3 QoS
quality of service:服务质量,利用各种基础技术,为网络通信提供更好的服务能力,以解决网络延迟和阻塞问题,QoS关键指标:可用性、吞吐量、时延、时延变化、丢失。
A.4 AVB
audio video bridging,音频视频桥接,常用于大屏里的功放传输,比如MIC传输,AVB包括的协议: ①时间同步协议; ②流预留协议,可保证丢包率; ③转发,排队和流量整形协议,可保证队列按一定规则转发; ④音视频传输协议; ⑤....
A.5 TSN
time sensitive networking,时间敏感网络,用于提供确定性服务,如有限延迟,低延迟变动和低包丢失率,不仅适用以太网,适用所有的局域网; ①当buffer缓冲足够大,TSN就不存在丢包; ②延迟确定,大于某个边界,不再有延迟; AVB开始用于音视频,后来扩大使用范围后,更名为TSN,因此TSN的前身是AVB;
A.6 DDS
data distribution service,数据分发服务:专门为实时系统设计的数据分发/订阅;
A.7 SOME/IP
scalable service-oriented middleware over IP,基于IP面向服务的可拓展中间件;
A.8 SOME/IP与DDS的差异点
①都是面向服务的通信协议;
②都采用“以数据为中心”的发布和订阅模式;
③SOME/IP强调通信,占用资源小,DDS功能多,体量大,需要裁剪后才可用于自动驾驶;
④DDS是面向数据的访问系统,适用于多节点、大数据交互的应用场景,SOME/IP是面向服务的访问系统,适用于RPC(远程过程调用)以及变更通知;
⑤DDS更灵活,可伸缩性更强;
⑥SOME/IP在传输前需要建立连接,节点之间有一定的耦合性,而DDS是彻底解绑,订阅或发布方只要在自己程序里面订阅或发布数据就行了;
⑦SOME/IP只有1个QoS,DDS有至少20多个QoS;
⑧DDS适用于自动驾驶域,SOME/IP用于整车域,两者在应用中共存。
A.9 以太网帧
①基本MAC帧(不含VLAN)
②标识MAC帧(含VLAN):VLAN标签由协议标识符(TPID)和控制信息(TCI)组成; TPID包含原始类型字段的值,TCI由优先级(PCP)、丢弃资格指示符或规范格式指示符(DRI或CFI)和VLAN标识符(VID)组成,VID和PCP用于汽车行业;
③以太网帧有效负载数据最小长度46字节(不含VLAN标签)或42字节(含VLAN标签)~1500字节
A.10 协议
①UDP:用户数据报协议,是一种无连接传输协议,支持简单的数据报传输,发送不需要对方的反馈,因此无延时,可以做组播或者广播,多节点可同时接收;
②TCP:传输控制协议,面向连接的传输,IP地址和端口号用于标识2个节点,使用3次握手,发送方先传输包含SYN(synchronization sequence number,同步顺序编号)标识的段、单独的序列号((由一个随机数、ISN(initial sequence number,初始序列号、1个连续编号组成))、窗口字段和其他可选参数,因此无法在没有特定接收方的情况下进行组播或广播;
③SOME/IP:面向服务的数据传输,只有当网络中有接收方需要数据,发送方才发送,而面向信号的数据传输(如CAN、LIN、flexray),不管网络中接收方是否需要,都会发送数据;
A.11 UDS中名词
①SF(subfuction):子功能;
②DID(data identifier):数据标识符;
③RID(routine identifier):例程标识符;
④DTC(diagnostic trouble code):故障诊断码;
⑤MII:介质无关接口,是以太网标准化接口,满足不同的传输速度;
A.12 软件BSW中的相关定义
①ECU抽象层:屏蔽芯片内部资源和板块资源
②MACL:对芯片封装成autosar规定的库API,比如MCU的驱动,I/O驱动,CPU驱动等
③复杂设备驱动:cdd,在autosar中未定义的功能封装
A.13 子网掩码
用于标识网络位和主机位,就好像人的姓(网络位)和名(主机位),网段中可能出现“同名”、“同姓”的IP地址,这个时候需要子网掩码来区分网段
A.14 VLAN
虚拟局域网,举例,1所高中800学生,分成8个班级,如1班,2班...每个学生编号为1101代表1班1号,1201代表2班1号等,每个班就相当于1个VLAN,每个班名称相当于VLAN名称,每个学生的编号就是IP地址,同一个班学生(用一个VLAN间)可以相互通信,不同班(不同VLAN)需要配置才能通信(利用交换机),需要通过网关来实现,发送方将IP地址和子网掩码发给网关,网关可以变为自己的IP地址后再发给接收方;
A.15 DNS
domain name system,域名解析服务器:将网址变为IP地址的服务器,也就是将域名翻译为IP地址,举例,如浏览器输入www.baidu.com的网址,这时候机器要与百度的网站通信,外发数据包,需要知道百度的IP地址,这时候主机询问DNS服务器,DNS服务器自动将www.baidu.com这个域名翻译成IP地址61.135.169.105;
A.16 MAC
网络中用于标识网卡设备的唯一网络地址,是物理地址,由硬件制造商统一分配,每台设备的MAC地址是唯一的,在网络中,IP地址可能是变化的,举例,经常搬家,每搬到一个小区单元xx小区xx单元xx号就是IP地址,但你的名字不变,这就是MAC,MAC不允许重名
A.17 ESCI
enhancedSCI,增强型串行通信接口,ESCI模块可以使MCU和外围设备及其它MCU异步通信,可以作为LIN的主节点
A.18 SCI
serial communication interface,串行通信接口,SCI总线是一种通用异步通信接口UART
A.19 上拉电阻
在某信号线上,通过电阻与一个固定的高电平VCC相接,使其电压在空闲状态保持在VCC电平,此时电阻被称为上拉电阻,一般使用10KΩ
如上图,有效值为低有效的开关按键,按键没按下时,MCU检测的I/O口为高电平,当按键按下后,检测到低电平,上拉电阻就是为了在按键未按下时处于一个固定的高电平
A.20 下拉电阻
将某信号线通过电阻接在固定的低电平GND上,使其空闲状态保持GND电平,此时的电阻被称为下拉电阻,一般使用10KΩ
一般使用在高有效的输入电路中
A.21 OSI
Open System Interconnection,开放式系统互联,OSI 模型把网络通信的工作分为 7 层,从下到上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,它的缺点是分层太多,增加了网络工作的复杂性,所以没有大规模应用。后来人们对 OSI 进行了简化,合并了一些层,最终只保留了 4 层,从下到上分别是接口层、网络层、传输层和应用层,这就是大名鼎鼎的 TCP/IP 模型
一、总结
UART是一种串行、异步、全双工通信,用于芯片间近距离通信;
RS232是将UART的电气性能标准化的串口通信,通信距离短;
RS485是一种异步、串行、半双工通信,用于远距离通信;
IIC是一种同步、串行、半双工总线,用于近距离通信;
SPI是一种同步、串行、全双工总线,用于高速通信;
CAN是一种异步、串行、半双工通信,用于远距离通信;
LIN是一种串行、异步、半双工总线,用于远距离通信
以太网是一种交换机式通信,点对点的全双工通信
二、通信方式介绍
1、异步通信:发送方和接收方各有自己的时钟;
2、同步通信:发送方和接收方使用同一个时钟;
3、并行通信:一次性可以发出多个位数据,通信速度快,但浪费资源布线难度大,不同信道传递时,会有干扰。
4、串行通信:通常数据线只有1根,依次传递位数据,传输速率低
5、单工通信:只能发送方给接收方传输数据,接收方不能给发送方传输数据
6、半双工通信:半双工只有1个节点传输信号,比如A给B发送时,B不可以给A发,只有1根传输线
7、全双工通信:双方都可以发送数据,比如A给B发送的同时,B可以给A发,有2根传输线
三、UART
1、概念
UART(universal asynchronous receiver transmitter)通用异步接收器,是一种串行,异步通信总线,有2条数据线,1条接收,1条发送,全双工通信,采用TTL电平作为逻辑“1”和逻辑“0”;
2、UART帧格式
①空闲位,发1,高电平;
②起始位,发0,低电平;
③校验位,对数据位“1”的个数做奇偶校验,若数据位里的“1”是偶数个,发1,若是奇数个,发0;
④停止位,发1,高电平;
⑤数据位超出8bit,则需要多帧发送,每帧都要以停止位结束,以空闲位开始;
⑥为了消除发送方与接收方的时钟误差,因此数据位只能发8Bit
3、UART硬件连接
一般情况下,处理器如SOC中会集成UART控制器,在使用中利用UART工作时,只要对内部的相关寄存器进行设置即可;
在芯片中,很多PIN既可以作为GPIO,又可以作为UART来使用,本质是引脚内部连接到对应的GPIO控制器或者UART控制器等;
FIFO(first in first out):先进先出,表示发送器和接收器的缓冲区都是使用队列的形式,用户按照顺序写了以后,发送器会按照顺序发到移位器里,再一位一位传输出去,或接收器会按照顺序接收到移位器中,再将数据从移位器放到队列中;
4、UART寄存器
收发模式:
轮询(polling mode):表示CPU不断的去读队列FIFO(串口),没有数据就继续工作,再去读如此反复,直到有数据后,CPU将数据放入自己的存储器;
中断(interrupt request):CPU不去询问串口,当串口有数据时,串口给CPU发中断信号,CPU再将数据放入存储器中;
DMA:直接存储器访问,串口会将数据直接放到存储器,不需要CPU去放入;
5、UART存在的问题
①电气接口不统一,只定义时序未定义电气特性(如连接器标准、TTL电平具体值,如高低电平识别值),不同处理器使用UART通信时,不能直接连接,所以实际不会直接使用UART串口;
②抗干扰差,数据容易出错;
③通信距离短,只用于1个电路板的2个不同芯片间的通信;
④点对点通信。
四、RS232
1、概念
用于串行通信的标准,采用标准的连接器,对连接器引脚作用加以规定,并对连接器,还对信号的电平加以规定(RS232也就是串口使用的UART,只在电气层作了标准规定);
接口为DB-9,一般是用RXD,TXD,GND(有针的是公头,带孔的是母头):
2、信号
逻辑“1”电平为(-5至-15V),逻辑“0”为(+5至+15V),传送距离为15m
一般情况下,在CPU和RS232之间会有1个电平转换芯片,用于将TTL和232电压进行转换,如美信的MAX232EPE:
3、RS232存在的问题
①接口电平信号较高,易损坏接口电路的芯片,又与TTL电平不兼容,需要额外添加电平转换芯片,成本高;
②通信速度低;
③易产生共模干扰,抗噪声干扰性弱;
④传输距离短(15m);
⑤点对点通信
五、RS485
1、概念
用于异步、串行通信的标准,可用于远距离通讯(1500m),抗干扰能力强,具有多站能力,可连接多个收发器,形成网络拓扑(最大支持32个节点),采用2线制(4线制少用,422总线使用4线制),半双工通信;
2、信号
采用差分信号进行传输,2线电压差为(+2V至+6V)表示逻辑“1”,2线电压差为(-2V至-6V)表示逻辑“0”,能有效减少噪声信号的干扰(因为是电压差,如果传输中电压衰减,两根线电压都会衰减但电压差不变,因此抗扰能力强),不易损坏接口电路的芯片,且电平与TTL电平兼容,可与TTL电路连接(但还是要有个电平转换芯片);
电平转换:在CPU和RS485之间会有1个电平转换芯片,用于将TTL和差分信号进行转换,如美信的MAX485
3、RS485优势
①接口信号电平低,不易损坏电路接口的芯片,且与TTL兼容,方便连接;
②通信速度快;
③抗干扰能力强;
④传输距离远(1500m);
⑤可实现多节点组网;
六、IIC总线
1、概念
inter integrated circuit,是一种同步、串行、半双工总线,用于近距离、低速芯片间的通信,最高400kbit/s,1根数据线SDA用于收发数据,1根时钟线SCL用于双方时钟的同步,硬件结构简单,成本较低;
IIC是一种多主机总线,分为主机和从机,主机有权发起和结束1次通信,但从机只能被主机呼叫,当多主机启用总线时,IIC有冲突检测和仲裁功能,每个器件既可以作主机又可以作从机(但同一个时刻只能1个主机),增加或删除其他器件不受影响,每个器件拥有一个唯一的地址(7bit),IIC支持中断和轮询功能;
2、通信
IIC总线通信过程:(总线空闲下,SCL和SDA都为1,高电平)
①主机发送起始信号启动总线(SCL为高电平,SDA由高变低电平为起始信号);
②主机发送1byte数据(7Bit的从机地址+1bit的后续数据传送方向),若1bit传送方向为0,后续数据由主机发给从机,若为1,则为从机发给主机;
③被寻址的从机发送应答信号回应主机;
④发送器发送1byte数据(从最高位开始发);
⑤接收器发送1bit的应答信号回应发送器(因此1帧9bit=1byte数据+1bit应答),应答是将接收器的SDA由高变低电平,非应答即保持高电平;
...(循环步骤④、⑤,可以发送多byte数据);
n.通信完成后主机发送停止信号释放总线(SCL为高电平,SDA由低变高电平为停止信号)。
注意:在步骤②中定义了数据发送方向,在后续发送时,不管发送多少byte,不允许再变更传送方向,一直是步骤②中定义的,直到主机再重新发起始信号,新的开始。
3、同步信号
发送器发1位数后,SLC变为高电平,要求仍发上一位数据,接收器进行接收,当SCL变低电平后,发送器可以发下一位数据,SCL再变高电平,接收器再进行读取1位
4、 典型IIC时序
①主机向从机发数据(当从机不应答,主机会停发或者主机不想发了会停发)
②从机向主机发数据
③主机先向从机发数据,然后从机再向主机发数据
注意:
①上面照片有深色底色是主机给从机发,白底色是从机给主机发;
②A表“应答”,A非表“非应答”,S表“起始信号”,P表“停止信号”。
IIC控制器(封装在芯片中)。
七、SPI总线
1、概念
serial peripheral interface,串行外设接口,是一种高速(与IIC、UART比较)、全双工、同步的串行通信总线;SPI是主从方式工作,1个主设备和1个或多个从设备,SPI有至少4根线,MISO(master input slave output,主设备输入从设备输出)、MOSI(主设备输出从设备输入)、SCLK(时钟)、CS(片选),SPI布线简单成本低,越来越多的芯片会集成SPI控制器。
2、寻址
主设备与某个从设备通信时,先向从设备的片选线上发使能信号(高电平或低电平,根据从机而定),表示选中该从设备。
3、通信过程
SPI传送数据时,先传送高位,后传送低位,高电平表示逻辑”1“,低电平表示逻辑”0“,1byte数据传送完后无需应答可进行下一个字节传送;时钟线在上升沿或下降沿(取决于CPHL的值)时发送器发送数据,在紧接着的下降沿或上升沿接收器从总线上读数据,完成1Bit数据传送,8个时钟周期即完成1byte数据的传送。
4、极性和相位
SPI共4种工作模式,取决于极性(CPOL)和相位(CPHL),从设备在出厂时已配置好工作模式,通过对主设备的CPOL和CPHL配置后保证与从设备的工作模式一致;
CPOL表示SCLK在空闲时的状态:
①CPOL=0,空闲时SCLK为低电平;
②CPOL=1,空闲时SCLK为高电平。
CPHL表示采样时刻:
①CPHL=0,每个周期的第一个时钟沿采样;
②CPHL=1,每个周期的第二个时钟沿采样。
CPOL和CPHL,两两组合,共有4种模式。
CPOL=0,CPHL=0:
CPOL=0,CPHL=1:
CPOL=1,CPHL=0:
CPOL=1,CPHL=1:
5、 IIC与SPI的异同
相同点:
①均采用串行、同步的方式;
②均采用TTL电平,传输距离和应用场景类似(板内芯片间通信);
③均采用主从工作方式。
不同点:
①IIC为半双工,SPI为全双工;
②IIC有应答,SPI无应答;
③IIC用总线广播从机地址来寻址,SPI通过对应从机发送使能(片选CS);
④IIC的时钟极性和时钟相位固定,SPI的时钟极性和时钟相位可调。
八、CAN通信
1、概念
controller area network,控制器局域网,是一种异步、串行、半双工通信;
①汽车曾经用的总线有
Ⅰ、SAE J1850,由SAE发布,用于美国的车企,如福特、通用等,该协议没有统一物理层协议层等,因此在2013年左右退出北美市场;
Ⅱ、SAE J1708,用于重型机械、商用车、农用车等,已被CAN总线取代;
Ⅲ、K-Line,用于故障诊断,由于波特率和网络管理局限,已被UDS取代;
Ⅳ、BEAN,丰田自主研发的总线,未公开,2010年左右已被淘汰;
Ⅴ、Byte flight,用于安全气囊;
Ⅵ、D2B,用于多媒体传输。
②现常用总线有:
Ⅰ、CAN;
Ⅱ、CANFD;
Ⅲ、LIN;
Ⅳ、MOST;
Ⅴ、Flexray;
Ⅵ、车载以太网。
2、CAN标准
ISO 11898
ISO J1939(商用车)
ISO 15765(诊断)
3、通信特性
①多主通信,波特率为500k~1Mbit/s
②短帧结构,数据为8byte
③ID越小,优先级越高
④非破坏性总线仲裁机制(退出仲裁后进入只听状态,在总线空闲时再进行报文重发;只有当多节点同时使用总线时才有仲裁)
⑤可靠CRC校验
⑥自动重发,仲裁失败或传输期间被破坏
⑦自动脱离总线,在节点错误严重的情况下,切断与总线的联系,不影响其他节点
⑧最远通信10km(速率5Kbps以下),通信速率最高1Mbps(最长距离40m)
⑨最多节点达110个
⑩报文接收滤波,监听总线所有数据,接收相关报文,过滤不相关报文
⑪通过两条通信线(双绞线)产生的电压差传输数据
⑫一般主MCU都会集成CAN2.0A和CAN2.0B的CAN模块,也就是说,PCBA上不用再有CAN控制器,只要有CAN收发器即可
4、OSI模型
5、CAN的收发器
作用:是将逻辑数字信号与物理电平信号相互转换
6、同步问题
为了减少误差,需要定义采样点并在连续5个相同位后插入一个相反位进行位填充。
举例:
7、阻抗匹配
高频电路中负载阻抗要与传输线的特性阻抗一致,否则在线束末端,阻抗突变,发生反射,造成波形震荡,信号串扰等;
8因此线束两端需要120Ω的终端电阻
8、常见问题
物理层:
问题 | 可能原因/措施 |
CAN电压正常,但无法接收到报文或报错 | 软件不适配或终端电阻不匹配等 |
测试CAN波形,发现报文有振铃(多次反射形成)和反射 | 缩短引线长度;加醋到线、印制铜箔的宽度;减小信号的传输距离;采用引线电感小的元器件;阻抗匹配 |
CAN收发器常规检测方法 | ECU上电,总线空闲,测量CAN_H和CAN_L分别对地电压,应该是2.5V左右,否则收发器可能故障 |
不同厂家的ECU通信时好时坏 | 波特率采样点不一样,造成通信不良 |
ECU节点单测功能正常,但台架或整车测试时,功能失常,CAN错误帧频发 | 电磁干扰,选择好的隔离收发器;增加CAN线双绞程度;将动力线与CAN线远离;CAN端用共模滤波器等抗浪涌好的感性防护器件 |
9、帧结构
9.1 数据帧
作用:节点间传送数据,分为:
①标准帧
②扩展帧
SOF:帧起始,由1显性位组成,只有总线空闲时,才可发,其他节点从这帧进行同步;
ID:每个报文拥有唯一ID,ID越小,优先级越高;
RTR:远程帧发送标识位,用于区分是数据帧还是远程帧,1显性位表示标准帧,1隐性位表远程帧;
SRR:替代远程帧请求位,由1隐性位组成;
IDE:标识扩展位,标准帧中位于控制段,由1显性位组成;在扩展帧中位于仲裁段,由1隐性位组成;
r0:保留位,由1显性位组成;
r1:保留位,由1显性位组成;
DLC:数据长度码,标识报文的数据长度
数据段:byte0~byte7,传输时先发送MSB(最高位),一般使用摩托罗拉格式,以下是摩托罗拉:
注意:在CAN矩阵中,若字节长度跨行,记住口诀(摩托罗拉),从LSB(最低位),从右往左数,从下往上数。
进制换算:
①十六转十进制:
②十六进制转二进制:
8421法:同样以小数点为起始点,将二进制数值每4位划开,按8421方式转换成十进制相加获得和,再进行转换。举例将二进制0100、0111、1000、1111转换成十六,结果为478F。
CRC:循环冗余校验,是对帧起始、仲裁段、控制段和数据段进行多项式计算,对发送和接收节点的数据进行校验:
CRC界定:由1隐性位组成
ACK应答:发送节点发1隐性位,接收节点接收正确无错误,接收节点发送1显性位;
ACK界定:由1隐性位组成
EOF:帧结束,由7隐性位组成
IFS:帧间隔,在EOF后,由3隐性位组成,ACK界定+EOF+IFS共11位隐性位发送完后即认为总线空闲
注意:在一帧报文即从SOF到IFS,若出现5个连续相同的位,要反相1位进行位填充(位填充也会占用总线带宽)
9.2 远程帧
作用:用于接收节点向某个发送节点请求数据,远程帧的ID可以与数据帧的ID相同
①远程帧没有数据段;
②远程帧的RTR为1隐性位。
③远程帧在通信过程为,发送节点发送远程帧,接收节点接收后,根据远程帧中的ID请求,回复相应ID的数据帧:
9.3 主动错误帧
某节点错误向其他节点通知错误的帧
9.4 过载帧
用于接收节点向发送节点通知自身接收能力的帧
9.5 帧间隔IFS
将数据帧或远程帧与前面的帧分离的帧
10、CAN BUS错误
10.1 错误类型
①CRC错误:接收节点计算的CRC值与发送的CRC不同,CRC段检测;
②位填充错误:传输信号违反“位填充”规则,在DEL前检测;
③应答错误:发送节点在ACK阶段没有接收到应答信号,ACK段检测;
④位发送错误:发送节点在发送时检测总线电平与发送电平不同,从SOF至EOF都在检测;
⑤格式错误:传输的数据帧格式与任何合法的帧格式不符,DEL和EOF段检测。
10.2 处理措施
当出现以上5种错误之一后,总线发出错误帧:
①主动错误状态的节点发送:6显+8隐;
②被动错误状态的节点发送:6隐+8隐;
10.3总线错误处理流程图
①TEC和REC清0;
②检测到1次失败传输,REC加1;
③REC加8;
④成功接收1帧报文,REC减1;
⑤发送时检测到错误,TEC加8;
⑥成功发送1帧报文,TEC减1;
⑦当TEC<127时,TEC加8,否则TEC加1;
⑧若TEC>255,CANbus断开连接。
11、CAN测试
11.1 数据链路层测试需求
①CAN报文监测、报文记录、错误帧记录;
②DBC解析信号、线图绘制,总线负载、仪表板功能;
③报文自动化脚本发送。
11.2 CAN物理层测试需求
物理波形测试、CAN波形穿行解码、CAN错误位指示
11.3 测试工具
CANOE、PCAN、Kvaser、Vspy
12、网络管理
12.1 OSEK网络管理
①分为直接网络管理和间接网络管理:
名称 | 内容 |
直接网络管理 | osek,Autosar等有专门的NM报文进行整车节点的唤醒休眠 |
间接网络管理 | 当收到IGN OFF后多少秒内自动停发 |
下面都是针对直接网络管理做的描述
②建环机制:网管报文ID从小到达发送,由最大ID节点再到最小ID依次建环
③报文解释:
网管报文ID | byte0: 0x4xx |
字节说明 | byte1: bit0:alive报文标志位 bit1:ring报文标志位 bit2:limp home报文标志位 bit3、bit6、bit7预留,设置为“0” bit4:sleep.ind节点的睡眠指示位 bit5:代表sleep.ACK即节点ring报文的睡眠确认位 01:alive报文,在总线上声明自己的存在,请求其他节点与自己建环 02:代表Ring报文 12:代表当前节点已无通讯请求(睡眠标志位ind置位),即告知其他节点我已满足睡眠条件 32:即将其睡眠应答位置1,当检测到其他节点都在发送12ring报文后,最后一个节点发送此应答报文,告知其他节点当前整个网络无通信请求,可以睡眠。此时进入睡眠等待状态即Twbs状态 04:代表跛行报文limp home,如果网络管理报文接收计数器和发送计数器超限后,发送跛行报文即无其他节点与此节点建环,只有一个节点存在,无法正常接收或发送网管报文 |
12.2 Autosar网络管理
①上图中当ECU1要发送消息给ECU2了,这时它会主动进入Repeat Message State,开始自己这个节点的网络传输,当它快速的发出了第一帧NM Message(就是上图中蓝色的向下箭头),ECU2接收到这一帧NM Message 之后,ECU2被动进入Repeat Message State,同样也开始重复的传输NM Message,当这两个ECU都发足了规定数量的Repeat Message后分别进入各自的Normal State中
②当进入Repeat Message State后,会开启一个计时器T_NM_TIMEROUT,这个计时器在发送或收到一帧NM Message的时候会自动清零,当计时器处在Normal State或Ready Sleep State下的时候如果超时就会进入到Prepare Sleep Mode,也就是触发进入Prepare Sleep Mode的条件
③在正常模式下,NM Message也会周期性的发送,防止T_NM_TIMEROUT超时。每次发送NM Message就会更新T_NM_TIMEROUT。当这时ECU不再准备发送和接收数据后,就可以进入到Ready Sleep State,Ready Sleep State不再发送NM Message
④在Ready Sleep State下,还有其他节点会发网络管理帧保持网络唤醒,此时ECU处于等待进入Prepare Sleep Mode,T_NM_TIMEROUT仍然会因为NM Message而清零。所以这样的结果就是,当网络上所有的ECU发出了最后一帧NM Message(之后没有ECU再发送NM Message),大家都同步清零T_NM_TIMEROUT,如果设置的T_NM_TIMEROUT相同,会同步进入PrepareSleep Mode阶段
⑤到这个阶段的时候,就是等待,让所有的节点有时间结束网络活动,所有的总线静默。然后在等待T_WAIT_BUS_SLEEP时间后,所有节点进入Bus-SleepMode
⑥当ECU上电后会默认进入Bus-Sleep Mode,而且网络其实是在不断的试图进入到Bus-Sleep Mode中,但是由于有NM Message在总线上的传输,所以才能保留网络模式不进入Bus-Sleep Mode中。大家可以想象成看门狗,NM Message就是不断的喂狗,一旦没有NM Message,就进Bus-Sleep Mode
13、诊断
13.1 概念与术语
标准 | ISO 14229 ISO 15765-2 ISO 27145(针对国Ⅵ重型发送机排放的诊断,纯电车不涉及,涉及排放相关的22和19服务) ISO 15031 |
诊断体系结构 | |
诊断通信流程 | ①客户端:发送诊断请求,如诊断仪 ②服务器端:发送诊断响应,如某个ECU |
物理寻址 | 客户端与服务器端一对一的诊断通信方式,大多数情况使用物理寻址 |
功能寻址 | 客户端向多个服务器发出同一功能的诊断请求的通信方式 |
源地址 | 发送节点地址,SA |
目标地址 | 接收节点地址,TA |
协议数据单元PDU | 是一组信息和数据的集合,表示了发送方和接收方对等实体之间传递的信息和数据,协议数据单元包括: ①协议控制信息(PCI) ②数据(data) |
单帧传输 | ①数据长度<6/7个字节(LIN为6字节,CAN为7字节) ②报文类型为单帧(SF) |
多帧传输 | ①数据长度>6/7个字节,最多允许4095个字节 ②报文类型: 第一帧(FF):描述传输的起始 流控制帧(FC):传输过程中,报文流控制 连续帧(CF):传输数据 |
13.2 网络层
PDU说明 | ①N_PDU:{N_AI,N_PCI,N-Data} ②示例 ③N_PCI 结构: ④流控帧:FS含义 ●0:继续发送,让发送方继续发送接下来的连续帧,表示接收方已经准备好接收最大BS数量的连续帧 ●1:等待,发送方等待下一帧流控制帧并重置自己的计时,一般用于接收方没有处理完上一次接收到的连续帧 ●2:过载,发送方打算发送的数据超过了接收方的储存能力(一般首帧发送后若接收方不能满足存储能力就要发出来) ⑤BS含义 ●0:表示不需要任何流控制帧,直接发送全部数据 ●1~FF:表示发送方在发送BS数值的连续帧后,需要等待接收方的流控制帧 ⑥STmin含义 ●表示发送方发送的两个连续帧之间,最小需要的时间间隔 ●00~7F,单位为ms ●F1~F9,表示0.1~0.9ms ●0表示按照发送方最快的速度发送 |
寻址 | 常规寻址(仅用于11位ID): |
常规固定寻址-29位ID(N_TAtype=物理寻址): | |
常规固定寻址-29位ID(N-TAtype=功能寻址): | |
扩展寻址模式-仅用于11位ID(不常用): | |
混合寻址-11位ID(仅用于远程诊断): | |
混合寻址-29位ID: | |
错误识别与处理 | ①数据帧格式错误识别与处理 ②超时识别与处理 ③非预期帧识别与处理 |
①SF单帧数据长=0或者>7时的错误: ②FF首帧数据长错误 ③SN循环计数错误(比如计数不连续): ④FS错误 ⑤N_WFTmax ⑥ST错误 ⑦非预期帧的处理(非诊断帧): |
13.3 应用层
UDS分类 | ①诊断/通信管理单元 ②数据传输功能单元 22/2E服务 | |||||
服务概述 | 1、服务函数(6个) ①请求request(诊断仪发出) ②请求_确认req_confirm(诊断仪发出) ③指示indication(ECU告诉上层) ④响应response(ECU发出) ⑤响应_确认rsp_confirm(ECU发出) ⑥确认confirm(诊断仪发出) 2、有确认服务 3、无确认服务 | |||||
服务标识符SI | ●其中有些可以由OEM自己定义 (有的供应商为了跳过27安全访问,会自定义10服务的某个子功能,直接进入) ●在10服务的默认会话和非默认会话下支持的服务: ●注意:如果10服务不在默认会话,则需要一直发3E服务,让ECU保持在非默认会话状态 ●关于22或2E服务是否需要过27服务,看OEM怎么定 | |||||
服务介绍 | 1、10服务 ①诊断会话分为默认和非默认,不同诊断会话有不同功能,不同的定时参数,受到不同的安全访问保护
②10服务状态切换图 2、3E服务 ①用于向服务器(ECU)指示诊断仪仍然连接在网络上,先前激活的特定诊断服务和/或通信功能仍然保持激活状态 ②周期性发送3E 00/80(80指不需要肯定响应) ③报文格式: 3、22/2E服务(读DID/写DID) ①DID(由2字节构成)所表示参数的格式由OEM自己约定,DID可以定义为比如软件版本、硬件版本、系统零部件号等 ② DID在前期设计时,已经由OEM确定,22服务的请求报文
④22读DID示例 ⑤2E服务请求报文 ⑥2E服务的肯定响应 ⑦2E写DID示例 ⑧数据流示例: 4、19服务(读DTC) ①DTC格式 ②ISO 153031-6中DTC的高字节和低字节说明: ③常用19服务的子功能 ④19 01通过状态掩码报告DTC数目,19 02通过状态掩码报告DTC ●19 01的肯定响应 ●19 02的肯定响应 ⑤DTC示例1,19 01读DTC数目 读出来即为: ⑥DTC示例2,19 02读DTC 读出来即为: DTC示例3,数据流示例: 5、14服务(清除DTC) FFFFFF必须支持 | |||||
刷写流程 | ![]() | |||||
请求、肯定/否定响应的格式 | | |||||
对带子功能参数的请求信息的响应,对物理寻址的客户端请求消息(如10服务) | ![]() | |||||
对带子功能参数的请求信息的响应,对功能寻址的客户端请求消息 | ![]() | |||||
对不带子功能参数的请求信息的响应,对物理寻址的客户端请求消息 | ![]() | |||||
对不带子功能参数的请求信息的响应,对功能寻址的客户端请求消息 | ![]() | |||||
应用层定时参数 | P2can_server P2*can_server | |||||
S3client S3server 如果在超时内没有收到3E服务,则会退出非默认会话,回到默认会话 | ||||||
数据流示例: 最后的27 01后面的00 00 00。。。表示已经解锁 |
14、安全攻防
ACES(自驾、联网、电动、共享)面临的网络攻击危险
14.1 攻击分类
近程攻击 | 近距离接触车辆进行攻击的一些点,比如ECU、传感器、IVI、OBD、OBD电子、USB卡槽、车内网络、无钥匙进入等的攻击 |
中程攻击 | 蓝牙、4G\5G、WiFi、IT网络、移动APP等中程攻击,比如手机通过蓝牙接近车辆时,通过蓝牙去控制车窗,或者对整个车辆进行启动的攻击 |
远程攻击 | 整车厂、供应商、智能网联、服务运营和云端服务等的攻击 |
14.2 车外攻击面
①车外攻击面:HTTPS、网络路由协议等
②常见攻击手段:
⭕中间人攻击:窃听或修改2个ECU间的通信数据
⭕会话劫持
⭕DOS攻击(Denial of Service):淹没通信信道,耗尽带宽、CPU功率等资源
⭕重放攻击:捕捉关键信号,当人不在车内时,通过433MHz的无线频率重放信号,打开车门进而驾驶车辆
⭕消息篡改,节点冒充、路由器表溢出、TCP/ACK风暴
14.3 车内攻击面
①车内攻击面:车端协议、硬件安全、车载系统
②常见攻击手段:
⭕消息注入、远程代码执行
⭕总线关闭(如持续发错误信号导致车辆进入BUSOFF进而总线关闭,最后变为拒绝服务攻击)
14.4 常被攻击的ECU
●IVI
●TBOX
●GW
●UDS诊断服务
●OBD接口
●ADAS
●TSP
●充电桩
●OTA
●手机APP
14.5 CAN总线安全
14.5.1 攻击路径
①远程攻击
⭕通过远程攻击获取控制器的访问权限,例如TBOX、IVI等,再通过车内总线控制其他ECU,最后控制整个车辆
②OBD攻击
⭕通过OBD接口发送恶意总线消息
③物理攻击
⭕在车上安装硬件攻击设备,再通过车内总线控制车辆功能
14.5.2 攻击流程
14.5.3 常见攻击方式
重放攻击 | ●因CAN是无认证的广播协议,所有ECU可监听总线所有数据,因此数据易被窃听,受到攻击 ●以非法途径接入CAN总线(破线或OBD接口),非法获取某些功能报文,再以二分法确定最终目标报文,再使用CANoe工具将报文重放进行攻击 ●防范手段: —由发送端生成随机数,使随机数跟随数据发送到接收端((该随机数占用该报文里的空闲位,如后视镜折叠功能报文数据长度为3bit,但真正表示功能只用到了2Bit,那么剩下的bit可以用来做随机数,就好比checksum) —接收端接收数据和随机数后,在数据库中检测该数据以及携带随机数是否之前出现过,若出现过则认为受到重放攻击 —接收方每次接收到的随机数建立相应的索引并进行存储 |
假冒节点攻击 | ●与恶意信息类似,在对总线报文深入分析后,冒充传感器或其他ECU向别的ECU发送错误的车辆状态信息,从而影响车辆使用 ●攻击方式可以组合使用,举例: —先通过CAN总线分析开门报文 —再对处理开门报文的ECU(如BCM或车门控制器)进行DOS攻击,使其进入busoff —再冒充节点,接收处理原BCM或车门控制器的报文数据 —最后再通过自己的方式进行开关车门 |
DOS攻击 | ●攻击方式一:利用仲裁机制,持续发送高优先级报文,导致ECU无法处理,总线处于堵塞状态 ●攻击方式二: —利用错误帧机制,构造错误帧发给目标ECU,当错误帧达到一定次数后,总线进入busoff状态,总线关闭,拒绝服务 —防范:可监听总线,编写合适的判断机制,当总线busoff超过正常数量级时,即认为受到DOS攻击 ●攻击方式三: —利用远程帧机制,重复大量对目标ECU请求远程帧,耗尽其资源,使该ECU无法处理其他报文从而拒绝服务 —防范:可监听总线,获取正常通信中远程帧报文的数量级,当受到DOS攻击时,某ECU发送大量远程帧到总线上,即认为受到DOS攻击 |
恶意消息注入 | ●CAN总线缺乏加密、认证机制、无异常检测系统,在总线上明文传输数据 ●攻击者可通过抓包重放+固件分析等手段获取明文字段中的数值,对数值进行恶意更改再发送到车内总线上 ●防范手段:以密文形式在总线上传输数据 |
UDS攻击 | ●27服务采用对称加密算法,安全性不高,若是开发时采用有规律的随机数或随机数长度低于3字节,ECU无死锁机制就会导致这类攻击 ●攻击方式一 —UDS 11服务,无前置条件重置,导致拒绝服务攻击 ●攻击方式二 —UDS 27服务,身份验证,dll算法逆向(其中dll就是针对27服务算法的库文件,canoe中需要导入dll文件才能生成27服务的key) —29服务是弥补27服务的缺陷,采用非对称算法,但未普及,大多数主机厂仍采用27服务进行安全严重 ●攻击方式三 —伪随机数攻击,导致ECU死锁及密码爆破 ●防范手段:利用复杂的算法进行加密,针对认证失败多次还应有惩罚机制,如一段时间内无法再尝试解锁以防人为破解 |
14.5.4 总线网络攻击测试工具
①FUZZ是针对车内总线攻击研究,以攻击的手段来发现ECU的问题,如栈溢出、堆溢出、后门指令、恶意消息等,并自动生成报告。全面确定车没网络的问题
②FUZZ工具(以极氪开发的FUZZ工具为例)
⭕工具原理(很多供应商会在ECU的软件里植入后门指令扫描,为了不通过27服务就可以拿到最高权限)
14.6 安全攻击案例
1、Tesla
2、Jeep
3、BMW
九、LIN总线
1、总线性能
1.1 LIN(local interconnect network)本地互联网络
提供一种低成本的车用总线,从而形成对CAN的补充,一般天窗控制器、雨量光线传感器、方向盘开关、玻璃升降开关、雨刮电机、轮速传感器等
1.2 标准
SAE J2602(主要应用在美国车上)
ISO 15765-2传输层规范
ISO 14229诊断服务
1.3 LIN总线特点
①功能简单,实时性低
②成本低
③传感器/执行器级的总线
④基于UART数据格式,几乎所有MCU都支持LIN总线的硬件基础
⑤单主多从结构,单线12V的传输
⑥串行通信,线束干扰小,传输距离长,长达40m传输距离
⑦开放,不需要使用费和版税
⑧从节点无须晶振或陶瓷振荡器就可以同步,利用报头里的同步场实现同步,大幅降低成本
⑨支持多包报文传输,支持诊断功能
⑩可以自由增减从节点,不会对其他从节点影响,其余节点的软硬件不需更改
1.4 LIN版本:LIN2.0
1.5 波特率
9600,19200(国内OEM用),10400(美国用)bit/s
2、规范
①LIN物理层规范:描述LIN物理层包括位传输速率,时钟容错范围等
②LIN协议规范,描述LIN总线的数据链路层,帧结构等
③LIN诊断和配置规范:描述了如何在数据链路层之上提供诊断信息和节点配置服务
④LIN应用程序接口(API)描述了网络和应用程序之间的接口,包括诊断模块
⑤LIN配置语言规范(LDF):介绍了LIN配置文件的格式,用于配置整个网络,并作为OEM和不同节点供应商之间的通用接口,同时可作为开发和分析工具的一个输入,类似CAN的DBC文件
⑥LIN节点能力描述语言规范(NCF):描述了从机节点的语言格式,LIN集群设计工具可以使用NCF文件自动生成LIN的LDF文件
⑦LIN传输层规范:描述了传输最高能达到4095个字节数据的方法
⑧诊断规范:描述了从机节点所支持的诊断服务类型,与CAN的诊断差不多
3、LIN与CAN的对比
4、物理层
4.1 LIN无需专用的控制器
①MCU处理LIN协议使用SCI接口实现物理通信
②LIN通信基于SCI格式帧:start位+8位有效位+stop位
③ESCI或LIN-SCI:代替MCU实现LIN通信任务
4.2 LIN收发器
逻辑值与物理总线电平之间转换
① Tx通过集电极开路连到总线,Rx通过施密特触发器连接到总线
②收发器内部有30k上拉电阻,若作为主节点,还要外接1K的上拉电阻
③上拉电阻与电源之间有二极管保护,防止在电源掉电的情况下总线电平被拉低
4.3 单线波特率<20kbps
4.4 振荡器
①振荡器要求:
●从节点必须能正确识别间隔场与同步场
●同步场后,主、从节点时钟误差<2%
②从节点种类:
●采用外部晶振:无需同步场即可与主节点同步
●采用片内晶振:需要同步场与主节点同步
4.5 位定时(bit timing)
①所有从节点的位定时必须以主节点的位定时为参考
②同步过程:以下降沿作为判断条件
4.6 信号规范signal specification
①显性位dominant:
●逻辑0
●发送:总线电平<20%Vsup(voltage supply,电源电压)
●接收:总线电平<40%Vsup
②隐性位recessive
●逻辑1
●发送:总线电平>80%Vsup
●接收:总线电平>60%Vsup
4.7 总线特性Line characteristics(一般设计到LIN网络时才用)
①LIN节点的数量是根据计算公式得出,一般LIN传输的性能好坏通过计算值,
值,
在1~5μs间
②Cbus:表示总线电容,Rbus:表示总线电阻
③示例:
4.8 容错性能performance during fault modes)
①电源或地线断路
●单个节点电源或地线断路(节点丢失),不影响其他节点通信
●排除故障后,可以重新加入进行通信
②总线与电源或地线短路
●总线通信可能无法进行,但ECU不能被损坏
●排除故障后,总线恢复正常通信
5、传输层
5.1 传输特点
①主节点:既有主任务又有从任务,因此可以发送报文头和数据响应
②从节点:只有从任务,只能发送数据响应
5.2 链路层-报文帧
①主任务发送报头,从任务响应来补充报头形成完整的报文
②报文的内容和ID跟CAN的相似
③广播式,所有从节点都能同时接受和响应总线的帧
5.3 报文
①信号报文:位于数据场
②诊断报文:2个ID来传输
信号报文 | 1、帧格式 1.1 字节场(byte field): ●基于SCI(串行通信接口)的通信格式 ●发送1个字节需要10位的时间Tbit 1.2 间隔场(break field) 1.3 同步场(sync break field)—下降沿同步 1.4 PID(protected identifier)=6bit的标识符场(identifier field)+2bit的奇偶校验符;LIN ID(0x00~0x3f,0x3C和0x3D属于诊断报文) 1.5 数据场(data field):8个字节 1.6 校验和场(checksum field) 2、帧类型(frame type) 2.1 无条件帧(unconditional frame) 2.2 事件触发帧event triggered frame(如车门状态报文),由从节点发给主节点,主节点接收 2.3 零星帧/偶发帧sporadic frame,由主节点发送 当且仅当其中的某个无条件帧有信号被更新时,主节点才发送该帧的帧头,其发布者对帧头发送响应 2.4 保留帧 reserved frame 3、调度表schedule table ①在LDF文件中定义了调度表,定义了报文发送时序和报文发送的间隔时间 ②保证总线永不会过载,同时能保证信号的周期性 ③调度表中用来发送一帧报文的时间称为帧时隙(Tframe_slot),帧时隙必须是时基(LIN总线最小时间单位Tbase,一般为5ms或10ms)的整数倍,调度表由帧时隙组成:Tframe_slot=Tbase*n ④偏移(jitter,一般为0.1ms)指一帧报文实际开始发送的时刻与帧时隙起点的时间差:Tframe_slot>jitter+Tframe_maximum 一般从帧开始到checksum,9ms左右,如果一帧报文定为20ms周期性发送,那么剩余11ms都是空闲状态inter-space frame 4、切换调度表 |
诊断报文 | 1、诊断帧diagnostic frame 2、网络管理network management 2.1睡眠 2.2 唤醒 3、诊断调度模式 注意:理论上主节点应先发3C,再发3D,但实际应用中,主节点不发3C,只发3D报文头(属于正常情况) 3.1 调度模式分类: ①交叉诊断模式::默认模式,不终止常规通信 ②纯诊断模式:可选模式,终止常规通信,一般可以选单帧传输、多帧传输 3.2 诊断方式 ●诊断仪无法直接连接到LIN总线 ●LIN诊断必须由主节点来调度 ①有2种诊断方式: ●诊断方式1:从节点能够存储DTC故障代码 ●诊断方式2:从节点无法存储故障代码 3.3 诊断级别 ●从节点根据自身的特点和需要,诊断功能分为3个级别: ①诊断级别1:最低要求 ②诊断级别2: ③诊断级别3:最高级别 ④各个诊断级别的对比 3.4 示例 ①示例1:22服务(关于NAD,SID等下面文章都有说明) ②示例2:跟UDS差不多 4、PDU(packet data unit),打包数据单元,1个PDU可以是一个完整的报文,也可以是多个PDU的组合中的一部分 ●请求:从客户端(测试仪,主节点)发出的报文 ●响应:从服务器端(如主节点,从节点)发出的报文 ①PDU帧结构 ②PCI ③帧长度length PDU log示例 ④ SIDservice identifier 5、单帧传输 6、多帧传输 7、错误处理(主要针对接收节点) ①SF单帧数据长度>6个字节:会忽略该报文 ②FF多帧数据长度<7个字节:会忽略该报文 ③FF多帧数据长度>BufferSize(缓存大小):中止接收报文 ④节点处于发送状态,接收到SF或FF(NAD≠0x7E):中止发送报文,开始接收报文 ⑤CF编号错误:放弃之前所有接收到的CF和FF 8、LIN总线节点配置,用于配置模块功能 ①作用:避免网络NAD或PID(product identifier)冲突 ②配置内容:NAD、PID ③节点配置的SID为0xB0~0xB7 ④节点配置只能用单帧通信 8.1 PID,产品ID ①PID与LIN ID是一一对应关系 ②标识了节点供应商和功能 9、通配符 ①NAD的通配符0x7F(广播地址)用来访问所有节点地址 ②供应商ID和功能ID可以代表所有未定义的供应商与功能 ③当不知道从节点的节点地址、供应商ID和功能ID等信息时,可以将从节点和主节点单独点对点通信,主节点使用通配符,可使从节点工作 10、 节点配置 ①0xB5一般用作自动寻址功能 ②实际应用中会使用0xB7,而不用0xB1,因为0xB1只对单个ID进行更改(此处ID改的是PID受保护的ID) ③0xB2和0xB7是从节点必须支持的服务 10.1 0xB0说明(分配NAD从节点地址) 10.2 0xB1说明,分配帧PID(protected ID),基本不会用B1服务,而使用B7服务 10.3 0xB2,读取服务 当要读取PID(product ID)但又不知道供应商ID和功能ID时,可以用通配符 10.4 0xB3,有条件更改NAD服务,一般不常使用,使用0xB0就行了 10.5 0xB4,数据转存 10.6 0xB5,保留,常被用作自动寻址 10.7 0xB6,保存设置服务 10.8 0xB7,分配帧PID(protected ID)组服务 |
十、CAN FD
1、标准
ISO 11898
SAE J2284-4,网络通信应用采用500k/2M波特率(汽车网络通信)
SAE J2284-5,点对点通信采用500k/5M波特率(如ECU刷写)
CiA 1301
2、波特率
报头报尾500kbit/s
数据段为2Mbit/s
根据不同的标准,波特率分配存在不同:
3、通信特性
①数据为64byte
②与CAN2.0用的线束一致
③与大部分CAN软件兼容
④上层应用层架构不需要改变,在原来基础上扩展即可
⑤硬件需要兼容,例如兼容CAN 2.0和CAN FD的CAN收发器和CAN控制器
⑥非ISO CAN FD和ISO CAN FD是无法兼容的,一般在2015年后都是ISO标准的CAN FD
4、报文
4.1 报文格式:
4.2 SOF起始段与仲裁段:
①IDE:拓展标识位
②RRS:远程请求替换
③SRR:替代远程请求,可以不考虑
④CAN FD不再支持远程帧,不推荐使用传统CAN帧远程请求CAN FD数据
4.3 控制场:
4.4 数据场:
4.5 CRC场:
①数据长≤16byte:
②数据长>16byte:
4.6 ACK、EOF、IMF场:
5、CAN与CAN FD的兼容问题
5.1 问题1:网络共存,如何解决通讯速率和数据长度不同的冲突?
解决思路:
①传统CAN节点以1mbit/s传输数据到CAN FD:
直接通过,因为CAN FD是向下兼容的
②CAN FD以8mbit/s传输数据到CAN
采用CAN FD路由器,先将CAN FD的速率降到1mbit/s再转出去
③CAN向CAN FD传输8字节数据
直接通过,因为CAN FD是向下兼容的
④CAN FD向CAN传输64字节数据
采用可编程CAN FD路由器,预先编程并下载到路由器,CAN FD的数据通过路由器后按照预先设置的程序将数据做拆包等处理再转成8字节发出去给CAN,但CAN的负载率不一定能支持
5.2 共存网络中,如何解决几个设备间的交叉通信,多个切换的问题?如何解决一个设备同时与CAN FD和CAN节点通讯切换
解决思路:
①将ECU与ABS即CAN FD之间的数据1:1转发
②将ECU或ABS与其他底盘开关和ICU之间的数据切换为CAN再转发
5.3 如何解决测试平台共用问题?
解决思路:
CAN FD节点再进行环境测试、疲劳测试、寿命测试等的情况下,只需要测试设备本身的性能,与通讯速率/字节数无关,因此这几类测试可以沿用CAN平台的测试设备
关于CAN FD的通讯性能测试、兼容性测试等涉及到通讯机制本身,这类测试需要使用新的CAN FD测试工具
十一、FlexRay
1、概念
FlexRay,2009年flexray协会已经解散,随着以太网的崛起和flexray的开发成本及难度,flexray基本已经淘汰,因此不作过多介绍
2、通信特性
①作为主干网络
②单通道最大数据的传输速率达10Mbit/s
③实时性高
④支持系统集成
⑤冗余传输特性,设计2个通道,当某个通道失效后,另外一个通道继续工作
⑥双绞线传输
3、拓扑结构
①线形拓扑
②星形拓扑
③混合形拓扑
4、安全攻防
①静态帧攻击方式:
—重放攻击:攻击手段与CAN相同
—恶意消息注入
—DOS攻击:根据FlexRay slots机制,占用所有时隙,导致flexray所有报文无法通信
—其他
②动态帧攻击方式(诊断):
—与CAN的UDS诊断攻击类似
十二、车载以太网
1、标准
ISO 21111、IEEE 802.3
2、波特率
10BASE-T1S
100BASE-T1
1000BASE-T1
3、通信特性
①交换机式通信,点对点通信
②使用双绞线,全双工通信
③负载率:<90%(非强安全信息),若只传输音视频,可以达到100%,若传输强安全的,负载率可以适时地降低点
4、OSI模型
4.1 各层需要满足的协议
layer层 | 作用 |
layer1:物理层 | 将数字信号转换为电介质、光介质等不同状态,如PHY,主要物理层有100base-T1、1000base-T1(用作车内通信);100base-Tx(用于诊断) |
layer2:数据链路层 | ①物理寻址,即连接2个以太网的网卡(MAC即网卡地址,以太网想接入Internet,必须有网卡,在ECU出厂时,由厂家烧录好); ②通信隔离,划分不同vlan,不同vlan的主机在链路层是不可以通信的,MAC地址,解决局域网内中的地址区分,类似CAN ID的作用 |
layer3:网络层 | IP地址,不同节点有不同IP地址,局域网外的唯一地址,在全球网络可定位某台电脑的网络信息 |
layer4:传输层 | TCP或UDP协议,都会有1个端口号,可以定义到某个电脑里中的具体某个应用程序,socket(套接字)=IP地址+传输层协议类型+端口号,通过socket就可以定位到全球具体某个电脑中的某个程序 |
layer5~7:应用层 | 实现特定功能,如诊断doip |
4.2 各层通信协议及测试标准
4.3 以太网传输机制
①如果节点A和B在同一网段,则用到交换机即可
②如果节点A和B不在同一个网段,需要使用路由器
③假设节点A传输“Baidu”的文字给节点B的示例传输流程
5、以太网开发内容
5.1 V字形架构开发
5.2 通信设计
6、各层功能
7、各协议介绍
7.1 应用层SOME/IP
7.1.1 SOA概念
SOA (service-oriented architecture) | ●面向服务的架构 ●根据需求定义/拆分应用服务,并通过定义好的服务接口联系起来 ●通过服务接口实现数据/信息的交互,进而完成服务本身的功能 ●独立于硬件平台、操作系统和编程语言 |
服务 service | ●IT行业是指实现某种功能的函数或方法 ●是一个离散的功能单元,可远程访问并独立执行和更新 |
服务接口 service interface | ●接口:能被其他模块调用的函数的名称或一个封装的API(application programming interface) ●服务接口:服务与外界进行联系的接口,即服务模块与外界沟通的信息出入口 ●服务接口(method,event,field)本身与底层通信技术无关 |
组成 | ●实现服务功能(包含控制算法、功能逻辑)的一方 ●服务消费方(service consumer):使用服务接口,调用服务的一方 ●服务注册方/代理方:实现服务的注册/发布、订阅等 |
7.1.2 SOA的实现
①关键技术:为了实现不同操作系统,不同的平台通信交互,需要有统一的、标准的通信协议及中间件
②SOME/IP作为一种基于车载以太网协议的,面向服务的灵活中间件,解决了SOA通信的中间件
③SOME/IP报文:打包服务接口内容,基于C/S(client/server)通信架构实现消费方与提供方的应用交互
7.1.3 SOME/IP定义
①概念
scalable service-oriented middleware over IP,基于IP的可扩展的面向服务的中间件
②由来?
●先由宝马公司设计
●后由AUTOSAR集成
③应用场景
●车载以太网及SOA技术应用的驱动
●提供车内信息交互的中间件解决方案
●替代部分传统的CAN/MOST等通信场景
④特点
●可扩展的:适应不同的平台和操作系统,且支撑的平台可大可小
●面向服务:method、event、notification
●中间件:标准的API接口为APP程序提供服务的系统软件或服务程序
●基于IP:适配以太网TCP/IP协议的传输,大数据传输,限制数据广播发送
7.1.4 SOME/IP功能
RPC远程功能调用 remote procedure call | 实现client使用网络内server提供的服务 |
数据序列化与反序列化 | ●服务通信数据与二进制数据之间的双向转换 —使接收方可以按照既定格式(数据格式、传输顺序、编码格式...)正确解析、存储、应用从发送方发来的数据 ●发送数据时:进行序列化,根据传输对象的不同数据类型,有不同的序列化规则 —结构体struct的序列化 —字符串string的序列化(变长/定长) —数组array的序列化(变长/定长) ●接收数据时:进行反序列化 |
服务发现SD service discovery | ●管理服务状态,发现和提供服务 ●client和server动态建立SOME/IP通信 —服务寻址 ⭕find service ⭕offer service ⭕stop offer service —事件订阅 ⭕subscribe eventgroup ⭕stop subscribe eventgroup ⭕subscribe eventgroup ACK ⭕subscribe eventgroup NACK ●SD报文:见下文 |
服务发布订阅 | ●管理服务的发布与订阅关系 ●client端可以向server端订阅所需的数据,server端以周期或者事件触发的方式发布这些数据 |
SOME/IP-TP (AUTOSAR4.3) | 允许通过UDP传输大型SOME/IP报文,无需在IP层分片 |
7.1.5 SOME/IP服务接口形式
| |
method | ●一种远程函数调用RPC的通信方式 ●client向server发送请求报文 —server回复响应报文(RR-method) —server不需要回复响应报文(FF-method) |
property/field | ●类似event和method的结合体,允许client获取/设置/订阅server端事件的状态信息 ●setter/getter:client端请求获取/设置某一属性/状态 —setter:设置field当前值 —getter:获取field当前值 ●notifier —client端订阅某一属性/状态后,server端发布该服务 —发布条件同event,不同的是订阅后server端会立即发送此field内容 |
event | ●一种单向数据传输方式,由发布者向其订阅者发布服务事件 ●notification机制 ●client订阅一个服务,server发布该服务 —状态:on change/cycle —状态值:on change/cycle/值变化超过预期设定范围 |
7.1.6 SOME/IP报文
message ID | service ID: method ID: ●最高位为0:即为方法,包括method,field(getter/setter) ●最高位为1:即为事件,包括event,field(notifier) |
length | 涵盖从request ID开始到payload结束 |
request ID | ●区分每条要求 ●client ID是针对同一个服务,不同的client端ID ●session ID是针对同一服务请求的次数 ●request ID由client端发送,server端将其复制到自己的response报文中即可 |
protocol version | 版本协议号,固定为0x01 |
interface version | 服务接口版本,由用户定义 |
message type | ![]() |
return code | |
7.1.7 SD service discovery报文
①报文格式
entries array | ①entries array分为2种: ●service entry ●eventgroup entry ②service entry:
③eventgroup entry:
| ||||||||||||||||||||||||||||||||||||||||||||
options array | ●作用: 提供entry的附加信息 —IP地址 —传输层协议 —端口号 | ||||||||||||||||||||||||||||||||||||||||||||
●分类 —endpoint option(用于传输IPV4或IPV6的endpoint信息,如IP地址/port号;以及使用的传输层协议) —multicast option(用于广播IPV4或IPV6的IP地址及port号,其中传输层协议只能用UDP协议) —configuration option(用于配置通信过程的必要的信息) —load balancing option(负载平衡option用于区分服务的不同实例的优先级,以便client端根据设置选择服务实例) |
②service discovery通信行为:SOME/IP SD的通信行为 (qq.com)
SD启动时序—server端 | —关闭阶段(down):如休眠,该阶段内service不可用,server无法提供service —可用阶段(available) ⭕初始等待阶段(initial wait phase) ⭕重复阶段(repetition phase) ⭕主阶段(main phase) SD启动时序-server端状态机 |
SD启动时序-client端 | —关闭阶段(down) —可用阶段(available) ⭕初始等待阶段(initial wait phase) ⭕重复阶段(repetition phase) ⭕主阶段(main phase) 若client端在initial phase或repetition phase中收到offer service,则直接跳过后续phase进入main phase。 SD启动时序-client端状态机 |
7.1.8 SOME/IP协议
●任何transport protocol binding必须支持一条报文中封装多个SOME/IP报文
●SOME/IP通信目前支持UDP和TCP binding
UDP binding | UDP报文不需要分片,SOME/IP payload长度限制在1400byte内 |
TCP binding | ①TCP连接由client打开,且由client关闭; ②client需具备连接断开重连的机制,若server关闭TCP连接,则client必须重新建立连接 |
7.1.9 SOME/IP错误处理
错误形式 | 示意 |
UDP:“maybe”,如果发出后,等待超时后,直接报错 | ![]() |
TCP:“at least once”,如果发出后,等待超时后,重发一次,如果超出重复次数后再报错 | ![]() |
7.1.10、SOME/IP应用示例
eg.“限速标志识别”服务
provider | 摄像头 |
consumer | ADAS系统 |
相关检测 | ①“摄像头状态” ②“ADAS控制器下线”请求 ③“限速标志”通知 ④“限速值”、“距离”通知 |
交互示意图 | ![]() |
7.1.11 SOME/IP设计
●架构设计
●工具
工具名 | 功能 |
PA.CPSOA | —SOME/IP协议一致性测试内容: ⭕测试规范:OPEN TC8 3.0测试用例,共230条用例 ⭕SOME/IP server:验证DUT作为SOME/IP的行为,共93条用例 ■service discovery ■报文格式 ■RPC机制 ⭕ETS:增强可测试性服务,即采用标准化的服务及相关接口,对SOME/IP协议栈进行测试,共137条用例 ■service discovery ■序列化 ■RPC机制 ■服务发布与订阅 ■逆向测试 ■... |
ETH机柜 | ![]() |
7.2 传输层TCP/IP
作用 | ①提供应用进程之间的逻辑通信 ②复用和分用,不同的进程都可以用UDP或TCP协议;为了区分不同进程,一般使用虚拟端口ports进行区分;接收方接收到后根据不同的端口号将进程分用送入不同的进程中 ③差错分用,接收到的TCP或UDP进行报文校验,检测是否有出错的报文段。 |
TCP | ①transmission control-RFC793(TCP的传输协议) ②面向连接,3次握手(连接)/4次挥手(断开),一对一的2点连接 ③可靠性传输,保证数据不丢失、不重复、按序到达(确认应答,超时重传) ④基于字节流,数据按字节拆分并编号-序列号;是指接收到应用层数据后会先放在自己缓存里,再根据网络状态再传输数据,可以流量控制、拥塞控制(就像给别人打电话,需要对方接通的) ⑤全双工通信,应用于文件传输、邮件等场景 ⑥TCP报头: ⑦建立连接,3次握手流程: ⑧断开连接,4次挥手流程: |
UDP (OEM一般使用该协议,因为快且支持多播,关于可靠性会在应用层中设计策略来保证) | ①user datagram protocol-RFC768(UDP的传输协议) ②面向报文、传输无需建立连接,发出后无需对方回复,一对一的2点连接或一对多的连接 ③不保证传输数据的可靠性,报头简单,无拥塞控制、无流量控制(如手机发短信,不用管对方手机是否关机,可以给1人发也可以多人发信息) ④用于高速传输,如音频,视频信息(即时通信,如QQ消息、视频会议等) ⑤UDP报头:
|
进程识别 | IP端口号+IP地址+传输层协议组成,来识别特定的软件进程 |
端口号 | ①16bit(2byte)表示,取值范围:0~65535; ②公认端口号:0~1023,ICANN(下面有详细解释)把这些端口号分给了特定的一些协议,OEM不可使用; ③注册端口号:1024~49151,,使用这些端口必须到ICANN登记,以防止重复使用 ④动态和/或私有端口号:49152~65535,留给进程暂时使用,进程结束后可供其他进程使用 注意:端口号只有本地意义,不同主机中端口号没有联系 ●ICANN(the Internet corporation for assigned names and numbers):互联网名称与数字地址分配机构,属于互联网的国际组织之一,负责互联网协议(IP)地址的空间分配、协议标识符的指派、通用顶级域名(gTLD)以及国家和地区顶级域名(ccTLD)系统的管理、以及根服务器系统的管理 |
7.3 网络层IP
作用 | ①为网络中的设备提供逻辑地址 ②数据包的寻径及转发 ③差错检测 |
IPV4 | ①Internetprotocolversion4,互联网通信协议第四版 ②协议标准:RFC791-Internet protocol ③特点:面向无连接、不可靠、尽最大努力交付数据 ④将数据包发送到目的地 ⑤IP地址:点分十进制,共32bit,网络号+主机号 ●网络号:用于识别主机所在的网络 ●主机号:用于识别该网络中的主机 ⑥地址分类 ●A类:适用于超大型网络中 ●B类:适用于中等网络中 ●C类:适用于普通的组织机构 ●D类:用于多播 ●E类:用于实验
⑧子网掩码 ●用于区分网络ID(用1表示)和主机ID(用0表示) ●C类地址默认子网掩码为255.255.255.0 ●判断通讯双方的IP是否在同一局域网内(IP地址和子网掩码进行“与”运算得到网段地址 |
ARP | ①address resolution protocol,地址解析协议-RFC826 ②询问目标IP对应的MAC地址 ③ARP缓存表:存储IP地址和MAC地址的映射表;ARP缓存表有两种类型: ●动态配置:设置老化时间,主机自动更新ARP的缓存表,可能会产生ARP畸变 ●静态存储:永久保存,不会老化,手动配置(OEM使用较多)
⑤ARP报文示例: |
ICMP | ①Internet control message protocol,以太网控制报文协议-RFC792 ②在主机、路由器之间传递信息: ●网络状况信息; ●主机状况信息; ●路由是否可用... ③ICMP报文: ④常见的ICMP报文类型举例: ●源站抑制:接收端设备因缓存溢出而无法缓存数据,此时要将所接收到的报文丢弃并发送ICMP报文给源主机,告知源主机需要降低发送的速率。 ●超时问题:①当路由器收到TTL(TimeToLive)=0,无法继续路由;②当接收端在预先规定时间内没有收到一个数据段的全部数据报片时;则丢弃报文并发送ICMP报文给源主机 ●请求与回应报文:ping(packet Internet groper分组网间探测,①测试另一台主机是否可达;②测试2台主机间往返时间;③ICMP ping不使用TCP或UDP,应用层直接使用ICMP。④ping示例: ⑤ICMP报文示例: |
8、测试
8.1 以太网测试标准:
8.2 测试内容
测试项 | 测试内容 |
TC8测试概览 | ![]() |
物理层测试 | ![]() ![]() |
UDP测试 | ![]() |
TCP测试 | ![]() |
网络层测试 | ![]() |
一致性测试+应用层测试 | ![]() ![]() |
整车测试 | ![]() |
8.3 测试工具
怿星科技-smartEHT(基于CAPL)
------------------------------------------------------------------------------------------------------------
参考文章:
https://live.polyv.cn/watch/3792605?vid=202eea0331&userid=22970650&nickname=5ZGo6Iq5&avatar=&ts=1679996459000&sign=199ddb1964b6f241ef8d860e39c94f2b¶m4=NzM5OTQ%3DICMP协议_icmp响应时间太高_dream_uping的博客-CSDN博客