有没有专门做数据分析的网站,wordpress七牛云图床插件,哪个网站可以直接做ppt,哪有做网站公司STM32 Customer BootLoader 刷新项目 (二) 方案介绍 文章目录 STM32 Customer BootLoader 刷新项目 (二) 方案介绍1. 需求分析2. STM32 Memery介绍3. BootLoader方案介绍4. 支持指令 1. 需求分析
首先在开始编程之前#xff0c;我们先详细设计一下BootLoder的方案。
本项目做…STM32 Customer BootLoader 刷新项目 (二) 方案介绍 文章目录 STM32 Customer BootLoader 刷新项目 (二) 方案介绍1. 需求分析2. STM32 Memery介绍3. BootLoader方案介绍4. 支持指令 1. 需求分析
首先在开始编程之前我们先详细设计一下BootLoder的方案。
本项目做的BootLoader是在STM32自带的启动一级boot上加了一层即为二级Boot其是专门为客户自定义的启动过程中操作软件的后门。主要作用是更新MCU中的软件在正常启动过程中CB刷新整个控制器中的软件。
整个软件的代码块如下图所示最下一层是SBST自带的Boot这里面初始化异常向量表初始化堆栈和RAM。
第二层是CB客户定制化的Boot这里面主要是执行客户所定义的启动逻辑其中包括刷新整个控制器中的软件获取软件版本号擦除指定Sector的代码使能读/写Flash保护跳转到指定地址。还可以根据需求进行定制化实现。
第三层是APP应用是实现控制器中的控制逻辑。 下图是CB的架构图整个刷新和操作MCU都是通过USART来操作其中USART1是主要和MCU进行通信、刷新和发送命令的串口而USART2是Debug 端口只在调试的时候使用用来输出打印信息开发阶段完成后USART2则不再使用。
2. STM32 Memery介绍
对于实现客户化的BootLoader对于整个Flash空间可以从下图中看出地址范围是0x0800 0000-0x080F FFFF再看下图中Table 5中可以看出Sector 0-11我们选中Sector 0-1作为Customer BootLoader的地址空间即0x0800 0000-0x0800 7FFFF。剩下Application的地址空间为Sector 2-11。执行完ST的Boot后跳转到Customer BootLoader再CB中执行完相应的客户化操作再跳转到Application执行应用层程序。 3. BootLoader方案介绍
上面介绍了Memory的内存分配下面我们可以更加详细的看出三块应用的程序Flash的分配。
板子MCU一上电先从STM32里面的ST BootLoader中先启动进行异常向量表的初始化和堆栈初始化。后续跳转到Customer BootLoader所在的地址即为0x0800 0000通过相应的判断条件进入CB执行相应的客户化指令。若没有客户的条件则跳转至应用层程序Application。 下图则是在CB中的跳转逻辑将Flash中的程序Aliasing映射到0x0000 0000地址处实际是从0地址开始启动0地址存放MSP的栈指针其中offset 0x0000 0004则为存放PC指针跳转地址程序执行到此处则开始跳转到相应地址区间。 下图为整个Customer BootLoader中的跳转逻辑下一篇文章将详细介绍整个Customer BootLoader的程序编写过程。 4. 支持指令
下面是整个Customer BootLoader支持的指令其中比较重要的是0x55BL跳转固定地址0x56指定擦除扇区0x57在不同内存写数据。后续将详细介绍整个Customer BootLoader的方案实现和代码实现。
主机发送命令码BootLoader回复备注BL_GET_VER0x51BootLoader版本号(1 byte)从MCU中读BootLoader的版本号BL_GET_HELP0x52所有支持的命令码(10 bytes)列出BootLoader支持的所有命令BL_GET_CID0x53Chip identification number(2 bytes)读芯片的识别号BL_GET_RDP_STATUS0x54返回芯片读保护等级(1 byte)读行骗Flash的读保护等级BL_GO_TO_ADDR0x55返回成功或错误(1 byte)BL跳转固定地址BL_FLASH_ERASE0x56返回成功或错误(1 byte)指定擦除扇区BL_MEM_WRITE0x57返回成功或错误(1 byte)在不同内存写数据BL_EN_R_W_PROTECT0x58返回成功或错误(1 byte)使能读/写保护BL_MEM_READ0x59主机请求的内存内容长度TO DOBL_READ_SECTOR_STATUS0x5A所有Sector状态读所有扇区的保护状态BL_OTP_READ0x5BOTP contentsTO DOBL_DIS_R_W_PROTECT0x5C返回成功或错误(1 byte)该命令用于禁用用户Flash的不同扇区的读写保护功能。该命令将保护状态恢复为默认状态。
您的支持是我最大的动力 系列BootLoader文章 STM32 Customer BootLoader 刷新项目 (一) STM32CubeMX UART串口通信工程搭建