• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >嵌入式开发 > STM32驱动NANDFLASH某些位出错

STM32驱动NANDFLASH某些位出错

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了stm32驱动nandflash,nandflash驱动,linux nandflash驱动,nandflash驱动下载,uboot nandflash驱动等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: STM32驱动NANDFLASH某些位出错
描述:

本帖最后由 u010149173 于 2014-11-17 10:49:51 编辑

stm32NANDFLASHMT29F16G08CBACA

现在需要做存储文件信息,没有做文件管理,ecc。
目前的错误现象:连续写三个块,大概有20个位置出错,每一个出错位置基本是分布在不同的页,也就是说一个页只会错一字节(1位、2位)。不清楚到底是什么原因引起的,我把各个保持时间,建立时间什么的都加大道0x32个系统时钟还是没什么效果,。系统采用STM32 的FSMC,72M系统时钟。
NAND FLASH型号:MT29F16G08CBACA
请给位帮忙看看 STM32驱动NANDFLASH某些位出错

void FSMC_NAND_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure; 
  FSMC_NANDInitTypeDef FSMC_NANDInitStructure;
  FSMC_NAND_PCCARDTimingInitTypeDef  p;
    /* Enable the FSMC Clock */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
/*-- GPIO Configuration ------------------------------------------------------*/
/* CLE, ALE, D0->D3, NOE, NWE and NCE2  NAND pin configuration  */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_14 | GPIO_Pin_15 |  
                                 GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | 
                                 GPIO_Pin_7;                                  
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOD, &GPIO_InitStructure); 
/* D4->D7 NAND pin configuration  */  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOE, &GPIO_InitStructure);
/* NWAIT NAND pin configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;     
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GPIOD, &GPIO_InitStructure); 
/* INT2 NAND pin configuration */  
//   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;     
//   GPIO_Init(GPIOG, &GPIO_InitStructure);
  /*-- FSMC Configuration ------------------------------------------------------*/
  p.FSMC_SetupTime =0X01;//0x1;// 0x07;//
  p.FSMC_WaitSetupTime =0X03;// 0x3;//0x07;//
  p.FSMC_HoldSetupTime = 0X02;//0x2;//0x07;//
  p.FSMC_HiZSetupTime = 0X01;//0x1;//0x07;//
  FSMC_NANDInitStructure.FSMC_Bank = FSMC_Bank2_NAND;
  FSMC_NANDInitStructure.FSMC_Waitfeature = FSMC_Waitfeature_Enable;
  FSMC_NANDInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;
  FSMC_NANDInitStructure.FSMC_ECC = FSMC_ECC_Enable;
  FSMC_NANDInitStructure.FSMC_ECCPageSize = FSMC_ECCPageSize_4096Bytes;
//   FSMC_NANDInitStructure.FSMC_AddressLowMapping = FSMC_AddressLowMapping_Direct;
  FSMC_NANDInitStructure.FSMC_TCLRSetupTime = 0x00;
  FSMC_NANDInitStructure.FSMC_TARSetupTime = 0x00;
  FSMC_NANDInitStructure.FSMC_CommonSpaceTimingStruct = &p;
  FSMC_NANDInitStructure.FSMC_AttributeSpaceTimingStruct = &p;
  FSMC_NANDInit(&FSMC_NANDInitStructure);
  /* FSMC NAND Bank Cmd Test */
  FSMC_NANDCmd(FSMC_Bank2_NAND, ENABLE);
}
void FlashWait()
{
while(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_6) == Bit_RESET);  
}

以下是按页读写操作
u32 FSMC_NAND_WriteBigPage(u8 *pBuffer, u32 PageAddress, u32 NumPageToWrite)
{
  u32 index = 0x00, numpagewritten = 0x00, addressstatus = NAND_VALID_ADDRESS;
  u32 status = NAND_READY, size = 0x00;
  while((NumPageToWrite != 0x00) && (addressstatus == NAND_VALID_ADDRESS) && (status == NAND_READY))
  {
    /* Page write command and address */
    *(vu8 *)(Bank_NAND_ADDR | CMD_AREA) = NAND_CMD_PAGEPROGRAM;
    *(vu8 *)(Bank_NAND_ADDR | ADDR_AREA) = 0;  
    *(vu8 *)(Bank_NAND_ADDR | ADDR_AREA) = 0;  
    *(vu8 *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_1st_CYCLE(PageAddress);  
    *(vu8 *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_2nd_CYCLE(PageAddress);  
    *(vu8 *)(Bank_NAND_ADDR | ADDR_AREA) = ADDR_3rd_CYCLE(PageAddress);  
    /* Calculate the size */
    size = NAND_PAGE_SIZE;//NAND_PAGE_SIZE +6;// (NAND_PAGE_SIZE * numpagewritten);
    /* Write data */
    for(; index < size; index++)
    {
      *(vu8 *)(Bank_NAND_ADDR | DATA_AREA) = pBuffer[index];
    }
    
    *(vu8 *)(Bank_NAND_ADDR | CMD_AREA) = NAND_CMD_WRITE_TRUE1;
    /* Check status for successful operation */
    status = FSMC_NAND_GetStatus();
    
    if(status == NAND_READY)
    {
      numpagewritten++;
      NumPageToWrite--;
      /* Calculate Next small page Address */
 if(PageAddress++ > (NAND_MAX_ZONE*NAND_ZONE_SIZE*NAND_BLOCK_SIZE))
   &nbs
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • STM32驱动NANDFLASH某些位出错

相关文章

  • 2017-06-05 串口编程中的流控制
  • 2017-06-05 PC机与三菱PLC通信问题,高手进来看看
  • 2017-06-05 shell脚本shell脚本中关于$的问题
  • 2017-06-05 请教一个有关IA-64的问题
  • 2017-06-05 新手求助:driverstuodio首次使用问题编译库文件
  • 2017-06-05 请教DDK的问题
  • 2017-06-05 arm安装QT+OpencvGTK+?
  • 2017-06-05 现在智能手环很火,如何设计啊
  • 2017-06-05 菜鸟提问:如何实现嵌入式?
  • 2017-06-05 求WinCE5Platformbuilder的path路径WinCE5生成NKbin时提示不是内部和外部指令

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 在用W2KDDK的时候用#include<NTDDKh>,在用WinXPDDK时候用什么相应的头文件??
    • tftp客户端下载服务器上的文件,报错:tftp:timeout。求解决!!!!!!!!!!!!!!!!
    • SetupClassandInterfaceClass如何理解
    • 各位大侠帮忙看看-------驱动程序make时报错
    • Proteus和8086仿真为什么灯不亮
    • 一个非常紧急的问题:有没有AC97声卡的资料
    • 大神们看看,我这个基于树莓派的NFC方案可行吗
    • vxWorks下用一个进程判断另一个进程是否运行
    • vxworks下打开文件偶尔会失败
    • CAN总线技术学习(一)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有