提前聲明:本項目是基于芯片之家的[開源]從0到1教你制作網(wǎng)絡(luò)數(shù)字變化時鐘的項目代碼進(jìn)行修改,增加Bootloader和OTA升級的。
一、前期準(zhǔn)備
硬件準(zhǔn)備:
2. 一根microusb線(安卓線)
3. 一個下載器(ST-Link或者Jlink 等)
軟件準(zhǔn)備:
4. MDK5軟件
5. RT-Thread的ENV工具
6. LED電子時鐘屏源項目工程代碼
7. RT-Thread OTA打包工具
8. WebServer工具
等待airkiss配網(wǎng)
airkiss配網(wǎng)成功
正確顯示日期和時間
二、主要說明
在本次操作中的LED電子數(shù)字時鐘屏采用的主控芯片是STM32F401RCT6,FLASH為256K,焊接了一個外置SPI接口的 flash芯片;在添加bootloader功能前需要設(shè)計分區(qū),對于分區(qū)操作有一定的要求說明,暫且不細(xì)說,參考RT-Thread官網(wǎng)的說明如下,可以對Boot有一定的了解。
img
img
功能說明
Bootloader 的主要功能是更新 app 分區(qū)中的固件。
分區(qū)表介紹
通用 Bootloader 中的分區(qū)表包含如下三個分區(qū):
通用 Bootloader 中的分區(qū)表包含如下三個分區(qū):
升級固件功能
當(dāng)系統(tǒng)需要升級固件時,Bootloader 將從 download 分區(qū)將固件搬運到 app 分區(qū),主要功能流程如下所示:
Bootloader 啟動時檢查 download 分區(qū)和 app 分區(qū)中的固件版本。
如果兩個固件版本相同,則跳轉(zhuǎn)到 app 分區(qū),Bootloader 運行結(jié)束。
固件版本不同則將 download 分區(qū)中的固件搬運到 app 分區(qū)。
在搬運的過程中 Bootloader 可以對固件進(jìn)行校驗、解密、解壓縮等操作。
搬運完畢后,刪除 download 分區(qū)中存儲的固件。
重啟系統(tǒng)跳轉(zhuǎn)到 app 分區(qū)中的固件運行,Bootloader 運行結(jié)束。
Bootloader 工作過程如下圖所示:
恢復(fù)固件功能
當(dāng)系統(tǒng)中的固件損壞,Bootloader 將從 factory 分區(qū)將固件搬運到 app 分區(qū),主要功能流程如下所示:
Bootloader 啟動時檢查觸發(fā)固件恢復(fù)的引腳是否為有效電平。
如果有效電平持續(xù)超過 10S 則將 factory 分區(qū)中的固件搬運到 app 分區(qū)中。
如果有效電平?jīng)]有持續(xù)超過 10S 則繼續(xù)進(jìn)行 2.2 小節(jié)中介紹的啟動步驟。
在搬運的過程中 Bootloader 可以對固件進(jìn)行校驗、解密、解壓縮等操作。
搬運完畢后,保持 factory 分區(qū)中的固件不變。
重啟系統(tǒng)跳轉(zhuǎn)到 app 分區(qū)中的固件運行,Bootloader 運行結(jié)束。
以上資料來源:RT-Thread官方文檔,詳細(xì)可以參考:https://www.rt-thread.org/document/site/application-note/system/rtboot/an0028-rtboot/
三、操作流程
分區(qū)說明:基于使用的STM32F401RCT6的內(nèi)部Flash為256K,開源LED電子時鐘屏的源程序的固件大小為124k,在設(shè)計分區(qū)的時候一般APP和download區(qū)是采用1:1的方式,還有bootloader分區(qū)一般設(shè)計為16K到32K,顯然這樣256K的內(nèi)部FLASH不能滿足要求,所以需要使用外部FLASH,設(shè)計分區(qū)表為:內(nèi)部flash的前32K為bootloader分區(qū),剩余的內(nèi)部FLASH (256-32 = 224)224K為APP分區(qū),download分區(qū)設(shè)在外部flash區(qū)。
在設(shè)計好分區(qū)表后,需要在原項目代碼中添加spi的驅(qū)動,燒錄boot,修改分區(qū)表,修改連接地址,添加ota_downloader的功能組件。
1.在源程序項目代碼中配置添加spi——flash驅(qū)動。
(1)在項目代碼的目錄下,通過ENV工具進(jìn)入命令行,在命令行中輸入menuconfig,如下圖1所示:
圖1 menuconfig配置界面
進(jìn)入RT-Thread Components目錄下的Device Drivers下選中Using generic GPIO device drivers和Using SPI Bus/Device device drivers 和Using Serial Flash Universal Driver 和Using auto probe flash JEDEC SFDP parameter 和Using defined support flash chip information tatble,如下圖2所示:
img
添加配置后,返回到主界面,修改CS的引腳號為20.
圖2 配置SPI驅(qū)動和GPIO驅(qū)動
保存并退出,在env命令行下輸入scons --target=mdk5 重新編譯生成工程。
再用mdk5打開編譯的項目工程,編譯燒錄到板子上,在啟動信息可以判斷外置flash已經(jīng)添加驅(qū)動了,如下圖3所示:
圖3 啟動打印spi flash芯片信息
(2) 添加ota_downloader和FAL_Packages軟件包還有SFUD的配置。
在env工具的命令行中,輸入menuconfig 進(jìn)入配置界面,進(jìn)入RT-Thread online packages 目錄下的Iot - internet of things 目錄下選中[]ota_downloader,進(jìn)入ota_downloader目錄下選中[] Enable OTA downloader debug和[]Enable HTTP/HTTPS OTA(并且配置默認(rèn)的URL為本機的ip地址的路徑)和[] Enable Ymodem OTA,如下圖4和圖5所示
圖 4 添加ota_downloader軟件包
圖5 配置ota_downloader軟件包添加ymodem_ota和http_ota
通過ESC按鍵返回到RT-Thread online packages 目錄下system packages目錄下選中fal: Flash Abrstraction layer…,如下圖6所示
圖6 添加FAL 軟件包
進(jìn)入選中該項 fal目錄下,選中FAL partition table config has defined on ‘fal_cfg,h’和FAL uses SFUD driver,并且修改name 為flash0 具體配置如下圖7所示
圖 7 配置fal 軟件包
然后保存并退出。在ENV工具的命令行中輸入 pkgs --update 軟件更新的指令,等下載完成后,就可以輸入:scons --target=mdk5 重新編譯生成新的工程。
(3) 添加fal_cfg.h和fal_flash_stm32f4_port.c和更新SFUD的驅(qū)動文件
由于原項目代碼版本的問題,需要在新版的RT-Thread的源代碼中復(fù)制兩個文件到現(xiàn)工程代碼中。把fal_cfg.h和fal_flash_stm32f4_port.c這兩個文件復(fù)制到現(xiàn)代碼項目中的driver目錄下,并且把這兩個文件添加到項目工程中;更新SFUD的驅(qū)動文件,對比新版git庫中rt-thread/components/drivers/spi/spi_flash_sfud.c和rt-thread/components/drivers/spi/spi_flash_sfud.h的文件,可以直接復(fù)制覆蓋這兩個文件的內(nèi)容。
(4) 燒寫boot.bin文件,boot.bin文件可以是燒錄附件中的boot.bin文件,也可以是RT-Thread官網(wǎng)上通過網(wǎng)頁生成的boot.bin,下面主要使用附件中的boot.bin文件的使用。燒錄boot.bin文件主要使用ST-Link Utility工具。
步驟1:打開STM32 ST-LINK Utility工具,打開附件中的bootloader.bin文件,如下圖8所示
圖8 使用ST-Link Unitity 工具燒錄boot.bin
然后,選擇菜單欄上的燒錄按鈕,設(shè)置start address 為0x08000000為默認(rèn)地址,然后選擇start按鈕,開始燒錄,如下圖9所示。
圖 9 設(shè)置boot.bin的起始地址
燒錄完成后,在串口中會打印boot的信息,如分區(qū)表的信息等,如下圖10所示
圖 10 燒錄boot.bin后啟動
由于APP固件的啟動地址還沒有修改,所以會提示找不到APP分區(qū),到此bootloader已經(jīng)成功啟動了,下面開始APP固件的啟動地址進(jìn)行修改。
(5) APP固件分區(qū)的的啟動地址修改
步驟1:在main.c中添加FAL 初始化代碼和修改中斷向量跳轉(zhuǎn)地址,添加版本打印信息,具體操作如下圖11所示。
圖 11
步驟2:修改APP啟動地址為0x08008000,如下圖12所示。
圖 12
步驟3 :添加屏蔽中斷向量跳轉(zhuǎn)到默認(rèn)地址的語句,如下圖13所示
圖 13
(6)分區(qū)表fal_cfg.h的修改
步驟參考,如下圖14所示:
圖 14
到此為止,bootloader和ota升級功能已經(jīng)添加完成,重新編譯工程,下載到板子上即可看到程序正常運行。板子啟動打印的信息如下圖所示,驗證了bootloader已經(jīng)正常工作,而且成功跳轉(zhuǎn)到了app固件分區(qū)中,如下圖15所示。
圖15
而且在程序的命令行中也看到了ymodem_ota和http_ota的指令,如下圖16所示。
圖 16
四、功能驗證
1.ymodem_ota升級功能驗證。
操作步驟:
(1)采用在項目代碼目錄下面的packagesota_downloader-latest oolsota_packager文件夾下雙擊運行rt_ota_packaging_tool.exe,如下圖17所示
圖 17
在軟件中的配置如下圖18所示,點擊選擇固件,指定項目工程代碼編譯生成的rtthread-stm32f4xx.bin文件,采用不加密不壓縮的方法,固件分區(qū)名為”app”,固件版本為數(shù)字序號以區(qū)分不同的版本,然后點擊開始打包,即可在固件目錄下生成一個rbl后綴的文件。
圖 18
打包生成的rbl文件,如下圖19所示。
圖 19
(2)在板子的串口終端中輸入:ymodem_ota 命令,如下圖20所示
圖 20
然后,利用串口終端的Ymodem傳輸工具發(fā)送,方法為在Xshell串口終端中,鼠標(biāo)右鍵選擇傳輸,再選擇YMODEM,再選擇YMODEM發(fā)送,指定發(fā)送的rbl文件即可。
接下來就會自動進(jìn)入下載程序到板子上進(jìn)行升級,部分過程圖如下圖21所示。
img
img
img
圖 21
到此,ymodem_ota升級完成,重啟后會進(jìn)入等待配網(wǎng)界面,airkiss配網(wǎng)完成后就可以顯示正確的日期時間。
2.http_ota升級功能驗證。
操作步驟:
(1)把板子和pc連接在同一個局域網(wǎng),在給電子時鐘airkiss配網(wǎng)的時候配置和pc同一個局域網(wǎng)即可。
(2)在PC上搭建web_server服務(wù)器,這里使用MyWebServer V3.6.21 Unicode工具,打開該軟件,設(shè)置服務(wù)器的根目錄,然后啟動。點擊瀏覽按鈕指定rbl文件的路徑目錄,然后點擊啟動,如下圖22所示。
圖22
在板子的串口終端中的命令行操作,輸入http_ota url 指定rbl的地址 的命令,就會進(jìn)入下載個更新app固件,如下圖23所示,
圖 23
固件下載完成后,開始更新app固件,如下圖24所示。
圖 24
到此,讓電子時鐘跑起B(yǎng)ootLoader和支持OTA升級的功能就完成了。
能堅持看到這里的小伙伴都是棒棒的。
-
led
+關(guān)注
關(guān)注
242文章
23272瀏覽量
660794 -
電子時鐘
+關(guān)注
關(guān)注
11文章
197瀏覽量
24532 -
主控芯片
+關(guān)注
關(guān)注
2文章
198瀏覽量
24644
原文標(biāo)題:如何讓開源LED電子時鐘屏跑起B(yǎng)ootloader和OTA升級
文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論