Bootloader+升級方案

隨著設備的功能越來越強大,系統也越來越復雜,產品升級也成為了開發過程不可或缺的一道程序。在工程應用中,如何在不更改硬件的前提下通過軟件的方式實現產品升級。通過Bootloader來實現固件的升級是一種極好的方式,Bootloader是單片機上電后運行的第一段程序,該程序主要負責固件的更新。

圖1?固件升級

對于產品固件的升級,用戶可采用AMetal提供的Bootloader單區、雙區、差分升級算法及升級示例來進行產品開發。關于Bootloader升級算法的介紹如下:

Bootloader單區升級

單區bootloader通常是將芯片內部的Flash主要劃分為bootloader區、APP區和參數區。bootloader用于引導程序,APP扇區是為了存放升級后的應用程序,參數區是用于存儲特殊的參數,具體的扇區大小可以根據實際使用情況,進行合理劃分。單區升級的典型模型如下:

圖2?單區升級模型

【原理說明】

芯片上電后首先從首地址即bootloader開始執行,參數校驗無誤,跳轉到APP扇區。若有升級的請求,程序跳轉到首地址,在bootloader中接收新的固件,然后將APP區擦除。在新固件參數校驗成功后,程序將從bootloader跳轉到APP區執行應用程序,進而完成固件的升級。

【應用場景】

在擦除APP區的過程中,若設備突然斷電,會造成APP區的應用程序無法啟動。在這種情況下,雖然會重新跳轉到bootloader接收新的固件,進而完成固件的升級;但也存在一些不必要的麻煩,即設備需要多次寫入固件。因此該種升級算法只適用于本地升級,不能在程序正常運行的過程中升級,常適用于Flash容量較小的場景下。

Bootloader雙區升級

【雙區升級模型】

以ZLG116芯片為例,該芯片內部主Flash大小為64K(0x0800_0000 - 0x0800_FFFF),主要將Flash劃分了四個部分:bootloader段扇區,應用段扇區,升級扇區(備份區),升級標志扇區。其中bootloader用于引導程序;應用扇區是為了存放升級后的應用程序;升級扇區是為了存儲新的固件,用于備份固件;升級標志扇區是用于存儲特定的標志等。用戶可以根據自身的實際應用情況合理劃分各區的大小,雙區升級的典型模型如下所示:

圖3?雙區升級模型

【原理說明】

按照上述的ZLG116 Flash劃分,程序首先從地址為0x08000000,即bootloader開始執行,參數校驗通過后,跳轉到應用區。在接收到升級需求后,先將新的固件寫入起始地址為0x0800FC00的備份區,并擦除APP扇區。接著將update(備份區)存儲的新固件寫入到bootloader中,從而完成新固件的寫入。若在擦除APP區的過程中受到其他因素的干擾,用戶可以再次將備份區的固件寫入bootloader。新固件的參數校驗通過后,程序從bootloader跳轉到起始地址為0x08003C00的APP區執行應用代碼。

【應用場景】

相比于單區升級,雙區升級的模型增加了一塊備份扇區,用于存放新的固件。因此即使在擦除APP的時候,設備發生斷電,雙區升級也無需再次在bootloader中接收新固件,只需將備份區存儲的固件傳入到bootloader即可。該升級方式雖然可以避免單區升級只能在本地升級的苦惱,但無法降低傳輸固件的流量,不適用于開發板內存空間較小的場景下。并且雙區升級不得不需要整個APP進行升級,這給產品升級帶來了一些不便。

Bootloader差分升級

【差分包原理】

差分升級是將新老固件具有差異的部分剝離出來,例如固件從V1.1.0升級到V1.1.1,兩個固件相比只修改了1K的內容,如下圖紅色部分為不同部分,將該部分剝離出來生成差分包Diff_V1.1.0~V1.11,通過云端將差分包推送到設備端,設備端接收完成之后,先解壓差分包,再通過差分恢復算法,根據差分包中的數據標志,將新老固件進行融合,變成新的固件,從而完成升級。

圖4?差分包原理

【差分升級模型】

以基于華大HC32L196芯片設計差分升級為例,該芯片Flash為256K(0x000_0000~0x0003_FFFF),首先需要對Flash進行劃分,主要劃分為4個部分:BootLoader區、應用區、download區、參數區。BootLoader區用于引導升級,應用區為升級后的應用程序,download區為下載差分包存儲區間,參數區用于存儲特定參數。各區大小按照實際使用情況,進行合理劃分。差分升級的典型模型如下所示:

圖5?差分升級模型

【原理說明】

按照圖5所示的升級模型,設備上電后首先從bootloader開始執行,參數無誤后跳轉到應用區。當有升級的需求時,先擦除APP區,并將新老固件進行分包,然后按順序對分包后的新老固件對應的每個小塊進行差分壓縮,最后將所有的壓縮包合并成一個文件,形成了升級的固件。將新的升級固件存放在download扇區,然后將該固件寫入bootloader中,若固件參數校驗無誤,則跳到應用區執行后續的程序,進而完成產品的升級。

【應用場景】

差分升級的優點是升級固件更小、下載速度也更快,也更加節省內存空間。相對于整包升級方式(單區升級/雙區升級),其缺點是依賴特定固件。例如:某一差分包為V1.0固件升級到V1.1固件的差分包Diff_V1.0~V1.1,則該差分包只能用于升級版本號是V1.0固件的設備;對于其他版本號固件的設備不能用它升級。差分升級一般適用于希望降低傳輸固件的流量,或者開發板內存不足,不依靠特定升級固件的場景中。

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

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

相關文章

I2CKD : INTRA- AND INTER-CLASS KNOWLEDGE DISTILLATION FOR SEMANTIC SEGMENTATION

摘要 本文提出了一種新的針對圖像語義分割的知識蒸餾方法,稱為類內和類間知識蒸餾(I2CKD)。該方法的重點是在教師(繁瑣模型)和學生(緊湊模型)的中間層之間捕獲和傳遞知識。對于知識提取&#x…

12個乒乓球,有一個次品,不知輕重,用一臺無砝碼天平稱三次,找出次品,告知輕重?

前言 B站上看到個視頻:為什么有人不認可清北的學生大多是智商高的? 然后試了下,發現我真菜 自己的思路(失敗) 三次稱重要獲取到12個乒乓球中那個是次品,我想著將12個小球編號,分為四組,每組…

yo!這里是socket網絡編程相關介紹

目錄 前言 基本概念 源ip&&目的ip 源端口號&&目的端口號 udp&&tcp初識 socket編程 網絡字節序 socket常見接口 socket bind listen accept connect 地址轉換函數 字符串轉in_addr in_addr轉字符串 套接字讀寫函數 recvfrom&&a…

Java入門基礎學習筆記2——JDK的選擇下載安裝

搭建Java的開發環境: Java的產品叫JDK(Java Development Kit: Java開發者工具包),必須安裝JDK才能使用Java。 JDK的發展史: LTS:Long-term Support:長期支持版。指的Java會對這些版…

pycharm報錯Process finished with exit code -1073740791 (0xC0000409)

pycharm報錯Process finished with exit code -1073740791 (0xC0000409) 各種垃圾文章(包括chatgpt產生的垃圾文章),沒有給出具體的解決辦法。 解決辦法就是把具體報錯信息顯示出來,然后再去查。 勾選 然后再運行就能把錯誤顯示…

MetaRTC-play拉流客戶端代碼分析

渲染使用opengl,音頻播放使用alsa。 當點擊播放按鈕后,以此調用的類如下,開始建立rtc連接,AV解碼,音頻渲染,視頻渲染。 如果想去除QT,改為cmake工程管理,去掉渲染部分即可。 下方是…

VUE+PrintJS打印-邊距設置問題(提供解決方案)

VUE打印我們一般用printJS,雖然它也提供了邊距設置,但不管怎么調,感覺都不對,也換其他組件試過,沒啥區別,并不能解決問題。 今天又發來個需求,要求設置打印頁面的上、下、左、右邊距&#xff0…

Linux---vim編輯器(續寫)

5. vim正常模式命令集 插入模式 按「i」切換進入插入模式「insert mode」, 按“i”進入插入模式后是從光標當前位置開始輸入文件; 按「a」進入插入模式后,是從目前光標所在位置的下一個位置開始輸入文字; 按「o」進入插入模式…

從頭開始學Spring—01Spring介紹和IOC容器思想

目錄 1.Spring介紹 1.1Spring概述 1.2特性 1.3五大功能模塊 2.IOC容器 2.1IOC思想 ①獲取資源的傳統方式 ②反轉控制方式獲取資源 ③DI 2.2IOC容器在Spring中的實現 ①BeanFactory ②ApplicationContext ③ApplicationContext的主要實現類 1.Spring介紹 1.1Sprin…

Linux系統一步一腳印式學習

Linux操作系統具有許多特點和優勢。首先,它是開放源代碼的,也就意味著任何人都可以對源代碼進行查看和修改。其次,可以同時支持多個用戶且可以同時執行多個任務,此外,Linux操作系統也非常穩定和安全。相對于其他操作系…

銀川崗位外包有邦芒 讓崗位空缺不再成為難題

銀川邦芒人力崗位外包服務,專為企業量身定制,涵蓋從崗位人員招聘到勞動關系終止的全方位、無風險外包解決方案。借助我們的崗位外包,企業可以在確保用工穩定的同時,將更多資源聚焦于核心業務的發展與創新。 我們提供全面、高效的外…

安全測試|常見SQL注入攻擊方式、影響及預防

SQL注入 什么是SQL注入? SQL注入是比較常見的網絡攻擊方式之一,主要攻擊對象是數據庫,針對程序員編寫時的疏忽,通過SQL語句,實現無賬號登錄,篡改數據庫。 SQL注入簡單來說就是通過在表單中填寫包含SQL關鍵…

SSD-60S施耐德電機保護器EOCR-SSD

EOCR主要產品有電子式電動機保護繼電器,電子式過電流繼電器,電子式欠電流繼電器,電子式欠電壓繼電器,其它保護裝置,電流互感器。EOCR-SSD 10-60A電機保護器 系列型號: EOCRSSD-05SEOCRssD-30s EOCRSSD-60SEOCRSSD-0…

Linux文件管理(超詳細講解)

Linux文件管理 一、管理文件1.目錄和路徑2.目錄操作命令3.文件操作命令4.文件內容操作命令 一、管理文件 1.目錄和路徑 文件與目錄簡介 文件是Linux操作系統用來存儲信息的基本結構,是一組信息的集合。目錄是一種特殊的文件,用來保存文件及其相關信息。…

開源即時通訊IM框架 MobileIMSDK v6.5 發布

一、更新內容簡介 本次更新為次要版本更新,進行了bug修復和優化升級(更新歷史詳見:碼云 Release Notes、Github Release Notes)。 MobileIMSDK 可能是市面上唯一同時支持 UDPTCPWebSocket 三種協議的同類開源IM框架。輕量級、高…

8種常見的CMD命令

1.怎么打開CMD窗口 步驟1:winr 步驟2:在彈出的窗口輸入cmd,然后點擊確認,就會出現一個cmd的窗口 2.CMD的8種常見命令 2.1盤符名稱冒號 說明:切換盤的路徑 打開CMD窗口這里默認的是C盤的Users的27823路徑底下&#xf…

基于微信小程序+JAVA Springboot 實現的【網上商城小程序】app+后臺管理系統 (內附設計LW + PPT+ 源碼+ 演示視頻 下載)

項目名稱 項目名稱: 基于微信小程序的網上商城 項目技術棧 該項目采用了以下核心技術棧: 后端框架/庫: Java, SSM框架數據庫: MySQL前端技術: 微信開發者工具,微信小程序框架 項目展示 5.1 管理員服務…

Mat: Unknown HPROF Version

問題:Mat 加載 android studio 導出的 hprof 文件失敗 原因:android hprof 文件不是標準的 java hprof 文件 解決辦法: 使用 android sdk 自帶的命令將 hprof 轉換成標準的 java hprof

瞬息全宇宙——穿越之旅終極教程,手把手教你做出百萬點贊視頻

最近一種叫“瞬息全宇宙”的視頻火了,抖音一期視頻百萬贊,各個博主視頻都在帶瞬息全宇宙這個標簽,于是就有很多朋友催我出教程了,在琢磨了幾天之后,終于整出來了 教程包含了插件的安裝,界面的講解&#xff…

生產制造行業推拉式生產的復合應用

一、案例分析(汽配行業) 重點: 1. MTO/MTS 與 PUSH/PULL 有關系但是不是充分關系 2. MTO/MTS 是公司經營策略,更多是對市場需求的經營策略,體現在生產時機上的不同,一個是等客戶需求,一個是填…