電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>嵌入式Web服務(wù)器的 STM32 固件更新代碼

嵌入式Web服務(wù)器的 STM32 固件更新代碼

2023-06-21 | zip | 0.00 MB | 次下載 | 2積分

資料介紹

此開源參考設(shè)計(jì)演示了如何通過支持 LwIP 的微控制器系統(tǒng)上的嵌入式 Web 服務(wù)器安全、穩(wěn)健和專業(yè)地更新固件。

使用stm32-secure-patching-bootloader作為后端固件更新引擎,該設(shè)計(jì)通過 HTML 多部分/表單數(shù)據(jù)文件上傳方法提供簽名和加密的固件更新補(bǔ)丁或完整圖像文件。大多數(shù)瀏覽器都原生支持此方法。后端多部分表單處理已集成到現(xiàn)有的 FreeRTOS 和支持 LwIP-netconn 的 Web 服務(wù)器應(yīng)用程序中。

該項(xiàng)目在 NUCLEO-F429ZI 開發(fā)板上運(yùn)行。它價(jià)格低廉,隨時(shí)可用,并且包括 USB OTG 和以太網(wǎng)端口。

什么是多部分表單文件上傳?它是如何工作的?

以下 HTML 代碼被插入到網(wǎng)頁(yè)中并提供給瀏覽器。瀏覽器自動(dòng)生成一個(gè)文件選擇器按鈕并將另一個(gè)按鈕綁定到表單提交操作(按下時(shí)生成 POST 請(qǐng)求)。不需要javascript。

id="form" action="upload" method="post" enctype="multipart/form-data"> id="file" type="file" name="binary" accept=".sfb,.sfbp"/> type="submit">upload

服務(wù)器將在 /upload URL 處看到一個(gè) HTTP POST 請(qǐng)求。請(qǐng)求中有一些常用的 HTTP 協(xié)議標(biāo)頭,包括預(yù)期長(zhǎng)度(文件八位字節(jié)數(shù)據(jù)加上 HTTP 數(shù)據(jù))和內(nèi)容類型指示符。來自表單的每個(gè)“部分”在標(biāo)題中都有自己的內(nèi)容類型指示符。我們正在尋找的是Content-Type:application/octet-stream后跟 HTTP 標(biāo)頭終止符“\r\n”。此后在 LwIP 緩沖區(qū)中接收到的所有數(shù)據(jù)都是固件更新文件字節(jié)并按原樣使用。

?

POST /upload HTTP/1.1\r\n
...
Content-Length: 129773\r\n
...
Content-Type: multipart/form-data; 
...
Content-Type: application/octet-stream\r\n
\r\n

?

在 Web 服務(wù)器源代碼 (httpserver-netconn.c) 中,我構(gòu)建了一個(gè)狀態(tài)機(jī)來解析此數(shù)據(jù)流并適當(dāng)?shù)厥褂?SE_PATCH_InitSE_PATCH_Data API

本質(zhì)上,當(dāng)找到并驗(yàn)證 HTTP 標(biāo)頭時(shí),將調(diào)用 SE_PATCH_Init 函數(shù)。這個(gè)函數(shù)只是重置和準(zhǔn)備補(bǔ)丁引擎內(nèi)部狀態(tài)機(jī)。然后作為“八位字節(jié)流”的一部分接收到的所有字節(jié)都被送入 SE_PATCH_Data 函數(shù)。修補(bǔ)引擎管理字節(jié)計(jì)數(shù)器以及擦除和寫入閃存以及執(zhí)行修補(bǔ)(如果使用 .sfbp 文件)的所有細(xì)節(jié),因此除了在 Web 服務(wù)器中正確解析接收到的網(wǎng)絡(luò)數(shù)據(jù)包之外,更新固件真的沒有什么可做的處理循環(huán)。

修補(bǔ)引擎首先使用 ECDSA 簽名驗(yàn)證來驗(yàn)證固件更新文件頭(256 字節(jié)),然后再接受任何其他字節(jié)。當(dāng)滿意有效的固件更新文件正在發(fā)送時(shí),它將累積字節(jié)并將它們寫入下載槽(使用 .sfb 文件)或?qū)⑺鼈兣c現(xiàn)有固件映像組合以重新創(chuàng)建新的固件映像內(nèi)部閃存中的下載槽(using.sfbp 文件)。

當(dāng)所有字節(jié)都被正確接收和處理后,修補(bǔ)引擎可以立即重啟或由用戶手動(dòng)重啟。我選擇手動(dòng)重新啟動(dòng),以便可以將“成功”消息發(fā)送回客戶端瀏覽器并在重新啟動(dòng)前關(guān)閉連接?!俺晒Α表?yè)面包含一個(gè)重定向計(jì)時(shí)器,用于在延遲顯示更新后的固件版本后自動(dòng)重新加載固件更新頁(yè)面。

需要重新啟動(dòng),因?yàn)閷?shí)際上是stm32-secure-patching-bootloader在下載槽 (SLOT1) 中獲取更新映像候選并覆蓋 SLOT0 中的活動(dòng)固件映像。它只有在所有簽名、解密和 SHA256 哈希都經(jīng)過檢查時(shí)才會(huì)這樣做,這使得它非常健壯,非常適合任何打包的交付框架,如以太網(wǎng)、wifi、藍(lán)牙、lora、lorawan、CAN、modbus、UART 等。

在存儲(chǔ)庫(kù)中,您可以使用 bin 目錄中的預(yù)構(gòu)建文件立即測(cè)試更新,或者您可以使用 STM32CubeIDE 和包含的項(xiàng)目文件自行構(gòu)建更新文件。有關(guān)如何執(zhí)行此操作的更多說明,請(qǐng)參閱項(xiàng)目 readme.txt。

使用網(wǎng)絡(luò)更新界面

打開連接到 Nucleo 的 STLINK 的終端,這樣您就可以看到分配給它的 IP 地址:

?

[  0.000] Bootloader starting up.
STM32 Secure Patching Bootloader. github.com/firmwaremodules/stm32-secure-patching-bootloader
Build: v1.3.0
Registered to: unregistered
Target: NUCLEO-F429ZI
UID: 175053388a356f20
Clock:HSE,8,168 Crypto:SW UART:3,115200,N81
SLOT0:08020000 SLOT1:08060000 SIZE:40000
APP RAMSTART:20002700 VTOR:08020200
[  0.029] Target check: CPUID:410FC241 IDCODE:20036419 FLASHSZ:0800 .. OK.
[  0.288] Verify bootloader.
[  0.315] SHA256: 3e8790d4724c52e5f5f2352bc6b132f1c8320134e0c89de983b98904c80e73a5 Valid
[  0.323] UART loader check trigger.
[  1.328] Check USB flash media.
[  2.330] No valid firmware found on flash media, status=1
[  2.336] Verify slot 1 header.
[  2.339] Slot 1 is empty.
[  2.341] Verify slot 0.
[  2.343] Verify slot 0 header.
[  2.484] Verify slot 0 signature.
[  2.535] Verify slot 0 ready.
[  2.538] Verify slot 0 fw ver.
[  2.679] Slot 0 has valid active firmware version 1.0.0
[  2.684] Preparing to launch application in slot 0.

LwIP_HTTP_Server_Netconn_RTOS - NUCLEO-F429ZI
Built FW_UPDATE_VERSION=1
Firmware Version: 1.0.0
Bootloader Version: v1.3.0
  State: Looking for DHCP server ...
IP address assigned by a DHCP server: 192.168.1.75

?

使用 Chrome 或兼容的瀏覽器,轉(zhuǎn)到 http://

單擊固件更新選項(xiàng)卡。

poYBAGSAZwyAdXs9AADRHJrR8EM813.jpg

使用文件選擇器按鈕選擇要上傳的更新文件。然后單擊“上傳”按鈕,它將從那里開始。

pYYBAGSAZw6Ad5AtAABASbkdGzA642.jpg

選擇器只允許選擇 .sfb(全圖)或 .sfbp(補(bǔ)?。?。下面顯示了可供選擇器使用的預(yù)構(gòu)建圖像。

poYBAGSAZxGAaoKUAAA_L-ZSWto683.jpg

?

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)