【摘 要】信號傳輸包括UART串口通信、以太網(wǎng)通信以及CAN網(wǎng)絡(luò)通信等多種方式。其中CAN網(wǎng)絡(luò)通信由于其高安全性,常見應(yīng)用于對系統(tǒng)穩(wěn)定性及網(wǎng)絡(luò)安全有所要求的系統(tǒng),諸如航空電子、汽車電子、醫(yī)療儀器、軍事工業(yè)、鐵路軌道運輸及重要的控制系統(tǒng)等。文章提出一種通過CAN總線通信在線升級軟件程序的方式,主要以Microchip的dsPIC33CK256MP505為系統(tǒng)平臺,通過ATA6579實現(xiàn)和CAN總線通信,并通過Bootloader+APP的形式實現(xiàn)軟件的在線更新。
【關(guān)鍵詞】CAN總線;單片機;在線升級;軟件
中圖分類號:U463.6 文獻標識碼:A 文章編號:1003-8639( 2024 )11-0031-05
A Study on an On-line Update Program Device Based on CAN Bus
【Abstract】Signal transmission includes UART serial communication,Ethernet communication and CAN network communication. Because of its high security,CAN network communication is commonly used in systems that require system stability and network security,such as avionics,automotive electronics,medical instruments,military industry,railway track transportation and important control 734d41ec59796fedfc14ed1e4d0a1410de2cf02c497f3d610dd177c514ad2a1bsystems. This paper proposes an online updating method of software program through CAN bus communication,which mainly uses Microchip's dsPIC33CK256MP505 as system platform,realizes the communication with CAN bus through ATA6579,and realizes the online updating of software through Bootloader+APP.
【Key words】CAN bus;single-chip computer;online upgrade;software
1 前言
工業(yè)互聯(lián)網(wǎng)是一種以數(shù)據(jù)交換為基礎(chǔ),通過網(wǎng)絡(luò)通信等技術(shù),實現(xiàn)工業(yè)生產(chǎn)各個節(jié)點的智能化、互聯(lián)化的新型工業(yè)類型。它通過網(wǎng)絡(luò)通信將工業(yè)生產(chǎn)中的各個環(huán)節(jié)(如設(shè)備、生產(chǎn)線、供應(yīng)商、物流等)連接起來,實現(xiàn)數(shù)據(jù)的共享和信息的交換,以達到提高生產(chǎn)率、降低成本、提升品質(zhì)和高安全性的目的[1]。目前工業(yè)上采用的通信方式包括UART串口通信、LIN網(wǎng)絡(luò)通信、以太網(wǎng)絡(luò)通信以及CAN通信等。
1.1 網(wǎng)絡(luò)通信的相關(guān)特點
1)UART串口通信是一種串行、異步、全雙工通信,多用于芯片間近距離的網(wǎng)絡(luò)通信。其中RS232和RS485是最常用的UART網(wǎng)絡(luò)通信。
2)LIN網(wǎng)絡(luò)通信是一種串行、異步、半雙工總線,用于遠距離通信;LIN總線成本較低,多用于實現(xiàn)汽車系統(tǒng)中的分布式電子系統(tǒng)控制[2],比如雨刮控制系統(tǒng)等。
3)以太網(wǎng)通信是一種交換機式通信,點對點的全雙工通信,目前在工業(yè)互聯(lián)網(wǎng)上大面積使用。
4)CAN網(wǎng)絡(luò)通信,即控制器局域網(wǎng)絡(luò),是工業(yè)總線的一種。CAN與其他工業(yè)互聯(lián)網(wǎng)通信總線相比,具有高可靠性、實時性快等特點,運用越來越廣泛。工業(yè)互聯(lián)網(wǎng)和汽車領(lǐng)域上大量使用CAN網(wǎng)絡(luò)通信,其中在汽車領(lǐng)域完全采用CAN總線來實現(xiàn)汽車內(nèi)部各個控制單元之間的數(shù)據(jù)通信[3]。
與RS232、LIN、以太網(wǎng)等通信方式不同,CAN通信采用CAN_H和CAN_L兩條信號線構(gòu)成差分信號,如圖1所示。
1.2 CAN總線特征
1)數(shù)據(jù)以報文數(shù)據(jù)的形式進行發(fā)送和接收。只要總線處于空閑狀態(tài),CAN總線上的任意節(jié)點均可接收和發(fā)送報文,這是因為每個網(wǎng)絡(luò)節(jié)點既可作為主機,又可作為從機。
2)若需對CAN網(wǎng)絡(luò)系統(tǒng)擴展更多網(wǎng)絡(luò)節(jié)點,無需對現(xiàn)有節(jié)點的軟件和硬件做任何改變,只需直接增加所需節(jié)點即可。這是由于在CAN網(wǎng)絡(luò)中進行信息路由時,每個節(jié)點無需使用任何關(guān)于系統(tǒng)配置的報文,而是由接收節(jié)點根據(jù)報文本身的信息來判斷是否需要接收相關(guān)數(shù)據(jù)。
3)標識符(Identifier)是傳送的報文所具備的特征信息內(nèi)容,即本條報文本身所代表的特征。數(shù)據(jù)以廣播方式在CAN網(wǎng)絡(luò)上發(fā)送,總線上的任意節(jié)點都能接收到本條報文,每個節(jié)點需根據(jù)廣播信息的標識符來判定該幀信息是否為自己需要接收的。
4)CAN數(shù)據(jù)的一致性是為了確保相關(guān)報文信息在CAN網(wǎng)絡(luò)里能同時被任意節(jié)點接收或同時不被接收,而再同步功能和錯誤處理是實現(xiàn)CAN數(shù)據(jù)一致性的關(guān)鍵。
5)CAN網(wǎng)絡(luò)傳輸速率需保持一致且固定,例如汽車上的CAN網(wǎng)絡(luò)中的所有節(jié)點都采用500kb/s。
6)CAN報文中的標識符用于決定CAN網(wǎng)絡(luò)中數(shù)據(jù)的優(yōu)先權(quán),標識符越小,優(yōu)先權(quán)越高。
7)CAN網(wǎng)絡(luò)仲裁(Arbitration)表示當CAN總線處于空閑狀態(tài)時,任意節(jié)點都可向CAN總線發(fā)送報文。當出現(xiàn)2個以上多個節(jié)點同時發(fā)送報文時,會導致總線訪問碰撞。而標識符的逐位仲裁則用來解決總線訪問碰撞問題。當具有相同標識符的數(shù)據(jù)幀和遠程幀同時發(fā)送時,數(shù)據(jù)幀的優(yōu)先級高于遠程幀。在仲裁期間,每一個發(fā)送節(jié)點都會對發(fā)送位的電平與被監(jiān)控的總線電平進行比較,當電平相同時,該單元可繼續(xù)發(fā)送;若發(fā)送的是隱性電平而監(jiān)視到的是顯性電平,那么這個單元就失去了仲裁,必須退出發(fā)送狀態(tài)。
CAN控制器和CAN收發(fā)器是組成CAN網(wǎng)絡(luò)硬件必備的兩個模塊。數(shù)據(jù)鏈路層的相關(guān)功能由CAN控制器完成,而物理層的相關(guān)功能則由CAN收發(fā)器來完成。如圖2所示,控制器的MCU一般包含CAN控制器模塊,比如Microchip的33CK系列。而CAN收發(fā)器一般是獨立的芯片,比如Microchip的ATA6570,如圖3所示。
傳統(tǒng)更新控制器程序的方式通常是通過控制器上MCU的下載接口,比如JTAG。然而這種方式需要將整個控制器從系統(tǒng)中取出,甚至可能要去掉控制器外殼,然后在PC上使用編譯器對控制器進行程序更新。這不僅導致更新效率低下,有的控制器有IP68等防塵防水要求,采用這樣的更新程序方式還會破壞控制器的氣密性。因此,需要采用其他方式進行程序更新。本文設(shè)計一種基于CAN總線的在線更新程序的設(shè)備,能提升傳統(tǒng)更新程序的效率,同時保證氣密性要求。
2 整體框架設(shè)計
如圖4所示,整體電路分為5部分:CAN收發(fā)器、供電電路、MCU電路、串口屏幕電路設(shè)計和電平轉(zhuǎn)換電路。其中,CAN收發(fā)器電路的主要作用是將CAN_H和CAN_L差分信號轉(zhuǎn)換為MCU能識別的數(shù)字電平信號。供電電路是為CAN收發(fā)器和MCU以及其他器件提供電壓的電路。串口屏幕電路可以看出是電腦的APP軟件,通過串口屏上的控件將各種指令發(fā)送給MCU。而電平轉(zhuǎn)換電路是由于MCU和串口屏的高電平幅值不一致而需要設(shè)計的。
2.1 CAN收發(fā)器電路
CAN收發(fā)器采用Microchip的芯片ATA6570。由于ATA6570沒有供電功能,還需要選擇LDO電路來提供電源。
ATA6570作為獨立的高速CAN收發(fā)器,具有部分網(wǎng)絡(luò)接口控制器區(qū)域網(wǎng)絡(luò)(CAN)協(xié)議控制器和物理雙線CAN總線功能,是專用的CAN收發(fā)器并運用于高速wKfbzVrw3b0FX3tYZskdZMpo7EavcFBePl5fHtEzR4A=CAN應(yīng)用。ATA6570提供本地和增強的遠程喚醒功能,具備SOIC和VDFN封裝。它在待機和睡眠模式下的功耗非常低。除了通過WAKE本地喚醒引腳和遠程喚醒模式符合ISO 11898-2:2016,ATA6570還支持ISO 11898-2:2016兼容CAN部分組網(wǎng)。它能夠保持完整的控制單元ECU處于低功耗模式,即使存在總線流量,直到有效的喚醒幀被收到。它還具有看門狗(默認關(guān)閉)和串行外設(shè)接口(SPI)。VIO引腳允許將I/O電平自動調(diào)整到所連接的MCU的I/O電平。
圖5為ATA6570 CAN收發(fā)器電路的原理圖。D12為1個ESD管,用于EMC中的EDS測試。L5為CAN共模電感,C33和C34為濾波電容,濾除總線上的共模干擾。C30為差模電容,濾除總線上的差模干擾。R57和R63是2個60Ω的電阻,串聯(lián)后構(gòu)成120Ω的電阻,用于阻抗匹配。輸入CAN總線接入ATA6570的CAN_H和CAN_L引腳。
ATA6570支持睡眠和喚醒功能。其中PIN9是外部喚醒引腳,而SDI、SDO和SCK是與MCU進行SPI通信的,用于完成特定幀的睡眠和喚醒。
2.2 供電電路
在控制器的CAN總線處于隱形電平(邏輯1)狀態(tài)時,CAN_H與CAN_L的電壓均為2.5V。然而,當處于顯性電平(邏輯0)時,CAN_H的電壓為3.5V,CAN_L的電壓為1.5V,具體如圖6所示。鑒于此,CAN收發(fā)器的CAN通信模塊需要5V供電才能正常工作。同時,CAN收發(fā)器與MCU之間還存在通信需求,而這一通信過程中的邏輯高電平是與MCU的供電相關(guān)聯(lián)的。此次方案所選擇的MCU供電為3.3V,所以,為了滿足CAN收發(fā)器與MCU的通信需求,CAN收發(fā)器的SPI模塊還需要3.3V供電。
由于微控制單元MCU需要3.3V供電,而串口屏幕的供電則需要5V。綜上所述,供電電路必須能夠提供5V和3.3V的電壓輸出。通過選擇低壓差線性穩(wěn)壓器LDO即可達成輸入12V,輸出5V和3.3V的相關(guān)功能。選用Microchip的MCP1793能夠?qū)崿F(xiàn)輸出5V和3.3V的電壓。LDO電路見圖7。
LDO的使能EN引腳與CAN收發(fā)器的INH引腳相連接。當CAN收發(fā)器處于正常的CAN通信狀態(tài)時,INH引腳呈現(xiàn)高電平,此時LDO能夠正常工作;而當CAN收發(fā)器處于睡眠模式時,INH引腳變?yōu)榈碗娖?,進而關(guān)閉LDO,以此降低控制器的功耗。至于2個LDO的輸出都連接LED指示燈D13和D14,其目的是為了通過肉眼直觀地識別LDO是否處于正常工作狀態(tài)。
2.3 MCU電路
MCU是整個控制系統(tǒng)的核心,選擇Microchip的dsPIC33CK56MP505,內(nèi)部集成了CAN控制器模塊,并與外部CAN收發(fā)器ATA6570共同實現(xiàn)了CAN總線的硬件數(shù)據(jù)收發(fā)功能。Flash的大小在MCU的選型中格外重要,最終選擇256kB的容量來滿足程序中除了應(yīng)用程序還需要Bootloader刷寫程序的需求。MCU電路設(shè)計如圖8所示,其具體功能闡述如下。
1)外部晶振電路。盡管MCU自身具備內(nèi)部晶振,然而在涉及到位同步的CAN數(shù)據(jù)收發(fā)過程中,因其對時序有著較高要求,故而需采用外部晶振。在圖8中,Y1為外部陶瓷晶振。為確保晶振能夠正常運作,起振電阻R24需為1MΩ。而C9和C15則是2個用于濾波的電容。只有當外部所連接的電容為與之匹配的電容時,振蕩頻率方能確保在標稱頻率附近的誤差范圍內(nèi)。
2)接口電路。MCU的主要功能在于處理CAN報文數(shù)據(jù),例如CAN應(yīng)用層的程序,通過PIN37和PIN38與CAN收發(fā)器的TX和RX互連。CAN收發(fā)器除了具備處理平臺的電平轉(zhuǎn)換功能之外,還擁有模式轉(zhuǎn)換功能,如Normal Mode可正常實現(xiàn)CAN通信的相關(guān)功能,而進入Sleep Mode后則會關(guān)閉CAN通信功能,此時靜態(tài)電流可達到μA級別,從而降低芯片的功耗。這就需要MCU借助SPI通信與CAN收發(fā)器進行數(shù)據(jù)交換。MCU的PIN23、PIN24、PIN25、PIN26分別被配置為SS、SCK、SDO和SDI數(shù)據(jù)接口。MCU的最后一項功能是與串口屏幕進行數(shù)據(jù)交換,采用的是UART串口通信。將PIN35和PIN36配置為UART的TX和RX即可實現(xiàn)相關(guān)功能。
3)濾波去耦電路。需在MCU的每對電源引腳(例如VDD/VSS和AVDD/AVSS)上使用去耦電容,以增強MCU的抗干擾能力。電路中的C17、C18、C19、C20為去耦電容,其容值采用0.1μF(100nF),并且所選擇的去耦電容ESR應(yīng)盡量低。在進行PCB排版時,這些電容需布置在MCU需要濾波的引腳附近,尤其要注意去耦半徑。
4)MCU上的5個LED燈是在調(diào)試程序時使用,起指示作用。MCU未使用的空引腳為防止外部干擾,需通過軟件配置的方式下拉到GND,以降低I/O干擾風險。
2.4 串口屏幕電路
串口屏幕選擇TJC1060X570電容式串口屏幕,采用UART RS232進行數(shù)據(jù)傳輸,比特率需要設(shè)置為9600b/s,供電電壓為5V。具體串口屏幕接口參數(shù)見表1。
只需要將串口屏幕的接口通過接插件連接到控制器上即可實現(xiàn)相關(guān)電路設(shè)計。串口屏幕接口電路見圖9。
2.5 電路轉(zhuǎn)換電路
由于MCU是3.3V供電,而串口屏幕的供電為5V,兩者之間的串口數(shù)據(jù)通信會因高電平不一致而引發(fā)問題,故而需要設(shè)計轉(zhuǎn)換電路。將MCU發(fā)送的3.3V轉(zhuǎn)換為5V,同時將串口屏幕發(fā)送的5V轉(zhuǎn)換為3.3V。轉(zhuǎn)換電路見圖10,該電路采用2個NPN的三極管來實現(xiàn)相關(guān)功能。經(jīng)精心設(shè)計,通過計算R38、R39的阻值,讓NPN工作在飽和區(qū),即可實現(xiàn)相關(guān)功能。
3 PCB排版和相關(guān)實物樣件
按照要求順利完成上述原理圖設(shè)計之后,便需著手開展PCB的設(shè)計工作。PCB的設(shè)計包含布局與布線兩個階段。在布局方面,其基本原則是模塊化布局,即將原理圖中劃分出的各功能子模塊在PCB上進行大致的合理安排。需特別注意的是,濾波器件務(wù)必緊鄰需要濾波的引腳放置,且本設(shè)計所涉及的器件數(shù)量較少,在進行布局時應(yīng)盡可能考慮小型化設(shè)計,采用雙面板的PCB排版方式具有較高的性價比優(yōu)勢。具體的PCB排版如圖11所示,實物樣件如圖12所示。
4 軟件設(shè)計
在線升級指通過讓芯片運行特定的程序(Bootloader代碼),將從通信渠道獲取的數(shù)據(jù)(APP代碼)寫入芯片內(nèi)存,以此來完成程序的更新。具體軟件框架如圖13所示。
其中,Bootloader亦被稱作引導加載程序,是復(fù)位運行的一段代碼,主要負責完成堆棧、系統(tǒng)時鐘、中斷向量的初始化工作,同時準備好C運行環(huán)境。它的另外一個作用是接收 APP代碼數(shù)據(jù),并將APP代碼寫入對應(yīng)的User Flash區(qū)域,以此完成對APP代碼的升級。Bootloader一般在出廠前就已燒寫完成,出廠后通常不再進行更新,若需更新則需使用燒寫器重新燒寫。因此,Bootloader應(yīng)盡可能精簡,占用較小的空間,以降低出錯率。應(yīng)用代碼,也就是用戶自定義的代碼,用戶添加的與應(yīng)用功能相關(guān)的代碼都位于APP區(qū)域。它是獨立于Bootloader的程序,與Bootloader占用不同的存儲空間,且應(yīng)用代碼分配的存儲空間應(yīng)盡可能大。根據(jù)應(yīng)用需求的變化,APP代碼可能會不斷更新,僅需通過在線升級便可完成APP的更新。需要注意的是,APP程序在任何時候都不能對Bootloader區(qū)的程序進行擦除、寫入操作,否則可能致使引導程序無法正確運行,進而無法繼續(xù)升級。
5 結(jié)論
本文以Microchip的dsPIC33CK256MP505作為系統(tǒng)平臺,通過ATA6579實現(xiàn)和CAN總線通信,并借助Bootloader+APP的形式實現(xiàn)軟件的在線更新。該設(shè)計不僅提升了傳統(tǒng)更新程序的效率,也為相關(guān)領(lǐng)域的軟件更新提供了一種可靠的實踐模式。未來,可在此基礎(chǔ)上進一步探索優(yōu)化,以滿足不斷變化的應(yīng)用需求和提高系統(tǒng)性能,為更廣泛的應(yīng)用場景提供有力支持,推動相關(guān)技術(shù)的持續(xù)發(fā)展和創(chuàng)新。
參考文獻:
[1] 韓堯,陳振東,孫颋. 基于CAN總線的CPLD程序在系統(tǒng)更新技術(shù)[J]. 信息化研究,2022,48(6):46-51.
[2] 張乾乾,趙欣,杜振振,等. 基于CAN FD總線的制動控制單元在線程序更新的研究與實現(xiàn)[J]. 鐵道車輛,2023,61(2):37-41.
[3] 銀燕杰,唐琳. 一種基于LIN總線的在線更新程序設(shè)備的研究[J]. 電子制作,2022,30(21):69-72.