RT-Thread Studio STM32 qboot IAP升级功能

        为期3周空余时间,测试IAP升级测试,初步测试通过;本文不过会过多关注操作步骤(后面如果更多的空余时间再补充一些);主用作记录当前移植的难点和关联点.

1:  测试单片机:STM32F407ZGT6 

2:工具:

        1)st-link(下载烧录文件)

        2)STM32F407ZGT6开发板 (外挂FLASH+串口1输出)

        3)USB转TTL (Xhell 8 串口通信)

3:项目用软件:

                1)RT-Thread Studio   ( 创建boot项目,APP1,APP2)

                2)STM32 ST-link Utility(用于擦除整体FLASH,然后下载Boot bin文件进去)

                3)rt_ota_packaging_tool.exe(打包数据-> .rbl,用于升级,下载到download 用)

                4)Xhell 8("ymodem_ota"-->用于升级下载)

                5)J-Flash V6.80(这个软件没怎么用,如果用可以用来作 多个烧录软件合并用)

4:3个关注重点:

        1)引导码; 2)APP ; 3)升级测试

5:学习内容

        1)RT-Thread-OTA 用户手册 .pdf  : 下载了ota_downloader组件 代码docs里面就有

        2)STM32 通用 Bootloader RT-Thread 文档中心

        3)外挂SPI FLASH学习

思路:

        >完成外挂FLASH设计(当然内置FLASH够用也可不设置)

        >FAL、SFUD配置 --》确定好 各个分区位置 引导码和APP要保持一致。

        >qboot 引导码引入  引导码用到

        >ota_downloader  (APP内置的引导码用到)

    

========================================================================

第一步:先调通外挂FLASH调通。

      重点:制作W25QXX.c  (网络资源,自行查找,这个上传用于方便自己使用)

#include <rtthread.h>
#include "drv_spi.h"
#include "comm.h"
#include "spi_flash_sfud.h"


#define SPI_BUS_NAME                        "spi3"
#define W25Q_SPI_DEVICE_NAME                "spi30"
//#define W25Q_FLASH_NAME                      "W25Q128"
#ifndef NOR_FLASH_DEV_NAME//LXB ADD
#define NOR_FLASH_DEV_NAME             "norflash0"
#endif
#define W25Q_FLASH_NAME                     NOR_FLASH_DEV_NAME

rt_uint8_t wData[4096] = {"SPI bus write data to W25Q flash."};
rt_uint8_t rData[4096];

static int rt_hw_spi_flash_init()
{
    rt_err_t ree = RT_EOK;

    ree = rt_hw_spi_device_attach(SPI_BUS_NAME, W25Q_SPI_DEVICE_NAME, GPIOG, GPIO_PIN_8);
    /* 使用 SFUD 探测 spi10 从设备,并将 spi10 连接的 flash 初始化为块设备,名称 W25Q128 */
    if (RT_NULL == rt_sfud_flash_probe(W25Q_FLASH_NAME, W25Q_SPI_DEVICE_NAME))
    {
            return -RT_ERROR;
    }
    return ree;
}
INIT_COMPONENT_EXPORT(rt_hw_spi_flash_init);


static void sfud_w25q_sample(void)
{
    rt_spi_flash_device_t flash_dev;
    sfud_flash_t sfud_dev;
    struct rt_device_blk_geometry geometry;

    // 1- use sfud api
    rt_kprintf("\n 1 - Use SFUD API \n");

    sfud_dev = rt_sfud_flash_find_by_dev_name(W25Q_FLASH_NAME);
    if(sfud_dev == RT_NULL){
        rt_kprintf("sfud can't find %s device.\n", W25Q_FLASH_NAME);
    }else{
        rt_kprintf("sfud device name: %s, sector_count: %d, bytes_per_sector: %d, block_size: %d.\n",
                    sfud_dev->name, sfud_dev->chip.capacity / sfud_dev
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值