Uboot下关于Nor Flash的驱动问题.doc

Uboot下关于Nor Flash的驱动问题.doc

ID:27505806

大小:126.50 KB

页数:47页

时间:2018-12-04

Uboot下关于Nor Flash的驱动问题.doc_第1页
Uboot下关于Nor Flash的驱动问题.doc_第2页
Uboot下关于Nor Flash的驱动问题.doc_第3页
Uboot下关于Nor Flash的驱动问题.doc_第4页
Uboot下关于Nor Flash的驱动问题.doc_第5页
资源描述:

《Uboot下关于Nor Flash的驱动问题.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Uboot下关于NorFlash的驱动问题  本文主要是关于NorFlash的相关介绍,并着重对NorFlash的编写及驱动程序进行了相近的阐述。  NorFlash驱动编写  1.  Bottom/TopBootSect(底部/顶部启动块)  所谓的bootsect,是指的是NorFlash和NandFlash不太一样。NandFlash从开始到最后,都是由同样大小的page所组成的。  而NorFlash,一般都是有个bootsect,好像是由于历史原因,常将NorFlash用于作为存储启动代码的设备,也就是从NorFlash启动,所以,这个bootsect块,专门设计出来

2、,用于存放启动代码。如果详细解释,按照datasheet中的描述就是,第一个或最后一个,此处是bottomsect,所以是最后一个64KB大小的块,被分为4个独立的块。第一个16KB,用于少量的系统初始化代码。而2个8KB的块用于存储参数,余下的32KB的块叫做MainBlock,用于存储应用程序的代码。  2.  Sector(扇区)  此处的sector(扇区)也就是flash里面的最小的擦除单位:块(block)。  所以sectorcount,也就是有多少个block。  3.  SectorCount(扇区数)和SectorList  此处的NorFlash,M29W

3、320DB,一共有正常的63个64KB的block,加上上面提到的原先是正常的1个64KB分成的4个小块,所以是63+4=67个。  而所谓的驱动中的sectorlist,也就是blocklist,代码注释写的也很清楚了:  ulong  start[CFG_MAX_FLASH_SECT];  /*physicalsectorstartaddresses*/  用于存储每一个块的起始地址的。也是需要你驱动初始化的。对于这里的M29W320DB,也很简单了,从开始顺序加上块大小64K,直到最后3个,计算一下对应地址,填进去就可以了。  4.  Protect(写保护)  NorF

4、lash从软件的寄存器配置和硬件上,都提供了对应的保护机制,目的是,防止有意或无意间,把那些不希望被改动/删除的数据破坏了。比如有些机制把Flash的一些系统启动参数存储NorFlash,或者是其他某种原因,只允许你使用部分NorFlash的空间,所以,把这类需要保护的部分,在uboot的flash_info_t的结构体中,把对应的位设置成1:  uchar  protect[CFG_MAX_FLASH_SECT];/*sectorprotectionstatus  */  这样,之后程序就可以避免有意无意的擦除有用的数据了。  【写NorFlash驱动时的一些注意事项】  1

5、.  位宽(bitwidth,X8/X16/X32)  在NorFlash控制器,此处我这里用的是,ARM的PromeCellPL172,MPMC(MultiPortMemoryController),可以接多种不同的存储设备,比如SRAM(StaticMemory),NorFlash,而其中又可以分别设置是否支持PageMode,Extendedwait和写保护(启用写保护,就可以看出是ROM了)等。  在硬件上MPMC和NorFlash连接好了之后。在使用NorFlash之前,要初始化MPMC。  这里说的,要注意位宽,是因为我开始就没注意到,所以,在开始初始化MPMC的时

6、候,设置MPMCStaticConfig寄存器的时候,设置成了X16(16位),但是,后来去uboot中找到别人的NorFlash的驱动(参考的是boardoxcflash.c),发出的命令去读ID,也都是X8(8位)的:  addr[0x0AAA]=0xAA;  addr[0x0555]=0x55;  addr[0x0AAA]=0x90;  所以,导致读取ManufactureID和DeviceID,都无法读正确,读的都是0xFF。后来重新去确认,在配置MPMCStaticConfig的时候,是配置的X16模式,然后再发命令,也对应的是按照X16模式发命令,可以参考:

7、boardmvs1flash.c中的代码,读取ID时是:  addr[0x0555]=0x00AA;  addr[0x02AA]=0x0055;  addr[0x0555]=0x0090;  才能正确读取到期望出的ID:  value=addr[0];  /*manufacturerID  */  读出来的是0x20h。  value=addr[1];  /*deviceID  */  读出来的是0x22CB  和datasheet中的匹配:  –ManufacturerCode:002

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

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

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