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

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

3天內(nèi)不再提示

基于芯片之家的[開(kāi)源]從0到1教你制作網(wǎng)絡(luò)數(shù)字變化時(shí)鐘的項(xiàng)目代碼進(jìn)行修改

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來(lái)源:lq ? 2019-05-09 09:35 ? 次閱讀

提前聲明:本項(xiàng)目是基于芯片之家的[開(kāi)源]從0到1教你制作網(wǎng)絡(luò)數(shù)字變化時(shí)鐘的項(xiàng)目代碼進(jìn)行修改,增加Bootloader和OTA升級(jí)的。

一、前期準(zhǔn)備

硬件準(zhǔn)備:

1. 一塊LED電子數(shù)字時(shí)鐘屏

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) 燒寫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)持看到這里的小伙伴都是棒棒的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • led
    led
    +關(guān)注

    關(guān)注

    240

    文章

    23062

    瀏覽量

    657053
  • 電子時(shí)鐘
    +關(guān)注

    關(guān)注

    11

    文章

    197

    瀏覽量

    24449
  • 主控芯片
    +關(guān)注

    關(guān)注

    2

    文章

    186

    瀏覽量

    24578

原文標(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)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    01教你寫RT-Thread之線程的定義

    本章是我們真正從 0 1 寫 RT-Thread 的第一章,屬于基礎(chǔ)中的基礎(chǔ),必須要學(xué)會(huì)創(chuàng)建線程,并重點(diǎn)掌握線程是如何切換的。因?yàn)榫€程的切換是由匯編
    發(fā)表于 11-21 10:19 ?1087次閱讀

    教你如何使用CCS進(jìn)行DSP編程-入門精通【最全】

    教你如何使用CCS進(jìn)行DSP編程-入門精通【最全】
    發(fā)表于 03-04 10:23

    01:完成智能硬件產(chǎn)品的開(kāi)發(fā)

    _原理圖基于ESP8266-12F+STM32F103C8T6植物寶_cubemx工程創(chuàng)建與Gokit代碼移植開(kāi)源項(xiàng)目:智能樓宇機(jī)器人【STM32F405+Gokit】之智能樓宇服務(wù)機(jī)器人開(kāi)源
    發(fā)表于 08-10 12:52

    MicropPython的學(xué)習(xí),如何01?

    ,如何01? 1、選擇合適的硬件平臺(tái) MicroPython通常理解為一個(gè)軟件系統(tǒng),還需要一個(gè)硬件平臺(tái)來(lái)運(yùn)行它。而TPYBoardv10
    發(fā)表于 09-26 16:23

    MicropPython的學(xué)習(xí),如何01

    ,如何01? 1、選擇合適的硬件平臺(tái) MicroPython通常理解為一個(gè)軟件系統(tǒng),還需要一個(gè)硬件平臺(tái)來(lái)運(yùn)行它。而TPYBoardv10
    發(fā)表于 02-12 14:17

    教你如何使用CCS進(jìn)行DSP編程-入門精通【最全】

    教你如何使用CCS進(jìn)行DSP編程-入門精通【最全】
    發(fā)表于 05-26 09:13

    教你如何使用CCS進(jìn)行DSP編程-入門精通【最全】

    教你如何使用CCS進(jìn)行DSP編程-入門精通【最全】
    發(fā)表于 03-05 11:02

    開(kāi)源匯總】精選開(kāi)源硬件項(xiàng)目匯總

    購(gòu)買的荔枝派主板上進(jìn)行移植linux,花費(fèi)了一段時(shí)間,移植好了uboot,zImage,和根文件系統(tǒng),最后也成功啟動(dòng)了。開(kāi)源項(xiàng)目5:全志H3四層板制作分享,
    發(fā)表于 04-29 18:45

    教你如何使用CCS進(jìn)行DSP編程-入門精通

    教你如何使用CCS進(jìn)行DSP編程-入門精通
    發(fā)表于 10-23 13:04 ?44次下載
    <b class='flag-5'>教你</b>如何使用CCS<b class='flag-5'>進(jìn)行</b>DSP編程-<b class='flag-5'>從</b>入門<b class='flag-5'>到</b>精通

    01了解精品工業(yè)連接器應(yīng)用

    教你01了解精品工業(yè)連接器應(yīng)用
    的頭像 發(fā)表于 03-07 16:02 ?2063次閱讀

    數(shù)字IC設(shè)計(jì)之“數(shù)字SOC全流程漫談01

    參與過(guò)多款基帶芯片、安全芯片、MCU等SOC芯片的研發(fā)工作。本次課程給大家?guī)?lái)數(shù)字SOC全流程漫談0
    發(fā)表于 11-05 20:51 ?15次下載
    <b class='flag-5'>數(shù)字</b>IC設(shè)計(jì)之“<b class='flag-5'>數(shù)字</b>SOC全流程漫談<b class='flag-5'>從</b><b class='flag-5'>0</b><b class='flag-5'>到</b><b class='flag-5'>1</b>”

    51單片機(jī)控制數(shù)字時(shí)鐘的顯示及修改

    數(shù)字時(shí)鐘的顯示及修改實(shí)驗(yàn)?zāi)康恼莆斩〞r(shí)器的使用、按鍵檢測(cè)及數(shù)碼管的動(dòng)態(tài)顯示。實(shí)驗(yàn)內(nèi)容1、繪制如下proteus仿真圖2、利用定時(shí)器的定時(shí)功能,用6位數(shù)碼管實(shí)現(xiàn)時(shí)、分、秒的顯示及更新;3、
    發(fā)表于 11-12 12:36 ?8次下載
    51單片機(jī)控制<b class='flag-5'>數(shù)字</b><b class='flag-5'>時(shí)鐘</b>的顯示及<b class='flag-5'>修改</b>

    化時(shí)間的時(shí)鐘開(kāi)源分享

    電子發(fā)燒友網(wǎng)站提供《融化時(shí)間的時(shí)鐘開(kāi)源分享.zip》資料免費(fèi)下載
    發(fā)表于 11-09 11:20 ?0次下載
    融<b class='flag-5'>化時(shí)</b>間的<b class='flag-5'>時(shí)鐘</b><b class='flag-5'>開(kāi)源</b>分享

    時(shí)鐘開(kāi)源項(xiàng)目

    電子發(fā)燒友網(wǎng)站提供《時(shí)鐘開(kāi)源項(xiàng)目.zip》資料免費(fèi)下載
    發(fā)表于 02-07 14:46 ?0次下載
    <b class='flag-5'>時(shí)鐘</b><b class='flag-5'>開(kāi)源</b><b class='flag-5'>項(xiàng)目</b>

    制作圣誕毛衣開(kāi)源項(xiàng)目

    電子發(fā)燒友網(wǎng)站提供《制作圣誕毛衣開(kāi)源項(xiàng)目.zip》資料免費(fèi)下載
    發(fā)表于 07-11 16:53 ?0次下載
    <b class='flag-5'>制作</b>圣誕毛衣<b class='flag-5'>開(kāi)源</b><b class='flag-5'>項(xiàng)目</b>