欢迎来到天天文库
浏览记录
ID:27873566
大小:46.50 KB
页数:14页
时间:2018-12-06
《如何自动识别是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
此文档下载收益归作者所有