flash读写

2018年12月17日

12月14日计算错误,导致访问了错误的地址,从而进入了中断中的HardFault_Handler函数,修改计算方法如下。

FLASH_SAVE_BASE 通过.map文件可知rom totals约为10k,应保证读写的区域不影响程序运行,本次程序中使用第60个扇区,1024*(60-1)=0xec00

FLASH_SAVE_BASE =0x08000000+0xec00

2018年12月14日

mdk帮助文档Chapter 5 Getting Image Details中有的介绍,搜索关键词“rom totals”即可。

.map文件底部中有Total ROM Size的数值,这个区域是程序所占区域,读写flash需要避开这个区域。

stmflash.h

可以看出stmflash.h中有很多需要修改的部分

STM32_FLASH_BASE    参考c8t6 datasheet 可知为0x08000000

STM32_FLASH_SIZE     参考STM32F103的介绍页可知为64K

STM32_FLASH_WREN     使能flash读写

STM_SECTOR_SIZE         参考PM0075可知flash小于256K的是1k,否则是2k。

FLASH_SAVE_BASE          通过.map文件可知rom totals约为10k,应保证读写的区域不影响程序运行,本次程序中使用第60个扇区,1024*60-1=0xefff

FLASH_SAVE_BASE =0x08000000+0xefff

 FLASH_Unlock

FLASH->KEYR = FLASH_KEY1;

FLASH->KEYR = FLASH_KEY2;

根据参考代码的芯片Memory mapping可以看出参考代码和需要移植的芯片的Flash interface是一致的。所以,FLASH_Unlock可以直接移植

2018年11月21日

flash特性

了解被操作对象的特点。代码读写flash就应该先明白 flash 的特性。

stm32 flash 分配

在文档 DocID13587 中,第四章 memory mapping 中 插图中清晰地展示了 flash memory的区域。这块区域就是用户编程用的区域。1ffff 就是128kb的flash 空间。

不同产品flash特点

STM32F103 的官网介绍中,不同产品从64kb到1M的flash都有。据目前的观察看,flash都是从0x8000 0000 开始

stm32 flash 写顺序

1.检验flash 写地址是否合理

是不是在用户flash的地址范围内。应大于flash起始地址,小于flash结束地址。

2.解锁

3.读出扇区的数据

将扇区数据读出来

4.检验扇区是否已经被擦除过

如果扇区的数据全为0xFFFF说明,扇区是被擦除过的。否则需要擦除扇区。

5.擦除扇区

将扇区数据擦除

6.写数据写入扇区

将待写入的数据写入扇区。

7.数据不够写入下个扇区

如果扇区过大, 需要多个扇区

8.加锁

你可能感兴趣的:(flash读写)