3 Star 4 Fork 29

匡生 / H7PI_MultiBootloader

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
BSD-3-Clause

H7PI_MultiBootloader

介绍

stm32H7 bootloader,支持U盘更新,支持SD卡更新,支持启动到QSPI, 点击查看H7PI的硬件设计参考

Bootloader

  1. 此Bootloader需要硬件在qspi flash上运行程序,请确认自己的硬件是否支持
  2. 默认支持H7PI开发板,主控为STM32H750VBT6
  3. 使用前需要根据自己的硬件设计变更引脚并重新编译
  4. 此Bootloader要求硬件至少存在spi flash或者SD Card

FLM

  1. flm文件时keil用于代码下载接口,目前仅开发了keil下的下载,其他IDE加入roadmap待开发
  2. 当前flm文件用qspi代码下载调试,与bootloader合用,可以直接下载调试,与内部flash的使用一致

JlinkScript

  1. 用于使用Jlink下载代码到qspi flash的接口,可以支持到各种IDE
  2. 待开发

openOCD Script

  1. 用于使用openOCD调试器下载代码到qspi flash的接口,可以支持到各种IDE
  2. 待开发

如何进入U盘更新模式

  1. 短接3V3和IO1(PD10)
  2. 通过USB接口接入电脑,此时电脑枚举出8MB的U盘
  3. 新建一个update文件夹,将固件放入update文件夹
  4. 在update文件夹新建一个json文件,命名为fw.json
  5. 在fw.json文件中建立三个字段如下:
{
    "path":"1:/update/app_test.bin",
    "version":"0.1",
    "crc32":"653E571F"
}
  1. path字段为固件路径,spiflash请使用磁盘号1,SD Card请使用磁盘号0
  2. crc32 请使用hash工具计算bin文件的crc32值,并填入字段
  3. 目前没有对版本号进行比较,version无关紧要

1. 移植关键

  • 引脚修改
  • 芯片信息修改
  • MCU初始化修改(主要是初始化,STM32系列通用,略加修改即可,这里不提)

2. 引脚修改

2.1 查找QSPI_Init函数,并根据自己的设计,修改下方这段代码的初始化,主要是IO口和复用功能
u8 QSPI_Init(void)
{
	u32 tempreg=0;

	RCC->AHB4ENR|=1<<0; //??GPIOA??
	RCC->AHB4ENR|=1<<1; //??GPIOB??
	RCC->AHB4ENR|=1<<2;	//??GPIOC??
	RCC->AHB4ENR|=1<<4;	//??GPIOE??
	RCC->AHB3ENR|=1<<14; //QSPI????

	//PB2 QUADSPI1_CLK
	GPIO_Set(GPIOB,1<<2,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_HIGH,GPIO_PUPD_PU);
	//PB6 QUADSPI1_BK1_NCS
	GPIO_Set(GPIOB,1<<6,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_HIGH,GPIO_PUPD_PU);
	//PC9,PC10 QUADSPI1_BK1_IO0, IO1, 
	GPIO_Set(GPIOC,1<<9,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_HIGH,GPIO_PUPD_PU);
	GPIO_Set(GPIOC,1<<10,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_HIGH,GPIO_PUPD_PU);
	//IO3
	GPIO_Set(GPIOA,1<<1,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_HIGH,GPIO_PUPD_PU);
	//PE2 QUADSPI1_BK1_IO2
	GPIO_Set(GPIOE, 1<<2,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_HIGH,GPIO_PUPD_PU);

	GPIO_AF_Set(GPIOB,2,9); //PB2,AF9
 	GPIO_AF_Set(GPIOB,6,10); //PB6,AF10
 	GPIO_AF_Set(GPIOC,9,9); //PC9,AF9
 	GPIO_AF_Set(GPIOC,10,9); //PC10,AF9
 	GPIO_AF_Set(GPIOA,1,9); //Pa1,AF9
 	GPIO_AF_Set(GPIOE,2,9); //PE2,AF9
2.2 同样在QSPI_Init函数中修改闪存模式
tempreg|=0<<7;			//选择FLASH1,flash1将0改为1
tempreg|=0<<6;			//禁止双闪存模式,开启双闪存的话将0改为1

3. 修改芯片信息

3.1 找到这段代码,根据自己的芯片修改相关信息
#ifdef W25Q64JV
struct FlashDevice const FlashDevice  =  {
   FLASH_DRV_VERS,             // Driver Version, do not modify!
   "H7PI_W25Q64",  	   // Device Name
   EXTSPI,                     // Device Type
   0x90000000,                 // Device Start Address
   0x00800000,                 // Device Size (8MB)
   4096,                       // Programming Page Size
   0,                          // Reserved, must be 0
   0xFF,                       // Initial Content of Erased Memory
   1000,                       // Program Page Timeout 300 mSec
   3000,                       // Erase Sector Timeout 3000 mSec

// Specify Size and Address of Sectors
   0x001000, 0x000000,         // Sector Size 4kB (2048 Sectors)
   SECTOR_END
};
#endif
3.2 在工程配置里修改芯片的声明,需要跟上面的芯片信息代码中,#ifdef W25Q64JV 这里保持一致

修改芯片声明

3.3 编译

编译

3.4 复制flm文件到keil安装目录\Keil_v5\ARM\Flash(这个根据自己keil的安装目录定位)

flm文件位置

3.5 最后一步在自己的app工程里进行,删除原来的Programing Algorithm,然后通过add按钮选择刚才自己生成的,名字和刚才这里修改的device name一致,同时修改ram for algorithm,如果出现校验失败,请不要勾选Verify
struct FlashDevice const FlashDevice  =  {
   FLASH_DRV_VERS,             // Driver Version, do not modify!
   "H7PI_W25Q64",  	   // Device Name

选择flm文件

BSD 3-Clause License Copyright (c) 2020, fuhua-chen All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

简介

stm32H7 bootloader,支持U盘更新,支持SD卡更新,支持启动到QSPI 展开 收起
BSD-3-Clause
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/kuangsheng/H7PI_MultiBootloader.git
git@gitee.com:kuangsheng/H7PI_MultiBootloader.git
kuangsheng
H7PI_MultiBootloader
H7PI_MultiBootloader
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891