我是靠谱客的博主 迷路烧鹅,最近开发中收集的这篇文章主要介绍H743IIT6 Flash模拟EEPROM 踩过的坑:必须按32个字节编程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前言

笔者最近在写FLASH模拟EEPROM的内容,本以为就跟SDRAM差不多,结果还是踩了坑。
在这里插入图片描述

前期定义数组和写测试函数

首先,我定义了两个数组,一个是u32的数字数组,一个是u8的字符数组。
在这里插入图片描述

其次,我自己写了一个写入函数,主要步骤就是解锁和写入。

函数如下图所示:
在这里插入图片描述

最后,我还写了一个赋值函数,其主要作用就是将那一个扇区全部赋值为FF,便于我观察实验结果。

函数如下图所示:
在这里插入图片描述

关于其中的startaddr和endaddr,其实就是开始地址和结束地址,可以结合自己的具体情况进行设置。

而我选择的就是bank2的第0扇区。

如下图所示:
在这里插入图片描述

ok,接下来就开始测试过程(踩坑过程)。
在这里插入图片描述

测试过程和分析思路

首先,先打印出来,这两个数组成员的地址:
在这里插入图片描述

结果如下:
在这里插入图片描述

注意:我在这里只输出了两个w,而text_buffer_2中是有三个w的。

其次,就是开始进行仿真,并且把扇区全部赋值成FF。
在这里插入图片描述

然后执行上述的写入函数(FLASH_EEPROM_WRTIE_NOCHECK)。

得出来的结果如下图所示:
在这里插入图片描述

一开始,text_buffer是一个u32数组,所以其中的数组成员是32位的。

所以我们易得其中的成员1,转换成二进制就是:
0000 0001 0000 0000 0000 0000 0000 0000
转换成十六进制就是:
01 00 00 00
其他的都可以依次类推。

疑点

按理来说,我只打算写入text_buffer的内容,而不是text_buffer_2的内容,所以到06 00 00 00就应该是结束的了,可后面为什么还有一串值呢?
这让我很是疑惑。
在这里插入图片描述

可以看一看我下图的分析:
请添加图片描述不难看出,在后面接着的,就是text_buffer_2的内容,其ASCII值转换成十六进制后就可以得到上述的结果。

但是,不难看出,后面跟着的内容它并不是完整的text_buffer_2的内容!

最后,我发现最后一个0x77的地址是0X08100020。其转换成十进制,刚好就是32,对应着32个字节操作,我回看上述的数组地址打印,其大小也是0X20。

结论

在上述的测试中,尽管我只是写入了text_buffer的内容,但是不可避免的在后面也发现了text_buffer_2的内容,所以说明对于flash编程,他都是以32个字节为单位的,如果写入内容不够,就会继续写入一些其他定义的东西(与写入数组地址临近的内容)。直至补充到32字节为止。

应对措施

1,提高数据的内存存放密度,尽量塞满32字节。

2,补0,补够32字节。

资料

在这里插入图片描述

其实,在资料中早已表明,编程是以256位为单位的,但笔者水平有限,有点坑不踩不知道,于是写下了这篇博客,希望可以为他人提供一些参考。

至此,疑问已经得到解决。
在这里插入图片描述

最后

以上就是迷路烧鹅为你收集整理的H743IIT6 Flash模拟EEPROM 踩过的坑:必须按32个字节编程的全部内容,希望文章能够帮你解决H743IIT6 Flash模拟EEPROM 踩过的坑:必须按32个字节编程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部