NOR Flash原理与硬件操作
/*
*硬件平台:韦东山嵌入式Linxu开发板(S3C2440.v3)
*软件平台:运行于VMware Workstation 12 Player下UbuntuLTS16.04_x64 系统
*参考资料:《嵌入式Linux应用开发完全手册》韦东山,开发版原理图,MX29LV160DBTI-70G(NOR FLASH) datasheet,MX29LV800BBTC datasheet
*/
目录
一、什么是NOR Flash
1、简介
NOR Flash是Intel在1988年创建的一种非易失闪存技术,是市场上两种主要的非易失闪存技术之一,另一项技术就是Nand Flash,由1989年东芝公司发布建立。
2、特点
将通过与Nand Flash对比介绍
指标 | NAND Flash | NAND Flash |
---|---|---|
容量 | 1MB~32MB | 16MB~512MB |
读 | 快 | 快 |
写 | 慢 | 快 |
XIP | Yes | No |
易用性 | 容易 | 复杂 |
主要用途 | 用于保存代码和关键数据 | 用于保存数据 |
二、怎么读NOR Flash
方法:使用UBOOT体验操作NOR Flash
1、查询手册命令
参考芯片手册如下:
分析:
1、对于NOR Flash 操作每个命令都需要输入对应的指令。
2、其中某些命令由于芯片实际连接的位宽不同而指令不同,例如Read Silicon ID。
2、查看NOR Flash硬件原理图
分析:
1、数据线有16条,可以知道应该使用Word对应指令。
2、连接CPU的地址线与NOR Flash的地址数不同,A n对应的是LADDR n+1。
3、往地址写数据时,手册指令的地址需要左移一位,即乘2.
3、 实例操作:读 ID
查询手册可知,指令如下:
往地址555H写AAH
往地址2AAH写55H
往地址555H写90H
读0地址得到厂家ID: C2H
读1地址得到设备ID: 22DAH或225BH
退出读ID状态: 给任意地址写F0H
由于A n对应的是LADDR n+1,所以2440发出(555h<<1),NOR才能收到555h这个地址即:
往地址AAAH写AAH
往地址554写55H
往地址AAAH写90H
读0地址得到厂家ID: C2H
读2地址得到设备ID: 22DAH或225BH
代码表示为:
mw.w aaa aa //往地址AAAH写AAH
mw.w 554 55 //往地址554写55H
mw.w aaa //90往地址AAAH写90H
md.w 0 1 //读0地址得到厂家ID: C2H
md.w 2 1 //读2地址得到设备ID: 22DAH或225BH
mw.w 0 f0 //退出读ID状态:
三、怎么写NOR Flash
通过学习以及查询资料知道NOR Flash可以像内存一样读,但是它不可以像内存一样写,需要先擦除,确保地址上原先数据为0xffff,才可以进行写操作。
1、查询手册命令
擦除命令:
往地址555H写AAH
往地址 2AAH写55H
往地址555H写80H
往地址555H写AAH
往地址 2AAH写55H
往地址SA写30H
SA为需要写入数据的地址
写命令,对应Program一栏:
往地址555H写AAH
往地址 2AAH写55H
往地址555H写A0H
往地址PA写PD
2、实例操作:写数据
由于A n对应的是LADDR n+1,所以2440发出(555h<<1),NOR才能收到555h这个地址即:
擦除:
往地址555H写AAH
往地址 2AAH写55H
往地址555H写80H
往地址555H写AAH
往地址 2AAH写55H
往地址SA写30H
写
往地址AAAH写AAH
往地址 554H写55H
往地址AAAH写A0H
往地址PA写PD
代码表示为:
/* 擦除 */
mw.w aaa aa //往地址AAAH写AAH
mw.w 554 55 //往地址 554H写55H
mw.w aaa 80 //往地址AAAH写A0H
mw.w aaa aa //往地址AAAH写AAH
mw.w 554 55 //往地址 554H写55H
mw.w 100000 30 //往地址AAAH写AAH
/* 写 */
mw.w aaa aa //往地址AAAH写AAH
mw.w 554 55 //往地址 554H写55H
mw.w aaa a0 //往地址AAAH写A0H
mw.w 100000 1234 // 往地址0x10000000写1234
md.w 100000 1 //显示地址为0x10000000上读数据
4、疑问
问题1:既然上面你的指令的第一条就是写入了,那么我直接执行mw.w PA PD 这个指令可以写入吗?
解答:
1、试验
直接执行以下指令:
md.w 100000 1 //用于查询地址上原来的数据
mw.w 100000 2345 //写入信息
md.w 100000 1 //用于查询地址上的数据
可以看到2345没有写进去,所以想要在NOR Flash上进行写操作正确步骤为先擦除,后烧写。
四、CFI模式
1、什么是CFI模式
CFI接口是由Intel, AMD, Sharp, Fujutsu推动JEDEC制定的一个通用接口,用来帮助程序读取Flash的制造商ID和设备ID,确定Flash的大小,获取Flash的各个物理特性,比如block块的擦除时间等。CFI标准目前只支持Parallel Nor Flash,还不支持SPI Flash和Spansion的ORNAND Flash。
2、CFI模式中可以查询的具体信息
通过查询MX29LV160DBTI-70G(NOR FLASH) datasheet第26页可知CFI模式可查询到如下信息:
Identifcation Data Values(识别码):
对于支持CFI模式的设备,可以通过读取地址0x10到0x12中的数据,得出字符为QRY则表示设备支持CFI模式。
System Interface Data Values(系统接口数据值):
通过读取图中的地址,可以得到NOR Flash中的电气特性。
Device Geometry Data Values(设备物理信息):
通过读取图中的地址,可以得到NOR Flash中的物理信息,如内存大小、扇区块数等等。
Primary Vendor-Specifc Extended Query Data Values(原始设备提供商查询信息):
通过读取图中的地址,可以得到NOR Flash中的提供厂商信息。
3、如何进入CFI模式
通过上面的芯片手册图可以知道:
往55H写入98H
由于A n对应的是LADDR n+1,所以2440发出(555h<<1),NOR才能收到555h这个地址即:
往地址AAAH写98H
代码表示为:
mw.w aaa 98
在下一讲中,讲通过进入CFI查询模式,查询并打印出容量和各个扇区起始地址。