汽車嵌入式系統(tǒng)設(shè)計(jì) 課件 第六章 汽車嵌入式系統(tǒng)常用通信技術(shù)_第1頁
汽車嵌入式系統(tǒng)設(shè)計(jì) 課件 第六章 汽車嵌入式系統(tǒng)常用通信技術(shù)_第2頁
汽車嵌入式系統(tǒng)設(shè)計(jì) 課件 第六章 汽車嵌入式系統(tǒng)常用通信技術(shù)_第3頁
汽車嵌入式系統(tǒng)設(shè)計(jì) 課件 第六章 汽車嵌入式系統(tǒng)常用通信技術(shù)_第4頁
汽車嵌入式系統(tǒng)設(shè)計(jì) 課件 第六章 汽車嵌入式系統(tǒng)常用通信技術(shù)_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第6章汽車嵌入式系統(tǒng)常用通信技術(shù)2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)1第6章汽車嵌入式系統(tǒng)常用通信技術(shù)數(shù)字通信(digitaltelecommunications)是用數(shù)字信號作為載體來傳輸消息。數(shù)字通訊的優(yōu)點(diǎn):抗干擾能力強(qiáng)、差錯(cuò)可控、易加密、易于與現(xiàn)代技術(shù)相結(jié)合(如存儲、傳輸、交換、處理等),在現(xiàn)代控制系統(tǒng)中得到廣泛運(yùn)用。本章以S12XE系列MCU為例,系統(tǒng)闡述MCU的常用各類通信技術(shù)的原理及其實(shí)現(xiàn)方法,包括:SCI(SerialCommunicationInterface)異步串行通信SPI(SerialPeripheralInterface)同步串行通信IIC(InterIntegrated-Circuit)同步串行通信CAN(ControllerAreaNetwork)控制器局域網(wǎng)絡(luò)LIN(LocalInterconnectNetwork)局域互聯(lián)網(wǎng)絡(luò)2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)2計(jì)算機(jī)中信息傳遞方式有串行通信和并行通信兩種;2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)36.1SCI串行通信SCI(SerialCommunicationInterface)是最常用、最經(jīng)典的通用串行異步通信(UART,UniversalAsynchronousReceiver/Transmitter)接口方式。異步是指收、發(fā)雙方使用各自的時(shí)鐘控制發(fā)送和接收過程,可以省去收、發(fā)雙方需要一條同步時(shí)鐘信號線,使異步串行通信的連接更簡單且容易實(shí)現(xiàn)。異步通信中數(shù)據(jù)或字符是一幀一幀傳送。幀即為一個(gè)字符的完整通信格式,又稱幀格式。一個(gè)完整的幀格式由4部分組成:起始位、數(shù)據(jù)位、奇偶校驗(yàn)位、停止位。這種格式的空閑狀態(tài)為“1”,發(fā)送器通過發(fā)送1位起始位,“0”表示一個(gè)字節(jié)傳輸?shù)拈_始,隨后是數(shù)據(jù)位(一般是8位或9位,可以包含校驗(yàn)位等),最后,發(fā)送器發(fā)送1位停止位,表示一個(gè)字節(jié)傳送結(jié)束。若繼續(xù)發(fā)送下一字節(jié),則重新發(fā)送開始位,開始一個(gè)新的字節(jié)傳送;若不發(fā)送新的字節(jié),則維持“1”的狀態(tài),使發(fā)送數(shù)據(jù)線處于空閑。每發(fā)送一個(gè)字節(jié)都要發(fā)送“開始位”與“停止位”。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)42.串行通信的波特率串行通信時(shí),每秒內(nèi)傳送的位數(shù)叫做波特率,波特率的單位是位/秒(bit/s,bitpersecond)。常用的波特率有:1200、2400、4800、9600、19200、38400、57600、115200等,很容易計(jì)算出每幀信息傳送所需的時(shí)間。隨著波特率的提高,相鄰兩位間的時(shí)間間隔變短,以至于很容易受到電磁源的干擾,通信可靠下降。通信距離問題也會造成信號衰減和信號被干擾。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)53.奇偶校驗(yàn)在異步串行通信中,為確保傳輸?shù)恼_性。最常見的方法是每幀中增加一位(奇偶校驗(yàn)位),供錯(cuò)誤檢測使用。它是為每個(gè)字符增加一個(gè)額外位使字符中“1”的個(gè)數(shù)為奇數(shù)或偶數(shù)。奇數(shù)或偶數(shù)依據(jù)使用的是“奇校驗(yàn)檢查”還是“偶校驗(yàn)檢查”而定。當(dāng)使用“奇校驗(yàn)檢查”時(shí)如果字符數(shù)據(jù)位中“1”的數(shù)目是偶數(shù),校驗(yàn)位應(yīng)為“1”;如果“1”的數(shù)目是奇數(shù),校驗(yàn)位應(yīng)為“0”。當(dāng)使用“偶校驗(yàn)檢查”時(shí),如果字符數(shù)據(jù)位中“1”的數(shù)目是偶數(shù),則校驗(yàn)位應(yīng)為“0”;如果是奇數(shù),則為“1”。例,ASCII字符“R”,其位構(gòu)成是1010010B,有3個(gè)位為“1”,若使用奇校驗(yàn)檢查,則校驗(yàn)位為0;如果使用偶校驗(yàn)檢查,則校驗(yàn)位為1。奇偶校驗(yàn)檢查方法簡單使用方便,發(fā)生1位錯(cuò)誤的概率遠(yuǎn)大于2位錯(cuò)誤的概率,所以“奇偶校驗(yàn)”這種方法還是最為常用的校驗(yàn)方法。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)64.串行通信的傳輸方式單工(Simplex):數(shù)據(jù)傳送是單向的,一端為發(fā)送端,另一端為接收端。這種傳輸方式中,除了地線之外,僅需一根數(shù)據(jù)線。全雙工(Full-duplex):數(shù)據(jù)傳送是雙向的,且可以同時(shí)接收與發(fā)送數(shù)據(jù)。這種傳輸方式中,除了地線之外,需要兩根數(shù)據(jù)線,站在任何一端的角度看,一根為發(fā)送線,另一根為接收線。一般情況下,MCU的異步申行通信接口均是全雙工的。半雙工(Half-duplex):數(shù)據(jù)傳送也是雙向的,但是在這種傳輸方式中,除地線之外,一般只有一根數(shù)據(jù)線。任何時(shí)刻,只能由一方發(fā)送數(shù)據(jù),另一方接收數(shù)據(jù),不能同時(shí)收發(fā)。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)75.RS-232總線標(biāo)準(zhǔn)MCU引腳輸入/輸出一般使用晶體管-晶體管邏輯電平TTL(TTL,Transistor-TransistorLogic)電平。而TTL電平的“1”和“0”的特征電壓分別為2.4V和0.4V,即電壓高于2.4V則識別為“1”,電壓低于0.4V則識別為“0”,一般僅適用于板內(nèi)數(shù)據(jù)傳輸。若用TTL電平將數(shù)據(jù)傳輸超過5米,就無法保證信息傳送的可靠性了。為使信號傳輸?shù)酶h(yuǎn),美國電子工業(yè)協(xié)會制訂了串行物理接口標(biāo)準(zhǔn)RS-232C,以下簡稱RS-232。RS-232采用負(fù)邏輯,-15~-3V為邏輯“1”,+3~+15V為邏輯“0”。其最大的傳輸距離可達(dá)30米,通信速率一般低于20kbit/s。標(biāo)準(zhǔn)串行通信接口普遍使用9芯串行接口(DB9)。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)8在MCU中,若使用RS-232總線與其它設(shè)備串行通信,則需外接電路實(shí)現(xiàn)電平轉(zhuǎn)換。在發(fā)送端,需要用驅(qū)動電路將TTL電平轉(zhuǎn)換成RS-232電平,在接收端需要用接收電路將RS-232電平轉(zhuǎn)換為TTL電平。目前廣泛使用MAX232芯片,該芯片使用+5V電源供電實(shí)現(xiàn)電平轉(zhuǎn)換。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)9進(jìn)行MCU的SCI串行通信編程時(shí),只針對MCU的TXD和RXD引腳,與MAX232無關(guān),MAX232僅起電平轉(zhuǎn)換的作用,有時(shí)又稱其為串口通信驅(qū)動器、收發(fā)器等。6.1.3SCI應(yīng)用實(shí)例2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)10【例6-1】采用中斷方式實(shí)現(xiàn)串口通信數(shù)據(jù)的接收。/*===初始化SCI===*/voidINIT_SCI(void){ SCI0BD=BUS_CLOCK/16/BAUD; //設(shè)置SCI0波特率為BAUD=9600 SCI0CR1=0x00;//設(shè)置SCI0為正常模式,8位數(shù)據(jù)位,無奇偶校驗(yàn)

SCI0CR2=0x2c;//允許接收和發(fā)送數(shù)據(jù),允許接收中斷功能}/*===串口發(fā)送函數(shù)===*/voidSCI_send(unsignedchardata){while(!SCI0SR1_TDRE); //等待發(fā)送數(shù)據(jù)寄存器(緩沖器)為空

SCI0DRL=data;}/*===串口接收函數(shù)===*/unsignedcharSCI_receive(void){while(!SCI0SR1_RDRF);//等待發(fā)送數(shù)據(jù)寄存器滿

return(SCI0DRL);}/*串口中斷接收函數(shù)*/#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汽車嵌入式系統(tǒng)設(shè)計(jì)11圖6-5SPI外圍串行擴(kuò)展結(jié)構(gòu)圖SPI有4種通信方式:(1)方式0CPOL=0,CPHA=0。此時(shí),空閑態(tài)時(shí),SCLK處于低電平,數(shù)據(jù)采樣是在第1個(gè)邊沿,也就是SCLK由低電平到高電平的跳變,所以數(shù)據(jù)采樣是在上升沿,數(shù)據(jù)發(fā)送是在下降沿。(2)方式1CPOL=0,CPHA=1。此時(shí),空閑態(tài)時(shí),SCLK處于低電平,數(shù)據(jù)發(fā)送是在第1個(gè)邊沿,也就是SCLK由低電平到高電平的跳變,所以數(shù)據(jù)采樣是在下降沿,數(shù)據(jù)發(fā)送是在上升沿。(3)方式2CPOL=1,CPHA=0。此時(shí),空閑態(tài)時(shí),SCLK處于高電平,數(shù)據(jù)采集是在第1個(gè)邊沿,也就是SCLK由高電平到低電平的跳變,所以數(shù)據(jù)采集是在下降沿,數(shù)據(jù)發(fā)送是在上升沿。(4)方式3CPOL=1,CPHA=1。此時(shí),空閑態(tài)時(shí),SCLK處于高電平,數(shù)據(jù)發(fā)送是在第1個(gè)邊沿,也就是SCLK由高電平到低電平的跳變,所以數(shù)據(jù)采集是在上升沿,數(shù)據(jù)發(fā)送是在下降沿。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)12SPI接口在內(nèi)部硬件實(shí)際上是簡單的移位寄存器,傳輸?shù)臄?shù)據(jù)為8位,在主器件產(chǎn)生的從器件使能信號和移位脈沖下,按位傳輸,高位在前,低位在后。如圖6-6,SSPSR是SPI設(shè)備內(nèi)部的移位寄存器,根據(jù)SPI時(shí)鐘信號狀態(tài),往SSPBUF里移入數(shù)據(jù)、從SSPBUF移出數(shù)據(jù)。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)13圖6-6SPI內(nèi)部工作機(jī)制【例6-2】FM25040A實(shí)現(xiàn)對EEPROM的擴(kuò)展FM25040A是存儲容量4Kb(512個(gè)字節(jié))的EEPROM存儲器芯片,使用SPI接口進(jìn)行數(shù)據(jù)的讀與寫。SPI的最高頻率可達(dá)20MHz,采用SOP8貼片封裝。關(guān)于FM25040A的封裝與引腳定義參見圖6-7,F(xiàn)M25040A的讀寫時(shí)序參見圖6-8、圖6-9。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)14圖6-8FM25040A存儲器寫時(shí)序圖6-9FM25040A存儲器讀時(shí)序理解時(shí)序的概念符號參數(shù)最小值最大值單位fCKSCK時(shí)鐘頻率020MHztCH時(shí)鐘高時(shí)間22

nstCL時(shí)鐘低時(shí)間22

nstCSU片選開始10

nstCSH片選保持10

nstOD輸出失效

20nstODV輸出數(shù)據(jù)有效

20nstOH輸出保持0

nstD失選時(shí)間60

nstR數(shù)據(jù)上升時(shí)間

50nstF數(shù)據(jù)下降時(shí)間

50nstSU數(shù)據(jù)建立時(shí)間5

nstH數(shù)據(jù)保持時(shí)間5

nstHS/保持建立時(shí)間10

nstHH/保持保持時(shí)間10

nstHZ/保持由低到高

20nstLZ/保持高到數(shù)據(jù)有效時(shí)間

20ns2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)15表6-2FM25040ASPI時(shí)序要求圖6-10FM25040ASPI時(shí)序要求2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)16/*===初始化SPI模塊===*/voidINIT_SPI(void){HOLD_dir=1;CS_dir=1;SPI0CR1=0b01010000; //使能SPI,禁止中斷,時(shí)鐘高有效,相位為0;SPI0CR2=0x00; //SS管腳為普通I/O,雙向模式;SPI0BR=0x70; //設(shè)置SPI時(shí)鐘頻率為2MHz;CS=1;}/*===SPI發(fā)送函數(shù)===*/voidSPI_send(unsignedchardata){while(!SPI0SR_SPTEF);SPI0DRL=data;}/*===SPI接收函數(shù)===*/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公司推出的一種同步串行總線,是具備多主機(jī)系統(tǒng)所需的包括總線裁決和高低速器件同步功能的高性能串行總線,它支持多主控,任何能夠進(jìn)行發(fā)送和接收的設(shè)備都可以成為主控端。6.3.1IIC(I2C)的工作原理IIC總線只有兩根信號線,如圖6-11所示。一根是雙向數(shù)據(jù)信號線SDA;另一根是雙向時(shí)鐘線SCL。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)17圖6-11IIC(I2C)通信系統(tǒng)架構(gòu)IIC總線的器件接口均是開漏結(jié)構(gòu),通過上拉電阻(大小由速度和容性負(fù)載決定,一般在3.3k-10k之間)接正電源。當(dāng)總線空閑時(shí),兩根線均為高電平。連到總線上的任一器件輸出的低電平,都將使總線的信號變低,即各器件的SDA及SCL都是線“與”關(guān)系。IIC總線工作速率常見的有標(biāo)準(zhǔn)模式100kbit/s和快速模式400kbit/s兩種,增強(qiáng)快速模式1Mbit/s和高速模式3.4Mbit/s,極速模式單向數(shù)據(jù)傳輸速率可達(dá)5Mbit/s??梢詫?shí)現(xiàn)半雙工通信。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)18推挽輸出:可以輸出高,低電平,連接數(shù)字器件;不能實(shí)現(xiàn)“線與”,可能會發(fā)生短路,進(jìn)而可能造成端口的損害。開漏輸出:開漏輸出無法真正輸出高電平,即高電平時(shí)沒有驅(qū)動能力。輸出端相當(dāng)于三極管的集電極。要得到高電平狀態(tài)需要上拉電阻才行。適合于做電流型的驅(qū)動,其吸收電流的能力相對強(qiáng)(一般20ma以內(nèi))。尋址方式IIC總線采用純軟件尋址方式,無需片選線,大大簡化了總線數(shù)量。每個(gè)連接到總線的設(shè)備都有唯一的地址,地址為7位,前四位識別器件類別,一般是固定的;后三位由器件本身管腳A2、A1、A0可以編程,故同類器件一般最多掛8個(gè)。IIC總線明確規(guī)定,采用7位尋址字節(jié),D7~D1位組成從機(jī)的地址。D0位是數(shù)據(jù)傳送方向位,為“0”時(shí)表示寫數(shù)據(jù),為“1”時(shí)表示讀數(shù)據(jù)。主機(jī)發(fā)送地址時(shí),總線上的每個(gè)從機(jī)都將這7位地址碼和自己的地址碼比較,如果相同則認(rèn)為自己被主機(jī)尋址,根據(jù)讀/寫位確認(rèn)為發(fā)送器或者接收器。寫操作,從地址為00000000b表示通用廣播地址。保留地址見表6-3。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)19從地址R/W(——)位說明00000000通用廣播地址00000001起始位0000001XCBUS地址0000010X不同總線格式保留0000011X將來功能保留00001XXXHS模式主代碼11111XX1設(shè)備ID11110XXX10位從地址表6-3IIC總線保留地址數(shù)據(jù)傳送IIC總線進(jìn)行數(shù)據(jù)傳送時(shí),時(shí)鐘信號為高電平期間,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定,只有時(shí)鐘信號為低電平時(shí),數(shù)據(jù)線上的電平才允許變化。SCL線為高電平時(shí),SDA線由高變低表示起始信號;SCL線為高電平時(shí),SDA線由低變高表示終止信號。起始信號和終止信號均是主機(jī)發(fā)出;起始信號產(chǎn)生后,總線處于被占用狀態(tài);終止信號產(chǎn)生后,總線處于空閑狀態(tài)。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)20IIC數(shù)據(jù)傳送格式:字節(jié)傳送與應(yīng)答要求每一個(gè)字節(jié)必須保證是8位長度。數(shù)據(jù)傳送時(shí),先傳送最高位(MSB),每一個(gè)被傳送的字節(jié)后面都必須跟隨一位應(yīng)答位(即一幀共有9位)。數(shù)據(jù)幀格式:IIC總線上的數(shù)據(jù)包括地址信號和數(shù)據(jù)信號。在起始信號后必須傳送一個(gè)從機(jī)的地址(7位),第8位是數(shù)據(jù)的傳送方向即讀(R/W?=1)還是寫(R/W?=0),每次數(shù)據(jù)傳送均是主機(jī)產(chǎn)生終止信號而結(jié)束。由于某種原因從機(jī)不對主機(jī)尋址信號應(yīng)答時(shí),它必須將數(shù)據(jù)線置于高電平,而由主機(jī)產(chǎn)生一個(gè)終止信號以結(jié)束總線的數(shù)據(jù)傳送;如果從機(jī)對主機(jī)進(jìn)行了應(yīng)答,但在數(shù)據(jù)傳送一段時(shí)間后無法繼續(xù)接收更多的數(shù)據(jù)時(shí),從機(jī)可以通過對無法接收的第一個(gè)數(shù)據(jù)字節(jié)的“非應(yīng)答”通知主機(jī),主機(jī)則應(yīng)發(fā)出終止信號以結(jié)束數(shù)據(jù)的繼續(xù)傳送;當(dāng)主機(jī)接收數(shù)據(jù)時(shí),它收到最后一個(gè)數(shù)據(jù)字節(jié)后,必須向從機(jī)發(fā)出一個(gè)結(jié)束傳送的信號。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)21總線的一次數(shù)據(jù)傳輸,包括以下幾種組合:1)主機(jī)向從機(jī)發(fā)送數(shù)據(jù),數(shù)據(jù)的傳送方向在整個(gè)傳送過程中不變。2)主機(jī)在第一個(gè)字節(jié)后,立即從從機(jī)讀數(shù)據(jù)。3)在傳送過程中,需要改變讀寫方向時(shí),需要重新發(fā)送起始信號和從機(jī)地址。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)22【例6-3】采用PCF8574芯片(引腳見圖6-19),實(shí)現(xiàn)通過IIC總線的遠(yuǎn)程8位I/O擴(kuò)展(電路原理圖見圖4-72)。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)23/*===初始化IIC===*/voidINIT_IIC(void){IIC0_IBFD=0x94; //總線時(shí)鐘32MHz,設(shè)置SCL主頻為100kHzIIC0_IBCR=0x80; //使能IIC模塊,禁止中斷

IIC0_IBSR_IBAL=1; //清除IBAL標(biāo)志位}/*===通過IIC由PCF8574讀取數(shù)據(jù)===*/unsignedcharIIC_receive(void){unsignedchardata;IIC0_IBCR_TXAK=0; //接收到數(shù)據(jù)后有應(yīng)答

IIC0_IBCR_TX_RX=1; //設(shè)置單片機(jī)為發(fā)送模式

IIC0_IBCR_MS_SL=1; //設(shè)置單片機(jī)為主機(jī)模式,產(chǎn)生開始信號

IIC0_IBDR=0b01000001;while(IIC0_IBSR_IBIF==0);IIC0_IBSR_IBIF=1;while(IIC0_IBSR_RXAK);IIC0_IBCR_TX_RX=0; //設(shè)置單片機(jī)為接收模式

IIC0_IBCR_TXAK=1; //接收到數(shù)據(jù)后無應(yīng)答

data=IIC0_IBDR; //清空IIC的寄存器,準(zhǔn)備接收

while(IIC0_IBSR_IBIF==0);IIC0_IBSR_IBIF=1;IIC0_IBCR_MS_SL=0;data=IIC0_IBDR; //讀取接收到的數(shù)據(jù)

return(data);}CAN是控制器局域網(wǎng)絡(luò)的簡稱,是一種能夠?qū)崿F(xiàn)分布式實(shí)時(shí)控制的串行通信網(wǎng)絡(luò)。1)最高傳輸速度1Mbps,最遠(yuǎn)通信距離10km,無損位仲裁機(jī)制,多主結(jié)構(gòu);2)低成本:多個(gè)ECU通過CAN接口進(jìn)行通信,布線成本低;3)高集成:CAN總線系統(tǒng)允許在所有ECUs上進(jìn)行集中錯(cuò)誤診斷和配置;4)可靠性:該系統(tǒng)對子系統(tǒng)的故障和電磁干擾具有很強(qiáng)的魯棒性,是汽車控制系統(tǒng)的理想選擇;5)高效率:可以通過標(biāo)識符ID對消息進(jìn)行優(yōu)先級排序,以便最高優(yōu)先級ID的報(bào)文通信不被中斷;6)靈活性:每個(gè)ECU包含一個(gè)用于CAN總線收發(fā)芯片,可隨意添加CAN總線節(jié)點(diǎn)。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)24圖6-21CAN總線網(wǎng)絡(luò)簡圖CAN總線網(wǎng)絡(luò)主要掛在CAN_H和CAN_L,各個(gè)節(jié)點(diǎn)通過這兩條線實(shí)現(xiàn)信號的串行差分傳輸,為了避免信號的反射和干擾,還需要在CAN_H和CAN_L之間接上120?(模擬無限遠(yuǎn)傳輸線的特性阻抗)的終端電阻。6.4S12XE的CAN總線8)靈活可屏蔽的識別濾波器,支持2個(gè)32位的濾波器、4個(gè)16位的濾波器、8個(gè)8位濾波器;9)集成低通濾波器可編程喚醒功能;10)可編程環(huán)路模式,用于自檢操作;11)可編程監(jiān)聽模式,用于檢測CAN總線狀態(tài);12)可編程總線關(guān)閉與恢復(fù)功能;13)對整個(gè)CAN收發(fā)器的錯(cuò)誤狀態(tài)(如警告、錯(cuò)誤被動、關(guān)閉總線)具有獨(dú)立的產(chǎn)生信號和觸發(fā)中斷能力;14)可編程的MSCAN時(shí)鐘來源,可選擇總線或晶振時(shí)鐘;15)使用內(nèi)部定時(shí)器作為收發(fā)消息的時(shí)間戳;16)3種低功耗模式:睡眠、斷電和MSCAN使能;17)配置寄存器全局初始化。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)251)遵循CAN-2.0A/B協(xié)議;2)支持標(biāo)準(zhǔn)和擴(kuò)展幀格式;3)0~8個(gè)字節(jié)數(shù)據(jù)段長度;4)通信位速率可達(dá)1Mbps;5)支持遠(yuǎn)程幀;6)5個(gè)基于FIFO存儲機(jī)制的接收寄存器;7)3個(gè)基于本地優(yōu)先級機(jī)制的發(fā)送寄存器;收發(fā)器S12XE的CAN輸入和輸出引腳Rx、Tx通過收發(fā)器與CAN總線進(jìn)行物理性連接,形成通信網(wǎng)絡(luò)中的一個(gè)節(jié)點(diǎn)。收發(fā)器:S12XE的MSCAN模塊對應(yīng)收發(fā)信號是TTL邏輯電平,須通過CAN收發(fā)器實(shí)現(xiàn)邏輯電平和CAN信號電平之間的轉(zhuǎn)換。此外,收發(fā)器可提供驅(qū)動CAN總線所需的大電流(提高驅(qū)動能力),并對出故障的CAN總線或基站進(jìn)行電流保護(hù)。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)26助記符引腳描述TXD1發(fā)送數(shù)據(jù)輸入GND2接地Vcc3電源RXD4接收數(shù)據(jù)輸入Vref5參考電壓輸出CANL6低電平CAN總線CANH7高電平CAN總線S8選擇進(jìn)入高速模式還是靜音模式CAN信號CAN總線采用不歸零碼位填充技術(shù),也就是說CAN總線上的信號有兩種不同的信號狀態(tài),分別是顯性的(Dominant)邏輯0和隱形的(Recessive)邏輯1,信號每一次傳輸完后不需要返回到邏輯0(顯性)的電平。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)27圖6-23CAN總線信號邏輯狀態(tài)當(dāng)沒有數(shù)據(jù)發(fā)送時(shí),兩條線的電平一樣都為2.5V,稱為靜電平,也就是隱性電平。當(dāng)有信號發(fā)送時(shí),CAN_High的電平升高1V,即3.5V,CAN_Low的電平降低1V,即1.5V。按照定義: CAN_H-CAN_L<0.5V時(shí)為隱性的,邏輯信號表現(xiàn)為“邏輯1”——高電平; CAN_H-CAN_L>0.9V時(shí)為顯性的,邏輯信號表現(xiàn)為“邏輯0”——低電平。2.CAN信號傳輸(1)發(fā)送過程CAN控制器將CPU傳來的信號轉(zhuǎn)換為邏輯電平。CAN發(fā)射器接收邏輯電平之后,再將其轉(zhuǎn)換為差分電平輸出到CAN總線上。參見圖6-24左圖。(2)接收過程CAN接收器將CAN_H和CAN_L線上傳來的差分電平轉(zhuǎn)換為邏輯電平輸出到CAN控制器,CAN控制器再把該邏輯電平轉(zhuǎn)化為相應(yīng)的信號發(fā)送到CPU。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)28發(fā)送接收MCUCAN總線3.CAN總線傳輸幀結(jié)構(gòu)CAN總線按幀進(jìn)行數(shù)據(jù)傳輸,CAN的通信幀分成五種:數(shù)據(jù)幀、遠(yuǎn)程幀、錯(cuò)誤幀、過載幀和幀間隔。數(shù)據(jù)幀根據(jù)仲裁段長度不同分為標(biāo)準(zhǔn)幀(2.0A)和擴(kuò)展幀(2.0B)。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)29圖6-25CAN幀結(jié)構(gòu)(1)幀起始由1個(gè)顯性位(低電平)組成,發(fā)送節(jié)點(diǎn)發(fā)送幀起始,其他節(jié)點(diǎn)同步于幀起始。(2)幀結(jié)束由7個(gè)隱形位(高電平)組成。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)302023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)31(3)仲裁段只要總線空閑,總線上任何節(jié)點(diǎn)都可以發(fā)送報(bào)文,如果有兩個(gè)或兩個(gè)以上的節(jié)點(diǎn)開始傳送報(bào)文,那么就會存在總線訪問沖突的可能。但是CAN使用了標(biāo)識符的逐位仲裁方法可以解決這個(gè)問題。參見圖6-27。CAN總線控制器在發(fā)送數(shù)據(jù)的同時(shí)監(jiān)控總線電平,如果電平不同,則停止發(fā)送并做其他處理。如果該位位于仲裁段,則退出總線競爭;如果位于其他段,則產(chǎn)生錯(cuò)誤事件。幀ID越小,優(yōu)先級越高。由于數(shù)據(jù)幀的RTR位為顯性電平,遠(yuǎn)程幀為隱性電平,所以幀格式和幀ID相同的情況下,數(shù)據(jù)幀優(yōu)先于遠(yuǎn)程幀;由于標(biāo)準(zhǔn)幀的IDE位為顯性電平,擴(kuò)展幀的IDE位為隱形電平,對于前11位ID相同的標(biāo)準(zhǔn)幀和擴(kuò)展幀,標(biāo)準(zhǔn)幀優(yōu)先級比擴(kuò)展幀高。參見圖6-28。圖6-28CAN數(shù)據(jù)幀仲裁段圖6-27CAN位仲裁機(jī)制(4)數(shù)據(jù)段一個(gè)數(shù)據(jù)幀傳輸?shù)臄?shù)據(jù)量為0~8個(gè)字節(jié),這種短幀結(jié)構(gòu)使得CAN-bus非常適合汽車和工控應(yīng)用場合,具有數(shù)據(jù)量小、發(fā)送和接收時(shí)間短、實(shí)時(shí)性高、被干擾的概率小、抗干擾能力強(qiáng)等優(yōu)點(diǎn)。如圖6-29所示。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)32圖6-29CAN幀數(shù)據(jù)段4.濾波原理CAN節(jié)點(diǎn)是通過設(shè)置標(biāo)識符濾波寄存器的方式來識別當(dāng)前CAN幀是否為自己所需的;2個(gè)32位的濾波器、4個(gè)16位的濾波器、8個(gè)8位濾波器;以2個(gè)32位識別濾波器的標(biāo)識符濾波模式為例講解:2個(gè)32位的寄存器為過濾驗(yàn)收寄存器(AC)和過濾屏蔽寄存器(AM)。過濾驗(yàn)收寄存器AC設(shè)置了標(biāo)識符每位的值;過濾屏蔽寄存器AM規(guī)定了標(biāo)識符的每一位的值是否需要與過濾驗(yàn)收寄存器進(jìn)行匹配。0——需要匹配,1——不需要匹配。舉例:AC=0x0000037C,AM=0x00000072023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)33可見,AM寄存器最低3位為1,不需進(jìn)行匹配。所以接收到的CAN擴(kuò)展幀消息的ID的高26位必須與AC寄存器的高26位匹配,才會被過濾接收。表6-8實(shí)例中,ID為0x00000378~0x0000037F的報(bào)文均能被接收。擴(kuò)展幀驗(yàn)收與屏蔽碼的確定可按以下方式實(shí)現(xiàn):(1)確定該CAN節(jié)點(diǎn)需要接收的報(bào)文ID。(2)由于這些報(bào)文均需要通過驗(yàn)證,所以選取其中一個(gè)報(bào)文ID作為基礎(chǔ)過濾驗(yàn)收碼,并將其余需要通過驗(yàn)收的報(bào)文ID與之按位逐一進(jìn)行對比,如果所有需要通過驗(yàn)收的報(bào)文ID在該位的值均相同,則對應(yīng)的過濾屏蔽碼在該位置0,否則置1,即可獲得基礎(chǔ)過濾屏蔽碼??紤]到過濾寄存器為32位,而報(bào)文ID是29位,有時(shí)還需要根據(jù)CAN控制器內(nèi)部的過濾寄存器與報(bào)文ID的對齊方式,進(jìn)行相應(yīng)調(diào)整。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)34圖6-30擴(kuò)展幀濾波屏蔽碼計(jì)算器運(yùn)行圖為保證0x18FFDF00、0x18EAFF00、0x18CBFF00三個(gè)ID的報(bào)文被接收,對應(yīng)的驗(yàn)證碼為0x18FFDF00、屏蔽碼為0x00352000。對于CAN-II分析儀和S12XE系列MCU的驗(yàn)證碼和屏蔽碼均需做適當(dāng)調(diào)整,具體參見相關(guān)手冊。fCANCLK可通過控制寄存器CANCTL1中CLKSRC位選擇時(shí)鐘來源。CLKSRC=0,fCANCLK為晶振時(shí)鐘;CLKSRC=1,fCANCLK為總線時(shí)鐘??删幊填A(yù)分頻器將CANCLK分頻生成量子時(shí)鐘(Tq),是CAN總線通信過程控制的最小時(shí)間單位,其計(jì)算公式為:CAN總線的位時(shí)間計(jì)算公式為:BitTime為位時(shí)間(s),分成三段:Sync_Seg、時(shí)段1、時(shí)段25.CAN總線波特率2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)35圖6-31CA時(shí)鐘機(jī)制1)Sync_Seg:該段有一個(gè)長度固定的時(shí)間份額,信號邊沿預(yù)計(jì)出現(xiàn)在本段;2)時(shí)段1:本段包括CAN標(biāo)準(zhǔn)的Prop_Seg和Phase_Seg1,通過設(shè)置參數(shù)TSEG1,使之包含4~16個(gè)時(shí)間份額,可對其進(jìn)行編程;3)時(shí)段2:本段表示CAN標(biāo)準(zhǔn)的Phase_Seg2,通過設(shè)置TSEG2使之具有2~8個(gè)時(shí)間份額長,可對其進(jìn)行編程??偩€時(shí)序寄存器有兩個(gè),共同作用決定總線的通信波特率??偩€時(shí)序寄存器0(CANBTR0)和總線時(shí)序寄存器1(CANBTR1)有著各自不同的功能定義。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)362023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)376.4.4SAEJ1939通信協(xié)議SAEJ1939(以下簡稱J1939)是美國汽車工程協(xié)會(SAE)的推薦標(biāo)準(zhǔn),用于中重型道路車輛上電子部件間通信的標(biāo)準(zhǔn)體系結(jié)構(gòu)。J1939基于CAN總線,可達(dá)到250Kbps的通信速率。J1939描述了重型車輛現(xiàn)場總線的一種網(wǎng)絡(luò)應(yīng)用,包括CAN網(wǎng)絡(luò)物理層定義J1939-11/15、數(shù)據(jù)鏈路層定義J1939-21、應(yīng)用層定義J1939-71、網(wǎng)絡(luò)層定義J1939-31、故障診斷J1939-73和網(wǎng)絡(luò)管理J1939-81。SAEJ1939協(xié)議中,不僅僅指定了傳輸類型、報(bào)文結(jié)構(gòu)及其分段、流量檢查等,而且報(bào)文內(nèi)容本身也做了精確的定義。J1939是在商用車輛、艦船、軌道機(jī)車、農(nóng)業(yè)機(jī)械和大型發(fā)動機(jī)中應(yīng)用最廣泛的應(yīng)用層協(xié)議。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)382.CAN標(biāo)準(zhǔn)幀和擴(kuò)展幀標(biāo)準(zhǔn)幀只有11位的標(biāo)識符(ID),擴(kuò)展幀有11+18=29位標(biāo)識符(ID)。CAN數(shù)據(jù)幀組成包括:幀起始(SOF)、仲裁域、控制域、數(shù)據(jù)域、循環(huán)冗余校驗(yàn)域(CRC)、應(yīng)答域(ACK)、幀結(jié)束(EOF)。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)39圖6-23CAN標(biāo)準(zhǔn)幀和擴(kuò)展幀協(xié)議數(shù)據(jù)單元(PDU)(1)協(xié)議數(shù)據(jù)單元(PDU)如圖6-24所示,協(xié)議數(shù)據(jù)單元(PDU)=標(biāo)識符+數(shù)據(jù)域PDU被封裝在一個(gè)或多個(gè)CAN數(shù)據(jù)幀中,通過物理介質(zhì)傳送到其他網(wǎng)絡(luò)設(shè)備。每個(gè)CAN數(shù)據(jù)幀只能有一個(gè)PDU。CAN2.0B使用29位的標(biāo)識符來區(qū)分不同的報(bào)文;J1939對這29標(biāo)識符進(jìn)行了重新的分類和解釋。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)40圖6-24協(xié)議數(shù)據(jù)單元(PDU)結(jié)構(gòu)協(xié)議數(shù)據(jù)單元(PDU)J1939對CANID進(jìn)行了重新劃分,加上最多8個(gè)字節(jié)的數(shù)據(jù)域,構(gòu)成了J1939的協(xié)議數(shù)據(jù)單元,其中前3位表示優(yōu)先級位(P,Priority),之后是擴(kuò)展數(shù)據(jù)頁位(EDP,ExtendedDataPage)、數(shù)據(jù)頁位(DP,DataPage)、PDU格式位(PF,PDUFormat)、PDU特定域位(PS,PDUSpecific)、源地址位(SA,SourceAddress)、數(shù)據(jù)域(DataFiled)。參數(shù)組編號(PGN,ParameterGroupNumber):由29位CANID的中間18位共同組成。J1939是根據(jù)PGN來區(qū)分不同的報(bào)文(參見J1939-71),而普通CAN的報(bào)文是根據(jù)CANID來區(qū)分。J1939的協(xié)議數(shù)據(jù)單元與CAN報(bào)文幀相比要少SOF、SRR、IDE等,因?yàn)檫@些部分完全由CAN2.0B控制,J1939并未對這部分做任何修改。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)41(2)J1939PDU各部分介紹1)優(yōu)先級(P):根據(jù)CAN2.0B的仲裁機(jī)制,ID越小優(yōu)先級越高。優(yōu)先級位于整個(gè)ID的最前面,實(shí)際上依然控制著ID大小,即CAN報(bào)文的優(yōu)先級。在J1939協(xié)議中優(yōu)先級僅僅用于優(yōu)化發(fā)送數(shù)據(jù)時(shí)的報(bào)文延遲,接收報(bào)文時(shí)則完全忽略優(yōu)先級。J1939中的優(yōu)先級可以從最高的0(000b)到最低優(yōu)先級7(111b)。默認(rèn)情況下控制類報(bào)文的優(yōu)先級為3,其他報(bào)文的優(yōu)先級為6。當(dāng)分配新的PGN或總線上流量改變時(shí),允許提高或者降低優(yōu)先級。2)擴(kuò)展數(shù)據(jù)頁(EDP):擴(kuò)展數(shù)據(jù)頁(EDP)聯(lián)合數(shù)據(jù)頁(DP)可以決定CAN報(bào)文幀中CANID的結(jié)構(gòu),目前為保留位,必須設(shè)置為0。3)數(shù)據(jù)頁(DP):用于聯(lián)合擴(kuò)展數(shù)據(jù)頁來決定CANID結(jié)構(gòu),當(dāng)EDP為0時(shí),DP為0或者1分別表示第0頁或者第1頁P(yáng)GN。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)42J1939PDU各部分介紹4)PDU格式域(PF):PF用來確定PDU的格式。PF<240(0xF0)為PDU1格式;PF=240~255為PDU2格式,對應(yīng)PF的高四位均為1。5)PDU特定域(PS):PS的定義取決于PF。PDU1格式下PS域是目標(biāo)地址(DA,DestinationAddress);PDU2格式下PS域?yàn)榻M擴(kuò)展(GE,GroupExtension)值。目標(biāo)地址(DA):除目標(biāo)地址的設(shè)備外,其他設(shè)備會忽略此報(bào)文。如果目標(biāo)地址為0xFF,則表示為全局地址,此時(shí)所有設(shè)備都應(yīng)該監(jiān)聽此報(bào)文并在收到報(bào)文后做出響應(yīng)。組擴(kuò)展(GE):組擴(kuò)展與PDU格式域PF的低四位(注意:當(dāng)PDU格式域最高四位被置1,說明PS域是組擴(kuò)展)規(guī)定了每個(gè)數(shù)據(jù)頁4096個(gè)參數(shù)組。6)源地址(SA):完整的汽車系統(tǒng)由多個(gè)ECU模塊,SAEJ1939協(xié)議為每個(gè)控制設(shè)備分配了8位地址標(biāo)識符。SA指示該幀報(bào)文是由哪個(gè)控制器(用8位地址標(biāo)識符)發(fā)送的。7)數(shù)據(jù)域(DATA):存放該幀報(bào)文傳送的數(shù)據(jù),長度為8字節(jié)。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)43J1939PDU各部分介紹圖6-24中18位PGN的計(jì)算方法非常簡單,可下面算法實(shí)現(xiàn):if(PF<0xF0)PGN=(DP<<9)+(PF<<8);elsePGN=(DP<<9)+(PF<<8)+PS;當(dāng)PF<240(0xF0),PGN數(shù)目等于2×0xF0=480;當(dāng)PF>=240,PGN數(shù)目應(yīng)等于2×16×256=8192。所以,兩種情況PGN總數(shù)應(yīng)為480+8192=8672。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)44(3)多幀傳輸機(jī)制當(dāng)傳輸?shù)臄?shù)據(jù)大于8個(gè)字節(jié)時(shí),此時(shí)就需要使用多幀傳輸。J1939多幀傳輸?shù)囊?guī)則很簡單,就是將數(shù)據(jù)域的第一個(gè)字節(jié)當(dāng)作編號,這樣原來每幀CAN報(bào)文最多可傳輸8個(gè)字節(jié)內(nèi)容,由于現(xiàn)在被編號占用了1個(gè)字節(jié),只能傳輸7個(gè)字節(jié)。由于編號范圍為1~255,所以多幀傳輸?shù)淖畲髷?shù)據(jù)長度是255×7=1785個(gè)字節(jié)。最后一幀報(bào)文實(shí)際需要傳輸?shù)膬?nèi)容可能不足7字節(jié),剩余字節(jié)要全部設(shè)置為0xFF。比如一共要傳輸9個(gè)字節(jié),第一幀CAN報(bào)文傳輸了7個(gè)字節(jié),第二幀CAN報(bào)文只能傳輸2個(gè)字節(jié),這樣加上1個(gè)編號字節(jié),還剩5個(gè)字節(jié),這5個(gè)字節(jié)要全部設(shè)置為0xFF。發(fā)送數(shù)據(jù)時(shí),按照編號把數(shù)據(jù)拆裝成多幀報(bào)文;接收數(shù)據(jù)時(shí),則按照編號重新組裝成完整的數(shù)據(jù)。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)45(4)參數(shù)組編號(PGN)參數(shù)組編號唯一標(biāo)識一個(gè)參數(shù)組,在通信過程中起到“索引”的作用,表征報(bào)文的內(nèi)容和用途,確定報(bào)文的類型和傳播數(shù)據(jù)需要的幀數(shù)目??梢岳斫鉃橥悾ɑ蛘哂泄餐卣鞯脑O(shè)備)參數(shù)的集合的索引。SAEJ1939中的PGN格式規(guī)定如下(以pgn61443為例):2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)46pgn61443:ElectronicEngineController#2–EEC2–TransmissionRepetitionRate:50ms —>報(bào)文發(fā)送周期DataLength:8Bytes —>數(shù)據(jù)域長度(CAN擴(kuò)展幀中的數(shù)據(jù)域字節(jié)數(shù))DataPage:0 —>數(shù)據(jù)頁(PGN中的數(shù)據(jù)頁DP)PDUFormat:240 —>PDU格式:PDU1(PF<240)和PDU2(PF:240~255)PDUSpecific:3 —>PDU特定域(PF<240,DA;240≤PF≤255,組擴(kuò)展)DefaultPriority:3 —>優(yōu)先級ParameterGroupNumber:61443(0x0F003)—>PGNpgn61443數(shù)據(jù)域包含的SPN格式定義的解釋:2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)47起始位置長度SPN參數(shù)名稱SPN1.12bitsAcceleratorPedalLowIdleSwitch(加速踏板低怠速開關(guān))5581.32bitsAcceleratorPedalKickdownSwitch(加速踏板踩下開關(guān))5591.52bitsRoadSpeedLimit(道路速度限值)143721byteAcceleratorPedalPosition(加速踏板位置)9131bytePercentLoadatCurrentSpeed(當(dāng)前車速的百分比載荷)9241byteRemoteAccelerator(遠(yuǎn)程加速器)974(5)可疑參數(shù)編號(SPN,SuspectParameterNumber)J1939-71不僅對PGN做了詳細(xì)的規(guī)定,對SPN也做了詳細(xì)的規(guī)定,并對每個(gè)參數(shù)做了編號。SAEJ1939中的SPN格式規(guī)定如下(以SPN91為例):2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)48SPN91–AcceleratorPedalPosition(加速踏板位置)–

Theratioofactualacceleratorpedalpositiontomaximumpedalposition.

AlthoughitisusedasaninputtodeterminetransmissionandASRalgorithmsaboutdriver’sactions.DataLength:1Bytes —>SPN號對應(yīng)的數(shù)據(jù)的長度Resolution:0.4%/bit,0offset —>比例系數(shù)和偏移量DataRange:0to100% —>數(shù)據(jù)范圍(涉及偏移量計(jì)算)Type:Measured —>測量值SuspectParameterNumber:91 —>SPN號ParameterGroupNumber:[61443] —>隸屬的PGN號總線數(shù)值與物理數(shù)值之間轉(zhuǎn)換為:

總線數(shù)值=(物理數(shù)值-偏移量)/比例系數(shù)其中:比例系數(shù)代表單位總線數(shù)值(二進(jìn)制1)代表的物理數(shù)值大??;

偏移量代表總線數(shù)值為0時(shí)物理數(shù)值的大小。進(jìn)一步理解PGN和SPN,以PGN65213為例進(jìn)行詳細(xì)說明2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)49PGN65213在J1939-71中的詳細(xì)描述。假設(shè)ECU地址為0x9C,優(yōu)先級為默認(rèn)值6,且此ECU需要往VCU發(fā)送PGN65213(0xFEBD)。根據(jù)定義:P=6,EDP=0,DP=0,PF=0xFE,PS=0xBD,SA=0x9C;則CAN報(bào)文ID為

0x18FEBD9C。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)50假如風(fēng)扇估計(jì)的百分比轉(zhuǎn)速為50%,由于分辨率為0.4%/bit,偏移量為0,則這個(gè)字節(jié)的總線數(shù)值應(yīng)為:40%/0.4%=100=0x64。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)51如果風(fēng)扇當(dāng)前因發(fā)動機(jī)機(jī)油溫度過高而運(yùn)轉(zhuǎn),則風(fēng)扇驅(qū)動狀態(tài)為3(0011b)。如果風(fēng)扇當(dāng)前轉(zhuǎn)速為1500rpm,由于分辨率為0.125rpm/bit,偏移量為0,則這兩個(gè)字節(jié)的總線數(shù)值應(yīng)為:1500/0.125=12000=0x2EE0。數(shù)據(jù)域:Byte1=0x64;Byte2=0xF3;Byte3=0xE0,Byte4=0x2E;Byte5=Byte6=Byte7=Byte8=0xFF。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)523.J1939的整車通信協(xié)議2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)53根據(jù)應(yīng)用場合的不同,節(jié)點(diǎn)數(shù)目可以相應(yīng)的增加或減少。例如,純電動汽車的節(jié)點(diǎn)包括:整車控制器、電控制動(EBS)控制器、電池管理系統(tǒng)、驅(qū)動電機(jī)控制器、駕駛室顯示器、電機(jī)控制器、ISG控制器、BMS電池管理系統(tǒng)、超級電容控制器等。各ECU源地址定義ECU名稱地址ECU名稱地址發(fā)動機(jī)控制器0整車控制器208傳動系統(tǒng)(變速器)控制器3燃料電池控制器209電控制動(EBS)控制器11AMT控制器210發(fā)動機(jī)緩速器15超級電容控制器211驅(qū)動系統(tǒng)緩速器16DC-DC#1214組合儀表23DC-DC#2215行車記錄儀24氫氣供應(yīng)系統(tǒng)216車身33電動助力轉(zhuǎn)向系統(tǒng)217PTO動力輸出裝置36驅(qū)動電機(jī)控制器#1239車輛智能中心39驅(qū)動電機(jī)控制器#2240駕駛室顯示器40驅(qū)動電機(jī)控制器#3241排氣緩速器41ISG控制器242車載診斷系統(tǒng)43電池管理系統(tǒng)#1243轉(zhuǎn)速表238電池管理系統(tǒng)#2244故障診斷(售后服務(wù)工具)249電池管理系統(tǒng)#3245

電池管理系統(tǒng)#42462023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)54表6-12ECU節(jié)點(diǎn)名稱及其分配地址(2)各ECU輸出參數(shù)定義根據(jù)汽車所需要實(shí)現(xiàn)的控制功能,定義各個(gè)節(jié)點(diǎn)的輸出參數(shù),包含節(jié)點(diǎn)所有需要處理或發(fā)送到總線上的信號,并對信號的地址、刷新率、信號類型、信號數(shù)據(jù)長度、數(shù)據(jù)范圍、分辨率等進(jìn)行定義。表6-13給出了整車控制器的部分參數(shù)信息。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)55信號名稱類型刷新率/ms分辨率數(shù)據(jù)長度/bit數(shù)據(jù)范圍偏移量目標(biāo)地址整車控制器狀態(tài)狀態(tài)值100-2工作/未工作-廣播車輛運(yùn)行模式狀態(tài)值10-4普通/動力/雪地/高速-廣播目標(biāo)氣門開度測量值100.4%/bit80~100%0廣播發(fā)動機(jī)啟動控制狀態(tài)值10-2啟動/未啟動-廣播發(fā)動機(jī)目標(biāo)轉(zhuǎn)速測量值100.125r/min/bit160~8031.876r/min0發(fā)動機(jī)發(fā)動機(jī)目標(biāo)轉(zhuǎn)矩百分比測量值101%/bit8-125%~125%-125%發(fā)動機(jī)……表6-13整車控制器的部分參數(shù)信息(3)各ECU參數(shù)組定義表6-14中給出了列出了整車控制器的參數(shù)組信息。整車控制器的參數(shù)組用于實(shí)現(xiàn)汽車動力總成系統(tǒng)中各控制單元間的協(xié)調(diào)控制與管理,例如通過VCU1參數(shù)組,整車控制器節(jié)點(diǎn)向發(fā)動機(jī)控制器節(jié)點(diǎn)發(fā)送速度和轉(zhuǎn)矩控制信息。而其他控制器節(jié)點(diǎn)主要用于對整車控制器節(jié)點(diǎn)的反饋信息,例如電機(jī)控制器的MC1參數(shù)組中定義了電機(jī)上電/斷電請求、電機(jī)工作狀態(tài)、電機(jī)運(yùn)行模式、電機(jī)運(yùn)轉(zhuǎn)轉(zhuǎn)矩、電機(jī)運(yùn)轉(zhuǎn)轉(zhuǎn)速等信息。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)56參數(shù)組刷新率/msPGNPPFPSVCU1:整車控制器#1106169632410VCU2:整車控制電動機(jī)106169732411VCU3:整車控制燃料電池506169832412VCU4:整車控制ISG206169932413VCU5:整車控制DC-DC506170032414VCU6:整車控制電池1006170132415VCU7:整車控制超級電容506170232416VCU8:整車控制制動需求106170332417VCU9:整車控制開關(guān)繼電器50061777324181VCU10:整車控制器產(chǎn)品序列需要時(shí)發(fā)送617963241100表6-14整車控制器的參數(shù)組信息XEP100的SAEJ1939應(yīng)用實(shí)例【例6-4】基于J1939的報(bào)文收發(fā)。2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)57“can.h”代碼:structcan_msg //發(fā)送報(bào)文的結(jié)構(gòu)體{unsignedlongid;BoolRTR;unsignedchardata[8];unsignedcharlen;unsignedcharprty;};2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)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) //查詢是否進(jìn)入初始化狀態(tài)

CAN0CTL0_INITRQ=1; //進(jìn)入初始化狀態(tài)

while(CAN0CTL1_INITAK==0); //等待進(jìn)入初始化狀態(tài)

CAN0BTR0_SJW=0; //設(shè)置同步

CAN0BTR0_BRP=7; //設(shè)置波特率

CAN0BTR1=0x1c; //設(shè)置時(shí)段1和時(shí)段2的Tq個(gè)數(shù),總線頻率為250kb/sCAN0IDMR0=0xFF;CAN0IDMR1=0xFF;CAN0IDMR2=0xFF;CAN0IDMR3=0xFF;//這里關(guān)閉濾波器

CAN0IDMR4=0xFF;CAN0IDMR5=0xFF;CAN0IDMR6=0xFF;CAN0IDMR7=0xFF;CAN0IDAC0=0xFF;CAN0IDAC1=0xFF;CAN0IDAC2=0xFF;CAN0IDAC3=0xFF;//這里關(guān)閉校驗(yàn)器

CAN0IDAC4=0xFF;CAN0IDAC5=0xFF;CAN0IDAC6=0xFF;CAN0IDAC7=0xFF;CAN0CTL1=0xC0; //使能MSCAN模塊,設(shè)置為一般運(yùn)行模式、使用總線時(shí)鐘源

CAN0CTL0=0x00;//返回一般模式運(yùn)行

while(CAN0CTL1_INITAK); //等待回到一般運(yùn)行模式

while(CAN0CTL0_SYNCH==0); //等待總線時(shí)鐘同步

CAN0RIER_RXFIE=0; //禁止接收中斷}2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)59/*===CAN0發(fā)送===*/BoolMSCAN0SendMsg(structcan_msgmsg){unsignedcharsend_buf,sp;if(msg.len>8)return(FALSE); //檢查數(shù)據(jù)長度

if(CAN0CTL0_SYNCH==0) //檢查總線時(shí)鐘

return(FALSE);send_buf=0;do{ //尋找空閑的緩沖器

CAN0TBSEL=CAN0TFLG;send_buf=CAN0TBSEL;}while(!send_buf);CAN0TXIDR0=(unsignedchar)(msg.id>>21); //寫入標(biāo)識符

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++) //寫入數(shù)據(jù)*((&CAN0TXDSR0)+sp)=msg.data[sp];CAN0TXDLR=msg.len; //寫入數(shù)據(jù)長度

CAN0TXTBPR=msg.prty; //寫入優(yōu)先級

CAN0TFLG=send_buf; //清TXx標(biāo)志(緩沖器準(zhǔn)備發(fā)送)return(TRUE);}2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)60/*===CAN0接收===*/BoolMSCAN0GetMsg(structcan_msg*msg){unsignedcharsp2;if(!(CAN0RFLG_RXF))return(FALSE); //檢測接收標(biāo)志

if(!CAN0RXIDR1_IDE) //檢測CAN協(xié)議報(bào)文模式(一般/擴(kuò)展)標(biāo)識符

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結(jié)構(gòu)不完全一致。需要做調(diào)整

if(CAN0RXIDR3&0x01)msg->RTR=TRUE;elsemsg->RTR=FALSE;msg->len=CAN0RXDLR; //讀取數(shù)據(jù)長度

for(sp2=0;sp2<msg->len;sp2++) //讀取數(shù)據(jù)

msg->data[sp2]=*((&CAN0RXDSR0)+sp2);CAN0RFLG=0x01; //清RXF標(biāo)志位(緩沖器準(zhǔn)備接收)return(TRUE);}2023/11/28汽車嵌入式系統(tǒng)設(shè)計(jì)61/*===中斷接收函數(shù)===*/#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汽車嵌入式系統(tǒng)設(shè)計(jì)62“main.c”中相關(guān)部分:#defineID0x0CF00400 //發(fā)送標(biāo)識符#definedata_len_TX8 //發(fā)送數(shù)據(jù)長度structcan_msgmsg_send,msg_get;unsignedchardatain=0;msg_send.id=ID;//發(fā)送報(bào)文

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)){ //發(fā)送過程出現(xiàn)錯(cuò)誤

…; //錯(cuò)誤處理代碼}6.5LIN總線6.5.1LIN總線協(xié)議LIN(LocalInterconnectNetwork,本地互聯(lián)網(wǎng)絡(luò))總線是一種單線串行通信網(wǎng)絡(luò);LIN設(shè)計(jì)目標(biāo):為現(xiàn)有汽車

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論