電子電器架構刷寫方案——General Flash Bootloader

電子電器架構刷寫方案——General Flash Bootloader

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。

注:文章1萬字左右,深度思考者入!!!

老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師:

屏蔽力是信息過載時代一個人的特殊競爭力,任何消耗你的人和事,多看一眼都是你的不對。非必要不費力證明自己,無利益不試圖說服別人,是精神上的節能減排。
無人問津也好,技不如人也罷,你都要試著安靜下來,去做自己該做的事.而不是讓內心的煩躁、焦慮、毀掉你本就不多的熱情和定力。

文章大體有如下內容:

1、簡介

2、刷寫系統概述

3、Flash Bootloader刷寫流程

4、Flash Bootloader架構介紹

5、關于刷寫的思考

正文如下:

一、Bootloader簡介

首先基于現在整車電子電氣架構中ECU類型,大體分為兩類:

MCU(常規MCU)具備硬實時,應用Classic AUTOSAR軟件架構;

MPU,具備操作系統,應用上多使用Adaptive AUTOSAR軟件架構或者自研;

那相應對于Bootloader介紹也分為:

1、MCU Bootloader是微控制器(MCU)中的引導程序,它的設計旨在解決程序升級問題,尤其是在產品穩定投產、程序燒錄后,MCU被外殼等材料覆蓋,無法通過燒錄口進行升級的情況下。Bootloader可以通過一定方式觸發運行,比如按鍵觸發或UDS協議指令(在汽車行業中)觸發。一旦Bootloader運行,它可以通過串口接收新的代碼并寫入Flash,從而在不使用燒錄器的情況下實現程序升級。

2、Bootloader,中文名稱為系統啟動加載器,是計算機系統從開機上電到操作系統啟動過程中所需要的一個引導程序。在嵌入式Linux系統中,Bootloader也扮演著重要的角色。它是一段在操作系統內核運行之前運行的程序,主要負責初始化硬件設備、建立內存空間映射圖,將系統的軟硬件環境帶到一個合適狀態,以便為最終調用操作系統內核準備好正確的環境。

Bootloader的具體作用如下:

-> 1、提供初始的硬件設備的初始代碼,以及檢測和初始化單板;

-> 2、引導操作系統,包括定位、解壓和加載操作系統到內存空間,然后將其控制權交給操作系統;

-> 3、當操作系統獲取控制權后,嵌入式系統中的Bootloader就不復存在了。

此外,U-Boot是一款流行的功能強大的開源Bootloader項目。它支持多種嵌入式操作系統內核,如Linux、NetBSD、VxWorks等,也支持多種處理器系列,如PowerPC、ARM、x86、MIPS。U-Boot有較高的可靠性和穩定性,以及高度的靈活的功能設置,適合U-Boot調試、操作系統的不同引導要求、產品發布等。它還包含豐富的設備驅動源碼和較為豐富的開發調試文檔與強大的網絡技術支持。

首先關于ECU刷寫的軟件架構Flash Bootloader并沒有在AUTOSAR規范中有明確定義。原因是每家刷寫策略基于自身需求不一致,沒有必要在AUTOSAR規范中特定定義函數接口等信息。

基于整車不同域,使用場景不一樣,就會有不同的總線類型。因此在做ECU刷寫時,也是通過不同的總線類型CAN,LNFlexRay or Ethernet)來完成軟件的下載更新。

整車所有件基于相同的刷寫流程,只是數據傳輸的總線載體不一樣而已。

在研發階段,可以隨時進行應用程序(Application)的更新和下載可以隨時為研發工程師隨時進行下載調試更新等功能在車輛下線階段,進行應用程序的刷寫和灌注:在車輛售后階段進行售后維護和升級

目前對于ECU更新方式:

1、刷寫上位機通過OBD口,相當于傳統的Flash更新方式進行更新;

2、另外是通過OTA,基于OTAMaster 對車內節點進行更新;

image

上述刷寫方式不需要通過更換硬件ECU來完成軟件的更新,對于軟件bug或者功能升級,在硬件不需要更新的情況下,可以直接通過更新Application功能實現功能升級對于量產的ECU產品,可以不通過傳統的調試接口UTAGDAP2)來完成Fash 的刷寫這個時候調試口已經關閉,通過OBD口升級提供一種更好的方案對于車內的ECU來講,通過一套協議(UDS)即可完成全部ECU的刷寫需求在一定程度上,保證了刷寫過程中的安全性和合法性。

image

通過上位機加載待刷寫的Flash Data/Driver,不用通過燒錄口就可以進行software update,對用戶而言更加友好。

二、系統概述

診斷儀通過OBD診斷口和網關ECU進行連接,實現診斷刷寫和路由功能:每個ECU的內存布局都是基本類似,包含了三大部分 Flash Bootloader.Flash Driver 和Application.

image

Flash Bootloader實現總線通信基于ISO標準和OEM企標,實現診斷服務功能Application調用Flash Driver 接口來對Fash進行擦寫操作一般情況下,代碼僅在輪詢模式下運行的中斷僅在一些特殊需求下才會用到,一般代碼精簡短小,占用空間資源不大.

image

用于擦除和寫入數據的Driver,通常是在RAM中執行調用的,是片內片外的驅動程序可對Hash 進行擦除和寫入,可將數據寫入Flash中。

-> 通過驅動調用擦除接口,可以對內存地址進行擦除,將地址上舊數據進行擦掉;

-> 在數據寫入階段可以調用驅動的寫入接口,實現對新數據在擦除后的地址進行寫入操作,不同的芯片廠家和硬件平臺,flash driver 是有所不同的。

根據 Flash 芯片不同,不同點主要體現如下兩點:

1、不同的擦寫參數(Sectors/Pages): 擦除和寫入的Sector 和page 大小不一樣2、存儲保護機制(ECC);

對于第一點(擦寫參數(Sectors/Pages)是指在擦除或重寫存儲設備中的數據時所使用的單位。不同的存儲設備可能有不同的擦寫參數,這些參數可能會影響擦寫性能和壽命。

在閃存設備中,擦寫參數通常是以扇區(Sector)或頁(Page)為單位進行操作的。扇區通常是一個存儲單元,可以容納一定數量的數據,而頁是閃存設備中一個最小的可擦除單位。

對于不同的閃存設備,擦寫參數可能會有所不同。例如,一些設備可能有 2KB的頁大小,而另一些設備可能有 4KB 或 8KB 的頁大小。此外,一些設備可能支持不同的擦寫策略,例如一次擦寫一個扇區或一次擦寫多個扇區。

這些不同的擦寫參數可能會影響閃存設備的性能和壽命。例如,如果一個設備的頁大小較小,那么在執行寫入操作時,可能會需要進行更多的讀-改-寫操作,這可能會導致性能下降。此外,如果一個設備的擦寫策略過于頻繁地擦除同一區域的數據,那么這個區域的壽命可能會比其他區域更短。因此,選擇正確的擦寫參數對于優化閃存設備的性能和壽命非常重要。這需要根據具體的應用需求和設備特性進行選擇。

對于第二點:(存儲保護機制(ECC)是一種用于Nand Flash 的差錯檢測和修正算法,它能夠確保數據的可靠性。

在Nand Flash的每個頁面上,包括額外的存儲空間,即64個字節的空閑區(每512 字節的扇區有 16 字節)。這個空閑區能存儲 ECC 代碼及其它信息,例如磨損評級或邏輯到物理塊映射。在編程操作期間,ECC單元根據扇區中存儲的數據來計算誤碼校正代碼。數據區的ECC代碼然后被分別寫入到各自的空閑區。當數據被讀出時,ECC代碼也被讀出,運用反操作可以核查讀出的數據是否正確

image

如果有數據錯誤,ECC 算法可以校正數據錯誤。能校正的錯誤的數量取決于所用算法的校正強度。軟件通常負責磨損評級或邏輯到物理映射,并且如果處理器不包含ECC 硬件的話,軟件還需要提供 ECC 碼。

芯片內部對數flash driver存放位置:

-> 1、UTSAR轉化為加密的二進制數組文件并對文件進行加密存儲在FIashBootloader 中的指定Flash 區域,調用前先解密目的是防止flash誤操作,誤調用,比如用戶程序(Application 調用flashdriver 接口,對某-塊區域進行調用擦寫),添加加密策略,就保證了只有 Bootloader 具備解密能力,才可以調用Flash driver;

-> 2、刷寫Application之前通過診斷儀載入到 RAM中上述操作是先通過診斷儀將 flash driver 下載到指定的區域(RAM 區域),下載完成后Bootloader 才可以調用相應的接口實現對內存的擦除和寫入。ECU 復位或者斷電后 flashdriver就不再存在,避免安全問題。

image

三、Flash Bootloader刷寫流程

本文僅描述通用性刷寫流程,不同OEM或多或少有一定的差異如上圖,當前假設只有FBL程序,沒有Application(用戶程序)。ECU上電后運行在Bootloader當中,Tester 通過相應的接口卡

舉例常用的:

CAN總線用VN16 系列;

DoIP用VN56系列。

image

這樣刷寫上位機與待刷寫 ECU 建立連接,通過UDS 協議刷寫上位機與 ECU 進行相應的數據交互,主要讀取一些所需要的診斷版本信息數據。接下來就是將用戶程序數據通過刷寫上位機傳到ECU相應的地址處進行刷寫。數據傳輸并寫入完畢,Bootloader 會對數據進行校驗,其中包含對單獨每一個 block 以及整體的數據進行校驗上述完畢后,對App有效標志位進行操作置位,后續復位。復位操作首先在FBL中查閱應用數據flag 位是否置位,判斷有效后就會跳到用戶程序中在Application中運行正常。后續有新的刷寫請求,會繼續運行至FBL中。對于刷寫流程大體分為三步:

image

A:Pre programming

首先切換至編程會話模式,進行Programming Pre-condition狀態檢查(車速、擋位等);

關閉DTC功能

對常規通信報文進行設置,只接收診斷報文

目的是讓ECU全負荷為刷寫服務。

image

切換至編程會話模式寫入一些DID和讀取DID操作這些操作與OEM企業標準強相關。在定義刷寫流程中明確每一步執行的內容和目的。信息安全要求過Service27,表示通過爭取途徑獲取訪問權限。

image

1、Request Service 34報文格式中會體現下載數據長度、是否壓縮等信息;、

image

2、通過Service36/37完成數據的整體傳輸3、數據傳輸完成后,會執行 Service 31,對下載數據做完整性校驗,數據丟失、錯位等失真情況。

image

Flash Driver后會通過Service 31RID(猜出FF00)調用對內存擦除的接口實現對ECU內存的擦除操作。想要寫入新的數據之前,必須對數據做擦除操作后才可以進行寫入。

image

image

如上圖,Vector 中國關于Fash Bootloader 產品手冊的截圖關于 Flash Bootloader 工程主要分為幾大部分:

1、通信協議棧主要用于實現不同總線的通信需求,如圖支持車載CAN 總線/LIN 總線/Flexray總線/車載以太網

2、OEM Download Manager主要是基于OEM企標要求做代碼功能實現:A:OEM 定義的刷寫流程(在 Bootloader 模式下)所使用到的診斷服務、子服務所支持的DID/RID/NRC信息都在這個模塊做功能實現;

3、Fash bootloader 用戶程序讀取一些軟件版本號、NVM存儲應用,小模塊上述流程也完全符合AUTOSAR開發流程。包含CAN、LIN早期協議棧是GENY做配置,現在是用Dawinciconfigurator定義pdur、CANdRIVER。當前 Bootloader 中也包含了一些非AUTOSAR定義的內容,這個時候需要由 Bootloader軟件服務商自己OEM特定需求做定制化開發。也就是日常所說的購買成熟協議棧使用。

4、Bootmanager為芯片一級boot,是ECU 上電后第一個執行的代碼,由該模塊負責ECU該往那個代碼模塊跳比如進入 Bootloader還是Application(常見刷寫成功后置位Flash位作為下次啟動的判定標準)當需要對FlashBootloader做更新時,就需要由Bootloader Updater 來實現,其實這個邏輯也可以對照SBL/PBL,當有Super SBL時,也可以允許對PBL做擦除。

5、為了完成刷寫功能,用于UI界面加載Flash Driver/Flash Data,也執行刷寫template定義刷洗序列。

image

FBL和Application之間的跳轉ECU上電后,代碼運行會進入到FBL中,做相應的一些ECU初始化,初始化完成后會進入判斷刷寫標志位的一個步驟。若刷寫標志位有效,進入到Boot 中,若標志位無效,進入App 中。FBL跳轉至ApplicationFBL初始化

A:檢查刷寫標志位

B:檢查Application的有效標志位

C:跳轉至Application的入口

D:執行Application的啟動代碼

image

Application跳轉至FBL

Application 運行中接收到診斷儀發出的診斷刷寫請求

Application 將刷寫請求標志位存入NVM 或者RAM中

Application 執行復位操作

FBL檢查診斷刷寫標志位

image

另外關于Stay In Boot功能:

在Application無法接收和處理診斷請求時,避免ECU無法進行刷寫更新并不是所有的OEM都會用到,通常情況下,用于研發階段,量產中可能也會用(影響啟動時間)。該功能應用場景是在某一次更新當中把新的APP更新到ECU中。此時APPdata沒有經過很充分的認證導致APP 軟件中有 bug,比如有死循環 (While)。每一次ECU 上電,先進入boot,在進入app,死循環無法與診斷儀(刷寫上位機)做診斷數據交互,發送請求也沒有響應。

這個時候通過其他方式來規避這個風險,vFlash也支持,對ECU啟動時間有影響。

image

當收到Stay in boot message進入Stay in boot狀態,避免ECU編程板磚。

image

image

image

關于ECU安全啟動

對于Flash Data會存在片內或片外,會有可能被不法分子做篡改的風險。

通過安全啟動獲知該ECU 是否App data 是否被篡改、是否無效等,保證車輛安全ECU一上電,通過HSM,HSM 可以理解位信息安全的加密引擎,對FBL做源碼校驗,通過特定算法和 key 計算出一個 MAC 值(消息認證碼)。這個消息認證碼與原本存在芯片中的消息認證碼進行比較:

若一樣,FBL valid。不一樣:FBL被算改了!

同樣策略也可以對APP做mac檢驗,開啟ECU時計算一個MAC值對比ECU內部存儲的就可以確認APP是否有效安全啟動每一家芯片供應商都有自己的做法

HSM(硬件安全模塊)對于實現AUTOSAR系統的加密保護起著重要作用。隨著汽車電子控制單元(ECU)連通度的提高,安全和防范外部威脅的重要性日益增加。HSM具有適當的固件,即使在資源不足的情況下,也能保證系統的加密。此外,HSM還允許在單獨的處理器上計算密碼,以滿足實時需求。因此,HSM在AUTOSAR系統中發揮著關鍵作用,確保了系統的安全性和實時性能。

image

為了傳輸數據增加速度,會在刷寫過程中支持壓縮數據傳輸。這點功能的本質是降低數據傳輸時間,在Server端會有還原步驟,整體刷寫時間增加還是降低主要看還原時間。

image

數據傳輸步驟如下圖:

image

原則上對于Flash Bootloader只能在供應商下線時候做燒錄下載后便不再更新,但是極少特殊情況也是可以對Flash Bootloadr進行更新。

image

更新步驟如下:

image

擱筆分享完畢!

愿你我相信時間的力量

做一個長期主義者!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538634.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538634.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538634.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python心理學實驗程序_心理學實驗程序編程(python)

任務一:實現簡單的屏幕的顏色之間的切換 importpygamefrom pygame.locals import *pygame.init() win pygame.display.set_mode((800,600),DOUBLEBUF|HWSURFACE)for i in range(10): win.fill((0,255,0))if i%20: win.fill((255,0,0)) pygame.time.wait(500) pygame…

Java并發-ThreadLocal

原文地址:cmsblogs.com/?p2442 ThreadLocal介紹 ThreadLocal提供了一種解決多線程環境下成員變量的問題,但是它并不是解決多線程共享變量的問題。那么ThreadLocal到底是什么呢? API是這樣介紹的:This class provides thread-loca…

vue 監聽map數組變化_解決vue無法偵聽數組及對象屬性的變化問題

一、數組1、可以監聽到的情況如push、splice、賦值(array[1,2,3])2、無法監聽到的情況使用下標修改某個元素(這種比較常見)array[index] 1object.a 3直接修改數組lengtharray.length 53、解決方案this.$set(array, index, data) - 這是個深度的修改,某些情況下可…

哈維瑪德學院 計算機,這些美國大學名氣不高,卻有最頂級的工程專業

上一期我們盤點了有博士學位的Top50 大學工程專業排名今天我們繼續盤點 2018USNEWS 工程專業排名不過這個排名主要針對的是沒有博士學位的 Top50 大學和上一期那些大名鼎鼎的大學相比這里面很多大學并不怎么為人熟知因為這個榜單大部分都是區域性大學事實上,工程專業…

Hbase介紹

1、為什么出現hbase?hadoop 的NameNode適合大文件,不適合小文件。HDFS不適合大量小文件的存儲,因namenode將文件系統的元數據存放在內存中,因此存儲的文件數目受限于 namenode的內存大小。HDFS中每個文件、目錄、數據塊占用150Byt…

math 向上取整_自我說明:關于Math和File類的具體說明.

Math類:Math類,不允許有子類,它直接繼承于object.Math類包含執行基本數字運算的方法.如基本指數,對數,平方根和三角函數.Math的基本方法:System.out.pintln(“1.絕對值:”Math.abs(16)”t”Math.abs(-16)”…

眼圖 非差分線_LVDS低電壓差分信號簡介

LVDS低電壓差分信號簡介1. 名詞解釋1.1. 背景隨著數據傳輸速率越來越高,現在計算機系統中的數據傳輸接口基本上都串行化了,像USB、PCIe、SATA、DP等等外部總線將并行總線擠壓到只剩下內存總線這個最后的堡壘。當然,就算是并行傳輸總線最后的倔…

無內存在優盤可以啟動計算機嗎,沒有U盤不要緊,內存卡做啟動盤裝Win7方法

現在最流行的win7系統安裝方法大多以U盤來安裝,那么如果你沒有U盤呢?為了安裝個Win7系統是不是要去買個U盤?當然不用,如果你還有空閑不用的手機內存卡,那么也是可以制作U盤啟動盤來安裝Win7系統的。準備工具&#xff1…

微信小程序request請求動態獲取數據

微信小程序開發文檔鏈接 1 后臺代碼: clickButton:function(){var that this;wx.request({url: http://localhost:9096/admin.php/index/jj,method : POST,header: { content-type: application/x-www-form-urlencoded },data : {},success: function (res) {//console.log(re…

HBase中的HMaster、HRegionServer、Zookeeper

原文鏈接:http://blog.csdn.net/mm_bit/article/details/51304233 ----------------------------------- HMaster是Hbase主/從集群架構中的中央節點。通常一個HBase集群存在多個HMaster節點,其中一個為Active Master,其余為Backup Master. Hbase每時每刻只有一個hm…

spyder python調試_使用spyder編譯器單步調試python

1、將需要進行單步調試的函數在腳本中進行調用(十分重要的一步)。由于python是解釋型語言,在進行單步調試的時候需要告訴系統你使用了這個函數,單步調試才會進入你所需要調式的函數。如下圖所示,我們定義了createDataS…

label qt 自動換行_QT編寫一個登錄界面

前言繼上篇:一起學Qt之基礎篇---入門今天上手實操用QT編寫一個登錄界面~系統權限這個詞大家肯定不陌生,你進入一個網站也是,如果不登錄,就是以游客的身份進去的,要想看到某些信息肯定需要進行登錄,更完善的…

我的世界服務器怎么修改書與筆,我的世界書與筆怎么做 我的世界書與筆怎么用...

第一步先收集甘蔗,然后合成紙,甘蔗在河邊,池塘邊,沼澤地一般都會生成,我們也可以拿回家種植,但是甘蔗必須種在水邊,其他地方種植不了,其他地方玩家怎么右鍵甘蔗都是沒有反應的。第二…

python csv模塊用法_python使用csv模塊如何將數據存放在一張表的不同行?

def save2csv(file_nameNone, headerNone, dataNone): """ 保存成CSV格式文件,方便Excel直接打開 :param file_name: 保存的文件名 :param header: 表頭,每一列的名字 :param data: 具體填充數據 :return: """ if file_name is None or isinstan…

虛擬機 服務器 root,虛擬機切換到root賬戶

虛擬機切換到root賬戶 內容精選換一換一、安裝虛擬機1、下載VMware workstation 14 ,安裝時按照默認配置安裝2、下載ubuntu-18.04.1-desktop-amd64.iso鏡像文件3、打開 VMware workstation ,新建虛擬機4、配置虛擬機內存,磁盤,網絡…

每一行末尾添加分號

文本內容如下: TMP_TBX_100_0_A1 TMP_TBX_100_0_A10 TMP_TBX_100_0_A12 TMP_TBX_100_0_A13 TMP_TBX_100_0_A14 TMP_TBX_100_0_A15 TMP_TBX_100_0_A15_2 TMP_TBX_100_0_A16 TMP_TBX_100_0_A17 TMP_TBX_100_0_A18 TMP_TBX_100_0_A19 TMP_TBX_100_0_A19_2 TMP_TBX_100…

壯觀霉素抗性基因原理_基因組學深入挖掘·研究方案(下篇)

前情回顧上次小編為大家講解了四種以基因組為基礎的多組學聯合研究方案(基因組與轉錄組,深入挖掘基因表達信息;基因組聯合代謝組與轉錄組,鎖定關鍵通路;基因組與群體進化,解析物種發展歷程;基因…

Shell腳本大量示例

幾乎所有的腳本里都有某種流控制結構,很少有例外。流控制是什么?假定有一個腳本,包含下列幾個命令: #!/bin/sh # make a directory mkdir /home/dave/mydocs # copy all doc files cp *.docs /home/dave/docs # delete all doc fi…

Spark 常見問題小結

原文地址:http://www.aboutyun.com/thread-9946-1-1.html -------------------------------------- 問題導讀 1、當前集群的可用資源不能滿足應用程序的需求,怎么解決? 2、內存里堆的東西太多了,有什么好辦法嗎? …

dataframe數據標準化處理_數據預處理——標準化/歸一化(實例)

這次我們來說說關于數據預處理中的數據標準化及歸一化的問題。主要以理論實例的方式為大家展示。本次實驗也將會展示部分數據以及代碼,有興趣的小伙伴可以自己動手試試~在本次實例過程中,我們使用的數據是:2010-2018年間廣州市經濟與環境的時…