STM32F407 FSMC驱动NAND FLASH MX30LF2GE8AB 附带测试程序链接

STM32F407 FSMC驱动NAND FLASH MX30LF2GE8AB

简介:

FSMC全称灵活的静态存储控制器,FSMC 能够连接同步、异步存储器和 16 位 PC 存储卡。

FSMC 具有以下主要功能:

  • 连接静态存储器映射的器件:
  • 静态随机访问存储器 (SRAM)
  • 只读存储器 (ROM)
  • — NOR Flash/OneNAND Flash
  • — PSRAM4 个存储区域)

​​​​​​这篇文章主要是实现STM32F407 使用sfmc接口驱动nand flash  

 

实验环境:

  •   MCU型号:STM32F407VETx
  •   NAND FLASH 型号:MX30LF2GE8AB
  •   驱动接口 :  FSMC
  •   IDE        :   Keil 5

 

原理图

原理图部分STM32F407单片机直接通过SFMC接口连接NAND FLASH 

程序框架

程序结构比较简单,只有NAND FLASH驱动部分

 

 

 程序完成系统初始化以后,就开始初始化NAND FLASH ,然后读取FLASH ID 并进行FLASH的读写验证

 

调试结果:

   NAND FLASH的测试过程,先擦除一个指定扇区NAND_FLASH_TEST_SECTOR ,然后向该扇区写入数据,最后将数据在读出来

 

最后: 

   获取keil工程和源码,请+QQ: 1025054559

 

 
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
以下是一个简单的示例程序,用于控制STM32F407FSMC与RA8875驱动器进行通信。 首先,需要在STM32F407上初始化FSMC。以下是一个简单的初始化代码示例: ``` void FSMC_Init(void) { FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure; FSMC_NORSRAMTimingInitTypeDef p; RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); p.FSMC_AddressSetupTime = 0x01; p.FSMC_AddressHoldTime = 0x00; p.FSMC_DataSetupTime = 0x0f; p.FSMC_BusTurnAroundDuration = 0x00; p.FSMC_CLKDivision = 0x00; p.FSMC_DataLatency = 0x00; p.FSMC_AccessMode = FSMC_AccessMode_B; FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1; FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM; FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable; FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE); } ``` 然后需要初始化RA8875驱动器,以下是一个简单的初始化代码示例: ``` void RA8875_Init(void) { RA8875_SendCMD(RA8875_PWRR); RA8875_SendData(0x00); RA8875_SendCMD(RA8875_PLLC1); RA8875_SendData(0x0d); RA8875_SendCMD(RA8875_PLLC2); RA8875_SendData(0x02); RA8875_SendCMD(RA8875_SYSR); RA8875_SendData(0x08); RA8875_SendCMD(RA8875_PCSR); RA8875_SendData(0x0a); RA8875_SendCMD(RA8875_DPCR); RA8875_SendData(0x03); RA8875_SendCMD(RA8875_HDWR); RA8875_SendData(0xef); RA8875_SendCMD(RA8875_HNDFTR); RA8875_SendData(0x00); RA8875_SendCMD(RA8875_HNDR); RA8875_SendData(0x01); RA8875_SendCMD(RA8875_HSTR); RA8875_SendData(0x00); RA8875_SendCMD(RA8875_HPWR); RA8875_SendData(0x83); RA8875_SendCMD(RA8875_VDHR0); RA8875_SendData(0x00); RA8875_SendCMD(RA8875_VDHR1); RA8875_SendData(0x01); RA8875_SendCMD(RA8875_VNDR0); RA8875_SendData(0x2f); RA8875_SendCMD(RA8875_VNDR1); RA8875_SendData(0x03); RA8875_SendCMD(RA8875_VSTR0); RA8875_SendData(0x00); RA8875_SendCMD(RA8875_VSTR1); RA8875_SendData(0x01); RA8875_SendCMD(RA8875_VPWR); RA8875_SendData(0x81); RA8875_SendCMD(RA8875_MWCR0); RA8875_SendData(0x0f); RA8875_SendCMD(RA8875_DCR); RA8875_SendData(0x20); RA8875_SendCMD(RA8875_FNCR0); RA8875_SendData(0x00); } ``` 最后,可以通过FSMC与RA8875进行通信。以下是一个简单的写入数据代码示例: ``` void RA8875_WriteData(uint16_t data) { *(volatile uint16_t *) (Bank1_SRAM1_ADDR + reg_address) = data; } ``` 其中,`Bank1_SRAM1_ADDR`是在初始化FSMC时指定的地址,`reg_address`是RA8875驱动器的寄存器地址。可以通过查看RA8875的数据手册获得寄存器地址。 这些代码示例可以用作启动点,以便您开始编写您自己的FSMC与RA8875驱动器通信程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值