打印
[资料分享]

让基于RT-Thread的网络数字时钟跑起BootLoader

[复制链接]
1747|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shadow12|  楼主 | 2019-4-30 00:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 shadow12 于 2019-4-30 00:42 编辑

相信有不少的小伙伴们都有听说过开源的数字变化电子时钟的项目,那动态变化的电子时钟真的太炫酷了,而且还具有ntp同步时钟的功能,不得不说真的太有趣了,刚开始玩电子时钟的时候觉得动画很炫酷,后来有着学习BootLoader的机会,就有着尝试把电子时钟添加bootloader的功能,虽然几经波折到最后还是达到了预期的目的,数字变化电子时钟顺利地跑起了Bootloader.
下面是在调试过程中的一些记录,欢迎多些交流....
一、添加BOOTLOADER,使用源代码的MDK工程进行编译:具体的操作步骤如下:
(1)在编译工程中会提示缺少AT和NTP的组件的.c文件,解决办法是把packages下面的内容都删除,重新使用menuconfig添加配置AT、NTP的软件包。
(2) 在env工具中,使用pkgs --update命令进行更新软件包。
(3)在env工具中,使用scons --target=mdk5编译生成新的mdk工程。
(4)在env工具中添加ota_downloader和FAL Packages的软件包,重复第2、3的步骤。
(5)添加Flash驱动移植文件,具体为添加fal_flash_stm32f4_port.c文件到driver目录下。
(6)添加分区表文件,fal_cfg.h到driver目录下。
(7)更改APP链接脚本的地址:修改stm32_rom.sct文件,把内容改为如下所示
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x08020000 0x00100000  {    ; load region size_region
  ER_IROM1 0x08020000 0x00100000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20000000 0x00020000  {  ; RW data
   .ANY (+RW +ZI)
  }
}
主要是修改LR_IROM1 和ER_IROM1的值,这个值为APP程序的启动地址。
(8)增加FAL初始化代码,修改中断向量表跳转地址、添加版本打印信息。主要是在main.c中修改添加。//添加fal的头文件
#include "fal.h"

//添加版本信息
#define APP_VERSION "1.0.0"

//添加中断向量表的跳转地址
/**
* Function    ota_app_vtor_reconfig
* Description Set Vector Table base location to the start addr of app(RT_APP_PART_ADDR).
*/
static int ota_app_vtor_reconfig(void)
{
    #define NVIC_VTOR_MASK   0x3FFFFF80
    /* Set the Vector Table base location by user application firmware definition */
    SCB->VTOR = RT_APP_PART_ADDR & NVIC_VTOR_MASK;

    return 0;
}
INIT_BOARD_EXPORT(ota_app_vtor_reconfig);

//在main函数中添加FAL初始化代码和打印版本信息。
int main(void)
{
  ....
   fal_init();
   rt_kprintf("The current version of APP firmware is %s\n", APP_VERSION);
   ....
}
(9)在构建脚本中添加Flash驱动.主要是在drivers问价下面的SConscript中修改,添加fal_flash_stm32f4_port.c后如下:
# add the general drivers.
src = Split("""
board.c
stm32f4xx_it.c
fal_flash_stm32f4_port.c
""")
(10)添加BootLoader.这部分烧录附件中的rt-boot.bin文件,在该文件中已经适配好分区表,也可以通过iot.rt-rtthread.com上生成的bin文件,通过ST-Link或者J-Flash下载到板子上,地址为默认的0x08000000。
(11)修改app启动地址的编译为0x08008000.主要修改fal_cfg.h和stm32_rom.sct的内容。
修改fal_cfg.h的内容:

#define RT_APP_PART_ADDR 0x08008000
修改stm32_rom.sct的内容:
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x08008000 0x00100000  {    ; load region size_region
  ER_IROM1 0x08008000 0x00100000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20000000 0x00020000  {  ; RW data
   .ANY (+RW +ZI)
  }
}
(12)添加屏蔽中断向量跳转到默认地址的语句。主要在system_stm32f4xx.c文件下修改。
/* Configure the Vector Table location add offset address ------------------*/
#ifdef VECT_TAB_SRAM
//  SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
#else
//  SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
#endif
到这一步可以正常从内部flah中分区的bootloader启动app.
(13)添加spi驱动和gpio软件包主要利用menuconfig在RT-Thread Component中选择Device Drivers中选择添加spi驱动和GPIO驱动。
(14)添加SFUD配置主要利用menuconfig在RT-Thread Online packages中的system packages下的Fal中的FAL uses SFUD drivers的选项,并且把name改为flash0。
(15)更新SFUDd的驱动文件主要对比新版git库中rt-thread/components/drivers/spi/spi_flash_sfud.c和rt-thread/components/drivers/spi/spi_flash_sfud.h的文件。
(16)更改分区表主要修改fal_cfg.h文件,参考原来的添加一个nor_flash0设备。
extern struct fal_flash_dev nor_flash0;


/* flash device table */
#define FAL_FLASH_DEV_TABLE                                          \
{                                                                    \
    &stm32_onchip_flash_16k,                                         \
    &stm32_onchip_flash_64k,                                         \
    &stm32_onchip_flash_128k,                                        \
    &nor_flash0,                                                     \
}
还有修改分区表的名称

/* partition table */
#define FAL_PART_TABLE                                                                                                     \
{                                                                                                                          \
    {FAL_PART_MAGIC_WROD, "download",   "flash0",   0,           (224 * 1024), 0}, \
    {FAL_PART_MAGIC_WROD, "app",        "onchip_flash_128k", 0,  (128 * 1024), 0}, \
}
注意分区表的名称要和bootloader分区表的一致。
(17)恢复app的链接长度,主要为stm32_rom.sct文件的修改。; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x08008000 0x00100000  {    ; load region size_region
  ER_IROM1 0x08008000 0x00100000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20000000 0x00020000  {  ; RW data
   .ANY (+RW +ZI)
  }
}
(18)添加YMODEM使能OTA利用menuconfig在RT-Thread online packages 下的IOT - internet of things里面的ota_downloader里面的Enable Ymodem OTA.然后利用pkgs --update 和scons --target=mdk5 重新生成mdk工程编译下载到板子上,启动完板子后,在终端输入ymodem_ota就进入ota升级模式,利用串口终端的传输的YMODEM发送模式,选中利用rt_ota_packaging_tool.exe配置生成的rbl文件,即可进入ota的升级模式。该过程升级时间比较长需要优化,bootloader的写入方式。
(19)添加http_ota功能主要步骤是:
(1)利用menuconfig在Iot软件包中的ota_downloader下添加http_ota选项和ymodem_ota的配置方式一样。
(2)配置http_ota选项中设置本地打包的rbl文件。
(3)本地通过webserver搭建web服务器,注意板子和电脑要连接同一个wifi网络,并且在webserver的工具软件中指定rbl文件所在的目录。
(4)在板子的shell命令中输入http_ota的命令就会自动下载升级文件进行升级。

二、添加cjson和tls模块,获取天气的API
....这部分还在整理中,待整理好再更新。。。。
》》》》》》》》感兴趣的可以留言哦!》》》》》》》》》

使用特权

评论回复

相关帖子

沙发
Fillmore| | 2019-5-14 10:43 | 只看该作者
顶顶顶

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

13

帖子

0

粉丝