- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
NandFlash 与NORFlash 驱动
NandFlash 与NORFlash 驱动
(注:来源于网络)
1 并不是所有的处理器都支持NAND Flash启动,这个信息需要从处理器的芯片手册中获得。如S3C2410可以支持Nand flash启动,也有些也支持从SD卡上启动。
2 Nor flash与nand flash的差别:
?(1)接口差别:
?? Nor flash接口时序和SDRAM一样
?? Nand flash使用的是控制、地址、数据复用的IO方式
?(2)Nand flash写入的速度比Nor flash快
?(3)Nand flash的容量为8-256M,而Nor flash为1-32M
?(4)Nor flash没有坏块,而Nand flash出厂时可能就有坏块
?
操作NOR Flash的时序及命令列表
注意:上面的Addr并不是总线上的地址,而是芯片的内部地址,当CPU的A1接到芯片IO的A0时(以这种接口方式的话),CPU的IO输出的地址应该左移一位(即0x5555 1),其它Addr地址同理。
Nor flash是以写命令的方式对其进行读/写/擦除工作,要对Nor flash 进行读/写/擦除工作时必须明确扇区sector的大小,每种Nor flash内部存储容量的均匀度不一样,如,有些在低地址很密,高地址很疏(打个比方,呵呵),所以flash要擦除时,必须知道其边界点,即sector的大小,sector的值可以从Nor flash中的CFI获得,S3C2410中用的Nor flash的sector=4K。
?
下面是Word-Program的命令时序(读写功能):
?
?
?
下面是获得Nor flash的ID及CFI信息的命令时序:
?
当然,在Nor flash 中发生擦除工作后,会等待一段时间,当擦除成功后,会提供相应的判断方法,如下:
?
?
下面是调试好的相应的完整程序代码:
#include stdio.h#define U16 unsigned short#define U32 unsigned int#define ROM_BASE 0#define CMD_ADDR0 *((volatile U16 *)(0x5555*2 + ROM_BASE))#define CMD_ADDR1 *((volatile U16 *)(0x2aaa*2 + ROM_BASE))
U16 num[10] = {10,20,30,40,50,60,70,80,90,100};
void? erase(void)?? /擦除代码段{?U16 i;??U32 sector;?sector = ROM_BASE;
?for(i = 0; i10; i++)?{???CMD_ADDR0 = 0xaaaa;??CMD_ADDR1 = 0x5555;??CMD_ADDR0 = 0x8080;??CMD_ADDR0 = 0xaaaa;??CMD_ADDR1 = 0x5555;???? ???*(volatile U16 *)sector? = 0x3030; //0x3030表示清除命令
??while(1)??{???if(*((volatile U16 *)sector)0x80)???? /判断是否擦除成功????break;????????//D7 == 1???uart_printf(XXXXXXXXXXXXXXXXXXXXXXXXXXX\n);??}? ??uart_printf(erasing success:0x%x\n,(volatile U16 *)sector);??sector += 0x1000;?}}
?
?
void write(void)???? /写代码段{?U16 i;?U32 ProgStart;?ProgStart = ROM_BASE;
?for(i = 0; i 10; i++ )?{???? CMD_ADDR0 = 0xaaaa;????? /写入的时序方法??? ?CMD_ADDR1 = 0x5555;??? ?CMD_ADDR0 = 0xa0a0;??? ?*(volatile U16 *)ProgStart = num[i];??????while(1)??{???if((*(volatile U16 *)ProgStart0x80)==(num[i]0x80))?????break;????uart_pr
您可能关注的文档
最近下载
- 沪教版七年级数学上学期考试满分全攻略第10章分式【单元提升卷】(沪教版)(原卷版+解析).docx VIP
- 学生心存感恩主题国旗下讲话稿.docx VIP
- 《妇幼保健学》课件——第十二章 围绝经期保健.pptx VIP
- 2024年全国职业院校技能大赛中职组(舞蹈表演赛项)考试题库(含答案)_已识别.pdf VIP
- 译林四上 Project1 教学课件.ppt VIP
- 乳腺癌的护理常规课件.pptx
- 2023年驾培相关项目运行指导方案.pdf VIP
- 个案工作 第八章-儿童辅导.pptx VIP
- 2024年山西航空产业集团有限公司人员招聘考试题库及答案解析.docx
- 运动解剖学(李世昌)第4章 消化系统.ppt VIP
文档评论(0)