




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、使用的Nand Flash为三星的K9F2G08U0M,存储为256M,数据宽度为8bit.具体的资料可以参考datasheet.由于S3C2440里面包括了Nand FLash 控制器,所以,我们的工作就是根据芯片手册配置一下寄存器。包括的寄存器如下: NFCONF;NFCONT;NFCMD;NFADDR;NFDATA;NFMECCD0;NFMECCD1;NFSECCD;NFSTAT;NFESTAT0;NFESTAT1;NFMECC0;NFMECC1;NFSECC;NFSBLK;NFEBLK;(1) 对于每个寄存器的地址,每一位的功能可以参考S3C2440芯片手册!对于目前的编程主要涉及到如
2、下五个寄存器:NFCONT;NFCMD;NFADDR;NFDATA;NFSTAT;使用宏定义:#define rNFCONF (*(volatile unsigned *)0x4E000000) #define rNFCONT (*(volatile unsigned *)0x4E000004) #define rNFCMD (*(volatile unsigned *)0x4E000008) #define rNFADDR (*(volatile unsigned char *)0x4E00000C)#define rNFDATA8 (*(volatile unsigned char *)0
3、x4E000010) #define rNFSTAT (*(volatile unsigned *)0x4E000020)特别注明:对于NFCONF寄存器,特别要说明的是TACLS,TWRPH0,TWRPH1,这三个参数。如何设置这三个参数,主要得看K9F2G08U0M 手册上的时序表,参数表,上面已经写好了CLE ,setup时间,WE_N的Pulse WiDth,WE_N HIGH HOLD TIME .根据这些参数,设置个合适的TACLS,TWRPH0,TWRPH1值!(2) 命令! Nand Flash编程时涉及到很多命令,其实这些命令帮助我们完成了很多的工作,我们现在只需做发送命令的
4、工作。#define Read_Cmd00#define Read_Cmd10x30#define Read_ID_Cmd0x90#define Reset_Cmd0xFF#define PageProgram_Cmd00x80#define PageProgram_Cmd10x10#define Cache_Program_Cmd00x80#define Cache_Program_Cmd10x15#define Copy_Back_Program_Cmd00x85#define Copy_Back_Program_Cmd1 0x10#define Block_Erase_Cmd00x60#
5、define Block_Erase_Cmd10xD0#define Read_Status_Cmd0x70当我们编写擦出,读,编程Nand Flash的函数时,就会涉及到以上各个命令。对于如何使用以上命令,在什么周期用,时序条件如何,完全可以参考K9F2G08U0M手册,上面很详细。写函数时,可以根据流程图,时序图,文字,一步步来,基本上不会有太大的问题。关于Erase operation根据上图,相信编写擦除函数,应该问题不大啊!(3) 本次实验主要完成以下函数的设计void S3C2440_Nand_Reset(void);unsigned S3C2440_Nand_Wait_Idle(
6、void);void S3C2440_Nand_Init(void);unsigned short S3C2440_Nand_Read_ID(void); /获取Nand Flash 设备类型号的void S3C2440_Nand_WR_Addr(unsigned int addr);unsigned S3C2440_Nand_Block_Erase(unsigned block_addr);void S3C2440_Nand_Read(unsigned char * des_addr,unsigned int src_addr,int size);unsigned S3C2440_Nand_
7、Program(unsigned char * buf,unsigned int addr);分享以下设计代码:/ 0:pass;1:failunsigned S3C2440_Nand_Wait_Idle(void) unsigned char stat;S3C2440_Nand_WRCmd(Read_Status_Cmd);dostat=S3C2440_Nand_RD_Data8();while(!(stat&0x40);return stat&0x1;void S3C2440_Nand_Init(void)S3C2440_Nand_CONF()=(TACLS12) | (TWRPH08)
8、| (TWRPH14) |(0NFCONT = (013)|(012)|(010)|(09)|(08)|(16)|(15)|(14)|(11)|(10);unsigned short S3C2440_Nand_Read_ID(void)unsigned short ID;S3C2440_Nand_Chip_En();S3C2440_Nand_WRCmd(Read_ID_Cmd);S3C2440_NandWR_Addr_Single(0);while(S3C2440_Nand_ISBUSY();ID=S3C2440_Nand_RD_Data8()NAND_SECTOR_BIT_WID+1;S3C
9、2440_NandWR_Addr_Single(column_addr&0xff);S3C2440_NandWR_Addr_Single(column_addr8)&0x0f);S3C2440_NandWR_Addr_Single(page_addr&0xff);S3C2440_NandWR_Addr_Single(page_addr8)&0xff);S3C2440_NandWR_Addr_Single(page_addr16)&0x1);unsigned S3C2440_Nand_Block_Erase(unsigned block_addr)int i,status;block_addr
10、&=0x3f; /ingore the low 6 bits;S3C2440_Nand_Chip_En();S3C2440_Nand_WRCmd(Block_Erase_Cmd0);S3C2440_NandWR_Addr_Single(block_addr&0xff);S3C2440_NandWR_Addr_Single(block_addr8)&0xff);S3C2440_NandWR_Addr_Single(block_addr16)&0x1);S3C2440_Nand_WRCmd(Block_Erase_Cmd1);for(i=0;iNAND_SECTOR_BIT_WID;S3C2440
11、_Nand_Chip_En();while (page_num)S3C2440_Nand_InitEcc();S3C2440_Nand_WRCmd(Read_Cmd0);S3C2440_Nand_WR_Addr(src_addr+(j(NAND_SECTOR_BIT_WID+1);S3C2440_Nand_WRCmd(Read_Cmd1);for(i=0;i100;i+);while(S3C2440_Nand_ISBUSY();for(i=0;iNAND_SECTOR_SIZE;i+)*des_addr+=S3C2440_Nand_RD_Data8();page_num-;j+;S3C2440
12、_Nand_Chip_Disable();unsigned S3C2440_Nand_Program(unsigned char * buf,unsigned int addr)int i,status;if(addr & NAND_BLOCK_MASK)return Addr_NOT_Align; /address or size is not align;S3C2440_Nand_Chip_En();S3C2440_Nand_InitEcc(); S3C2440_Nand_WRCmd(PageProgram_Cmd0);S3C2440_Nand_WR_Addr(addr);for(i=0;
13、iNAND_SECTOR_SIZE;i+)S3C2440_Nand_WR_Data8(*buf+);S3C2440_Nand_WRCmd(PageProgram_Cmd1);if(S3C2440_Nand_Wait_Idle() status=ERROR; else status=TRUE;S3C2440_Nand_Chip_Disable();return status;对于上面函数里面涉及的一下小函数,宏定义,设计起来很简单,在此就不累述了,看看芯片资料就可以了!对于K9F2G08U0M使用的地址共29位,A0A28,分5个周期完成发送工作!对于S3C2440_Nand_Block_Erase()函数涉及的只是A12A28,row address,当然其中A12A17会被忽略,编程时应该考虑到!对于S3C2440_Nand_Read(unsigned char * des_addr,unsigned int src_addr,int size) 函数里面的参数src_a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年福建省泉州市鲤城区高三下学期3月联考物理试卷
- 深圳市消防救援支队政府专职消防员招录考试真题2024
- 鄂尔多斯市杭锦旗事业单位引进和紧缺专业技术人员考试真题2024
- 2024年亳州市公共交通集团有限公司招聘考试真题
- 2024年北京市海淀区招聘社区工作者考试真题
- Loratadine-13C6-SCH-29851-sup-13-sup-C-sub-6-sub-生命科学试剂-MCE
- 互联网金融平台在2025年如何通过技术创新增强用户信任度报告
- 农产品电商在农村地区的发展现状与2025年农村电商生态构建研究报告
- 2025至2030汽车改装维修行业发展趋势分析与未来投资战略咨询研究报告
- 2025年可穿戴医疗设备在慢性病管理中的市场需求与技术突破报告001
- 2025年广东中考数学试题
- 2024年武汉市汉阳区招聘社区干事笔试真题
- 国企往来款管理制度
- 2025年统编版(2024)初中历史七年级下册期末测试卷及答案
- 2025至2030中国民用航空行业市场发展分析及发展前景与投资报告
- 2025年神经外科护理人文关怀计划
- T/CHC 1008-2023即食益生菌食品
- 一例人工耳蜗植入术护理查房
- 【课件】医学研究项目申请书的撰写-以国家自然科学基为例
- 《咖啡的风味》课件
- 断绝子女关系协议书模板(5篇)
评论
0/150
提交评论