Bootlodar开发过程问题归纳

本文章记录开发bootlodar过程中遇到的问题

  • 堆栈空间与Flash空间占用

本项目使用F407ZGT6芯片内部 flash =1M=1024kb   内部RAM=192Kb

MDK5项目正确编译后 下方会出现

Program Size: Code=35748 RO-data=628 RW-data=140 ZI-data=26204

Code: 程序所占用的FLASH大小,存储在FLASH.

RO-data: Read-only-data,程序定义的常量,存储在FLASH中。

RW-data:Read-write-data,已经被初始化的变量,存储在SRAM中。

ZI-data:Zero-Init-data,未被初始化的变量,存储在SRAM中。

空间划分前 确认自己的代码需要占用多大的Flash空间 与 RAM

Flash = 35748  + 628  = 36376  ≈ 35Kb

RAM = 140  + 26204  = 26344  ≈ 26Kb

目前分配bootlodar的flash空间为 0x08020000 = 128Kb

在stm32中 堆栈空间被存储在SRAM中 检查一下RAM有没有超过F4的192Kb即可

  • 如何检查自己分配的空间是否正确

1.MDK5项目 在编译后 可以选择输出 .map文件

 

可以看到 绿色箭头指向bootlodar的起始地址0x08000000,最大值为0x08020000

 

.map文件的最后也会计算出 本项目所需要的空间大小
三、FATFS与U盘

1.FAT32要求簇数不能少于0xfff5个 不能多于0x0FFFFFF5个簇

如果低于0xfff5则只能使用FAT16 多余0x0FFFFFF5个簇则只能使用exFat格式

 

在使用FAT32时 确定自己清楚知道什么是簇 什么是扇区 什么是块

簇: 簇是进行文件空间分配的最小单位。所以FATFS限制了簇的大小 其实就是限制了你在里面最多允许存储多少个文件

扇区与块:以本项目 W25Q64为例,包含一页256字节,4K(4096 字节)为一个扇区,16个扇区为1块,容量为8M字节,共有128个块,2048 个扇区。

2.U盘OTG协议(On-The-Go)

什么是OTG协议 ,本身USB是一个主从设备通信协议,也就是说主能与从通信,从设备不可与从设备通信,主设备不可与主设备通信,USB_OTG协议实现了2个USB外设在脱离PC(主设备)的情况下可以直接通信。

Stm32仅支持USB2.0协议以下的设备 连接前检查自己U盘的协议版本

详细的配置流程可以借鉴(5条消息) cubemx使用FATFS实现对U盘读取 --- STM32F407_mx_fatfs_init_看电路的程序猿的博客-优快云博客

USB链接状态介绍

 

现cube生成代码统一变量ID Appli_state记录USB链接状态

APPLICATION_IDLE, APPLICATION_START,APPLICATION_READY,APPLICATION_DISCONNECT

分别代表1.未连接 2.链接但未就绪 3.就绪 4.断开连接

如果程序能够正常在这些状态中切换但是未进入就绪状态

  1. 检查U盘USB协议版本
  2. 确认自己的时钟配置正确
  3. 检查硬件链接 USB接口 Dp对应ttl信号中的D+ Dm对应ttl信号中的D-

四、Flash的读写验证 与 BIn格式的文件生成

J_Flash工具读写内部Flash 验证自己写进去的与生成出来的bin文件相同

1.链接好jlink硬件后 打开JFlash 链接设备

 

选择后填入起始地址 与 结束地址 读取内容

 

而后选中读出来的字节 copy出来 打开自己生成的bin格式文件 打开方式如下

 

然后一定要去逐字节比对 确保每一个bit都是正确的 我这里发现自己每次生成的bin格式文件与使用MDK5下载方式下载进去的内容是不一样的

  1. Bin格式文件的生成

 

选择我们熟悉的魔术棒

Fromelf.exe工具被默认安装在 MDK5工具安装目录下 如果没有 重新安装MDK5

注意:

Bin格式的文件是依据axf格式生成出来的,axf格式是每次编译时都会重新生成的,确保这里填入的axf格式路径是每次重新生成出来的axf文件。下面说怎么设置输出编译文件目录!

还是我们熟悉的魔术棒 打开Output选项卡 蓝色箭头点击选择目录 确认后编译生成的.o.axf.art格式的文件都会被生成在匿选择的目录下,确认你下载的bin格式文件是每次重新生成的!

 

五、bootlodar跳转失败问题排查思路

1.确认自己的跳转函数能够正常跳转

2.确认自己的跳转后的程序 正确的指向了中断向量表

3.确认自己写入FLash的地址 与 内容无误

4.如果以上都无问题 检查是不是自己的bin文件是不是每次依据.axf重新生成的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值