Flash驱动
对于Flash芯片的驱动,Linux提供了完善的驱动程序,只需要在内核配置里面选择好相应的类型即可。
在Linux中通过MTD子系统提供的抽象设备机制,来实现对Flash设备的管理控制和数据读写。MTD设备是一类特殊的存储设备,如常用的Flash芯片、CFI卡等。MTD提供通过字符设备方式和块设备方式来管理控制MTD设备的机制。
MTD核心层分为:用户模块接口层、MTD抽象层和MTD设备驱动模块层。MTD核心层通过设备驱动模块实现对存储设备的物理访问功能,通过用户模块提供用户空间直接访问的接口。
MTD的设备驱动模块层负责驱动Flash硬件,只需实现实际设备上的访问控制,与内核交互的复杂工作则由MTD抽象层完成。其中也对Nand-Flash的驱动进行了抽象,还实现了错误检测与纠错(ECC)和坏块处理等用户模块层提供从用户空间直接访问的接口,上层应用只需通过MTD抽象层提供的字符设备方式或块设备方式来访问MTD抽象设备,通过MTD的内部机制把这些请求交给实际的驱动模块去执行。MTD抽象层定义了抽象的MTD设备结构,对于具体设备的驱动模块,需要设计好公共函数的实际内容,并在检测到实际设备后注册一个MTD设备,就可通过MTD提供的字符设备访问方式或块设备访问方式直接使用具体的硬件设备。
MTD程序编写在以后的章节里会详细介绍。
3硬件电路设计
在系统中使用了两种Flash芯片,其中Nor-Flash主要用于存放系统代码,而Nand-Flash主要用于存放用户信息。
3.1 Nor-FIash的设计
该Flash采用25根地址线和16位数据线,可以通过nBYTE这个信号来选择是8位还是16位方式访问。该系统是采用16位方式访问的,该信号线接高电平,A0地址线不起作用,一同接高。nOE/nWE是读写信号,由EP7312的读写控制线直接控制。Flash的片选信号有3个,它们组合后的结果如表7-1所示。