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