[STM32F1] STM32F103 读写nand flash地址

[复制链接]
1163|10
 楼主| 张1239 发表于 2019-10-16 21:41 | 显示全部楼层 |阅读模式
本帖最后由 张1239 于 2019-10-17 16:53 编辑

第一张图是我的试验箱的实验指导书上标明的储存方式,第二张图是实验代码,向NAND flash写入数据,第三张图位是网上的一段代码解析,为什么发送地址A0~A7到地址区0x70020000不是用ADDR_1st_CYCLE第一个寻址周期来寻找的 ADDR_1st_CYCLE却是发送地址A9~A16不是A0~A7
这一块代码不太清楚,请做过类似产品的大佬指点一下
附:网上代码解析链接:百为STM32开发板教程之十二——NAND FLASH
https://bbs.21ic.com/icview-586200-1-1.html?fromuser=%E5%BC%A01239
(出处: 中国电子网技术论坛)

VL18X7DG3YE$[V(IL81R2OS.png
4UTGO$({ON1Y97K6``XDF`I.png
R@GQSSCY6AL1Y)_Q6~3}Q~B.png
 楼主| 张1239 发表于 2019-10-16 21:42 | 显示全部楼层
写的有点乱,希望大佬耐心看一下
 楼主| 张1239 发表于 2019-10-16 21:45 | 显示全部楼层
顶一下,nand flash看了一天了,这一块不太理解特别难受,希望有大佬指点一下,或者分享一下这方面的资料,谢谢
 楼主| 张1239 发表于 2019-10-16 23:27 | 显示全部楼层
有没有弄过的大佬解释一下,万分感谢
 楼主| 张1239 发表于 2019-10-17 15:02 | 显示全部楼层
有人吗?不要沉啊
 楼主| 张1239 发表于 2019-10-17 15:02 | 显示全部楼层
 楼主| 张1239 发表于 2019-10-17 16:44 | 显示全部楼层
本帖最后由 张1239 于 2019-10-17 16:45 编辑

明白了明白了,查了网上各种资料结合例程代码,上文中的 ADDR_1st_CYCLE(ROW_ADDRESS)中的ROW_ADDRESS= (Address.Page + (Address.Block + (Address.Zone * NAND_ZONE_SIZE)) * NAND_BLOCK_SIZE),最低位为Page地址而非最小的byte地址,也就是说地址的改变是以页为最小单位,就是一页一页的翻,1Page=528byte。一页有528个字节,而在前512B中存放着用户的数据。在后面的16字节中(OOB)中存放着执行命令后的状态信息。主要是ECC校验的标识。所以我们读写就只操作前512字节,列地址A0-A7可以寻址的范围是256个字节,要寻址528字节的话,将一页分为了A.(1half array)B(2 half array) C(spare array)。A区0—255字节,B区 256-511 字节C区512—527字节,访问A还是B区由地址A8控制。所以 在进行页寻址前,先送A0~A7=0x00,8位数,2的8次方正好等于256,而A8来控制A区和B区,合起来正好512byte,ADDR_1st_CYCLE就是往A9~A16送页地址,写满一页页地址就+1,下图是的ADDR_1st_CYCLE函数的定义,这样就能解释的通了,我是这样理解的,如有不对还请大佬指教。
DPT91EUG~[(]ZPR)OY${%[O.png
keaibukelian 发表于 2019-11-13 15:44 | 显示全部楼层
这块挺不好看的
木木guainv 发表于 2019-11-14 08:21 | 显示全部楼层
感谢楼主分享解决的经验
xiaoqizi 发表于 2019-11-14 08:25 | 显示全部楼层
原来还有这个细节
wowu 发表于 2019-11-14 08:32 | 显示全部楼层
恭喜楼主解决问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

26

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部