蔡小紅,付華芳,楊 威
(東風(fēng)越野車有限公司,湖北 武漢 430056)
隨著芯片慌的出現(xiàn),汽車核心芯片的供貨及產(chǎn)品數(shù)據(jù)安全等風(fēng)險(xiǎn)系數(shù)急劇加大,如何保障產(chǎn)品自主可控是國(guó)內(nèi)廠商急需面對(duì)的問(wèn)題。因此,在特種車輛電子產(chǎn)品開(kāi)發(fā)過(guò)程中,需滿足國(guó)產(chǎn)自主可控相關(guān)要求,降低卡脖子技術(shù)風(fēng)險(xiǎn)。作為特種車輛車身電子控制核心元器件的MCU必須滿足國(guó)產(chǎn)化要求,且市面上已有相關(guān)國(guó)產(chǎn)化產(chǎn)品?;诖耍疚膶?duì)車身控制模塊的MCU進(jìn)行選型設(shè)計(jì),并在應(yīng)用過(guò)程中對(duì)MCU上電時(shí)IO口失控問(wèn)題進(jìn)行分析、處理、跟蹤和試驗(yàn)驗(yàn)證。
MCU模塊是車身電子控制模塊的關(guān)鍵器件,必須實(shí)現(xiàn)國(guó)產(chǎn)化,只有MCU模塊國(guó)產(chǎn)化了,才能稱得上真正的自主可控。
目前,國(guó)內(nèi)設(shè)計(jì)/生產(chǎn)微處理器廠家主要有:南通國(guó)芯(STC)、四維圖新、海爾東軟載波、兆易創(chuàng)新、上海芯旺、新海科技、復(fù)旦微電子、北京君正、清華同方、海威華芯以及軍工科研院所旗下部分公司(如長(zhǎng)沙韶光、中電47所)等。
經(jīng)過(guò)深入調(diào)研,在需要符合某型號(hào)項(xiàng)目特殊低溫環(huán)境要求的條件下,MCU模塊采用某國(guó)產(chǎn)芯片HHD32F107VCH,其性能參數(shù)有:處理器為ARM Cortex-M3內(nèi)核,72MHz;最高1M Flash,128kB SRAM;ADC為16通道12位ADC;2路CAN,4路SPI;1路百兆以太網(wǎng);工作電壓為2.7~5.5V;工作溫度為-55~125℃;開(kāi)發(fā)環(huán)境為Keil uVision5。事實(shí)證明,該性能完全滿足特種車輛某特殊型號(hào)項(xiàng)目車身控制模塊需求。處理器模塊如圖1所示。
圖1 處理器模塊
在整車試驗(yàn)過(guò)程中,IGN-ON擋上電時(shí),車身控制模塊功能偶發(fā)異常且每次表現(xiàn)出不同功能異常,只有強(qiáng)制斷電后重啟,各項(xiàng)功能才能恢復(fù)正常。車身控制模塊上電偶發(fā)異常現(xiàn)象見(jiàn)表1。
表1 車身控制模塊上電偶發(fā)異?,F(xiàn)象
通過(guò)試驗(yàn)現(xiàn)場(chǎng)跟蹤問(wèn)題現(xiàn)象,發(fā)現(xiàn)問(wèn)題共性是:均出現(xiàn)在上電的時(shí)候,并且都是IO失控,且斷電后重啟均能恢復(fù)正常。
重點(diǎn)對(duì)硬件電路、應(yīng)用層軟件、MCU內(nèi)部IO寄存器機(jī)理進(jìn)行分析。外部IO口輸入檢測(cè)和驅(qū)動(dòng)電路如圖2所示,開(kāi)關(guān)量的輸入電路包括低輸入和高輸入開(kāi)關(guān)量信號(hào)采集電路。國(guó)產(chǎn)元器件無(wú)類似功能芯片,采用分立元件搭建采集電路來(lái)實(shí)現(xiàn)輸入信號(hào)采集,實(shí)現(xiàn)開(kāi)關(guān)量輸入的模塊化。
圖2 IO口輸入檢測(cè)和驅(qū)動(dòng)電路
1)對(duì)設(shè)計(jì)的硬件電路和PCB設(shè)計(jì)進(jìn)行分析,控制邏輯正確,設(shè)計(jì)合理,并且對(duì)上電波形進(jìn)行了測(cè)量,結(jié)果符合要求,未發(fā)現(xiàn)異常。
2)對(duì)應(yīng)用層軟件進(jìn)行分析,應(yīng)用層調(diào)用底層IO驅(qū)動(dòng)函數(shù)合理,且臺(tái)架試驗(yàn)一直未出現(xiàn)任何IO口失控的功能異常。
3)關(guān)于MCU內(nèi)部出現(xiàn)的IO寄存器異常,再次上電仍然可以正??刂?,說(shuō)明芯片本身沒(méi)有損壞,MCU內(nèi)部IO寄存器正常。然后對(duì)MCU驅(qū)動(dòng)能力進(jìn)行測(cè)試,根據(jù)某國(guó)產(chǎn)芯片MCU手冊(cè)要求,需按照表2進(jìn)行測(cè)試。
表2 某國(guó)產(chǎn)MCU IO口參數(shù)
基于當(dāng)前整車實(shí)際的應(yīng)用需求,分別在供電為3.3V,且電源電流IDD限流為100mA情況下,分別對(duì)IO配置為弱驅(qū)和強(qiáng)驅(qū)兩種模式下,同時(shí)驅(qū)動(dòng)1mA或2mA,測(cè)試能夠輸出正常電平的IO引腳數(shù)量。經(jīng)ATE測(cè)試機(jī)臺(tái)測(cè)試,測(cè)試結(jié)果如表3所示。根據(jù)測(cè)試結(jié)果表明IO本身的驅(qū)動(dòng)能力沒(méi)有問(wèn)題。當(dāng)前客戶用作輸出的IO為22個(gè),驅(qū)動(dòng)電流在1mA左右,完全能滿足客戶的應(yīng)用需求。
表3 某國(guó)產(chǎn)MCU IO口同時(shí)驅(qū)動(dòng)數(shù)量
由于故障現(xiàn)場(chǎng)出現(xiàn)時(shí)無(wú)法進(jìn)行Debug跟蹤調(diào)試(Debug調(diào)試導(dǎo)致MCU芯片復(fù)位,故障現(xiàn)象消失,無(wú)法跟蹤調(diào)試),為了定位問(wèn)題原因,增加調(diào)試代碼通過(guò)串口將輸入管腳IO寄存器值檢測(cè)的變量和軟件上設(shè)置輸出的變量以及輸出管腳實(shí)際的IO寄存器值打印出來(lái),以便觀察。如圖3所示。
圖3 打印IO狀態(tài)和寄存器值調(diào)試代碼
在上電遠(yuǎn)光燈開(kāi)關(guān)閉合,但是遠(yuǎn)光燈未亮,其它控制功能均正常的故障現(xiàn)象時(shí),通過(guò)調(diào)試打印信息,發(fā)現(xiàn)MCU檢測(cè)遠(yuǎn)光燈開(kāi)關(guān)(PE7)讀取到的電平隨著遠(yuǎn)光燈開(kāi)關(guān)開(kāi)啟和閉合高低變化,并且應(yīng)用軟件定義的變量也隨著高低變化,MCU的IO輸入檢測(cè)與實(shí)際情況相符合。同時(shí)根據(jù)遠(yuǎn)光燈開(kāi)關(guān)開(kāi)啟和閉合,設(shè)置PC9的IO口輸出來(lái)控制遠(yuǎn)光燈,進(jìn)一步讀取PC9的OUT寄存器,卻發(fā)現(xiàn)該bit位一直為低,從未變高。
圖4中定義變量就是檢測(cè)到的16個(gè)輸出管腳的狀態(tài)值,其中BIT11定義為遠(yuǎn)光燈控制輸出。從圖5打印信息中,可見(jiàn)EI 讀取的PE 管腳的PIN 寄存器,該值等于0XA894=1010100010010100,即PE7為高。根據(jù)遠(yuǎn)光燈控制策略,應(yīng)用軟件上設(shè)置PC9口OUT=0X0E82=111010000010,Print變量的BIT11bit位為高,即該位對(duì)應(yīng)的GPIO_outStatus[11]變量也為高,用該變量去設(shè)置PC9管腳輸出為高。但通過(guò)PC端口獲取的PC9口寄存器值C0=0x3001=001_10000_0000_0001,可見(jiàn)應(yīng)用軟件上設(shè)置PC9口為1后,PC9口寄存器值仍然為0,說(shuō)明IO口寄存器失控。在出現(xiàn)其它偶發(fā)故障時(shí),采取同樣的跟蹤調(diào)試方法,均發(fā)現(xiàn)無(wú)法控制IO口寄存器。
圖4 設(shè)置MCU PC9口輸出高電平
圖5 讀取MCU PE7和PC9口輸入輸出寄存器值
根據(jù)芯片設(shè)計(jì)原理,符合要求的電源電壓是芯片內(nèi)部各電路模塊正常工作的前提。芯片內(nèi)部通過(guò)電源網(wǎng)格為所有模塊提供電源,電源網(wǎng)格會(huì)導(dǎo)致壓降,因而芯片內(nèi)部各電路模塊所獲得電壓值各異。根據(jù)歐姆定律,電源網(wǎng)格所產(chǎn)生的壓降值取決于電源通路的線性阻值、流經(jīng)網(wǎng)格的電流值。如果電源網(wǎng)格所產(chǎn)生的壓降過(guò)大,相應(yīng)電路所獲得的電源就不足以提供芯片內(nèi)部晶體管正常工作所需的電平,那么該電路的邏輯功能將變得混亂和不受控,此時(shí)按正常的設(shè)計(jì)邏輯難以對(duì)其所呈現(xiàn)的實(shí)驗(yàn)現(xiàn)象進(jìn)行分析、研究。
在芯片設(shè)計(jì)階段,芯片廠商已經(jīng)對(duì)電源網(wǎng)格壓降進(jìn)行模擬仿真、驗(yàn)證,保證所有電路模塊能獲得足夠高的電壓,但是這種仿真驗(yàn)證是以系統(tǒng)頻率值、各種電路模塊工作狀況作為變量。不難想象,當(dāng)系統(tǒng)頻率固定時(shí),開(kāi)啟的電路模塊越多,則電源網(wǎng)格壓降也就越大。結(jié)合本次特種車輛應(yīng)用,MCU工作頻率要求為不低于60MHz(芯片廠商建議的穩(wěn)定工作頻率),在此應(yīng)用情況下,采取上電時(shí)減少開(kāi)啟MCU內(nèi)部電路模塊措施使芯片內(nèi)部各電路模塊功能穩(wěn)定。
上電時(shí)為減少開(kāi)啟MCU內(nèi)部電路模塊,需對(duì)上電時(shí)的時(shí)鐘初始化進(jìn)行排查,發(fā)現(xiàn)默認(rèn)初始化開(kāi)啟了大部分的外設(shè)時(shí)鐘,并且未使用的時(shí)鐘也被開(kāi)啟。同時(shí)開(kāi)啟較多的時(shí)鐘意味著MCU內(nèi)部開(kāi)啟的電路模塊越多。先將底層驅(qū)動(dòng)中默認(rèn)開(kāi)啟的許多時(shí)鐘,修改為上電時(shí)只打開(kāi)MCU基本運(yùn)行所需的SRAM、FLASH、AFIO這3個(gè)時(shí)鐘,再根據(jù)具體應(yīng)用需求打開(kāi)相關(guān)模塊的時(shí)鐘。圖6是新舊程序時(shí)鐘設(shè)置部分代碼對(duì)比,圖6a是原時(shí)鐘初始化程序,圖6b是新修改時(shí)鐘初始化程序。表4為新舊時(shí)鐘初始化程序?qū)Ρ缺?。新修改的程序,在持續(xù)一周的實(shí)車測(cè)試中,未出現(xiàn)任何IO口失控問(wèn)題。
表4 新舊時(shí)鐘初始化程序?qū)Ρ?/p>
圖6 新舊程序時(shí)鐘設(shè)置修改對(duì)比
為了進(jìn)一步驗(yàn)證新舊程序在時(shí)鐘初始化設(shè)置后MCU內(nèi)部工作電流的差異,在新舊程序的時(shí)鐘初始化配置后,后續(xù)不開(kāi)啟任何時(shí)鐘進(jìn)行電流測(cè)試。將程序下載到車身控制器電路板上查看電流消耗的差異,并且在電源上串聯(lián)5Ω的電阻,用于示波器測(cè)試該電阻上電瞬間的壓降,以計(jì)算上電時(shí)新舊程序的瞬時(shí)電流值。示波器中剛開(kāi)始很細(xì)的尖刺并不是MCU上電導(dǎo)致,因?yàn)樵跊](méi)有芯片的夾具測(cè)試板上也進(jìn)行了同樣的上電測(cè)試,同樣有該尖刺,因此MCU自己不存在上電會(huì)產(chǎn)生很高的瞬時(shí)電流的情況。從表5中可以看出新舊程序MCU上電時(shí)的電流差異在6mA,芯片無(wú)程序時(shí)工作的電流為42.3mA。
表5 新舊時(shí)鐘初始化程序MCU上電電流測(cè)試記錄
雖然從芯片外的電流消耗來(lái)看差異只有6mA,但芯片內(nèi)部通過(guò)電源網(wǎng)格為所有模塊提供電源,電源網(wǎng)格會(huì)導(dǎo)致壓降,因而芯片內(nèi)部各電路模塊所獲得電壓值各異且低于理論值。本項(xiàng)目采用的某國(guó)產(chǎn)107芯片所有IO口都被使用,且舊程序中107的外設(shè)模塊時(shí)鐘初始化時(shí),同時(shí)基本都已經(jīng)開(kāi)啟(特別是功耗大戶以太網(wǎng)模塊GMAC),且系統(tǒng)工作頻率為60MHz,此時(shí)芯片功耗較大。如果在某個(gè)上電瞬間,外圍連接器件對(duì)MCU電流的消耗增加,導(dǎo)致上電電流過(guò)大,從而造成芯片內(nèi)部某些電源網(wǎng)格壓降過(guò)大或者處于臨界狀態(tài),從而導(dǎo)致芯片內(nèi)部模塊邏輯控制失效,IO輸出端口輸出寄存器不可控。這驗(yàn)證了文章前面出現(xiàn)的MCU上電偶發(fā)IO口失控現(xiàn)象。
通過(guò)優(yōu)化后的時(shí)鐘配置,經(jīng)過(guò)臺(tái)架試驗(yàn)(圖7)和長(zhǎng)期的整車實(shí)驗(yàn),尤其是整車試驗(yàn)從2022 年6 月28 號(hào)至今,進(jìn)行的這一年多的試驗(yàn)驗(yàn)證,目前已經(jīng)通過(guò)了整車三高試驗(yàn)驗(yàn)證,未出現(xiàn)MCU上電偶發(fā)IO口失控現(xiàn)象,充分證明了措施實(shí)施后產(chǎn)品運(yùn)行的可靠性,解決了車輛領(lǐng)域在某型號(hào)項(xiàng)目上首次使用某國(guó)產(chǎn)MCU芯片的可靠性問(wèn)題。
圖7 臺(tái)架測(cè)試
在同時(shí)使用某國(guó)產(chǎn)MCU資源比較多的情況下,系統(tǒng)初始化時(shí),只需要打開(kāi)AFIO、SRAM、FLASH模塊的時(shí)鐘,依據(jù)應(yīng)用所需外設(shè)模塊,初始化時(shí)階梯式打開(kāi)相關(guān)的外設(shè)時(shí)鐘,并且不用的模塊時(shí)鐘保持關(guān)閉狀態(tài),以保證MCU上電時(shí)的正常運(yùn)行。本文對(duì)某國(guó)產(chǎn)MCU使用中可靠性問(wèn)題的分析與解決,為后續(xù)使用國(guó)產(chǎn)自主可控MCU奠定了堅(jiān)實(shí)可靠的基礎(chǔ)。只有完全真正做到自主可控,才能抵御外部環(huán)境變化帶來(lái)的風(fēng)險(xiǎn)。同時(shí)在促進(jìn)完全自主可控的國(guó)產(chǎn)化基礎(chǔ)軟硬件供應(yīng)鏈良性發(fā)展方面起帶頭示范作用。