如何自动识别是NOR flash 浅谈NOR flash工作原理.doc

如何自动识别是NOR flash 浅谈NOR flash工作原理.doc

ID:27873566

大小:46.50 KB

页数:14页

时间:2018-12-06

如何自动识别是NOR flash 浅谈NOR flash工作原理.doc_第1页
如何自动识别是NOR flash 浅谈NOR flash工作原理.doc_第2页
如何自动识别是NOR flash 浅谈NOR flash工作原理.doc_第3页
如何自动识别是NOR flash 浅谈NOR flash工作原理.doc_第4页
如何自动识别是NOR flash 浅谈NOR flash工作原理.doc_第5页
资源描述:

《如何自动识别是NOR flash 浅谈NOR flash工作原理.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、如何自动识别是NORflash浅谈NORflash工作原理  本文主要是关于NORflash的相关介绍,并着重对NORflash的识别及其工作原理进行了详尽的阐述。  NORflash工作原理  NorFlash具有像内存一样的接口,它可以像内存一样读,却不可以像内存一样写,NorFlash的写、擦除都需要发出特定的命令。谈到NorFlash通常就会涉及到CFI([CommonFlashInterface)接口,一般NorFlash都支持发命令来读取厂家ID和设备ID等基本信息,但并不是所有的Nor  Flash都支持发命令来获取和芯片本身容量大小、扇区数、擦除块大小等信息。为了让将来

2、的NorFlash兼容性更好,引进了CFI接口,将芯片有关的信息都写入芯片内部,通过CFI命令就可以获取这些信息。  Linux内核中对各种型号的NorFlash都有很好的支持,但是其组织复杂,不利于分析。这里选用u-boot里面的NorFlash代码来分析。代码位于:u-boot-2010.06/board/samsung/smdk2410/flash.c。  通常内核里面要识别一个NorFlash有两种方法:一种是jedec探测,就是在内核里面事先定义一个数组,该数组里面放有不同厂家各个芯片的一些参数,探测的时候将flash的ID和数组里面的ID一一比较,如果发现相同的,就使用该数

3、组的参数。另一种是cfi探测,就是直接发各种命令来读取芯片的信息,比如ID、容量等。jedec探测的优点就是简单,缺点是如果内核要支持的flash种类很多,这个数组就会很庞大。。。/samsung/smdk2410/flash.c文件采用的是第一种方法,但是还是有些区别的,内核里面用  jedec探测一个芯片时,是先通过发命令来获取flash的ID,然后和数组比较,但是flash.c中连ID都是自己通过宏配置的。  unsignedlongflash_init(void)  {  for(i=0;i《CONFIG_SYS_MAX_FLASH_BANKS;i++)  {  ulongfl

4、ashbase=0;  //设置flash_id,这个标志保存厂家ID和设备ID  flash_info[i].flash_id=  #ifdefined(CONFIG_AMD_LV400)  (AMD_MANUFACT&FLASH_VENDMASK)

5、(AMD_ID_LV400B&FLASH_TYPEMASK);  #elifdefined(CONFIG_AMD_LV800)  (AMD_MANUFACT&FLASH_VENDMASK)

6、(AMD_ID_LV800B&FLASH_TYPEMASK);  #else  #error“Unknownflashconfigured”  #e

7、ndif  //设置flash大小和扇区数  flash_info[i].size=FLASH_BANK_SIZE;  flash_info[i].sector_count=CONFIG_SYS_MAX_FLASH_SECT;  //对于flash的每个扇区,都需要保存扇区的首地址  for(j=0;j《flash_info[i].sector_count;j++)  {  。。.。。.  flash_info[i].start[j]=flashbase+(j-3)*MAIN_SECT_SIZE;  }  size+=flash_info[i].size;//片外所有flash的总大小

8、  }  //对代码区的扇区设置写保护,这里只是软件的一种设定  flash_protect(FLAG_PROTECT_SET,CONFIG_SYS_FLASH_BASE,  CONFIG_SYS_FLASH_BASE+monitor_flash_len-1,  &flash_info[0]);  //如果环境变量保存在nor里面,还需对这些扇区设置写保护  flash_protect(FLAG_PROTECT_SET,CONFIG_ENV_ADDR,  CONFIG_ENV_ADDR+CONFIG_ENV_SIZE-1,&flash_info[0]);  returnsize;//返

9、回flash大小  }  flash_init()函数主要是做一些flash的初始化,比如设置flash的ID、大小、扇区数等来构造flash_info_t结构体,但是从上面的代码可以看出,在该初始化函数中并没有做任何与硬件有关的初始化,所有的值都是通过外部赋值,也就是说我们可以给这些成员变量赋任何我们想要的值,哪怕这些值并不是  flash真正的参数,虽然这些值并不影响本函数的调用,但是和下面这些函数就有密切关系。  intflash_era

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

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

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