NandFlash 与NORFlash 驱动

NandFlash 与NORFlash 驱动

ID:39466476

大小:222.00 KB

页数:11页

时间:2019-07-04

NandFlash 与NORFlash 驱动_第1页
NandFlash 与NORFlash 驱动_第2页
NandFlash 与NORFlash 驱动_第3页
NandFlash 与NORFlash 驱动_第4页
NandFlash 与NORFlash 驱动_第5页
资源描述:

《NandFlash 与NORFlash 驱动》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、NandFlash与NORFlash驱动(注:来源于网络)1并不是所有的处理器都支持NANDFlash启动,这个信息需要从处理器的芯片手册中获得。如S3C2410可以支持Nandflash启动,也有些也支持从SD卡上启动。2Norflash与nandflash的差别: (1)接口差别:  Norflash接口时序和SDRAM一样  Nandflash使用的是控制、地址、数据复用的IO方式 (2)Nandflash写入的速度比Norflash快 (3)Nandflash的容量为8-256M,而Norflash为1-32M (4)Norflash没有坏块,而Nandfl

2、ash出厂时可能就有坏块 操作NORFlash的时序及命令列表注意:上面的Addr并不是总线上的地址,而是芯片的内部地址,当CPU的A1接到芯片IO的A0时(以这种接口方式的话),CPU的IO输出的地址应该左移一位(即0x5555<<1),其它Addr地址同理。Norflash是以写命令的方式对其进行读/写/擦除工作,要对Norflash进行读/写/擦除工作时必须明确扇区sector的大小,每种Norflash内部存储容量的均匀度不一样,如,有些在低地址很密,高地址很疏(打个比方,呵呵),所以flash要擦除时,必须知道其边界点,即sector的大小,sector的

3、值可以从Norflash中的CFI获得,S3C2410中用的Norflash的sector=4K。 下面是Word-Program的命令时序(读写功能):   下面是获得Norflash的ID及CFI信息的命令时序: 当然,在Norflash中发生擦除工作后,会等待一段时间,当擦除成功后,会提供相应的判断方法,如下:  下面是调试好的相应的完整程序代码:#include#defineU16unsignedshort#defineU32unsignedint#defineROM_BASE0x00000000#defineCMD_ADDR0*((vol

4、atileU16*)(0x5555*2+ROM_BASE))#defineCMD_ADDR1*((volatileU16*)(0x2aaa*2+ROM_BASE))U16num[10]={10,20,30,40,50,60,70,80,90,100};void erase(void)  /擦除代码段{ U16i;  U32sector; sector=ROM_BASE; for(i=0;i<10;i++) {   CMD_ADDR0=0xaaaa;  CMD_ADDR1=0x5555;  CMD_ADDR0=0x8080;  CMD_ADDR0=0xaaaa;  C

5、MD_ADDR1=0x5555;       *(volatileU16*)sector =0x3030;//0x3030表示清除命令  while(1)  {   if(*((volatileU16*)sector)&0x80)    /判断是否擦除成功    break;        //D7==1   uart_printf("XXXXXXXXXXXXXXXXXXXXXXXXXXX");  }   uart_printf("erasingsuccess:0x%x",(volatileU16*)sector);  sector+=0x1000; }} 

6、 voidwrite(void)    /写代码段{ U16i; U32ProgStart; ProgStart=ROM_BASE; for(i=0;i<10;i++) {    CMD_ADDR0=0xaaaa;     /写入的时序方法    CMD_ADDR1=0x5555;    CMD_ADDR0=0xa0a0;    *(volatileU16*)ProgStart=num[i];      while(1)  {   if((*(volatileU16*)ProgStart&0x80)==(num[i]&0x80))     break;    uar

7、t_printf("...........................");  }   uart_printf("writesuccess:%d",*(volatileU16*)ProgStart);   ProgStart+=0x1000;  }}   int main(intargc,char**argv){    inti;   sys_init();         erase();  write();    for(i=0;i!=0x1ff000;i+=0x1000) {   uart_printf("numis:%d",*(volat

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。