使用STM32F103ZET6驱动NAND FLASH(K9F1G08U0E)

经过2天的学习从不了解NAND FLASH,到驱动NAND FLASH完成一些简单的写,擦除,读取状态,复位等操作。

方法:使用正点原子的ST32F103ZET6和NAND FLASH(K9F1G08U0E)相连接

先看此图:

1.此芯片位宽位8,I/O口从0-7分别连接到FSMC_D0-FSMC_D7(PD14,PD15,PD0,PD1,PE7,PE8,PE9,PE10)

2.CLE是命令锁存使能-就是引脚在搞电平传输的是命令,ALE地址锁存使能-高电平,传输的是地址。CLE连接PD12,ALE连接PD13(这二条线也是FSMC的地址线A17和A16)

3.WE是写使能(低电平有效写入数据)PD5-FSMC_NWE,RE是读使能(低电平有效读取数据)PD4-FSMC_NOE,CE是片选此芯片(低电平有效选择NAND芯片)PD7-FSMC_NE1,WP是写保护(此芯片本身上拉就是没有写保护,当WP接地后芯片被保护无法写入数据)PD6,R/B(是准备就绪/正在工作状态,输出低电平表示忙,高表示就绪)PG6-FSMC_INT2。

说下地址传输格式的问题

此芯片是传输四个字节一共32位,其中A10到A0表示页内偏移(此芯片一页有2K字节,偏移表示从字节0开始计数)但是此字节很少用因为芯片的读/写以页为单位,芯片的擦除以块为单位。

举例:假如我写2048字节到块1页3上,和块1页5上,这时我想擦除块1页3,其实也把块1页5擦除了。擦除是以块为单位

A17-12表示页地址(1个block(块)有64页)

A27-A18表示块地址(表示0-1013块也就是一个Zone)

一页2K,一个块有64页(64*2=128k=0.125M),一个Zone有1024个块1024*0.125=128M,由于此芯片有1G,所以有1024/128=8个Zone。

举例想访问块3页5上偏移100字节的,1st-0x64就是100字节,2nd0x00,3rd有A19-A12但是是页地址和块地址混合。0xc5-1100 0101,11就是A19到A18就是块3,00 0101就是A17-A12表示页5

在程序中表示:

 

 还是以块3页5举例,5+(3+(0*1024))*64 = 197,这里ROW_ADDRESS就是197就是0xc5

 带进去3rd就是0xc5,4th就是0x00

功能命令操作码

 举一个例子READ ID 

 

此NAND FLASH挂在BANK2上,我上面连的线也是连到BANK2上的,所以起始地址是0x7000 0000,BANK3起始是0X8000 0000。我查阅资料发现0x7000 0000到0x8000 0000不全是我们能用的空间,在BANK2上。

 CMD_AREA表示高电平下进行引脚命令传输-0x90

然后ADDR_AREA拉高表示传输地址0x00

最后用32位的指针指向起始地址,强张取出一个32位的数据里面包含了商家厂家和芯片的内部信息等。

 得出这些信息

未完--还有关于FSMC时序的问题和读写擦除命令和使用

时间2022/5/6--学习复习使用。

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值