NOR NAND FLASH编程
NOR FLASH ?和NAND FLASH主要区别 <1>NOR地址线和数据线分开,NAND闪存芯片因为共用地址和数据总线 NAND FLASH ? ? ?NandFlash的数据是以bit 的方式保存在memory cell里的,一般来说,一个cell 中只能存储一个bit,这些cell 以8 个或者16 个为单位,连成bit line,形成所谓的byte(x8)/word(x16),这就是NAND Device 的位宽。这些Line 组成Page, page 再组织形成一个Block。k9f1208的相关数据如下: 命令集 ⑴ Read 1
例如 static void WritePage(U32 addr,U8 *buf) ? //addr表示flash中的第几页,即‘flash地址>>9’? NOR FLASH SST39VF1601NorFlash ** 器件特性:随机读写,按扇区、块、整片擦除,写数据前必须擦除数据地址所在的扇区。 ** 器件容量:1Mb * 16 **?????????? = 2MB **?????????? = 512个扇区 * 2048字/扇区(1字=2字节) **??????????= 32个块 * 16个扇区/块 * 2048字/扇区(1字=2字节)#define? GetAddr(addr)?(volatile uint16?*)(FLASH_ADDR|(addr<<1)) ? //CPU A1 接 FLASH的 A0(为何如此,CPU地址是按字节递增),因此要右移1位 /**********************************************************************Function name: WordProgram **Descriptions: 半字(16位)数据编程。??? **Input: Addr????? 编程地址(SST39VF1601内部地址)?? **??????? Data????? 编程数据 **Output: 返回TRUE表示操作成功,返回FALSE表示操作失败 **Last modified Date: 2011-12-13 **------------------------------------------------------------------- **Modified by: **Modified Date: **------------------------------------------------------------------- ********************************************************************/ int? WordProgram(uint32 Addr,uint16 Data) {? ??? volatile uint16? *ip; ??? uint16?temp1,temp2; ? ??? ip = GetAddr(0x5555);?? // 转换地址0x5555 ??? ip[0] = 0xaaaa;???????? // 第一个写周期,地址0x5555,数据0xAA ??? ip = GetAddr(0x2aaa); ??? ip[0] = 0x5555;???????? // 第二个写周期,地址0x2aaa,数据0x55 ??? ip = GetAddr(0x5555); ??? ip[0] = 0xa0a0;???????? // 第三个写周期,地址0x5555,数据0xA0 ??? ip = GetAddr(Addr); ??? *ip = Data;???????????? // 第四个写周期,地址Addr,数据Data ? ??? temp1 = *ip;??????????????? // 预读处理 ??? while(1)??????????????? // 等待操作完成 (若编程操作没有完成,每次读操作DQ6会跳变) ??? {? ??????? temp1 = *ip;??????????? ??????? temp2 = *ip; ??????? if(temp1 == temp2) ??????? {? ??????????? if(temp1 != Data) ??????????? {? ??????????????? return(FALSE); ??????????? } ??????????? else ??????????? {? ??????????????? return(TRUE); ??????????? } ??????? } // end of if(temp1 == temp2)... ??? } // end of while(1)...? ??? return(TRUE); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Ajax(Asynchronous JavaScript and XML)在JQue
- 多React Native项目时依赖管理的最佳实践
- 学习cocos2d-js遇到的问题
- 关于React Native中FlatList的onEndReached属性频
- 【Oracle 11g】ORA-01555: snapshot too old(快照
- Oracle存储过程表名称列名称做参数,动态SQL
- c# – 如何执行以下Linq / Lambda代码?
- ruby-on-rails – 无法在Windows上运行捆绑软件更
- react native 学习笔记----使用Android的原生模块
- Oracle Merge语句