stm32读写nand flash

news/2025/1/3 6:40:04/

文章目录

  • 1.简介
  • 2.频率设置
  • 3.FSMC参数设置
  • 4.修改宏定义 NAND_DEVICE
  • 5.程序测试
    • 5.1.简单测试
    • 5.2.擦除、写入、读取测试
  • 注意

1.简介

目前我在使用stm32f407ZGT6来读写三星的nand flash【K9F1G08U0E】。
板子我是在这里买的
【STM32F407ZGT6最小系统板/核心板/转接板/开发板/加128M FLASH】
他上面可以选装一个K9F1G08U0E。
针对这个nand flash,可以选择采用stm32的FSMC来进行读写。
stm32的程序我是stm32cubeide来编写的,感觉挺方便的。

2.频率设置

配置好工程之后,需要把晶振设置好,并且把cpu频率设置为168Mhz。
在这里插入图片描述

3.FSMC参数设置

然后设置nand flash的配置,注意参数最好要设置和下面一模一样,别的参数也许可以,但是我还没测试过。
此次不使用RB中断、不进行ECC检验等等。其实最好是使用,但是我一使用就出问题,所以暂时还是算了。
在这里插入图片描述在配置完之后,还要切换到代码模式,检查一下代码端的参数是否和下面的截图一致:
在这里插入图片描述可以看到,和ui的参数差了1,不知道是为啥。但是代码的参数是我们想要的。

4.修改宏定义 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

在这里插入图片描述

5.程序测试

5.1.简单测试

然后就可以写段程序测试一下了:
![在这里插入图片描述

只要读取出来的NAND_ID是【0xec 0xf1 0x00 0x95】,基本证明成功了。
【K9F1G08U0E手册】
在这里插入图片描述这个是我debug的结果,可以看到,是一致的。
在这里插入图片描述

5.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);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是山寨的?


参考:
【NandFlash Board (A)】
【STM32F407 FSMC驱动MT29F4G08A NAND FLASH源代码分享】


http://www.ppmy.cn/news/906003.html

相关文章

DRAM知识整理系列(一):SDRAM的简介与SDRAM的管脚与尺寸介绍

目录 一、ROM与RAM介绍 二、SDRAM的简介 1、SDRAM的发展简介 2、常见DRAM单元的基本单元介绍 三、SDRAM的尺寸与管脚介绍 1、DDR的常见尺寸与Ball数 2、DDR的管脚类型介绍 一、ROM与RAM介绍 ROM&#xff1a;只读存储器&#xff0c;非易失性 RAM&#xff1a;随机存取存储…

SDRAM、DRAM及DDR FLASH ROM概念详解

存储器1、RAM&#xff1a;2、ROM&#xff1a;SRAMDRAMSDRAMDRAM 与 SRAM 的应用场合EEPROMFLASHNOR FLASHNAND FLASH DDR 在了解其他概念之前&#xff0c;我们要首先知道&#xff0c;什么是存储器 存储器 存储器是用来存储程序和各种数据信息的记忆部件 许多存储单元的集合&a…

内存控制器与SDRAM【赞】

原文链接&#xff1a;https://blog.csdn.net/qq_31216691/article/details/87115697 内存接口概念&#xff1a; 通常ARM芯片内置的内存很少&#xff0c;要运行Linux&#xff0c;需要扩展内存。ARM9扩展内存使用SDRAM内存&#xff0c;ARM11使用 DDR SDRAM。S3C2440通常外接32位6…

SRAM和SDRAM的简单介绍

参考&#xff1a;IS62WV51216ALL数据手册 W9825G6KH数据手册 1.SRAM 静态随机存取存储器&#xff08;Static Random-Access Memory&#xff0c;SRAM&#xff09;是随机存取存储器的一种。相对之下&#xff0c;动态随机存取存储器&#xff08;DRAM&#xff09;里面所储存的数据…

SDRAM笔记

SRAM&#xff0c;DRAM&#xff0c;SDRAM的区别 SRAM SRAM&#xff0c;静态的随机存取存储器&#xff0c;又被称为静态RAM&#xff0c;利用双稳态电路进行存储。即使有干扰对稳态电路也没影响&#xff0c;所以有双稳态性&#xff0c;“静态”是指只要不掉电&#xff0c;存储在S…

SDRAM简介

文章目录 前言一、内存的工作原理1.1 FLASH 二、SDRAM内存模组与基本结构2.1、物理 Bank2 2、芯片位宽 三、 SDRAM的逻辑Bank与芯片容量表示方法3.1 内存芯片的容量 四、SDRAM的引脚与封装总结 前言 了解SDRAM之前我们先了解一下ROM、RAM、DRAM、SRAM和FLASH的一些基础知识 参…

STM32中挂载SDRAM内存说明

SDRAM使用总结 2018-7-9 08:57 2138 4 4 分类: MCU/ 嵌入式 文集: stm32 最近stm32学到使用SDRAM了&#xff0c;板载SDRAM为IS42S16400J。 SDRAM为一种可以运行存储在存储器上的代码的存储器&#xff0c;stm32内部有2M的代码运行空间&#xff0c;一般都是够用的&…

SDRAM了解

转载于&#xff1a;https://blog.csdn.net/caihaitao2000/article/details/79875609 概念介绍&#xff1a; SDRAM&#xff1a;Synchronous Dynamic Random Access Memory&#xff0c;同步动态随机存储器。同步是指其时钟频率和CPU前端总线的系统时钟相同&#xff0c;并且内部命…