(嵌入式Linux 8 )NOR

本文介绍了NOR Flash的硬件连接、UBOOT操作,包括读取ID、进入CFI模式读取信息、写数据的步骤。详细讨论了如何在UBOOT中进行读写操作,并提供了norflash_test的测试流程,包括识别、擦除、编写和读取地址。
摘要由CSDN通过智能技术生成

NorFlash原理及硬件操作

资料来自:韦东山嵌入式linux

NorFlash硬件连接图:

可以看出数据线有16根,则位宽16位,地址线ADDR1接A0,ADDR2接A1。根据A0的值判断16位数据高低位

UBOOT操作:

1.读数据

md.b 0

2.读ID

根据手册的读取方法:

往地址555H写AAH
往地址2AAH写55H
往地址555H写90H
读0地址得到厂家ID: C2H
读1地址得到设备ID: 22DAH或225BH
退出读ID状态: 给任意地址写F0H

因为地址线的接线方式,555H是写给Norflash接口上的数据,那么在2440发出来的应该是555h<<1,Norflash才能收到555h

所以Uboot应该写入:

往地址AAAH写AAH                      mw.w aaa aa
往地址554写55H                       mw.w 554 55
往地址AAAH写90H                      mw.w aaa 90
读0地址得到厂家ID: C2H               md.w 0 1
读2地址得到设备ID: 22DAH或225BH      md.w 2 1
退出读ID状态:                        mw.w 0 f0

3.Nor有两种规范。如果需要获得norflash的信息(容量大小,电压大小等)1.jedec,通过读取flash的ID与uboot内核中比较获得信息,该方法适用于比较老的norflash。2.cfi模式,直接读取norflash中的CFI信息,其中就包含了flash的各种信息。

进入CFI模式    往55H写入98H
读数据:        读10H得到0051
               读11H得到0052
               读12H得到0059   //51 52 59对应QRY设备名称
               读27H得到容量

2440的A1接到NOR的A0,所以2440发出(555h<<1), NOR才能收到555h这个地址
UBOOT怎么操作?
进入CFI模式    往AAH写入98H            mw.w aa 98
读数据:        读20H得到0051           md.w 20 1
               读22H得到0052           md.w 22 1
               读24H得到0059           md.w 24 1
               读4EH得到容量           md.w 4e 1
               退出CFI模式             mw.w 0 f0

上述md.w 4e 1返回0015h,即2^21Byte,那么flash一共2M

4.写数据。

Nor启动时,norflash接在bank0,基地址0,2440读取Nor中的0地址作为0地址,所以Nor共占有地址2*1024*1024=0x200000,0x200000以外的地址便是内存地址,可以直接读写,但是0x200000以下的地址可直接读,但是不可直接写。写数据步骤:如果源地址中的内容已经被擦除(擦除后是0xff),则:

往地址555H写AAH 
往地址2AAH写55H 
往地址555H写A0H 
往地址PA写PD

2440的A1接到NOR的A0,所以2440发出(555h<<1), NOR才能收到555h这个地址
UBOOT怎么操作?
往地址AAAH写AAH               mw.w aaa aa
往地址554H写55H               mw.w 554 55
往地址AAAH写A0H               mw.w aaa a0
往地址0x100000写1234h         mw.w 100000 1234

如果源地址内容未擦除,则先擦除,后写入:

先擦除
mw.w aaa aa   //aaa对应Sector Erase中的555<<1
mw.w 554 55
mw.w aaa 80mw.w aaa aa
mw.w 554 55
mw.w 100000 30

 再烧写
mw.w aaa aa
mw.w 554 55
mw.w aaa a0
mw.w 100000 5678

 

Nor_编程

根据NorFlash的读取规则,可以实现Nor上的测试:

        * 1. 识别nor flash
        * 2. 擦除nor flash某个扇区
        * 3. 编写某个地址
        * 4. 读某个地址

1. 添加norflash_test测试

void nor_flash_test(void)
{
    char c;
    while(1)
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值