1.简介
目前我在使用stm32f407ZGT6来读写三星的nand flash【K9F1G08U0E】。
板子我是在这里买的
【STM32F407ZGT6最小系统板/核心板/转接板/开发板/加128M FLASH】
他上面可以选装一个K9F1G08U0E。
针对这个nand flash,可以选择采用stm32的FSMC来进行读写。
stm32的程序我是stm32cubeide来编写的,感觉挺方便的。
2.资料参考
在官网搜 AN2784,就可以找到这个资料。
【AN2784: Using the high-density STM32F10xxx FSMC peripheral to drive external memories】
这里有各个bank的地址,可以参考一下。这个地址对于下面参数的设置非常重要。
3.频率设置
配置好工程之后,需要把晶振设置好,并且把cpu频率设置为168Mhz。
4.FSMC参数设置
然后设置nand flash的配置,注意参数最好要设置和下面一模一样,别的参数也许可以,但是我还没测试过。
此次不使用RB中断、不进行ECC检验等等。其实最好是使用,但是我一使用就出问题,所以暂时还是算了。
后来经过测试,还要把Extra command enable打开,否则读上来的数据是错误的,为0x30。【STM32F767 NAND FLASH MT29F4G08 读写数据】
在配置完之后,还要切换到代码模式,检查一下代码端的参数是否和下面的截图一致:
可以看到,和ui的参数差了1,不知道是为啥。但是代码的参数是我们想要的。
5.修改宏定义 NAND_DEVICE
然后就是最重要的一点,需要到stm32f4xx_hal_nand.h这个头文件中,修改一下这个 NAND_DEVICE 的定义。
因为我们现在选的是bank2,而bank2是从0x70000000UL开始的,而不是0x80000000UL。
不知道stm32cubeide的这个库怎么处理的,在使用FSMC来读写nand flash时,无论你选的是bank2还是bank3,默认他都是用的0x80000000UL。不知道是什么狗屁逻辑(可能我语气重了点,但是假如你和我一样被这个问题折磨了四五天的话,应该就能体会我的心情)。
而且更加恶心的是,每次在IOC界面修改一些数据后,系统重新生成代码,他又会把这个stm32f4xx_hal_nand.h改回原来的0x80000000UL,也就意味着,你需要再改一次。。。。
- #define NAND_DEVICE 0x80000000UL
+ #define NAND_DEVICE 0x70000000UL
6.程序测试
6.1.简单测试
然后就可以写段程序测试一下了:
只要读取出来的NAND_ID是【0xec 0xf1 0x00 0x95】,基本证明成功了。
【K9F1G08U0E手册】
这个是我debug的结果,可以看到,是一致的。
6.2.擦除、写入、读取测试
记得擦除之后,要稍微延时一下再去读写,否则会出问题。
HAL_StatusTypeDef ret = HAL_OK;
NAND_IDTypeDef info;
ret = HAL_NAND_Read_ID(&hnand1, &info);
int nand_status = HAL_NAND_Read_Status(&hnand1);
NAND_AddressTypeDef addr = {0, 0, 0};
ret = HAL_NAND_Erase_Block(&hnand1, &addr);
// 延时一下,具体数据需要自己测试一下
HAL_Delay(2000);
uint8_t buffer_write[2 * 1024];
for(int i = 0; i < 2048; i++)
{
buffer_write[i] = i;
}
ret = HAL_NAND_Write_Page(&hnand1, &addr, buffer_write, 1);
nand_status = HAL_NAND_Read_Status(&hnand1);
uint8_t buffer[2 * 1024] = {0};
ret = HAL_NAND_Read_Page(&hnand1, &addr, buffer, 1);
注意
a.有时候程序没问题,但是就是用st-link来debug时,总是会崩溃出,不知道为啥。难道是因为我的st-link是山寨的?文章来源:https://www.toymoban.com/news/detail-674170.html
参考:
【NandFlash Board (A)】
【STM32F407 FSMC驱动MT29F4G08A NAND FLASH源代码分享】文章来源地址https://www.toymoban.com/news/detail-674170.html
到了这里,关于stm32读写nand flash的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!