隨著(zhù)汽車(chē)電子的發(fā)展,傳統的點(diǎn)對點(diǎn)的通信已經(jīng)不能滿(mǎn)足現代汽車(chē)通信的要求。汽車(chē)電子網(wǎng)絡(luò )技術(shù)正成為實(shí)現汽車(chē)控制系統的首選,它使汽車(chē)電子技術(shù)進(jìn)入一個(gè)全新的時(shí)代。 20世紀90年代,美國汽車(chē)工程師協(xié)會(huì )SAE(Society of Automotive Engineers)將汽車(chē)數據傳輸網(wǎng)分成了A、B、C三類(lèi):A類(lèi)網(wǎng)絡(luò )主要面向傳感器/執行器的低速網(wǎng)絡(luò ),數據傳輸位速率一般小于10 kb/s,目前A類(lèi)網(wǎng)的首選標準為L(cháng)IN(LocalInterconnect Network)協(xié)議;B類(lèi)網(wǎng)絡(luò )主要面向獨立模塊間數據共享的中速網(wǎng)絡(luò ),數據傳輸位速率在10~125 kb/s,目前B類(lèi)網(wǎng)絡(luò )主要采用低速容錯CAN標準ISO11898-3;C類(lèi)網(wǎng)絡(luò )則主要面向高速、實(shí)時(shí)閉環(huán)控制的多路傳輸網(wǎng),數據傳輸位速率在 125~1 Mb/s之間,歐洲的汽車(chē)制造商主要采用高速CAN標準ISO11898-2來(lái)實(shí)現該類(lèi)網(wǎng)絡(luò )。下面簡(jiǎn)要介紹一下CAN協(xié)議和LIN協(xié)議。 1986年2月,德國的Bosch公司在SAE大會(huì )上提出了CAN串行總線(xiàn)。時(shí)至今日,CAN已經(jīng)形成國際標準,憑借自身的優(yōu)點(diǎn),不僅在汽車(chē)領(lǐng)域,而且在機械、數控機床及傳感器等領(lǐng)域都得到廣泛應用。CAN總線(xiàn)的主要特點(diǎn)有:多主機的工作方式;最大傳輸速率可達1 Mb/s(通信距離最長(cháng)40 m),直接通信距離可達10 km(速率小于5 kb/s);采用短幀結構,傳輸時(shí)間短;良好的檢錯能力;非破壞總線(xiàn)仲裁技術(shù);較高的性?xún)r(jià)比。 LIN是1998年由BMW等五家汽車(chē)制造商、一家軟件工具制造商以及一家半導體廠(chǎng)商聯(lián)合提出的一個(gè)協(xié)議。LIN通信是基于SCI(UART)數據格式,采用單主/多從模式以及低成本的單線(xiàn)連接方式,最高傳輸速率可達20kb/s。LIN的從節點(diǎn)不用晶振或陶瓷振蕩器就能實(shí)現自同步。出于以上技術(shù)特點(diǎn), LIN總線(xiàn)實(shí)現成本較低,且完全能夠滿(mǎn)足A類(lèi)網(wǎng)絡(luò )的通信需求。 在實(shí)際的汽車(chē)電子網(wǎng)絡(luò )中,A、B、C三類(lèi)網(wǎng)絡(luò )并不是完全獨立的。為了完成車(chē)輛的控制及信息共享,不同網(wǎng)絡(luò )間必須進(jìn)行相應的數據交換。由于是三種不同的網(wǎng)絡(luò ),它們之間的通信是不能直接進(jìn)行的,而必須作相應的協(xié)議轉換及數據處理后才能實(shí)現,這些工作是由網(wǎng)關(guān)來(lái)實(shí)現的。本文提出了一種網(wǎng)關(guān)的設計方案,用以實(shí)現高速CAN、低速CAN及LIN三種總線(xiàn)網(wǎng)絡(luò )之間的通信。 1 網(wǎng)關(guān)總體結構 本文所討論的網(wǎng)關(guān)其主要任務(wù)是解決車(chē)載網(wǎng)絡(luò )中A、B、C三類(lèi)網(wǎng)絡(luò )的相互通信的問(wèn)題,實(shí)現數據的存儲轉發(fā)及高、低速CAN協(xié)議之間或低速CAN與LIN協(xié)議之間的協(xié)議轉換,以便在不同網(wǎng)絡(luò )之間實(shí)現數據通信。網(wǎng)關(guān)主要分為4個(gè)部分:實(shí)現數據存儲轉發(fā)和協(xié)議轉換的主控制器,用于與高速CAN網(wǎng)絡(luò )連接的高速CAN 節點(diǎn)模塊,與低速CAN網(wǎng)絡(luò )連接的低速CAN節點(diǎn)模塊以及與LIN網(wǎng)絡(luò )連接的LIN節點(diǎn)模塊。網(wǎng)關(guān)系統的電路框圖如圖1所示。 網(wǎng)關(guān)中三個(gè)節點(diǎn)電路分別與各自的網(wǎng)絡(luò )相連,且實(shí)現各自對應的網(wǎng)絡(luò )與主控制器之間的數據交換。這個(gè)數據交換過(guò)程是雙向的,既包括從網(wǎng)絡(luò )上接收數據并將數據存到主控制器中,又包括從主控制器相應的緩存器中讀取數據并將其發(fā)送到自己對應的網(wǎng)絡(luò )中。主控制器主要負責數據的存儲及協(xié)議的轉換,即將各個(gè)節點(diǎn)接收來(lái)的數據根據其目的網(wǎng)絡(luò )的不同,分別存入不同的緩沖區,并且根據目的網(wǎng)絡(luò )的不同,將數據轉化為能夠在目的網(wǎng)絡(luò )上傳送的數據格式。 2 網(wǎng)關(guān)電路設計 如上所述,網(wǎng)關(guān)的硬件電路主要由主控制器、高速CAN節點(diǎn)模塊、低速CAN節點(diǎn)模塊、LIN節點(diǎn)模塊4部分組成。為了滿(mǎn)足網(wǎng)關(guān)的正常通信要求,必須考慮主控制器的數據處理能力。另外,由于網(wǎng)關(guān)的工作環(huán)境為電磁干擾非常嚴重的汽車(chē)內部,故還須考慮網(wǎng)關(guān)的抗噪聲干擾性能。網(wǎng)關(guān)的硬件設計簡(jiǎn)圖如圖2所示, AT91SAM7A3為網(wǎng)關(guān)的主控制芯片,TJA1020為L(cháng)IN總線(xiàn)收發(fā)器,CTM1054為低速CAN收發(fā)器,CTM1050為高速CAN收發(fā)器。 2.1 主控制器的選擇 實(shí)現數據的高效率、高質(zhì)量的存儲轉發(fā)是網(wǎng)關(guān)的重要目標,而主控制器是網(wǎng)關(guān)的核心器件,它的性能好壞直接決定了網(wǎng)關(guān)的效率高低。主控器對接收到的數據進(jìn)行緩存,因此主控制器需要有較高的存儲容量。主控器還要對它所接收與轉發(fā)的數據進(jìn)行協(xié)議轉換等數據處理,因此還要有較強的運算能力。 本設計選用了Atml公司的AT91SAM7A3作為網(wǎng)關(guān)的核心控制器。這是一顆基于ARM7TDMI內核的32位RISC處理器,具有執行速度快、效率高的特點(diǎn),能夠滿(mǎn)足網(wǎng)關(guān)的數據處理要求。該芯片內置32 KB的SRAM和256 KB的高速Flash存儲器,存儲能力強,能夠滿(mǎn)足網(wǎng)關(guān)對數據存儲的要求。另外,該芯片內部集成有2個(gè)功能強大的CAN2.OB的控制器,可以處理所有類(lèi)型的幀結構(數據幀、遠程幀、錯誤幀及過(guò)載幀),每個(gè)控制器有16個(gè)獨立的緩存區(mailbox),十分有利于實(shí)現網(wǎng)關(guān)高速、大容量的數據處理。集成的 CAN控制器還能夠減少器件數目和PCB布線(xiàn)數量,有利于提高系統的抗干擾性能。 2. 2 CAN節點(diǎn)設計 常用的CAN節點(diǎn)電路如圖3所示,它主要由MCU、CAN控制器及CAN收發(fā)器組成。為了增強電路的抗干擾性,還需要在控制器與收發(fā)器之間增加一個(gè)隔離電路。 本網(wǎng)關(guān)中的CAN節點(diǎn)共有2個(gè):高速CAN節點(diǎn)和低速CAN節點(diǎn)。由于在汽車(chē)中電磁干擾現象非常嚴重,僅靠單個(gè)的CAN收發(fā)器難以滿(mǎn)足通信品質(zhì)的要求,需要加上適當的隔離電路以提高電路的抗干擾性。 2個(gè)節點(diǎn)的MCU的功能由主控制芯片AT91SAM7A3實(shí)現,且AT91SAM7A3中集成了兩個(gè)高性能的CAN控制器,可以分別作為高低速CAN節點(diǎn)的控制器。 常用的隔離電路采用高速光耦6N137實(shí)現CAN節點(diǎn)之間的信號隔離,并且采用電源隔離模塊實(shí)現高速光耦的兩個(gè)電源的隔離。但是這種設計無(wú)疑增加了PCB的走線(xiàn),使電路的沒(méi)計變得復雜,同時(shí)隔離電路的隔離效果也受到影響。 本設計采用廣州致遠電子有限公司生產(chǎn)的CTM系列的CTM1050和CTM1054,分別作為高低速CAN收發(fā)器。CTM系列的CAN收發(fā)器集成了CAN 收發(fā)器以及必需的隔離,即在一塊芯片上實(shí)現了隔離電路和CAN收發(fā)器的功能。這樣就不必單獨設計隔離電路,提高了集成度,使得抗干擾性得到增強。 高速CAN收發(fā)器CTM1050,最高速率可達1 Mb/s,完全符合ISO11898-2標準的高速CAN通信,用它作為高速CAN網(wǎng)絡(luò )接口的收發(fā)器(電路連接方法見(jiàn)圖2)。容錯CAN收發(fā)器 CTM1054,最高通信速率可達125 kb/s,完全符合ISO11898-3標準,用它作為低速CAN網(wǎng)絡(luò )接口的收發(fā)器(電路連接方法見(jiàn)圖2)。需要注意的是,在CTM1054的連接中,有 2個(gè)電阻R1和R2的阻值要根據低速CAN網(wǎng)絡(luò )中節點(diǎn)的個(gè)數來(lái)確定。具體值的算法見(jiàn)CTM1054使用手冊。 2.3 LIN接口設計 LIN總線(xiàn)是一主多從的總線(xiàn)連接方式,節點(diǎn)有主從之分。在本設計中,將LIN節點(diǎn)設計為主節點(diǎn)。LIN是一個(gè)基于單線(xiàn)串行的通信協(xié)議,對于硬件的要求比較簡(jiǎn)單。通常一個(gè)有SCI/UART接口的單片機和一個(gè)LIN收發(fā)器就可組成LIN節點(diǎn)。本設計利用AT91SAM7A3的UART口和LIN收發(fā)器 TJA1020組成一個(gè)LIN主節點(diǎn)。 TJA1020使用的波特率可從2.4~20 kb/s,有較好的保護功能:總線(xiàn)終端和電池引腳可防止汽車(chē)環(huán)境下的瞬變、總線(xiàn)終端對電池和地的短路保護以及過(guò)熱保護等,可以作為汽車(chē)通信中的LIN通信接口(具體電路連接見(jiàn)圖2)。 3 網(wǎng)關(guān)軟件設計 網(wǎng)關(guān)的軟件系統主要包括主監控程序、數據的發(fā)送、數據的接收、數據的處理(包括協(xié)議轉換和緩沖區內數據的讀寫(xiě)處理)等幾部分。 3.1 主監控程序 如圖4所示,在主控制器AT91SAM7A3中劃出4塊緩沖區BUF1~BUF4,每一塊緩沖區中的數據都有明確而且唯一的來(lái)源和目的地。主監控程序主要通過(guò)循環(huán)依次查詢(xún)BUF1~BUF4中的存儲情況,來(lái)決定是否發(fā)送數據以及將數據發(fā)送給誰(shuí)。 當高速CAN網(wǎng)絡(luò )上有數據需要接收的時(shí)候,通過(guò)高速CAN模塊接收數據,對接收到的數據進(jìn)行處理后,將其存到緩沖區BUF1中,再由低速CAN模塊將其發(fā)送到低速CAN網(wǎng)絡(luò )上;當LIN網(wǎng)絡(luò )上有數據需要接收時(shí),通過(guò)LIN總線(xiàn)模塊接收數據,對接收到的數據進(jìn)行數據格式轉換(LIN格式的報文幀轉換為CAN 格式的報文幀),再將其存入到緩沖區BUF4中,并由低速CAN模塊將其發(fā)送到低速CAN網(wǎng)絡(luò )上;當低速CAN網(wǎng)絡(luò )上有數據需要接收時(shí),先接收數據,然后判斷數據是發(fā)送到高速CAN總線(xiàn),還是發(fā)送到LIN總線(xiàn),根據判斷結果對數據進(jìn)行處理,存入相應的緩沖區(如數據是發(fā)往高速CAN總線(xiàn),則存入BUF2,否則存入BUF3)。 3.2 數據的發(fā)送 數據的發(fā)送由發(fā)送子程序完成,網(wǎng)關(guān)中主要有3個(gè)發(fā)送子程序,分別對應兩路CAN控制器以及一路 LIN發(fā)送器。高速CAN的發(fā)送子程序負責發(fā)送BUF1中的數據,LIN的發(fā)送子程序負責發(fā)送BUF3中的數據,低速CAN的發(fā)送子程序負責發(fā)送BUF2 和BUF4中的數據。數據的發(fā)送采用查詢(xún)總線(xiàn)狀態(tài)的發(fā)送方式:查詢(xún)總線(xiàn)的忙閑情況,如果總線(xiàn)忙,則退出發(fā)送子程序,進(jìn)行其他的工作;如果總線(xiàn)空閑,則發(fā)送數據。發(fā)送完1幀數據后,再檢查與之相應的緩沖區的狀態(tài)。如果為空,則退出發(fā)送子程序;如果非空,則再檢查總線(xiàn)的忙閑狀態(tài)。如果忙,則退出發(fā)送子程序;如果空閑,則發(fā)送數據。然后再開(kāi)始新一輪的數據查詢(xún)發(fā)送過(guò)程。圖5為高速CAN向低速CAN發(fā)送的流程,其他的發(fā)送子程序過(guò)程與此類(lèi)似。 3.3 數據的接收 數據接收是從總線(xiàn)上接收數據,進(jìn)行必要的協(xié)議轉換,再將轉換后的數據存人相應的緩沖區。網(wǎng)關(guān)中有3個(gè)接收子程序,分別對應兩路CAN控制器及一路LIN發(fā)送器。數據接收采用中斷方式,由于不同網(wǎng)絡(luò )有不同的實(shí)時(shí)性要求,因此為3個(gè)接收程序設定了不同的中斷級別。高速CAN的實(shí)時(shí)性要求最高,中斷級別也設為最高;而LIN總線(xiàn)的實(shí)時(shí)性在三者中最低,故中斷級別也最低。當一個(gè)接收中斷發(fā)生后,進(jìn)入接收中斷子程序,判斷相應的緩沖區是否已滿(mǎn)(低速CAN的接收程序在接收到數據后需要根據數據的目的網(wǎng)絡(luò )確定緩存區為BUF2還是BUF3)。如果緩沖區已滿(mǎn),則產(chǎn)生一個(gè)溢出錯誤標志;如果沒(méi)有滿(mǎn),則將數據進(jìn)行相應的協(xié)議轉換,并將轉換后的數據存入相應的緩存區,退出中斷并完成接收。圖6所示為低速CAN數據接收過(guò)程的簡(jiǎn)要流程。 3.4 數據的處理 網(wǎng)關(guān)的數據處理是指協(xié)議的轉換和數據在緩沖區的存儲與轉發(fā)。每當接收到一組數據時(shí),首先進(jìn)行協(xié)議轉換,然后再將其存入到相應的緩存區。高低速CAN的協(xié)議相同,并不需要轉換,因此主要是進(jìn)行CAN協(xié)議和LIN協(xié)議之間的轉換。 CAN協(xié)議和LIN協(xié)議都是以幀(frame)為數據單位進(jìn)行通信的。在進(jìn)行LIN協(xié)議到CAN協(xié)議的轉換時(shí),首先是將LIN幀分解,從標識符場(chǎng) (identfield)提取出其中的ID標識符,從數據場(chǎng)(data field)提取出有效數據,然后根據這些信息封裝成符合要求的CAN幀格式。CAN協(xié)議到LIN協(xié)議的轉換過(guò)程亦是如此。先將CAN幀分解,從仲裁域 (arbitration field)和數據域(data field)中提取出有用信息,然后封裝成符合要求的LIN幀格式。 數據的4個(gè)緩沖區BUF1~BUF4為FIFO(First InFirst Out)緩沖區,本文采用循環(huán)隊列(circular queue)來(lái)實(shí)現數據的先進(jìn)先出。兩個(gè)指針Read和Write分別指示隊頭元素和隊尾元素在緩沖區空間中的位置,它們的初值在隊列初始化時(shí)均應置為 0,每讀取或寫(xiě)入一次數據,都要對緩沖區的參數進(jìn)行調整。寫(xiě)數據時(shí),將新元素插入Write所指的位置,然后將Write加1;讀數據時(shí),刪去Read所指的元素,然后將Read加1并返回被刪元素。 4 網(wǎng)關(guān)通信測試 將網(wǎng)關(guān)的高速CAN接口和低速CAN接口分別與單獨的CAN節點(diǎn)電路相連,LIN接口與單獨的LIN從節點(diǎn)相連,組成測試網(wǎng)絡(luò )。測試的主要內容為高速 CAN和低速CAN之間的通信,低速CAN和LIN網(wǎng)絡(luò )之間的通信。高速CAN網(wǎng)絡(luò )采用速率為500 kb/s,低速CAN網(wǎng)絡(luò )采用的速率為100kb/s,LIN網(wǎng)絡(luò )采用的速率為10 kb/s。利用PC機的串口發(fā)送測試數據,同時(shí)在另一個(gè)串口終端上進(jìn)行數據的監測。測試結果表明,發(fā)送數據內容與監測到的數據內容一致。 5 總 結 以AT91SAM7A3為核心設計的一款CAN/LIN混合網(wǎng)關(guān),實(shí)現了汽車(chē)網(wǎng)絡(luò )中高速CAN總線(xiàn)、容錯CAN總線(xiàn)及LIN總線(xiàn)三類(lèi)網(wǎng)絡(luò )之間的通信,使汽車(chē)中的各類(lèi)網(wǎng)絡(luò )的信息能夠有效共享,實(shí)現了不同性質(zhì)網(wǎng)絡(luò )的互聯(lián)。 |