• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      Bootloader程序Flash數(shù)據(jù)的一致性驗(yàn)證方法*

      2019-01-17 03:11:12,,,,
      關(guān)鍵詞:診斷儀校驗(yàn)應(yīng)用程序

      ,,,,

      (1.齊魯工業(yè)大學(xué)(山東省科學(xué)院),濟(jì)南 250353;2.山東省科學(xué)院自動(dòng)化研究所;3.山東省汽車電子技術(shù)重點(diǎn)實(shí)驗(yàn)室)

      引 言

      在中小型嵌入式系統(tǒng)形式的汽車電子產(chǎn)品中,一般由MCU內(nèi)部的NOR Flash存儲(chǔ)并運(yùn)行系統(tǒng)程序,NOR Flash支持片內(nèi)運(yùn)行(Excute In Place),不必把代碼讀到系統(tǒng)RAM中。作為一種CMOS工藝的集成電路芯片,隨著其工作頻率越來越快、集成度越來越高、工藝尺寸越來越小,MCU及其內(nèi)部Flash越來越容易受到輻射效應(yīng)的影響[1]。輻射效應(yīng)可能會(huì)造成NOR Flash數(shù)據(jù)的破壞,從而使得基于程序指令運(yùn)行的嵌入式系統(tǒng)的應(yīng)用邏輯發(fā)生混亂。汽車電子產(chǎn)品的壽命一般都在10年以上,NOR Flash的數(shù)據(jù)一致性對(duì)產(chǎn)品整個(gè)生命周期內(nèi)的功能穩(wěn)定性和數(shù)據(jù)安全性尤為重要,有必要研究一種方法來檢驗(yàn)汽車電子產(chǎn)品程序Flash數(shù)據(jù)的一致性。

      在中小型嵌入式系統(tǒng)中,MCU程序Flash地址空間被劃分為若干扇區(qū),扇區(qū)大小一般為16 KB或32 KB,有效程序數(shù)據(jù)一般被劃分為若干個(gè)分段(Segment),分段位于扇區(qū)內(nèi),尺寸不固定,但都小于扇區(qū)長(zhǎng)度,對(duì)于中小型嵌入式系統(tǒng)而言,幾個(gè)分段就能夠滿足程序存儲(chǔ)要求。

      參考文獻(xiàn)[2]提出了一種判斷程序數(shù)據(jù)塊寫入是否正確的方法,在程序數(shù)據(jù)寫入過程中提取標(biāo)識(shí)信息,與程序數(shù)據(jù)塊已知的驗(yàn)證信息進(jìn)行對(duì)比,標(biāo)識(shí)信息和驗(yàn)證信息一致表明數(shù)據(jù)塊寫入正確。這種方法僅用于判斷燒寫數(shù)據(jù)時(shí)是否發(fā)生錯(cuò)誤,沒有考慮系統(tǒng)整個(gè)生命周期內(nèi)Flash存儲(chǔ)數(shù)據(jù)發(fā)生破損的情況。參考文獻(xiàn)[3]提出了一種對(duì)軟件程序數(shù)據(jù)進(jìn)行校驗(yàn)的方法,在軟件程序加載階段對(duì)程序各個(gè)模塊進(jìn)行哈希計(jì)算,將計(jì)算結(jié)果發(fā)回服務(wù)器端進(jìn)行對(duì)比。這種方法不適合嵌入式系統(tǒng)程序Flash數(shù)據(jù)的校驗(yàn),而且沒有說明校驗(yàn)信息的生成方法。

      本文設(shè)計(jì)了一種基于CAN總線的Bootloader,在產(chǎn)品生產(chǎn)階段通過CAN總線下載并燒錄應(yīng)用程序,保證了下載數(shù)據(jù)的一致性,在產(chǎn)品運(yùn)行階段,對(duì)應(yīng)用數(shù)據(jù)進(jìn)行校驗(yàn)對(duì)比,保證了產(chǎn)品生命周期內(nèi)的數(shù)據(jù)一致性[4]。

      1 基于CAN總線的Bootloader

      ISO 15765-3以ISO 14229-1定義的統(tǒng)一診斷服務(wù)(UDS)為基礎(chǔ),規(guī)范了基于CAN總線的診斷服務(wù)(UDS on CAN)[5],既可以用于汽車CAN節(jié)點(diǎn)的下線檢測(cè)、故障診斷、功能配置,也可以用于汽車CAN節(jié)點(diǎn)的程序下載和軟件升級(jí)。CAN節(jié)點(diǎn)中實(shí)現(xiàn)應(yīng)用程序下載和升級(jí)的程序稱為Bootloader,Bootloader響應(yīng)診斷儀發(fā)起的UDS服務(wù)請(qǐng)求[6],接收診斷儀發(fā)送的應(yīng)用程序指令數(shù)據(jù),通過Flash驅(qū)動(dòng)程序進(jìn)行應(yīng)用程序Flash地址空間的擦除和應(yīng)用程序數(shù)據(jù)的燒寫。

      1.1 Flash地址空間

      Bootloader地址空間和應(yīng)用程序地址空間分配如圖1所示。MCU的程序Flash同時(shí)存儲(chǔ)Bootloader和應(yīng)用程序,運(yùn)行在Bootloader地址空間上的程序?qū)?yīng)用程序數(shù)據(jù)燒寫或更新到應(yīng)用程序地址空間中[7]。圖中應(yīng)用程序Flash地址空間包含若干分段,以分段1、分段2、…、分段n表示,n為分段數(shù)量。各個(gè)分段的首地址和截止地址在應(yīng)用程序的鏈接文件中設(shè)定,在實(shí)際應(yīng)用中,由于函數(shù)指令數(shù)據(jù)不能跨段存儲(chǔ),因此,分段的實(shí)際尾地址小于或等于設(shè)定的截止地址。

      圖1 程序Flash地址空間分配

      1.2 程序數(shù)據(jù)文件

      應(yīng)用程序編譯、鏈接后生成程序數(shù)據(jù)文件,本方法選擇大多數(shù)MCU都支持的S19文件。S19的全稱為Motorola format for EEPROM programming,是摩托羅拉公司為程序和數(shù)據(jù)文件定義的一種可打印的ASCII形式編碼的S格式文件,以實(shí)現(xiàn)在不同的計(jì)算機(jī)平臺(tái)之間傳輸程序代碼和數(shù)據(jù)[8]。

      S19文件中的每一行數(shù)據(jù)為一條SRecord,以S0型SRecord開始,以S9型SRecord結(jié)束,以S2型SRecord存放Flash寫入地址、程序數(shù)據(jù)、程序數(shù)據(jù)長(zhǎng)度信息[9]。

      1.3 應(yīng)用程序分段

      應(yīng)用程序的每個(gè)分段都由多條S2型SRecord組成,分段內(nèi)SRecord的Flash寫入地址連續(xù),每條SRecord的程序數(shù)據(jù)長(zhǎng)度相等。記分段內(nèi)第n條SRecord的Flash寫入地址為Addr(n),第(n+1)條SRecord的Flash寫入地址為Addr(n+1),SRecord的程序數(shù)據(jù)長(zhǎng)度為L(zhǎng)en_s,三者滿足以下關(guān)系:

      Addr(n+1)=Addr(n)+Len_s

      (1)

      假設(shè)該分段由m條SRecord組成,記分段首地址為Seg_s,分段尾地址為Seg_e,分段尺寸為Seg_len,則

      Seg_s=Addr(1)

      (2)

      Seg_e=Addr(m)+Len_s-1

      (3)

      Seg_len=m*Len_s

      (4)

      Seg_s、Seg_e、Seg_len同時(shí)滿足以下關(guān)系:

      Seg_len=Seg_e-Seg_s+1

      (5)

      應(yīng)用程序的鏈接文件指定了程序各個(gè)分段的首地址[10],它不會(huì)隨應(yīng)用程序的修改而變化,分段尾地址和分段尺寸可以通過編譯鏈接生成的S19文件計(jì)算得出。

      2 Flash數(shù)據(jù)一致性驗(yàn)證

      本方法不僅可以檢測(cè)產(chǎn)品生產(chǎn)下線階段程序Flash數(shù)據(jù)的一致性,還能夠檢測(cè)產(chǎn)品整個(gè)生命周期內(nèi)因電磁干擾、空間輻射等效應(yīng)對(duì)Flash數(shù)據(jù)造成的損壞。Flash數(shù)據(jù)一致性驗(yàn)證的校驗(yàn)信息為各分段尺寸和對(duì)所有Flash數(shù)據(jù)按照地址遞增的方式進(jìn)行CRC32計(jì)算得出的校驗(yàn)值。

      2.1 生產(chǎn)階段一致性驗(yàn)證

      在產(chǎn)品生產(chǎn)階段,首先通過燒錄器燒寫B(tài)ootloader,然后通過診斷儀軟件,基于UDS on CAN協(xié)議將應(yīng)用程序下載到產(chǎn)品中,通過Bootloader進(jìn)行燒寫。下載應(yīng)用程序Flash數(shù)據(jù)的過程中,診斷儀解析S19文件,計(jì)算出各分段的尺寸和應(yīng)用程序Flash數(shù)據(jù)的CRC32校驗(yàn)值,并將之作為驗(yàn)證信息發(fā)送給Bootloader。Bootloader在燒寫應(yīng)用程序的過程中同樣計(jì)算各分段尺寸和應(yīng)用程序Flash數(shù)據(jù)的CRC32校驗(yàn)值,燒寫完成后,Bootloader比較診斷儀計(jì)算的驗(yàn)證信息和自身計(jì)算的校驗(yàn)信息,兩者一致,則表明應(yīng)用程序燒錄正確,然后在MCU內(nèi)部數(shù)據(jù)Flash中存儲(chǔ)校驗(yàn)信息,并將應(yīng)用程序有效標(biāo)志置為0x55,存入數(shù)據(jù)Flash中。

      診斷儀根據(jù)S19文件中各分段內(nèi)SRecord的Flash寫入地址連續(xù)的特性計(jì)算分段尺寸,具體計(jì)算方法為:

      ① 讀取分段首行SRecord,提取Flash寫入地址和程序數(shù)據(jù)長(zhǎng)度,分段首地址賦值為Flash寫入地址,分段尾地址初始值賦值為Flash寫入地址+程序數(shù)據(jù)長(zhǎng)度-1。然后進(jìn)入步驟②;

      圖3 Flash數(shù)據(jù)一致性驗(yàn)證

      ② 讀取下一行SRecord,提取Flash寫入地址和程序數(shù)據(jù)長(zhǎng)度,如果Flash寫入地址等于分段尾地址+1,進(jìn)入步驟③,否則進(jìn)入步驟④;

      ③ 將分段尾地址累加,累加值為程序數(shù)據(jù)長(zhǎng)度,判斷該行是否為S19文件最后一行,如果是,進(jìn)入步驟⑤,否則,進(jìn)入步驟②;

      ④ 按照式(5)計(jì)算分段尺寸,將該行視為下一個(gè)分段首行SRecord,進(jìn)入步驟①;

      ⑤ 按照式(5)計(jì)算分段尺寸,退出分段尺寸的計(jì)算過程。

      圖2 分段尺寸計(jì)算

      具體計(jì)算流程如圖2所示。Bootloader根據(jù)Flash寫入地址計(jì)算分段尺寸,F(xiàn)lash的燒寫以頁(Page)為單位,如果燒寫地址屬于分段i,將分段i尺寸累加,累加值為頁長(zhǎng)度。

      2.2 運(yùn)行階段一致性驗(yàn)證

      在產(chǎn)品運(yùn)行階段,上電后,MCU首先跳入Bootloader的地址空間運(yùn)行,檢查應(yīng)用程序有效標(biāo)志,如果讀取到的有效標(biāo)志為0x55,MCU跳入應(yīng)用程序的地址空間運(yùn)行。在應(yīng)用程序的初始化階段,讀取存儲(chǔ)在數(shù)據(jù)Flash中的校驗(yàn)信息,根據(jù)校驗(yàn)信息中的分段尺寸,讀取各個(gè)分段中的Flash數(shù)據(jù),進(jìn)行CRC32校驗(yàn),并將計(jì)算結(jié)果和校驗(yàn)信息中的CRC32校驗(yàn)值進(jìn)行對(duì)比,如果數(shù)據(jù)一致,表明程序Flash數(shù)據(jù)沒有損壞,系統(tǒng)正常運(yùn)行,如果不一致,表明程序Flash數(shù)據(jù)被損壞,進(jìn)入跛行模式。具體流程如圖3所示。

      結(jié) 語

      猜你喜歡
      診斷儀校驗(yàn)應(yīng)用程序
      日立EUB 8500E彩色超聲診斷儀的維修與升級(jí)
      刪除Win10中自帶的應(yīng)用程序
      爐溫均勻性校驗(yàn)在鑄鍛企業(yè)的應(yīng)用
      馬純棟:維修技術(shù)人員應(yīng)提高診斷儀的利用率
      蔡鵬:優(yōu)質(zhì)診斷儀為現(xiàn)代汽修打開便利之門
      大型電動(dòng)機(jī)高阻抗差動(dòng)保護(hù)穩(wěn)定校驗(yàn)研究
      基于加窗插值FFT的PMU校驗(yàn)方法
      鍋爐安全閥在線校驗(yàn)不確定度評(píng)定
      光聲成像宮頸癌診斷儀
      關(guān)閉應(yīng)用程序更新提醒
      電腦迷(2012年15期)2012-04-29 17:09:47
      横峰县| 和平区| 高陵县| 南和县| 江达县| 绥棱县| 临邑县| 卢氏县| 屏东市| 通城县| 靖州| 双辽市| 双牌县| 威信县| 佛学| 阳高县| 通化市| 陕西省| 柳河县| 闽侯县| 无极县| 新乡县| 望谟县| 宁强县| 尉犁县| 托克逊县| 商洛市| 乐山市| 涟源市| 西峡县| 芦山县| 全州县| 鄱阳县| 色达县| 沁阳市| 梧州市| 合江县| 嫩江县| 舞阳县| 宜黄县| 开平市|