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