博客專欄

        EEPW首頁 > 博客 > OTA與控制器

        OTA與控制器

        發布人:電巢 時間:2022-12-11 來源:工程師 發布文章

        隨著特斯拉將OTA的功能引入到汽車中,汽車行業發生了新的范式革命,智能汽車相比傳統汽車成為新物種的存在,OTA不僅是汽車不斷成長的“生命通道”,更是成為了車企新商業模式的“黃金通道”。然而,OTA仍然面臨諸多挑戰,這需要匯集行業的智慧共同面對。

        OTA到底對控制器做了什么?

        現如今整車OTA是一個非常熱門的話題,無論是新勢力還是傳統主機廠都極力宣傳自己的OTA能力,但在cao sir看來,目前市面上所有的OTA都是不夠徹底的OTA,cao sir稱之為半OTA!

        當廠家說OTA時他在說什么?

        OTA:空中升級(ON THE AIR)是通過無線通訊網絡,實現對汽車控制器MCU里的軟件進行更新。

        這里面有一個許多人搞混淆的問題,OTA更新MCU哪一部分的軟件?

        要想回答這個問題需要我們首先得知道汽車控制器是什么!

        汽車控制器本質上就是一個嵌入式系統的單片機MCU,可以完整實現特定的功能!

        嵌入式單片機MCU的最大特點是,它的硬件結構會根據實現功能的差異而進行裁剪。(劃重點,此處很重要,后面要用到)

        與強大的個人計算機(PC)不同的是,結構簡單功能單一的控制器單片機的內部軟件代碼有兩大類,一部分是操作系統、用戶數據、標定數據等代碼,統稱為應用程序(APP),另一部分則是運行引導程序(Bootloader)。

        Bootloader是一段獨立的代碼(這段Boot代碼一般是出廠預置,或使用編程器燒錄的,通常只有1k或4k,通常是占用一塊獨立的Block,當系統上電之后,Bootloader可以進行:關閉WATCHDOG、改變系統時鐘、初始化存儲控制器、將更多的代碼復制到內存中等一系列初始化動作,然后再將操作系統內核制到內存中運行。簡單地說,Bootloader就是這么一小段程序,它在系統上電時開始執行,初始化硬件設備、準備好軟件環境,最后調用操作系統內核進入工作。與之對應的是PC中的BIOS。

        由于Bootloader保存在Flash的首地址,MCU上電后,默認從Flash開始的第一個讀取棧指針,第二個字就是復位中斷的入口,并根據該指針進度復位處理函數中執行相應的函數,由于中斷向量表1尋找復位中斷處理函數指向Bootloader,所以必然首先進入Bootloader程序中中執行,進行初始化設置,然后再進入下一個中斷向量表2中執行APP程序的復位中斷處理函數。

        Bootloader和APP應用程序在嵌入式存儲器中的位置如下:

        image.png


        由于我們所有的操作系統和用戶數據都放在APP程序中,通過更改這部分數據可以優化控制器的使用體驗,所以許多汽車廠家所謂對MCU進行固件更新(FOTA)實際上就是對MCU內存中的APP存儲區域進行刷寫。

        如何進行刷寫?

        刷寫(在線編程)目前有兩種實現方法:在系統編程(ISP)和在應用編程(IAP)。ISP一般是通過單片機專用的串行編程接口對單片機內部的Flash存儲器進行編程,而IAP技術是從結構上將Flash存儲器映射為兩個存儲體,當運行一個存儲體上的用戶程序時,可對另一個存儲體重新編程,之后將控制從一個存儲體轉向另一個。ISP和IAP很相似,都是不需要把芯片從板子上拔出來,就達到了用PC-MCU的編程接口(JTAG、串口、雙絞線、SPI等)搞定新版本的升級的目的,但是他倆又有著很大的不同。

        IAP技術從結構上將Flash存儲器中APP程序運行區映射為兩個存儲體,當運行一個存儲體上的用戶程序時,可對另一個存儲體重新編程,之后將控制從一個存儲體轉向另一個。支持在應用編程(IAP)的芯片會將內存分3個程序區:1、引導程序區Bootloader,2、APP程序運行區,3、下載區。芯片通過串口接收到下載命令,進入引導區運行引導程序,在引導程序下將new code內容下載到下載區,下載完畢并校驗通過后,Bootloader控制擦除原程序并將下載區內容復制到2區,運行復位程序,則IAP完成。

        IAP刷寫的好處是,在不改變引導程序區的前提下,對APP程序運行區進行編程,從而優化應用層的軟件的體驗。

        image.png


        為了方便實現IAP刷寫,ISO發布了統一診斷標準UDS(ISO14229),用于診斷儀(客戶端)和MCU(服務器)之間的會話控制、安全訪問、例程控制、DTC讀取,MCU軟件刷寫(軟件下載)等服務.

        其中在編程會話模式下(Programming Session),先通過$31 01 FF 00指令將Flash中的APP數據擦除,再通過$34+$36服務指令可將軟件數據寫入到單片機的RAM中,再通過$31 01 02服務指令對內存進行確認,最后重新啟動MCU就完成了刷寫。

        需要指出的是在數據傳輸層面,根據傳輸協議的不同分為基于控制局域網的診斷DoCAN(ISO15765)或者基于以太網的診斷DoIP(ISO13400)。

        image.png


        目前車輛的OTA的大致流程是:

        首先云端服務器TSP通過無線通訊協議(DDS/MQTT)將要刷新的軟件發送給車輛網聯模塊T-BOX;

        然后車輛網聯模塊T-BOX通過CAN或者Ehernet傳輸協議發給車輛網關GATEWAY;

        第三步將車輛網關GATEWAY作為上位機,通過UDS診斷服務對MCU進行IAP刷寫;

        最后一步,刷寫完成后,重新啟動,MCU運行新的APP軟件。

        image.png


        而ISP一般是通過單片機專用的串行編程接口直接對單片機內部的Flash存儲器進行編程。也就是將PC編譯完成的MCU可運行的二進制代碼文件通過尋址直接編程入MCU內相應的程序存儲器中。ISP刷寫不僅可以對APP程序進行在線編程,還可以對引導程序區Bootloader進行在線編程。

        image.png


        ISP刷寫的硬線連接框圖

        由于不同MCU的Bootloader支持的刷寫方式以及MCU支持的通訊協議不同,導致ISP刷寫工具千花百樣。比如飛思卡爾嵌入式單片機常用P&E的Multilink刷寫工具,一端通過USB串口與上位機連接,一端通過SWD串口與單片機通訊,進入BDM模式刷寫。

        image.png


        P&G Mutilink刷寫工具

        OTA的短板是無法對控制器的Bootloader進行刷寫

        還記得前面說過的一句話么:嵌入式單片機的最大特點是,它的硬件結構會根據實現功能的差異而進行裁剪。

        Bootloader的實現嚴重依賴于具體硬件,在嵌入式系統中硬件配置千差萬別,即使是相同的CPU,它的外設(比如Flash)也可能不同,所以不可能有一個Bootloader支持所有的CPU、所有的電路板。即使是支持CPU架構比較多的U-Boot,也不是一拿來就可以使用的(除非里面的配置剛好與你的板子相同),需要進行一些移植。

        目前整車上的控制器是由不同的供應商來提供,每個供應商都會根據自己控制器的功能特點,選擇最合適的嵌入式系統硬件。在產品的開發階段,工程師使用專用燒錄工具對MCU的程序進行燒錄;然而到了產品的生產階段或者售后階段,進行應用程序燒錄或升級操作的往往是生產線上的工人,他們不易掌握程序燒錄器的使用方法,貿然對Bootloader刷寫可能會造成MCU程序崩潰(變磚頭),因此在控制器開發完成以后,往往會把控制器的JTAG調試口封住以防軟件被窺視。

        在OTA中,由于每個控制器的Bootloader不同,上位機(一般是網關)是不支持對所有控制器的Bootloader進行刷新的,只能基于CAN或者Ethernet通訊,使用UDS協議對MCU中的APP軟件進行刷寫。

        image.png


        例如在Bootloader程序中,要求在編程模式下支持UDS的$14清除故障碼的服務,就必須修改Bootloader程序,通過OTA就無法實現此功能。

        未來,隨著域控制器或者中央控制器的發展,汽車控制器數量會減少,硬件配置則向個人電腦PC看齊,如果整車MCU能像PC那樣使用一套標準的配置主板,那么通過OTA對Bootloader進行刷寫有望成為現實!


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: OTA 控制器

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 无棣县| 库车县| 温宿县| 咸宁市| 儋州市| 精河县| 修水县| 新疆| 嘉鱼县| 大邑县| 社会| 和田县| 彰化市| 独山县| 郧西县| 永新县| 成安县| 松桃| 陇川县| 修武县| 沈丘县| 渑池县| 太保市| 吉安市| 元谋县| 大安市| 昭通市| 壶关县| 日照市| 饶阳县| 德兴市| 防城港市| 高淳县| 来凤县| 封丘县| 佛冈县| 百色市| 武鸣县| 垦利县| 宿迁市| 双牌县|