当前位置:首页 > 智能硬件 > 智能硬件
[导读]引言Flash存储器具有快速访问、低功耗、尺寸小、重量轻等特性,在系统电源关闭的情况下依然可保留数据。随着技术的发展,Flash因其在性能和成本方面的优势逐渐成为系统存储的工业标准。目前市面上,NOR Flash和NAND

引言

Flash存储器具有快速访问、低功耗、尺寸小、重量轻等特性,在系统电源关闭的情况下依然可保留数据。随着技术的发展,Flash因其在性能和成本方面的优势逐渐成为系统存储的工业标准。目前市面上,NOR Flash和NAND Flash是两种主要的Flash存储器。因NORFlash能在芯片内执行程序,一般在非大容量存储设备中采用NOR Flash作为程序存储器和非易失性数据存储器,本文以NOR Flash存储器为例,阐述一种支持多Flash的自适应驱动设计方法。

产品在批量生产时,同一款产品在不同的生产阶段常常会因价格或者货源等原因而采用不同型号、硬件接口兼容的Flash存储器,不同的Flash存储器对应不同的驱动程序。这样,产品因采用了不同厂商、不同容量、不同型号的Flash存储器,导致在一种器件上开发的驱动软件无法兼容另外一种器件,而需要对软件版本做一些额外的管理工作。当前所采用的方法是当产品选用不同类型的Flash存储器后,就添加一个软件版本,由生产线工人针对不同的Flash存储器来选择不同的Bin烧写文件和不同的软件版本,这样不仅生产效率低,而且容易出错。本文

提出一种Flash的驱动自适应的实现方法,对传统软件设计方法进行改进,实现同一驱动软件同时支持多Flash存储器,提高了生产效率。

1 传统Flash存储器驱动设计

1.1 传统Flash存储器的驱动模型

NOR Flash的读取如同RAM和EEPROM一样不需要特殊的指令,但对Flash的写入、复位、读取ID等操作则需要特殊的编程指令序列。通常不直接写入Flash的主要原因是为了防止加电/掉电时产生的脉冲破坏Flash的原始数据。Flash支持的命令集也因器件系列和厂商的不同而不同,因此需要根据Flash支持的指令集编写驱动程序。

传统的Flash存储器驱动模型如图1所示。驱动层与Flash指令集相关,提供基本的操作函数给适配层调用,不同厂商的Flash指令集不同,对应的驱动层代码不同。适配层将Flash操作函数进行一系列包装以实现某一功能,它为应用层提供标准的应用接口,适配层代码在移植过程中一般不需要修改。应用层函数调用适配层函数以实现某一具体功能。

1.2 Flash常用接口

Flash作为系统的程序存储器和数据存储器,ARM处理器对Flash的操作有以下几种:

◆初始化配置

◆读数据

◆写数据

◆擦除

◆擦除状态查询

◆暂停擦除

◆恢复擦除

1.3 Flash的兼容性设计

传统Flash模型只针对一种特定指令集的Flash芯片,如配置模块是针对Flash_A的时序和指令集来编写的,其对应的软件为Software_ A,没有考虑其兼容性。但在产品的后续生产过程中,当需要将Flash_A更换为接口兼容的Flash_B时,需要为其重新编写配置接口模块,对应的软件为Software_B。Software_A支持Flash_A,Software_B支持Flash_B,由此就带来一个软件版本的管理问题。

为了便于产品的升级,产品在软硬件设计过程中往往要考虑其兼容性,硬件的兼容相对软件与软件的兼容要容易得多。如图2所示,NOR Flash的引脚主要有:8/16位的数据总线,地址总线(与Flash大小相关),控制引脚(OE#、CE#、AVD#、WE#、WP#)。同一系列Flash芯片的电气特性基本兼容,包括其引脚连接、封装方式、直流和交流特性等,如Toshiba公司的ty5701111183kc04和Spansion公司的S29NS128N、S29N 128N的引脚基本兼容。

硬件的兼容由芯片厂商来完成,而软件的兼容则需要改善Flash驱动模型来实现。NOR Flash的生产厂商很多,Flash支持的指令集也冈器件系列和生产厂商的不同而不同。

针对以上问题,本文提出一种Flash存储器自适应的设计方法,在传统Flash驱动模型中添加自适应层,同时在硬件驱动层中添加多种Flash的接口函数。系统在自适应层中自动搜索相应Flash的函数接口,从而实现Software_AB同时支持Flash_A和Flash_B。自适应方法与传统方法的比较如图3所示。

2 Flash自适应方法设计

传统的Flash驱动Software_A中只为Flash_A提供了驱动接口函数。自适应Flash驱动Software_AB在硬件接口层中同时为Flash_A和Fla sh_B各提供一套驱动接口函数,系统通过读取Flash存储器的ID号来识别当前Flash,从而选择适合当前Flash存储器的接口函数。以此类推,如果Software_ABC中添加了Flash_C的接口操作函数,则Software_ABC也添加对Flash_C的支持,实现3种Flash存储器的自适应。

2.1 Flash自适应方法模型及实现

自适应模型与传统模型的比较如图4所示。自适应驱动方法在传统驱动方法的基础上添加了自适应层,硬件驱动层里有多款Flash的接口操作函数。

一个驱动程序中存在多种Flash的接口函数,系统在自适应层中分三步来寻找对应Flash的接口函数。如图5所示,自适应层实现方法如下:

①读取Flash设备ID;

②fLash_nor_probe(),系统根据读取到的ID,遍历指针数组*(spansion[]),寻找当前Flash的驱动信息,并将之存储在全局变量中;

③根据相应的全局变量,自动寻找相应的驱动函数。

2.2 Flash接口函数的实现

本文以Toshiba公司ty5701111183kc04的Flash ID读取为例,介绍NOR Flash驱动函数的实现方法。

Flash ID读取流程:

①发送复位指令0xf0令Flash复位;

②给Flash发送读取ID的命令序列;

③读取Flash ID存储到全局变量中。

Flash ID读取流程如图6所示。

2.3 自适应驱动的结构设计

指针数组*(spansion_part[])的每个成员都是一种Flash的接口函数指针,系统每添加一种Flash的驱动接口,需要在spansion_part中添加一个成员变量,数据有多少个成员变量,就代表系统支持多少种Flash。本系统现已支持6种Flash,*(spansion_part[])数组有6个成员变量和1个NULL(结束标志)。

fsi_nor_device结构体定义如图7所示。flash_name[32]用来存储当前Flash的名字;id[4]存储Flash唯一的ID号,在Flash的识别阶段,系统通过比较ID号来识别当前系统所采用的Flash,从而选择对应的接口函数;geometry存储的是Flash的一些物理参数信息,其成员变量family type标记当前Flash属于哪一个系列,device_size存储Flash容量大小,X_iface存储Flash的位宽(16位/8位),write_buf_size存储Flash的缓冲区大小,blk_regions记录的是Flash的硬件结构方面的信息,给文件系统提供参数。ops是一个指向结构体的指针,ops所指向的结构体各个成员变量都是当前Flash的操作函数,Ops->read()函数实现Flash的读操作,ops->write()函数实现对Flash的写操作。

本系统采用结构化的编程思想,在自适应层中构造了一组数据结构,为适配层提供统一的接口函数,使各种Flash驱动接口相互独立。每个Flash的接口函数都是*(spansion_part[])的一个成员变量,只需要在*(spansion_part[])添加一个成员变量即可多支持一款Flash存储器。

自适应驱动的结构如图8所示。如果自适应层读取的ID等于spansion_part[O]->geometry.id,则确认 当 前 Flash 为ty5701111183kc 04,spansion_parts[0]->ops->config()为当前Flash的配置函数ty5701111183kc04_configure;依次类推spansion_parts[0]->ops->read()为当前Flash的写函数,spansion_part[0]->geometry.device_size是Flash的容量大小。

2.4 Flash自适应识别过程

flash_nor_probe()函数遍历数组指针*(spansion_parts[])寻找符合当前Flash的驱动函数。如图9所示,自适应识别过程如下:

①flash_nor_drive指向*(spansion_parts[])的第一个元素;

②将当前Flash ID flash_id_dest[4]与spansion_parts[i]->id[4]相比较;

③如果ID匹配,对应的spansion_partsEi]->ops是当前Flash的函数,spansion_parts[i]->ops->write()是当前Flash的写操作函数;

④如果ID不相同,fsi_nor_drive指向*(spansion_parts[])的下一个元素,重复步骤③,如果遍历*(spansion_parts[])还未找到ID号等于flash_id_dest[4]的元素,则表示当前软件版本不支持这款Flash,对应的驱动不存在,系统报错。

结语

本文主要对NOR Flash存储器驱动的自适应进行了重点设计,为上层文件系统提供了统一的接口去调用Flash存储器功能函数。对于特定Flash功能函数的实现并未详细讲解,整个方案在S3C2440 ARM9平台上对Spansion Flash(S29NS064N、S29NS128N、S29N128N)和Toshiba公司Flash ty5701111183kc04四款Flash的自适应进行了验证,后期还可以添加其他Flash的驱动函数,以再实现对其他Flash的自适应的支持。本方案可以进一步扩展,在ARM9平台上用软件的方式实现系统对NAND Flash、LCD和其他外围IC的自适应。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭