ARM9(S3c2440)之十nandflash的读写操作程序实例.docxVIP

ARM9(S3c2440)之十nandflash的读写操作程序实例.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
十 ARM9(2440) 对 nand flash 的读写操作程序实例 转载自:骨 Zi 里德骄傲 我相信上一篇文章已经对 nand flash 的操作有了一定的了解,下面一起看一下 程序实例: #include include.h extern void Uart_Printf(char *fmt,...); extern void Uart_Init(int baud); //extern void Uart_Select(int ch); static void InitNandCfg(void) 配置芯片{ 配置芯片 rGPACON = (rGPACON ~(0x3f17)) | (0x3f17); // 引脚,因为GPACO复位后各位的值为1所以此步也可没有 //TACLS 为 1 个 HCLK TWRPH为 5 个 HCLK TWRPH为 2 个 HCLK 数据宽度 8 位 rNFCONF = (TACLS12)|(TWRPH08)|(TWRPH14)|(00); //禁止紧锁,软件禁止上锁,禁止非法访问中断,禁止RnB中断,RnB检测上升 沿,锁定备份ECC锁定主数据区域ECC生成,初始化ECC编码器/译码器, //强制nFCE为高(禁止片选),NAND Flash控制器使能 rNFCONT = (013)|(012)|(010)|(09)|(08)|(16)|(15)|(14)|(11)|(1 0); } 未接好?static U32 WaitNFBusy(void) // R/B 未接好? U8 stat; WrNFCmd(QUERYCMD);//0x7读状态命令 do { stat = RdNFDat();// 读取 NFDATA } while (!(stat0x40));// ,第 6 位,判断是否在忙 WrNFCmd(READCMDO)写页读命令周期0 return stat1; // 注意 0 为操作成功 } static U32 ReadChipId(void) { void ReadPage(U32 addr, U8 *buf)// void ReadPage(U32 addr, U8 *buf)// 并没有使用 ECC校验 U32 id,k; 等待不忙 应该是只读的厂商 ID 延时低 8 位为设备 ID 关闭片选NFChipEn(); // 使能片选 WrNFCmd(RdlDCMD);/渎 ID 命令 WrNFAddr(0);// 写入地址 0 等待不忙 应该是只读的厂商 ID 延时 低 8 位为设备 ID 关闭片选 NFChipDs(); // return id;// 返回 ID 值 } static U16 ReadStatus(void) { U16 stat; NFChipEn(); // 片选使能 WrNFCmd(QUERYCMD);读状态命令 stat = RdNFDat(); // 读取状态值 NFChipDs();// 关闭片选 return stat; } U32 EraseBlock(U32 addr)// 输入参数是具体的页数,擦除的是页数所在的块 { U8 stat; addr = ~0x3f;// 为了将地址赋给 A18~A19 NFChipEn(); // 片选使能 WrNFCmd(ERASECMD0); 擦// 除命令周期 0 WrNFAddr(addr);// 写地址写 3 个行周期 A18~A19 WrNFAddr(addr8);//A20~A27 WrNFAddr(addr16);//A28 WrNFCmd(ERASECMD1); //擦除命令周期 1 stat = WaitNFBusy();// 等待不忙 NFChipDs();// 关闭片选 return ~stat;// 返回 1 则操作成功 } { U16 i; NFChipEn();// 片选使能 WrNFCmd(READCMD0)读命令周期 0 WrNFAddr(O);// 写列地址 AO~A7 WrNFAddr(0);// 写列地址 A8~A11 WrNFAddr(addr);// 行地址 A12~A19 WrNFAddr(addr8);// 行地址 A20~A27 WrNFAddr(addr16);// 行地址 A28 WrNFCmd(READCMD1)读命令周期 1 InitEcc();// 复位 ECC WaitNFBusy(); for(i=0; i2048; i++) buf[i] = RdNFDat();// 读取数据存入 buf 中 NFChipDs();// 关闭片选 } U32 WritePage(U32 addr, U8 *buf) { U32 i, mecc; U8

文档评论(0)

大宝&小宝 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档