关 闭

新闻中心

EEPW首页>工控自动化>设计应用> 一种支持多种闪存的自适应驱动设计

一种支持多种闪存的自适应驱动设计

作者: 时间:2012-05-23 来源:网络 收藏

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

f.JPG

2.3 自适应驱动的结构设计

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

k.JPG

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存储器。

l.JPG

自适应驱动的结构如图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所示,自适应识别过程如下:

m.JPG



关键词:闪存驱动设计

评论


相关推荐

技术专区

关闭