




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本程序基于LPC2214对外扩nandflash的简单读写:主函数部分:/* 对于LPC2214由于内部没有nandflash控制器,当然也没有ECC校验,所以这些在 LPC2214里面都需要我们自己去写,不过基本一样送地址直接送就可以了,只是没有 特别的寄存器去代替而已,只不过ECC校验那块比较烦。本程序只对nandflash的简单 读写没有ECC校验,没有坏去检查等。只有简单的读写。*/#include "config.h"#include "nandflash.c"#define uint unsigned int#define uchar uns
2、igned charuint8 databuf2=0x16,0x16;uint8 databuf12;#define LED 0x000f0000void delay_ms(uint32 z) uint32 x,y; for(x=3000;x>0;x-) for(y=z;y>0;y-); void nandflash_init() PINSEL2=PINSEL2&0xfffffff7; /将P1.16-P1.25设置为GPIO口 IO1DIR=LED; /将P1.16-1.19设置为输出端 IO1SET=LED; / PINSEL2=(BIT5|BIT8|BIT14|BIT
3、16|BIT23|BIT24|BIT25|BIT26|BIT27); IO0DIR = 0x39FFB2F0; /0=输入,1=输出; BCFG2=0x00000c48; PINSEL2=0x0e004120; /使能WE OE CS2 / BCFG2=0x0000fbef; /存储器组配置寄存器 /IO0SET = 0x00003000;int main() nandflash_init(); / NF_Reset(); / NF_CheckId(); / NF_Init(); BlockErase(); NF_WritePage(0,10,0,2,databuf); /写入一页数据 / d
4、elay_ms(10); NF_ReadPage(0,10,0,2,databuf1); /读出一页数据 while(1) if(databuf10=0x16)&&(databuf11=0x16) IO1CLR=LED; delay_ms(2000); IO1SET=LED; delay_ms(2000); else if(databuf10=0xff)|(databuf11=0xff) IO0SET=LED; delay_ms(500); IO0CLR=LED; delay_ms(500); else IO1CLR=LED; return(0);Nandflash.c部分:既
5、对nandflash的操作和一些简单的初始化设置等#include <string.h>#include "config.h"#include "nandflash.h"uint32 DataCheckSum=0;uint8 DataProtect;uint8 Read_Flash_Buf2048;uint8 NorFlashIDRD2=0x0,0x0;uint8 NorFlashID5=0x0,0x0,0xFF,0xFF,0xFF;uint16 device_id;uint32 NandFFileCnt;uint32 NANDFLASH_S
6、TART;uint8 GdromDataBuf2048+64;/wlw changeuint8 *GdromRawcodes;/指向从nand中读出的ECC值uint8 GdromECCcodes24;/wlw add,计算的ECC值extern uint8 databuf12;char *MY_ID = "QUANTAI TECHNOLOGY,LTD.;Ztech GD-ROM ;2007-7-9"char *GD_GameTitle; struct SYSTEM_ID * GdromSystem_ID(uint8 *gddata);void Read_GdromSyst
7、emID(uint8 *gddata);uint32 NF_CheckId(void) int i; uint16 id; NF_CMD(0x90); NF_ADDR(0x0); for(i=0;i<10;i+); /wait tWB(100ns)/? id=NF_RDDATA()<<8;/ Maker code id|=NF_RDDATA();/ Devide code return id;void NF_Reset(void) int i; NF_CMD(0xFF);/reset command for(i=0;i<10;i+); /tWB = 100ns. NF_
8、WAITRB(); /wait 200500us;void NF_Init(void) DataCheckSum = 0x0; NF_Reset(); device_id = NF_CheckId(); NandFFileCnt = 0x4; switch(device_id)case ID_K9S1208V0M : ; break;case ID_K9S1G08U0M: ; break;case ID_K9K8G08U0M: ; break;case ID_NAND08GW3B2C : ; device_id = ID_K9K8G08U0M; break; default : break;
9、void NF_ReadPage(uint32 block,uint32 page,uint32 Column,uint32 length ,uint8 *buffer) int i; / int ret=0; register uint8 * bufPt=buffer; unsigned int blockPage; page = page & 0x3f; /页不能大于64,一个块只有64pages blockPage=(block<<6)+page; /1 Block=64page,列包含块和页 Column = Column & 0x0fff; /高四位设为0
10、 NF_CMD(0x00); / 读命令 NF_ADDR(Column&0xff); / 第一行地址A0-A7 NF_ADDR(Column>>8)&0xff); /第二行地址A8-A11,高四位屏蔽为0 NF_ADDR(blockPage&0xff); / Block & Page num.列地址A12-A19 NF_ADDR(blockPage>>8)&0xff); /列地址A20-A27 if(device_id = ID_K9K8G08U0M) NF_ADDR(blockPage>>16)&0xff);
11、 / row2 NF_CMD(0x30); / Read command for(i=0;i<5;i+); /wait tWB(100ns) NF_WAITRB(); / Wait tR(max 12us)忙信号检测 /i=length; /while(i-!=0) for(i=0;i<length;i+) *bufPt+=NF_RDDATA();/ Read one page /bufferi=*bufPt+; / return ret;int NF_IsBadBlock(uint32 blockNum)uint32 page; uint32 Column; uint8 data
12、_buff1; page = blockNum/0x800; Column =blockNum%0x800; / NF_ReadPage(0,(page+Error_ADDR),Column,1 ,data_buff); if(data_buff0 = MarkID) return 1; else return 0; int NF_WritePage(uint32 block,uint32 page,uint32 Column,uint32 length ,uint8 *buffer) int i; int state; uint32 blockPage; uint8 *bufPt=buffe
13、r; page=page&0x3f; blockPage=(block<<6)+page; Column = Column & 0x0fff; NF_CMD(0x80); / Write 1st command NF_ADDR(Column&0xff); / Column = 0 NF_ADDR(Column>>8)&0xff); / NF_ADDR(blockPage&0xff); / NF_ADDR(blockPage>>8)&0xff); / Block & page num. if(device
14、_id = ID_K9K8G08U0M) NF_ADDR(blockPage>>16)&0xff); / row2 for(i=0;i<length;i+) NF_WRDATA(*bufPt+);/ Write one page to NFM from buffer NF_CMD(0x10); / Write 2nd command for(i=0;i<1000;i+); /tWB = 100ns. /? NF_WAITRB(); /wait tPROG 200500us; NF_CMD(0x70); / Read status command for(i=0;
15、i<3;i+); /twhr=60ns state = NF_RDDATA(); / if (state & 0x1) / Page write error / Uart_SendString("PROGRAM_ERROR:block#=%dn",block); return (state & 0x1) ;uint8 NF_WriteProm(void)static uint32 page=0,block=0;/800; uint8 err;uint16 length=2048;uint32 Column=0;if(page>63) page=0
16、; block+;page+;err = NF_WritePage(block,page,Column,length,Read_Flash_Buf);return err;void ReadGdromChkData(void) static uint32 page=0,block=0;/800; uint32 Column=0; uint16 length=2048; if(page>63) page=0; block+; page+; NF_ReadPage(block,page,Column,length,GdromDataBuf); /读 Check Data 数据长度uint8
17、NFID_WriteProm(void)static uint32 page=0,block=0; uint8 err;uint16 length=2;uint32 Column=0;if(page>63) page=0; block+;err = NF_WritePage(block,page,Column,length,NorFlashID);NF_ReadPage(block,page,Column,length,NorFlashID); return err;void NFID_Read(void) uint32 page=0,block=0; uint32 Column=0;
18、uint16 length=2; uint8 FindID,err; FindID=1; while(FindID) NF_ReadPage(block,page,Column,length,NorFlashIDRD); /读 Check Data 数据长度 if(NorFlashIDRD0!=0xFF) FindID=0; else Column+; NorFlashIDRD0+; if(NorFlashIDRD0=0xFF) NorFlashIDRD0=0; NorFlashIDRD1+; Column=Column+2; if(Column=2048) Column=0; block+;
19、 BlockErase(); err = NF_WritePage(block,page,Column,length,NorFlashIDRD); void BlockErase(void)int i; uint8 page=10; uint32 blockPage=0; blockPage=(blockPage<<6)+page; NF_CMD(0x60); / Write 1st command /NF_ADDR(blockPage&0xff); /NF_ADDR(blockPage>>8)&0xff); / Block & page num
20、.if(device_id = ID_K9K8G08U0M)NF_ADDR(blockPage>>16)&0xff); / Block & page num.NF_CMD(0xD0); / Write 2nd commandfor(i=0;i<1000;i+); /tWB = 100ns. /?NF_WAITRB(); /wait tPROG 200500us;NF_CMD(0x70); / Read status commandvoid BlockEraseProm(void)int i; uint8 page=0,j; uint32 blockPage;
21、for(j=0;j<20;j+) blockPage=j; blockPage=(blockPage<<6)+page; NF_CMD(0x60); / Write 1st command /NF_ADDR(blockPage&0xff); /NF_ADDR(blockPage>>8)&0xff); / Block & page num.if(device_id = ID_K9K8G08U0M)NF_ADDR(blockPage>>16)&0xff); / Block & page num.NF_CMD(0xD0
22、); / Write 2nd commandfor(i=0;i<1000;i+); /tWB = 100ns. /?NF_WAITRB(); /wait tPROG 200500us;NF_CMD(0x70); / Read status commandfor(i=0;i<10;i+); /twhr=60nsNandflash.h.部分,对nandflash定义和申明:#ifndef _NANDFLASH_H_#define _NANDFLASH_H_#define ID_K9S1208V0M 0xec76#define ID_K9S1G08U0M 0xECF1#define ID
23、_K9K8G08U0M 0xECD3#define ID_NAND01GW 0x20F1#define ID_NAND08GW3B2C 0x20D3#define MarkAdr 2050#define MarkID 0x7F #define DOWNLOAD_ADDRESS 0x81000000#define CHECK_ADDRESS 0x32800000#define EnNandflash 1#define DisNandflash 0#define EnECC 1#define DisECC 0#define nFCE_HIGH 1#define nFCE_LOW 0#define
24、nOTEA 0x0#define TEA 0x2#define NANDFLAH_BASE 0x82000000 /nGCS2#define NandFlashData NANDFLAH_BASE#define NandFlashCmd NANDFLAH_BASE+0x800000#define NandFlashAddr NANDFLAH_BASE+0x400000 #define _WRByte(addr,data)*(volatile uint8 *)(addr)=(uint8)data#define _RDByte(addr) ( *(volatile uint8 *)(addr) )
25、#define NF_CMD(cmd) (_WRByte(NandFlashCmd,cmd)#define NF_ADDR(addr)(_WRByte(NandFlashAddr,addr)#define NF_RDDATA() (_RDByte(NandFlashData)#define NF_WRDATA(data) (_WRByte(NandFlashData,data)#define NF_WAITRB() while(IO0PIN & BIT25) != BIT25); extern uint16 device_id;extern uint32 NandFFileCnt;extern uint8 DataProtect;extern uint8 GdromDataBuf;void NF_Reset(void);uint32 NF_CheckId(void);void NF_Init(void);void NF_ReadPage(uint32 block,uint32 page,uint32 Column,uint32 length ,uint8 *bufferc);int ReadData_To_Chihiro(uint32 block,uint32 page,uint32 Column,uint32 leng
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年高中地理上学期第4周 晨昏线、地方时教学设计 湘教版必修1
- 23 祖先的摇篮 教学设计-2024-2025学年统编版语文二年级下册
- Module 9 Unit 2 Happy birthday (教学设计) -2024-2025学年外研版(一起)英语一年级上册
- 2023七年级数学上册 第五章 一元一次方程2 求解一元一次方程第3课时 解含分母的一元一次方程教学设计 (新版)北师大版
- Unit 4 My Favourite Subject Section A 1a~Pronunciation教学设计 2024-2025学年人教版英语七年级上册
- 《9的乘法口诀》(教学设计)-2024-2025学年二年级上册数学苏教版
- 2024秋八年级数学上册 第十五章 分式15.3 分式方程 2解分式方程教学设计(新版)新人教版
- 《乒乓变奏曲》(教案)-2023-2024学年人教版(2012)音乐二年级下册
- Unit2 English and Chinese Get started (教学设计)-2024-2025学年教科版(2024)英语三年级上册
- 茶道养生企业创业
- 【道法】做自强不息的中国人课件+-2024-2025学年统编版道德与法治七年级下册
- 【道法】人生当自强课件-2024-2025学年统编版道德与法治七年级下册
- 汽车维修质量保证制度
- 湖北省部分高中联考协作体2023-2024学年高二下学期期中考试物理试卷(含答案)
- 外研版(三起)(2024)三年级下册英语Unit 3 单元测试卷(含答案)
- 2024年广州市卫生健康系统招聘“优才计划”考试真题
- 重点营业线施工方案
- 餐饮店菜品成本计算表
- 《水土保持监测技术规范SLT 277-2024》知识培训
- 2025年江苏南京事业单位招聘(787人)高频重点模拟试卷提升(共500题附带答案详解)
- 档案管理制度培训宣贯
评论
0/150
提交评论