隨著特斯拉將OTA的功能引入到汽車中,汽車行業(yè)發(fā)生了新的范式革命,智能汽車相比傳統(tǒng)汽車成為新物種的存在,OTA不僅是汽車不斷成長(zhǎng)的“生命通道”,更是成為了車企新商業(yè)模式的“黃金通道”。
OTA到底對(duì)控制器做了什么?
現(xiàn)如今整車OTA是一個(gè)非常熱門的話題,無論是新勢(shì)力還是傳統(tǒng)主機(jī)廠都極力宣傳自己的OTA能力,但目前市面上所有的OTA都是不夠徹底的OTA,我們稱之為半OTA。
當(dāng)廠家說OTA時(shí),他在說什么?
OTA:空中升級(jí)(ON THE AIR)是通過無線通訊網(wǎng)絡(luò),實(shí)現(xiàn)對(duì)汽車控制器MCU里的軟件進(jìn)行更新。
這里面有一個(gè)許多人搞混淆的問題,OTA更新MCU哪一部分的軟件?要想回答這個(gè)問題需要我們首先得知道汽車控制器是什么?
汽車控制器本質(zhì)上就是一個(gè)嵌入式系統(tǒng)的單片機(jī)MCU,可以完整實(shí)現(xiàn)特定的功能。
嵌入式單片機(jī)MCU的最大特點(diǎn)是,它的硬件結(jié)構(gòu)會(huì)根據(jù)實(shí)現(xiàn)功能的差異而進(jìn)行裁剪。
與強(qiáng)大的個(gè)人計(jì)算機(jī)(PC)不同的是,結(jié)構(gòu)簡(jiǎn)單功能單一的控制器單片機(jī)的內(nèi)部軟件代碼有兩大類,一部分是操作系統(tǒng)、用戶數(shù)據(jù)、標(biāo)定數(shù)據(jù)等代碼,統(tǒng)稱為應(yīng)用程序(App),另一部分則是運(yùn)行引導(dǎo)程序(Bootloader)。
Bootloader是一段獨(dú)立的代碼(這段Boot代碼一般是出廠預(yù)置,或使用編程器燒錄的,通常只有1k或4k,占用一塊獨(dú)立的Block,當(dāng)系統(tǒng)上電之后,Bootloader可以進(jìn)行關(guān)閉WATCHDOG、改變系統(tǒng)時(shí)鐘、初始化存儲(chǔ)控制器、將更多的代碼復(fù)制到內(nèi)存中等一系列初始化動(dòng)作,然后再將操作系統(tǒng)內(nèi)核復(fù)制到內(nèi)存中運(yùn)行。
簡(jiǎn)單地說,Bootloader就是一小段程序,它在系統(tǒng)上電時(shí)開始執(zhí)行,初始化硬件設(shè)備、準(zhǔn)備好軟件環(huán)境,最后調(diào)用操作系統(tǒng)內(nèi)核進(jìn)入工作。與之對(duì)應(yīng)的是PC中的BIOS。
由于Bootloader保存在Flash的首地址,MCU上電后,默認(rèn)從Flash開始的第一個(gè)讀取棧指針,第二個(gè)字就是復(fù)位中斷的入口,并根據(jù)該指針進(jìn)度復(fù)位處理函數(shù)中執(zhí)行相應(yīng)的函數(shù),由于中斷向量表1尋找復(fù)位中斷處理函數(shù)指向Bootloader,所以必然首先進(jìn)入Bootloader程序中執(zhí)行,進(jìn)行初始化設(shè)置,然后再進(jìn)入下一個(gè)中斷向量表2中執(zhí)行APP程序的復(fù)位中斷處理函數(shù)。
Bootloader和APP應(yīng)用程序在嵌入式存儲(chǔ)器中的位置如下:
由于我們所有的操作系統(tǒng)和用戶數(shù)據(jù)都放在APP程序中,通過更改這部分?jǐn)?shù)據(jù)可以優(yōu)化控制器的使用體驗(yàn),所以許多汽車廠家所謂對(duì)MCU進(jìn)行固件更新(FOTA)實(shí)際上就是對(duì)MCU內(nèi)存中的APP存儲(chǔ)區(qū)域進(jìn)行刷寫。
如何對(duì)存儲(chǔ)區(qū)進(jìn)行刷寫?
刷寫(在線編程)目前有兩種實(shí)現(xiàn)方法:在系統(tǒng)編程(ISP)和在應(yīng)用編程(IAP)。
ISP一般是通過單片機(jī)專用的串行編程接口對(duì)單片機(jī)內(nèi)部的Flash存儲(chǔ)器進(jìn)行編程,而IAP技術(shù)是從結(jié)構(gòu)上將Flash存儲(chǔ)器映射為兩個(gè)存儲(chǔ)體,當(dāng)運(yùn)行一個(gè)存儲(chǔ)體上的用戶程序時(shí),可對(duì)另一個(gè)存儲(chǔ)體重新編程,之后將控制從一個(gè)存儲(chǔ)體轉(zhuǎn)向另一個(gè)。ISP和IAP很相似,都是不需要把芯片從板子上拔出來,就達(dá)到了用PC-MCU的編程接口(JTAG、串口、雙絞線、SPI等)搞定新版本的升級(jí)目的,但是又有著很大不同。
IAP技術(shù)從結(jié)構(gòu)上將Flash存儲(chǔ)器中APP程序運(yùn)行區(qū)映射為兩個(gè)存儲(chǔ)體,當(dāng)運(yùn)行一個(gè)存儲(chǔ)體上的用戶程序時(shí),可對(duì)另一個(gè)存儲(chǔ)體重新編程,之后將控制從一個(gè)存儲(chǔ)體轉(zhuǎn)向另一個(gè)。支持在應(yīng)用編程(IAP)的芯片會(huì)將內(nèi)存分3個(gè)程序區(qū):1、引導(dǎo)程序區(qū)Bootloader,2、APP程序運(yùn)行區(qū),3、下載區(qū)。芯片通過串口接收到下載命令,進(jìn)入引導(dǎo)區(qū)運(yùn)行引導(dǎo)程序,在引導(dǎo)程序下將new code內(nèi)容下載到下載區(qū),下載完畢并校驗(yàn)通過后,Bootloader控制擦除原程序并將下載區(qū)內(nèi)容復(fù)制到2區(qū),運(yùn)行復(fù)位程序,則IAP完成。
IAP優(yōu)勢(shì):在不改變引導(dǎo)程序區(qū)的前提下,對(duì)APP程序運(yùn)行區(qū)進(jìn)行編程,從而優(yōu)化應(yīng)用層的軟件體驗(yàn)。
為了方便實(shí)現(xiàn)IAP刷寫,ISO發(fā)布了統(tǒng)一診斷標(biāo)準(zhǔn)UDS(ISO14229),用于診斷儀(客戶端)和MCU(服務(wù)器)之間的會(huì)話控制、安全訪問、例程控制、DTC讀取,MCU軟件刷寫(軟件下載)等服務(wù)。
其中在編程會(huì)話模式下(Programming Session),先通過$31 01 FF 00指令將Flash中的APP數(shù)據(jù)擦除,再通過$34+$36服務(wù)指令可將軟件數(shù)據(jù)寫入到單片機(jī)的RAM中,再通過$31 01 02服務(wù)指令對(duì)內(nèi)存進(jìn)行確認(rèn),最后重新啟動(dòng)MCU就完成了刷寫。
需要指出的是在數(shù)據(jù)傳輸層面,根據(jù)傳輸協(xié)議的不同分為基于控制局域網(wǎng)的診斷DoCAN(ISO15765)或者基于以太網(wǎng)的診斷DoIP(ISO13400)。
目前車輛的OTA的大致流程是:
1、云端服務(wù)器TSP通過無線通訊協(xié)議(DDS/MQTT)將要刷新的軟件發(fā)送給車輛網(wǎng)聯(lián)模塊T-BOX;
2、車輛網(wǎng)聯(lián)模塊T-BOX通過CAN或者Ehernet傳輸協(xié)議發(fā)給車輛網(wǎng)關(guān)GATEWAY;
3、將車輛網(wǎng)關(guān)GATEWAY作為上位機(jī),通過UDS診斷服務(wù)對(duì)MCU進(jìn)行IAP刷寫;
4、刷寫完成后,重新啟動(dòng),MCU運(yùn)行新的APP軟件。
而ISP一般是通過單片機(jī)專用的串行編程接口直接對(duì)單片機(jī)內(nèi)部的Flash存儲(chǔ)器進(jìn)行編程。也就是將PC編譯完成的MCU可運(yùn)行的二進(jìn)制代碼文件通過尋址直接編程入MCU內(nèi)相應(yīng)的程序存儲(chǔ)器中。ISP刷寫不僅可以對(duì)APP程序進(jìn)行在線編程,還可以對(duì)引導(dǎo)程序區(qū)Bootloader進(jìn)行在線編程。
ISP刷寫的硬線連接框圖
由于不同MCU的Bootloader支持的刷寫方式以及MCU支持的通訊協(xié)議不同,導(dǎo)致ISP刷寫工具千花百樣。比如飛思卡爾嵌入式單片機(jī)常用P&E的Multilink刷寫工具,一端通過USB串口與上位機(jī)連接,一端通過SWD串口與單片機(jī)通訊,進(jìn)入BDM模式刷寫。
P&G Mutilink刷寫工具
OTA的短板是無法對(duì)控制器的Bootloader進(jìn)行刷寫
嵌入式單片機(jī)的最大特點(diǎn)是,它的硬件結(jié)構(gòu)會(huì)根據(jù)實(shí)現(xiàn)功能的差異而進(jìn)行裁剪。
Bootloader的實(shí)現(xiàn)嚴(yán)重依賴于具體硬件,在嵌入式系統(tǒng)中硬件配置千差萬別,即使是相同的CPU,它的外設(shè)(比如Flash)也可能不同,所以不可能有一個(gè)Bootloader支持所有的CPU、所有的電路板。即使是支持CPU架構(gòu)比較多的U-Boot,也不是直接可以使用的,需要進(jìn)行移植。
目前整車上的控制器是由不同的供應(yīng)商來提供,每個(gè)供應(yīng)商都會(huì)根據(jù)自己控制器的功能特點(diǎn),選擇最合適的嵌入式系統(tǒng)硬件。在產(chǎn)品的開發(fā)階段,工程師使用專用燒錄工具對(duì)MCU的程序進(jìn)行燒錄;然而到了產(chǎn)品的生產(chǎn)階段或者售后階段,進(jìn)行應(yīng)用程序燒錄或升級(jí)操作的往往是生產(chǎn)線上的工人,他們不易掌握程序燒錄器的使用方法,貿(mào)然對(duì)Bootloader刷寫可能會(huì)造成MCU程序崩潰。因此,在控制器開發(fā)完成以后,往往會(huì)把控制器的JTAG調(diào)試口封住以防軟件被窺視。
在OTA中,由于每個(gè)控制器的Bootloader不同,上位機(jī)(一般是網(wǎng)關(guān))是不支持對(duì)所有控制器的Bootloader進(jìn)行刷新的,只能基于CAN或者Ethernet通訊,使用UDS協(xié)議對(duì)MCU中的APP軟件進(jìn)行刷寫。
例如在Bootloader程序中,要求在編程模式下支持UDS的$14清除故障碼的服務(wù),就必須修改Bootloader程序,通過OTA就無法實(shí)現(xiàn)此功能。
未來,隨著域控制器或者中央控制器的發(fā)展,汽車控制器數(shù)量會(huì)減少,硬件配置則向個(gè)人電腦PC看齊,如果整車MCU能像PC那樣使用一套標(biāo)準(zhǔn)的配置主板,那么通過OTA對(duì)Bootloader進(jìn)行刷寫有望成為現(xiàn)實(shí)!