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

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

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

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

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

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

一、前期準(zhǔn)備

硬件準(zhǔn)備:

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

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升級的功能就完成了。

能堅持看到這里的小伙伴都是棒棒的。

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

收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

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

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

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

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

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

    ,如何011、選擇合適的硬件平臺 MicroPython通常理解為一個軟件系統(tǒng),還需要一個硬件平臺來運行它。而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

    開源匯總】精選開源硬件項目匯總

    購買的荔枝派主板上進(jìn)行移植linux,花費了一段時間,移植好了uboot,zImage,和根文件系統(tǒ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 ?2105次閱讀

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

    參與過多款基帶芯片、安全芯片、MCU等SOC芯片的研發(fā)工作。本次課程給大家?guī)?b class='flag-5'>數(shù)字SOC全流程漫談0
    發(fā)表于 11-05 20:51 ?15次下載
    <b class='flag-5'>數(shù)字</b>IC設(shè)計之“<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單片機控制數(shù)字時鐘的顯示及修改

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

    化時間的時鐘開源分享

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

    時鐘開源項目

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

    制作圣誕毛衣開源項目

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