![汽车嵌入式系统设计 课件 第六章 汽车嵌入式系统常用通信技术_第1页](http://file4.renrendoc.com/view/20a745bfa4640b1c5b6cac809ac4b301/20a745bfa4640b1c5b6cac809ac4b3011.gif)
![汽车嵌入式系统设计 课件 第六章 汽车嵌入式系统常用通信技术_第2页](http://file4.renrendoc.com/view/20a745bfa4640b1c5b6cac809ac4b301/20a745bfa4640b1c5b6cac809ac4b3012.gif)
![汽车嵌入式系统设计 课件 第六章 汽车嵌入式系统常用通信技术_第3页](http://file4.renrendoc.com/view/20a745bfa4640b1c5b6cac809ac4b301/20a745bfa4640b1c5b6cac809ac4b3013.gif)
![汽车嵌入式系统设计 课件 第六章 汽车嵌入式系统常用通信技术_第4页](http://file4.renrendoc.com/view/20a745bfa4640b1c5b6cac809ac4b301/20a745bfa4640b1c5b6cac809ac4b3014.gif)
![汽车嵌入式系统设计 课件 第六章 汽车嵌入式系统常用通信技术_第5页](http://file4.renrendoc.com/view/20a745bfa4640b1c5b6cac809ac4b301/20a745bfa4640b1c5b6cac809ac4b3015.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章汽车嵌入式系统常用通信技术2023/11/28汽车嵌入式系统设计1第6章汽车嵌入式系统常用通信技术数字通信(digitaltelecommunications)是用数字信号作为载体来传输消息。数字通讯的优点:抗干扰能力强、差错可控、易加密、易于与现代技术相结合(如存储、传输、交换、处理等),在现代控制系统中得到广泛运用。本章以S12XE系列MCU为例,系统阐述MCU的常用各类通信技术的原理及其实现方法,包括:SCI(SerialCommunicationInterface)异步串行通信SPI(SerialPeripheralInterface)同步串行通信IIC(InterIntegrated-Circuit)同步串行通信CAN(ControllerAreaNetwork)控制器局域网络LIN(LocalInterconnectNetwork)局域互联网络2023/11/28汽车嵌入式系统设计2计算机中信息传递方式有串行通信和并行通信两种;2023/11/28汽车嵌入式系统设计36.1SCI串行通信SCI(SerialCommunicationInterface)是最常用、最经典的通用串行异步通信(UART,UniversalAsynchronousReceiver/Transmitter)接口方式。异步是指收、发双方使用各自的时钟控制发送和接收过程,可以省去收、发双方需要一条同步时钟信号线,使异步串行通信的连接更简单且容易实现。异步通信中数据或字符是一帧一帧传送。帧即为一个字符的完整通信格式,又称帧格式。一个完整的帧格式由4部分组成:起始位、数据位、奇偶校验位、停止位。这种格式的空闲状态为“1”,发送器通过发送1位起始位,“0”表示一个字节传输的开始,随后是数据位(一般是8位或9位,可以包含校验位等),最后,发送器发送1位停止位,表示一个字节传送结束。若继续发送下一字节,则重新发送开始位,开始一个新的字节传送;若不发送新的字节,则维持“1”的状态,使发送数据线处于空闲。每发送一个字节都要发送“开始位”与“停止位”。2023/11/28汽车嵌入式系统设计42.串行通信的波特率串行通信时,每秒内传送的位数叫做波特率,波特率的单位是位/秒(bit/s,bitpersecond)。常用的波特率有:1200、2400、4800、9600、19200、38400、57600、115200等,很容易计算出每帧信息传送所需的时间。随着波特率的提高,相邻两位间的时间间隔变短,以至于很容易受到电磁源的干扰,通信可靠下降。通信距离问题也会造成信号衰减和信号被干扰。2023/11/28汽车嵌入式系统设计53.奇偶校验在异步串行通信中,为确保传输的正确性。最常见的方法是每帧中增加一位(奇偶校验位),供错误检测使用。它是为每个字符增加一个额外位使字符中“1”的个数为奇数或偶数。奇数或偶数依据使用的是“奇校验检查”还是“偶校验检查”而定。当使用“奇校验检查”时如果字符数据位中“1”的数目是偶数,校验位应为“1”;如果“1”的数目是奇数,校验位应为“0”。当使用“偶校验检查”时,如果字符数据位中“1”的数目是偶数,则校验位应为“0”;如果是奇数,则为“1”。例,ASCII字符“R”,其位构成是1010010B,有3个位为“1”,若使用奇校验检查,则校验位为0;如果使用偶校验检查,则校验位为1。奇偶校验检查方法简单使用方便,发生1位错误的概率远大于2位错误的概率,所以“奇偶校验”这种方法还是最为常用的校验方法。2023/11/28汽车嵌入式系统设计64.串行通信的传输方式单工(Simplex):数据传送是单向的,一端为发送端,另一端为接收端。这种传输方式中,除了地线之外,仅需一根数据线。全双工(Full-duplex):数据传送是双向的,且可以同时接收与发送数据。这种传输方式中,除了地线之外,需要两根数据线,站在任何一端的角度看,一根为发送线,另一根为接收线。一般情况下,MCU的异步申行通信接口均是全双工的。半双工(Half-duplex):数据传送也是双向的,但是在这种传输方式中,除地线之外,一般只有一根数据线。任何时刻,只能由一方发送数据,另一方接收数据,不能同时收发。2023/11/28汽车嵌入式系统设计75.RS-232总线标准MCU引脚输入/输出一般使用晶体管-晶体管逻辑电平TTL(TTL,Transistor-TransistorLogic)电平。而TTL电平的“1”和“0”的特征电压分别为2.4V和0.4V,即电压高于2.4V则识别为“1”,电压低于0.4V则识别为“0”,一般仅适用于板内数据传输。若用TTL电平将数据传输超过5米,就无法保证信息传送的可靠性了。为使信号传输得更远,美国电子工业协会制订了串行物理接口标准RS-232C,以下简称RS-232。RS-232采用负逻辑,-15~-3V为逻辑“1”,+3~+15V为逻辑“0”。其最大的传输距离可达30米,通信速率一般低于20kbit/s。标准串行通信接口普遍使用9芯串行接口(DB9)。2023/11/28汽车嵌入式系统设计8在MCU中,若使用RS-232总线与其它设备串行通信,则需外接电路实现电平转换。在发送端,需要用驱动电路将TTL电平转换成RS-232电平,在接收端需要用接收电路将RS-232电平转换为TTL电平。目前广泛使用MAX232芯片,该芯片使用+5V电源供电实现电平转换。2023/11/28汽车嵌入式系统设计9进行MCU的SCI串行通信编程时,只针对MCU的TXD和RXD引脚,与MAX232无关,MAX232仅起电平转换的作用,有时又称其为串口通信驱动器、收发器等。6.1.3SCI应用实例2023/11/28汽车嵌入式系统设计10【例6-1】采用中断方式实现串口通信数据的接收。/*===初始化SCI===*/voidINIT_SCI(void){ SCI0BD=BUS_CLOCK/16/BAUD; //设置SCI0波特率为BAUD=9600 SCI0CR1=0x00;//设置SCI0为正常模式,8位数据位,无奇偶校验
SCI0CR2=0x2c;//允许接收和发送数据,允许接收中断功能}/*===串口发送函数===*/voidSCI_send(unsignedchardata){while(!SCI0SR1_TDRE); //等待发送数据寄存器(缓冲器)为空
SCI0DRL=data;}/*===串口接收函数===*/unsignedcharSCI_receive(void){while(!SCI0SR1_RDRF);//等待发送数据寄存器满
return(SCI0DRL);}/*串口中断接收函数*/#pragmaCODE_SEG__NEAR_SEGNON_BANKEDinterruptvoidreceivedata(void){data_receive=SCI_receive();if(data_receive=='O'){SCI_send('Y');LEDCPU=LED_ON;}if(data_receive=='C'){SCI_send('V');LEDCPU=LED_OFF;}}#pragmaCODE_SEGDEFAULT6.2SPI串行接口
2023/11/28汽车嵌入式系统设计11图6-5SPI外围串行扩展结构图SPI有4种通信方式:(1)方式0CPOL=0,CPHA=0。此时,空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在上升沿,数据发送是在下降沿。(2)方式1CPOL=0,CPHA=1。此时,空闲态时,SCLK处于低电平,数据发送是在第1个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。(3)方式2CPOL=1,CPHA=0。此时,空闲态时,SCLK处于高电平,数据采集是在第1个边沿,也就是SCLK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。(4)方式3CPOL=1,CPHA=1。此时,空闲态时,SCLK处于高电平,数据发送是在第1个边沿,也就是SCLK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。2023/11/28汽车嵌入式系统设计12SPI接口在内部硬件实际上是简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。如图6-6,SSPSR是SPI设备内部的移位寄存器,根据SPI时钟信号状态,往SSPBUF里移入数据、从SSPBUF移出数据。2023/11/28汽车嵌入式系统设计13图6-6SPI内部工作机制【例6-2】FM25040A实现对EEPROM的扩展FM25040A是存储容量4Kb(512个字节)的EEPROM存储器芯片,使用SPI接口进行数据的读与写。SPI的最高频率可达20MHz,采用SOP8贴片封装。关于FM25040A的封装与引脚定义参见图6-7,FM25040A的读写时序参见图6-8、图6-9。2023/11/28汽车嵌入式系统设计14图6-8FM25040A存储器写时序图6-9FM25040A存储器读时序理解时序的概念符号参数最小值最大值单位fCKSCK时钟频率020MHztCH时钟高时间22
nstCL时钟低时间22
nstCSU片选开始10
nstCSH片选保持10
nstOD输出失效
20nstODV输出数据有效
20nstOH输出保持0
nstD失选时间60
nstR数据上升时间
50nstF数据下降时间
50nstSU数据建立时间5
nstH数据保持时间5
nstHS/保持建立时间10
nstHH/保持保持时间10
nstHZ/保持由低到高
20nstLZ/保持高到数据有效时间
20ns2023/11/28汽车嵌入式系统设计15表6-2FM25040ASPI时序要求图6-10FM25040ASPI时序要求2023/11/28汽车嵌入式系统设计16/*===初始化SPI模块===*/voidINIT_SPI(void){HOLD_dir=1;CS_dir=1;SPI0CR1=0b01010000; //使能SPI,禁止中断,时钟高有效,相位为0;SPI0CR2=0x00; //SS管脚为普通I/O,双向模式;SPI0BR=0x70; //设置SPI时钟频率为2MHz;CS=1;}/*===SPI发送函数===*/voidSPI_send(unsignedchardata){while(!SPI0SR_SPTEF);SPI0DRL=data;}/*===SPI接收函数===*/unsignedcharSPI_receive(void){unsignedchartemp,data;while(!SPI0SR_SPIF);temp=SPI0SR;data=SPI0DRL;return(data);}/*===初始化FM25040A===*/voidINIT_FM25040A(void){HOLD=1;CS=0;}6.3IIC(I2C)串行总线IIC(InterIntegrated-Circuit)总线是PHILIPS公司推出的一种同步串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线,它支持多主控,任何能够进行发送和接收的设备都可以成为主控端。6.3.1IIC(I2C)的工作原理IIC总线只有两根信号线,如图6-11所示。一根是双向数据信号线SDA;另一根是双向时钟线SCL。2023/11/28汽车嵌入式系统设计17图6-11IIC(I2C)通信系统架构IIC总线的器件接口均是开漏结构,通过上拉电阻(大小由速度和容性负载决定,一般在3.3k-10k之间)接正电源。当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA及SCL都是线“与”关系。IIC总线工作速率常见的有标准模式100kbit/s和快速模式400kbit/s两种,增强快速模式1Mbit/s和高速模式3.4Mbit/s,极速模式单向数据传输速率可达5Mbit/s。可以实现半双工通信。2023/11/28汽车嵌入式系统设计18推挽输出:可以输出高,低电平,连接数字器件;不能实现“线与”,可能会发生短路,进而可能造成端口的损害。开漏输出:开漏输出无法真正输出高电平,即高电平时没有驱动能力。输出端相当于三极管的集电极。要得到高电平状态需要上拉电阻才行。适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)。寻址方式IIC总线采用纯软件寻址方式,无需片选线,大大简化了总线数量。每个连接到总线的设备都有唯一的地址,地址为7位,前四位识别器件类别,一般是固定的;后三位由器件本身管脚A2、A1、A0可以编程,故同类器件一般最多挂8个。IIC总线明确规定,采用7位寻址字节,D7~D1位组成从机的地址。D0位是数据传送方向位,为“0”时表示写数据,为“1”时表示读数据。主机发送地址时,总线上的每个从机都将这7位地址码和自己的地址码比较,如果相同则认为自己被主机寻址,根据读/写位确认为发送器或者接收器。写操作,从地址为00000000b表示通用广播地址。保留地址见表6-3。2023/11/28汽车嵌入式系统设计19从地址R/W(——)位说明00000000通用广播地址00000001起始位0000001XCBUS地址0000010X不同总线格式保留0000011X将来功能保留00001XXXHS模式主代码11111XX1设备ID11110XXX10位从地址表6-3IIC总线保留地址数据传送IIC总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有时钟信号为低电平时,数据线上的电平才允许变化。SCL线为高电平时,SDA线由高变低表示起始信号;SCL线为高电平时,SDA线由低变高表示终止信号。起始信号和终止信号均是主机发出;起始信号产生后,总线处于被占用状态;终止信号产生后,总线处于空闲状态。2023/11/28汽车嵌入式系统设计20IIC数据传送格式:字节传送与应答要求每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。数据帧格式:IIC总线上的数据包括地址信号和数据信号。在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向即读(R/W̅=1)还是写(R/W̅=0),每次数据传送均是主机产生终止信号而结束。由于某种原因从机不对主机寻址信号应答时,它必须将数据线置于高电平,而由主机产生一个终止信号以结束总线的数据传送;如果从机对主机进行了应答,但在数据传送一段时间后无法继续接收更多的数据时,从机可以通过对无法接收的第一个数据字节的“非应答”通知主机,主机则应发出终止信号以结束数据的继续传送;当主机接收数据时,它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。2023/11/28汽车嵌入式系统设计21总线的一次数据传输,包括以下几种组合:1)主机向从机发送数据,数据的传送方向在整个传送过程中不变。2)主机在第一个字节后,立即从从机读数据。3)在传送过程中,需要改变读写方向时,需要重新发送起始信号和从机地址。2023/11/28汽车嵌入式系统设计22【例6-3】采用PCF8574芯片(引脚见图6-19),实现通过IIC总线的远程8位I/O扩展(电路原理图见图4-72)。2023/11/28汽车嵌入式系统设计23/*===初始化IIC===*/voidINIT_IIC(void){IIC0_IBFD=0x94; //总线时钟32MHz,设置SCL主频为100kHzIIC0_IBCR=0x80; //使能IIC模块,禁止中断
IIC0_IBSR_IBAL=1; //清除IBAL标志位}/*===通过IIC由PCF8574读取数据===*/unsignedcharIIC_receive(void){unsignedchardata;IIC0_IBCR_TXAK=0; //接收到数据后有应答
IIC0_IBCR_TX_RX=1; //设置单片机为发送模式
IIC0_IBCR_MS_SL=1; //设置单片机为主机模式,产生开始信号
IIC0_IBDR=0b01000001;while(IIC0_IBSR_IBIF==0);IIC0_IBSR_IBIF=1;while(IIC0_IBSR_RXAK);IIC0_IBCR_TX_RX=0; //设置单片机为接收模式
IIC0_IBCR_TXAK=1; //接收到数据后无应答
data=IIC0_IBDR; //清空IIC的寄存器,准备接收
while(IIC0_IBSR_IBIF==0);IIC0_IBSR_IBIF=1;IIC0_IBCR_MS_SL=0;data=IIC0_IBDR; //读取接收到的数据
return(data);}CAN是控制器局域网络的简称,是一种能够实现分布式实时控制的串行通信网络。1)最高传输速度1Mbps,最远通信距离10km,无损位仲裁机制,多主结构;2)低成本:多个ECU通过CAN接口进行通信,布线成本低;3)高集成:CAN总线系统允许在所有ECUs上进行集中错误诊断和配置;4)可靠性:该系统对子系统的故障和电磁干扰具有很强的鲁棒性,是汽车控制系统的理想选择;5)高效率:可以通过标识符ID对消息进行优先级排序,以便最高优先级ID的报文通信不被中断;6)灵活性:每个ECU包含一个用于CAN总线收发芯片,可随意添加CAN总线节点。2023/11/28汽车嵌入式系统设计24图6-21CAN总线网络简图CAN总线网络主要挂在CAN_H和CAN_L,各个节点通过这两条线实现信号的串行差分传输,为了避免信号的反射和干扰,还需要在CAN_H和CAN_L之间接上120Ω(模拟无限远传输线的特性阻抗)的终端电阻。6.4S12XE的CAN总线8)灵活可屏蔽的识别滤波器,支持2个32位的滤波器、4个16位的滤波器、8个8位滤波器;9)集成低通滤波器可编程唤醒功能;10)可编程环路模式,用于自检操作;11)可编程监听模式,用于检测CAN总线状态;12)可编程总线关闭与恢复功能;13)对整个CAN收发器的错误状态(如警告、错误被动、关闭总线)具有独立的产生信号和触发中断能力;14)可编程的MSCAN时钟来源,可选择总线或晶振时钟;15)使用内部定时器作为收发消息的时间戳;16)3种低功耗模式:睡眠、断电和MSCAN使能;17)配置寄存器全局初始化。2023/11/28汽车嵌入式系统设计251)遵循CAN-2.0A/B协议;2)支持标准和扩展帧格式;3)0~8个字节数据段长度;4)通信位速率可达1Mbps;5)支持远程帧;6)5个基于FIFO存储机制的接收寄存器;7)3个基于本地优先级机制的发送寄存器;收发器S12XE的CAN输入和输出引脚Rx、Tx通过收发器与CAN总线进行物理性连接,形成通信网络中的一个节点。收发器:S12XE的MSCAN模块对应收发信号是TTL逻辑电平,须通过CAN收发器实现逻辑电平和CAN信号电平之间的转换。此外,收发器可提供驱动CAN总线所需的大电流(提高驱动能力),并对出故障的CAN总线或基站进行电流保护。2023/11/28汽车嵌入式系统设计26助记符引脚描述TXD1发送数据输入GND2接地Vcc3电源RXD4接收数据输入Vref5参考电压输出CANL6低电平CAN总线CANH7高电平CAN总线S8选择进入高速模式还是静音模式CAN信号CAN总线采用不归零码位填充技术,也就是说CAN总线上的信号有两种不同的信号状态,分别是显性的(Dominant)逻辑0和隐形的(Recessive)逻辑1,信号每一次传输完后不需要返回到逻辑0(显性)的电平。2023/11/28汽车嵌入式系统设计27图6-23CAN总线信号逻辑状态当没有数据发送时,两条线的电平一样都为2.5V,称为静电平,也就是隐性电平。当有信号发送时,CAN_High的电平升高1V,即3.5V,CAN_Low的电平降低1V,即1.5V。按照定义: CAN_H-CAN_L<0.5V时为隐性的,逻辑信号表现为“逻辑1”——高电平; CAN_H-CAN_L>0.9V时为显性的,逻辑信号表现为“逻辑0”——低电平。2.CAN信号传输(1)发送过程CAN控制器将CPU传来的信号转换为逻辑电平。CAN发射器接收逻辑电平之后,再将其转换为差分电平输出到CAN总线上。参见图6-24左图。(2)接收过程CAN接收器将CAN_H和CAN_L线上传来的差分电平转换为逻辑电平输出到CAN控制器,CAN控制器再把该逻辑电平转化为相应的信号发送到CPU。2023/11/28汽车嵌入式系统设计28发送接收MCUCAN总线3.CAN总线传输帧结构CAN总线按帧进行数据传输,CAN的通信帧分成五种:数据帧、远程帧、错误帧、过载帧和帧间隔。数据帧根据仲裁段长度不同分为标准帧(2.0A)和扩展帧(2.0B)。2023/11/28汽车嵌入式系统设计29图6-25CAN帧结构(1)帧起始由1个显性位(低电平)组成,发送节点发送帧起始,其他节点同步于帧起始。(2)帧结束由7个隐形位(高电平)组成。2023/11/28汽车嵌入式系统设计302023/11/28汽车嵌入式系统设计31(3)仲裁段只要总线空闲,总线上任何节点都可以发送报文,如果有两个或两个以上的节点开始传送报文,那么就会存在总线访问冲突的可能。但是CAN使用了标识符的逐位仲裁方法可以解决这个问题。参见图6-27。CAN总线控制器在发送数据的同时监控总线电平,如果电平不同,则停止发送并做其他处理。如果该位位于仲裁段,则退出总线竞争;如果位于其他段,则产生错误事件。帧ID越小,优先级越高。由于数据帧的RTR位为显性电平,远程帧为隐性电平,所以帧格式和帧ID相同的情况下,数据帧优先于远程帧;由于标准帧的IDE位为显性电平,扩展帧的IDE位为隐形电平,对于前11位ID相同的标准帧和扩展帧,标准帧优先级比扩展帧高。参见图6-28。图6-28CAN数据帧仲裁段图6-27CAN位仲裁机制(4)数据段一个数据帧传输的数据量为0~8个字节,这种短帧结构使得CAN-bus非常适合汽车和工控应用场合,具有数据量小、发送和接收时间短、实时性高、被干扰的概率小、抗干扰能力强等优点。如图6-29所示。2023/11/28汽车嵌入式系统设计32图6-29CAN帧数据段4.滤波原理CAN节点是通过设置标识符滤波寄存器的方式来识别当前CAN帧是否为自己所需的;2个32位的滤波器、4个16位的滤波器、8个8位滤波器;以2个32位识别滤波器的标识符滤波模式为例讲解:2个32位的寄存器为过滤验收寄存器(AC)和过滤屏蔽寄存器(AM)。过滤验收寄存器AC设置了标识符每位的值;过滤屏蔽寄存器AM规定了标识符的每一位的值是否需要与过滤验收寄存器进行匹配。0——需要匹配,1——不需要匹配。举例:AC=0x0000037C,AM=0x00000072023/11/28汽车嵌入式系统设计33可见,AM寄存器最低3位为1,不需进行匹配。所以接收到的CAN扩展帧消息的ID的高26位必须与AC寄存器的高26位匹配,才会被过滤接收。表6-8实例中,ID为0x00000378~0x0000037F的报文均能被接收。扩展帧验收与屏蔽码的确定可按以下方式实现:(1)确定该CAN节点需要接收的报文ID。(2)由于这些报文均需要通过验证,所以选取其中一个报文ID作为基础过滤验收码,并将其余需要通过验收的报文ID与之按位逐一进行对比,如果所有需要通过验收的报文ID在该位的值均相同,则对应的过滤屏蔽码在该位置0,否则置1,即可获得基础过滤屏蔽码。考虑到过滤寄存器为32位,而报文ID是29位,有时还需要根据CAN控制器内部的过滤寄存器与报文ID的对齐方式,进行相应调整。2023/11/28汽车嵌入式系统设计34图6-30扩展帧滤波屏蔽码计算器运行图为保证0x18FFDF00、0x18EAFF00、0x18CBFF00三个ID的报文被接收,对应的验证码为0x18FFDF00、屏蔽码为0x00352000。对于CAN-II分析仪和S12XE系列MCU的验证码和屏蔽码均需做适当调整,具体参见相关手册。fCANCLK可通过控制寄存器CANCTL1中CLKSRC位选择时钟来源。CLKSRC=0,fCANCLK为晶振时钟;CLKSRC=1,fCANCLK为总线时钟。可编程预分频器将CANCLK分频生成量子时钟(Tq),是CAN总线通信过程控制的最小时间单位,其计算公式为:CAN总线的位时间计算公式为:BitTime为位时间(s),分成三段:Sync_Seg、时段1、时段25.CAN总线波特率2023/11/28汽车嵌入式系统设计35图6-31CA时钟机制1)Sync_Seg:该段有一个长度固定的时间份额,信号边沿预计出现在本段;2)时段1:本段包括CAN标准的Prop_Seg和Phase_Seg1,通过设置参数TSEG1,使之包含4~16个时间份额,可对其进行编程;3)时段2:本段表示CAN标准的Phase_Seg2,通过设置TSEG2使之具有2~8个时间份额长,可对其进行编程。总线时序寄存器有两个,共同作用决定总线的通信波特率。总线时序寄存器0(CANBTR0)和总线时序寄存器1(CANBTR1)有着各自不同的功能定义。2023/11/28汽车嵌入式系统设计362023/11/28汽车嵌入式系统设计376.4.4SAEJ1939通信协议SAEJ1939(以下简称J1939)是美国汽车工程协会(SAE)的推荐标准,用于中重型道路车辆上电子部件间通信的标准体系结构。J1939基于CAN总线,可达到250Kbps的通信速率。J1939描述了重型车辆现场总线的一种网络应用,包括CAN网络物理层定义J1939-11/15、数据链路层定义J1939-21、应用层定义J1939-71、网络层定义J1939-31、故障诊断J1939-73和网络管理J1939-81。SAEJ1939协议中,不仅仅指定了传输类型、报文结构及其分段、流量检查等,而且报文内容本身也做了精确的定义。J1939是在商用车辆、舰船、轨道机车、农业机械和大型发动机中应用最广泛的应用层协议。2023/11/28汽车嵌入式系统设计382.CAN标准帧和扩展帧标准帧只有11位的标识符(ID),扩展帧有11+18=29位标识符(ID)。CAN数据帧组成包括:帧起始(SOF)、仲裁域、控制域、数据域、循环冗余校验域(CRC)、应答域(ACK)、帧结束(EOF)。2023/11/28汽车嵌入式系统设计39图6-23CAN标准帧和扩展帧协议数据单元(PDU)(1)协议数据单元(PDU)如图6-24所示,协议数据单元(PDU)=标识符+数据域PDU被封装在一个或多个CAN数据帧中,通过物理介质传送到其他网络设备。每个CAN数据帧只能有一个PDU。CAN2.0B使用29位的标识符来区分不同的报文;J1939对这29标识符进行了重新的分类和解释。2023/11/28汽车嵌入式系统设计40图6-24协议数据单元(PDU)结构协议数据单元(PDU)J1939对CANID进行了重新划分,加上最多8个字节的数据域,构成了J1939的协议数据单元,其中前3位表示优先级位(P,Priority),之后是扩展数据页位(EDP,ExtendedDataPage)、数据页位(DP,DataPage)、PDU格式位(PF,PDUFormat)、PDU特定域位(PS,PDUSpecific)、源地址位(SA,SourceAddress)、数据域(DataFiled)。参数组编号(PGN,ParameterGroupNumber):由29位CANID的中间18位共同组成。J1939是根据PGN来区分不同的报文(参见J1939-71),而普通CAN的报文是根据CANID来区分。J1939的协议数据单元与CAN报文帧相比要少SOF、SRR、IDE等,因为这些部分完全由CAN2.0B控制,J1939并未对这部分做任何修改。2023/11/28汽车嵌入式系统设计41(2)J1939PDU各部分介绍1)优先级(P):根据CAN2.0B的仲裁机制,ID越小优先级越高。优先级位于整个ID的最前面,实际上依然控制着ID大小,即CAN报文的优先级。在J1939协议中优先级仅仅用于优化发送数据时的报文延迟,接收报文时则完全忽略优先级。J1939中的优先级可以从最高的0(000b)到最低优先级7(111b)。默认情况下控制类报文的优先级为3,其他报文的优先级为6。当分配新的PGN或总线上流量改变时,允许提高或者降低优先级。2)扩展数据页(EDP):扩展数据页(EDP)联合数据页(DP)可以决定CAN报文帧中CANID的结构,目前为保留位,必须设置为0。3)数据页(DP):用于联合扩展数据页来决定CANID结构,当EDP为0时,DP为0或者1分别表示第0页或者第1页PGN。2023/11/28汽车嵌入式系统设计42J1939PDU各部分介绍4)PDU格式域(PF):PF用来确定PDU的格式。PF<240(0xF0)为PDU1格式;PF=240~255为PDU2格式,对应PF的高四位均为1。5)PDU特定域(PS):PS的定义取决于PF。PDU1格式下PS域是目标地址(DA,DestinationAddress);PDU2格式下PS域为组扩展(GE,GroupExtension)值。目标地址(DA):除目标地址的设备外,其他设备会忽略此报文。如果目标地址为0xFF,则表示为全局地址,此时所有设备都应该监听此报文并在收到报文后做出响应。组扩展(GE):组扩展与PDU格式域PF的低四位(注意:当PDU格式域最高四位被置1,说明PS域是组扩展)规定了每个数据页4096个参数组。6)源地址(SA):完整的汽车系统由多个ECU模块,SAEJ1939协议为每个控制设备分配了8位地址标识符。SA指示该帧报文是由哪个控制器(用8位地址标识符)发送的。7)数据域(DATA):存放该帧报文传送的数据,长度为8字节。2023/11/28汽车嵌入式系统设计43J1939PDU各部分介绍图6-24中18位PGN的计算方法非常简单,可下面算法实现:if(PF<0xF0)PGN=(DP<<9)+(PF<<8);elsePGN=(DP<<9)+(PF<<8)+PS;当PF<240(0xF0),PGN数目等于2×0xF0=480;当PF>=240,PGN数目应等于2×16×256=8192。所以,两种情况PGN总数应为480+8192=8672。2023/11/28汽车嵌入式系统设计44(3)多帧传输机制当传输的数据大于8个字节时,此时就需要使用多帧传输。J1939多帧传输的规则很简单,就是将数据域的第一个字节当作编号,这样原来每帧CAN报文最多可传输8个字节内容,由于现在被编号占用了1个字节,只能传输7个字节。由于编号范围为1~255,所以多帧传输的最大数据长度是255×7=1785个字节。最后一帧报文实际需要传输的内容可能不足7字节,剩余字节要全部设置为0xFF。比如一共要传输9个字节,第一帧CAN报文传输了7个字节,第二帧CAN报文只能传输2个字节,这样加上1个编号字节,还剩5个字节,这5个字节要全部设置为0xFF。发送数据时,按照编号把数据拆装成多帧报文;接收数据时,则按照编号重新组装成完整的数据。2023/11/28汽车嵌入式系统设计45(4)参数组编号(PGN)参数组编号唯一标识一个参数组,在通信过程中起到“索引”的作用,表征报文的内容和用途,确定报文的类型和传播数据需要的帧数目。可以理解为同类(或者有共同特征的设备)参数的集合的索引。SAEJ1939中的PGN格式规定如下(以pgn61443为例):2023/11/28汽车嵌入式系统设计46pgn61443:ElectronicEngineController#2–EEC2–TransmissionRepetitionRate:50ms —>报文发送周期DataLength:8Bytes —>数据域长度(CAN扩展帧中的数据域字节数)DataPage:0 —>数据页(PGN中的数据页DP)PDUFormat:240 —>PDU格式:PDU1(PF<240)和PDU2(PF:240~255)PDUSpecific:3 —>PDU特定域(PF<240,DA;240≤PF≤255,组扩展)DefaultPriority:3 —>优先级ParameterGroupNumber:61443(0x0F003)—>PGNpgn61443数据域包含的SPN格式定义的解释:2023/11/28汽车嵌入式系统设计47起始位置长度SPN参数名称SPN1.12bitsAcceleratorPedalLowIdleSwitch(加速踏板低怠速开关)5581.32bitsAcceleratorPedalKickdownSwitch(加速踏板踩下开关)5591.52bitsRoadSpeedLimit(道路速度限值)143721byteAcceleratorPedalPosition(加速踏板位置)9131bytePercentLoadatCurrentSpeed(当前车速的百分比载荷)9241byteRemoteAccelerator(远程加速器)974(5)可疑参数编号(SPN,SuspectParameterNumber)J1939-71不仅对PGN做了详细的规定,对SPN也做了详细的规定,并对每个参数做了编号。SAEJ1939中的SPN格式规定如下(以SPN91为例):2023/11/28汽车嵌入式系统设计48SPN91–AcceleratorPedalPosition(加速踏板位置)–
Theratioofactualacceleratorpedalpositiontomaximumpedalposition.
AlthoughitisusedasaninputtodeterminetransmissionandASRalgorithmsaboutdriver’sactions.DataLength:1Bytes —>SPN号对应的数据的长度Resolution:0.4%/bit,0offset —>比例系数和偏移量DataRange:0to100% —>数据范围(涉及偏移量计算)Type:Measured —>测量值SuspectParameterNumber:91 —>SPN号ParameterGroupNumber:[61443] —>隶属的PGN号总线数值与物理数值之间转换为:
总线数值=(物理数值-偏移量)/比例系数其中:比例系数代表单位总线数值(二进制1)代表的物理数值大小;
偏移量代表总线数值为0时物理数值的大小。进一步理解PGN和SPN,以PGN65213为例进行详细说明2023/11/28汽车嵌入式系统设计49PGN65213在J1939-71中的详细描述。假设ECU地址为0x9C,优先级为默认值6,且此ECU需要往VCU发送PGN65213(0xFEBD)。根据定义:P=6,EDP=0,DP=0,PF=0xFE,PS=0xBD,SA=0x9C;则CAN报文ID为
0x18FEBD9C。2023/11/28汽车嵌入式系统设计50假如风扇估计的百分比转速为50%,由于分辨率为0.4%/bit,偏移量为0,则这个字节的总线数值应为:40%/0.4%=100=0x64。2023/11/28汽车嵌入式系统设计51如果风扇当前因发动机机油温度过高而运转,则风扇驱动状态为3(0011b)。如果风扇当前转速为1500rpm,由于分辨率为0.125rpm/bit,偏移量为0,则这两个字节的总线数值应为:1500/0.125=12000=0x2EE0。数据域:Byte1=0x64;Byte2=0xF3;Byte3=0xE0,Byte4=0x2E;Byte5=Byte6=Byte7=Byte8=0xFF。2023/11/28汽车嵌入式系统设计523.J1939的整车通信协议2023/11/28汽车嵌入式系统设计53根据应用场合的不同,节点数目可以相应的增加或减少。例如,纯电动汽车的节点包括:整车控制器、电控制动(EBS)控制器、电池管理系统、驱动电机控制器、驾驶室显示器、电机控制器、ISG控制器、BMS电池管理系统、超级电容控制器等。各ECU源地址定义ECU名称地址ECU名称地址发动机控制器0整车控制器208传动系统(变速器)控制器3燃料电池控制器209电控制动(EBS)控制器11AMT控制器210发动机缓速器15超级电容控制器211驱动系统缓速器16DC-DC#1214组合仪表23DC-DC#2215行车记录仪24氢气供应系统216车身33电动助力转向系统217PTO动力输出装置36驱动电机控制器#1239车辆智能中心39驱动电机控制器#2240驾驶室显示器40驱动电机控制器#3241排气缓速器41ISG控制器242车载诊断系统43电池管理系统#1243转速表238电池管理系统#2244故障诊断(售后服务工具)249电池管理系统#3245
电池管理系统#42462023/11/28汽车嵌入式系统设计54表6-12ECU节点名称及其分配地址(2)各ECU输出参数定义根据汽车所需要实现的控制功能,定义各个节点的输出参数,包含节点所有需要处理或发送到总线上的信号,并对信号的地址、刷新率、信号类型、信号数据长度、数据范围、分辨率等进行定义。表6-13给出了整车控制器的部分参数信息。2023/11/28汽车嵌入式系统设计55信号名称类型刷新率/ms分辨率数据长度/bit数据范围偏移量目标地址整车控制器状态状态值100-2工作/未工作-广播车辆运行模式状态值10-4普通/动力/雪地/高速-广播目标气门开度测量值100.4%/bit80~100%0广播发动机启动控制状态值10-2启动/未启动-广播发动机目标转速测量值100.125r/min/bit160~8031.876r/min0发动机发动机目标转矩百分比测量值101%/bit8-125%~125%-125%发动机……表6-13整车控制器的部分参数信息(3)各ECU参数组定义表6-14中给出了列出了整车控制器的参数组信息。整车控制器的参数组用于实现汽车动力总成系统中各控制单元间的协调控制与管理,例如通过VCU1参数组,整车控制器节点向发动机控制器节点发送速度和转矩控制信息。而其他控制器节点主要用于对整车控制器节点的反馈信息,例如电机控制器的MC1参数组中定义了电机上电/断电请求、电机工作状态、电机运行模式、电机运转转矩、电机运转转速等信息。2023/11/28汽车嵌入式系统设计56参数组刷新率/msPGNPPFPSVCU1:整车控制器#1106169632410VCU2:整车控制电动机106169732411VCU3:整车控制燃料电池506169832412VCU4:整车控制ISG206169932413VCU5:整车控制DC-DC506170032414VCU6:整车控制电池1006170132415VCU7:整车控制超级电容506170232416VCU8:整车控制制动需求106170332417VCU9:整车控制开关继电器50061777324181VCU10:整车控制器产品序列需要时发送617963241100表6-14整车控制器的参数组信息XEP100的SAEJ1939应用实例【例6-4】基于J1939的报文收发。2023/11/28汽车嵌入式系统设计57“can.h”代码:structcan_msg //发送报文的结构体{unsignedlongid;BoolRTR;unsignedchardata[8];unsignedcharlen;unsignedcharprty;};2023/11/28汽车嵌入式系统设计58“can.c”代码:voidINIT_CAN0(void);BoolMSCAN0SendMsg(structcan_msgmsg);BoolMSCAN0GetMsg(structcan_msg*msg);#include<hidef.h>#include"derivative.h"#include"CAN.h"/*===初始化CAN0===*/voidINIT_CAN0(void){if(CAN0CTL0_INITRQ==0) //查询是否进入初始化状态
CAN0CTL0_INITRQ=1; //进入初始化状态
while(CAN0CTL1_INITAK==0); //等待进入初始化状态
CAN0BTR0_SJW=0; //设置同步
CAN0BTR0_BRP=7; //设置波特率
CAN0BTR1=0x1c; //设置时段1和时段2的Tq个数,总线频率为250kb/sCAN0IDMR0=0xFF;CAN0IDMR1=0xFF;CAN0IDMR2=0xFF;CAN0IDMR3=0xFF;//这里关闭滤波器
CAN0IDMR4=0xFF;CAN0IDMR5=0xFF;CAN0IDMR6=0xFF;CAN0IDMR7=0xFF;CAN0IDAC0=0xFF;CAN0IDAC1=0xFF;CAN0IDAC2=0xFF;CAN0IDAC3=0xFF;//这里关闭校验器
CAN0IDAC4=0xFF;CAN0IDAC5=0xFF;CAN0IDAC6=0xFF;CAN0IDAC7=0xFF;CAN0CTL1=0xC0; //使能MSCAN模块,设置为一般运行模式、使用总线时钟源
CAN0CTL0=0x00;//返回一般模式运行
while(CAN0CTL1_INITAK); //等待回到一般运行模式
while(CAN0CTL0_SYNCH==0); //等待总线时钟同步
CAN0RIER_RXFIE=0; //禁止接收中断}2023/11/28汽车嵌入式系统设计59/*===CAN0发送===*/BoolMSCAN0SendMsg(structcan_msgmsg){unsignedcharsend_buf,sp;if(msg.len>8)return(FALSE); //检查数据长度
if(CAN0CTL0_SYNCH==0) //检查总线时钟
return(FALSE);send_buf=0;do{ //寻找空闲的缓冲器
CAN0TBSEL=CAN0TFLG;send_buf=CAN0TBSEL;}while(!send_buf);CAN0TXIDR0=(unsignedchar)(msg.id>>21); //写入标识符
CAN0TXIDR1=(((unsignedchar)(msg.id>>13))&0xe0)|0x18|(((unsignedchar)(msg.id>>15))&0x07);CAN0TXIDR2=(unsignedchar)(msg.id>>7);CAN0TXIDR3=((unsignedchar)(msg.id<<1));if(msg.RTR) //RTR=阴性
CAN0TXIDR3|=0x01;for(sp=0;sp<msg.len;sp++) //写入数据*((&CAN0TXDSR0)+sp)=msg.data[sp];CAN0TXDLR=msg.len; //写入数据长度
CAN0TXTBPR=msg.prty; //写入优先级
CAN0TFLG=send_buf; //清TXx标志(缓冲器准备发送)return(TRUE);}2023/11/28汽车嵌入式系统设计60/*===CAN0接收===*/BoolMSCAN0GetMsg(structcan_msg*msg){unsignedcharsp2;if(!(CAN0RFLG_RXF))return(FALSE); //检测接收标志
if(!CAN0RXIDR1_IDE) //检测CAN协议报文模式(一般/扩展)标识符
return(FALSE);msg->id=(((unsignedlong)CAN0RXIDR0)<<21)|((unsignedlong)(CAN0RXIDR1&0xe0)<<13)|\((unsignedlong)(CAN0RXIDR1&0x07)<<15)|(((unsignedlong)CAN0RXIDR2)<<7)|\((unsignedlong)(CAN0RXIDR3&0xfe)>>1);//Freescale与J1939的ID结构不完全一致。需要做调整
if(CAN0RXIDR3&0x01)msg->RTR=TRUE;elsemsg->RTR=FALSE;msg->len=CAN0RXDLR; //读取数据长度
for(sp2=0;sp2<msg->len;sp2++) //读取数据
msg->data[sp2]=*((&CAN0RXDSR0)+sp2);CAN0RFLG=0x01; //清RXF标志位(缓冲器准备接收)return(TRUE);}2023/11/28汽车嵌入式系统设计61/*===中断接收函数===*/#pragmaCODE_SEG__NEAR_SEGNON_BANKEDvoidinterruptCAN_receive(void){if(MSCAN1GetMsg(&msg_get)){if(msg_get.id==ID&&(!msg_get.RTR)) //接收新信息
{LEDCPU=~LEDCPU;datain=1;}}}#pragmaCODE_SEGDEFAULT2023/11/28汽车嵌入式系统设计62“main.c”中相关部分:#defineID0x0CF00400 //发送标识符#definedata_len_TX8 //发送数据长度structcan_msgmsg_send,msg_get;unsignedchardatain=0;msg_send.id=ID;//发送报文
for(k=0;k<data_len_TX;k++){msg_send.data[k]=senddata[k];}msg_send.len=data_len_TX;msg_send.RTR=FALSE;msg_send.prty=0;if(!MSCAN0SendMsg(msg_send)){ //发送过程出现错误
…; //错误处理代码}6.5LIN总线6.5.1LIN总线协议LIN(LocalInterconnectNetwork,本地互联网络)总线是一种单线串行通信网络;LIN设计目标:为现有汽车
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 八年级上册历史人教版同步听课评课记录第6课《戊戌变法》
- 新版湘教版秋八年级数学上册第二章三角形课题三角形高线角平分线中线听评课记录
- 五年级上美术听评课记录
- 北师大版道德与法治七年级下册3.1《情绪使生活更美》听课评课记录
- 人教版地理八年级下册第九章第一节《自然特征与农业》听课评课记录
- 人教部编版八年级道德与法治上册:8.1《国家好 大家才会好》听课评课记录2
- 中考道德与法治一轮复习九年级上第4单元和谐与梦想 听课评课记录 人教版
- 小学二年级数学乘法口算测试题人教版
- 苏教版小学数学五年级上册口算试题全套
- 班组长个人工作计划书
- 降水预报思路和方法
- 工程设计方案定案表
- 第一章-天气图基本分析方法课件
- 虚位移原理PPT
- 暖气管道安装施工计划
- 初二物理弹力知识要点及练习
- QE工程师简历
- 辅音和辅音字母组合发音规则
- 2021年酒店餐饮传菜员岗位职责与奖罚制度
- 最新船厂机舱综合布置及生产设计指南
- 可降解塑料制品项目可行性研究报告-完整可修改版
评论
0/150
提交评论