本帖最后由 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 ....这部分还在整理中,待整理好再更新。。。。 》》》》》》》》感兴趣的可以留言哦!》》》》》》》》》
|