当前位置:首页 > 嵌入式 > 嵌入式硬件

引 言

随着嵌入式系统的迅速发展,其应用环境的广泛性,复杂性对构建于系统上的Nor和Nand闪存设备提出更高要求,需要闪存设备传输速度更快,体积更小,容量更大,稳定性更好。Flash 是一种创作工具,设计人员和开发人员可使用它来创建演示文稿、应用程序和其它允许用户交互的内容。FLASH 可以包含简单的动画、视频内容、复杂演示文稿和应用程序以及介于它们之间的任何内容。通常,使用 Flash 创作的各个内容单元称为应用程序,即使它们可能只是很简单的动画。您也可以通过添加图片、声音、视频和特殊效果,构建包含丰富媒体的 Flash 应用程序。Flash 特别适用于创建通过 Internet 提供的内容,因为它的文件非常小。Flash 是通过广泛使用矢量图形做到这一点的。与位图图形相比,矢量图形需要的内存和存储空间小很多,因为它们是以数学公式而不是大型数据集来表示的。位图图形之所以更大,是因为图像中的每个像素都需要一组单独的数据来表示。

1 NandFLASH和NandFLASH对比

随着存储技术的高速发展,闪存设备因其在性能和成本方面的优势,可擦除性以及更低廉的价格正逐步取代传统记忆体。它们的技术性能差异显着,表1是它们的技术对比。

NorFLASH是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR Flash 技术,彻底改变了原先由EPROM(Electrically Programmable Read-Only-Memory电可编程序只读存储器)和EEPROM(电可擦只读存储器Electrically Erasable Programmable Read - Only Memory)一统天下的局面。紧接着,1989年,东芝公司发表了NAND Flash 结构,强调降低每比特的成本,有更高的性能,并且像磁盘一样可以通过接口轻松升级。NOR Flash 的特点是芯片内执行(XIP ,eXecute In Place),这样应用程序可以直接在Flash闪存内运行,不必再把代码读到系统RAM中。NOR 的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响到它的性能。NAND的结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于Flash的管理和需要特殊的系统接口。

NorFLASH使用方便,易于连接,可以在芯片上直接运行代码,稳定性出色,传输速率高,在小容量时有很高的性价比,这使其很适合应于嵌入式系统中作为 FLASH ROM。相对于NorFLASH,NandFLASH强调更高的性能,更低的成本,更小的体积,更长的使用寿命。

然而FLASH闪存却是保证数据正确性不太理想的设备,应用中可能出现坏块;这就给其在嵌入式系统中的应用,如何更好地进行数据存储管理提出了更高要求。恰当的接口设计和驱动开发是解决问题的关键。

2 FLASH接口设计

2.1 处理器内存分配情况

在分析FLASH的接口以及工作模式前,先分析处理器的内存分配情况。内核ARM920T是32位处理器,寻址空间4 GB,3 GB被处理器内部的寄存器和一些其他设备占用,只有1 GB用于外部寻址;这1 GB的空间S3C2410分为8个部分以支持不同的设备,每个空间为128 Mb,被命名为BANK。S3C2410给每个BANK一个片选即nGCS0~nGCS7来方便对BANK的操作,将CPU上相应的BANK连线接到外设芯片的片选引脚上就可以根据相应的地址对存储器进行控制。

2.2 FLASH在系统中的架构

FLASH模块通过系统总线与处理器相连,如图1所示。

随着深亚微米工艺技术日益成熟,集成电路芯片的规模越来越大。数字IC从基于时序驱动的设计方法,发展到基于IP复用的设计方法,并在SOC设计中得到了广泛应用。在基于IP复用的SoC(System on Chip的缩写,称为系统级芯片,也有称片上系统)设计中,片上总线设计是最关键的问题。为此,业界出现了很多片上总线标准。其中,由ARM公司推出的AMBA片上总线受到了广大IP开发商和SoC系统集成者的青睐,已成为一种流行的工业标准片上结构。AMBA规范主要包括了AHB(Advanced High performance Bus)系统总线和APB(Advanced Peripheral Bus)外围总线。为了拥有高速的数据交换通道,FLASH经由控制器模块通过AHB总线与处理器通信。NandFLASH控制器、NorFLASH控制器和DMA控制器都是高速总线AHB上的Master模块,都包含符合AMBA标准的总线接口模块与AHB交互工作。

2.3 NorFLASH的接口设计

系统用的NorFLASH芯片是Atmel公司开发的AT49BV1614A,存储空间为16 MB,在系统中常用于存放代码,系统上电或复位后获得指令开始执行,因此,应将其配置到Bank0,将AT49BV1614A的片选端nCE接至 S3C2410的nGCS0;AT49BVl614A的输出使能端nOE接S3C2410的nOE;写使能端nWE接S3C2410的nWBE0;将模式选择nBYTE上拉,使AT49BV1614A工作在 16 位数据模式。

2. 4 NorFLASH在系统中的具体操作

以AT49BV1614A芯片时序图为例,具体说明NorFLASH的写操作,如图2所示。

CLE信号有效时系统通过I/O口向命令寄存器发送命令00H,此时WE为低电平,写操作有效,NandFLASH处于写状态。发送命令后,接着发送要读的地址,该操作将占用WE的1,2,3,4四个周期,发送地址信息时,CLE为低电平,ALE为高电平。地址信息发送完毕后,不能立刻读取数据,因为此时芯片正处于BUSY(忙)状态,需要等待2~20 ms,之后,才能开始数据读取。

3 FLASH驱动程序开发

3.1 Linux系统下的驱动程序

Linux系统将所有的设备都看作具体的文件,通过文件系统对设备进行管理。所以在Linux架构中,和设备相关的处理分成两层:文件系统层和设备驱动层。设备驱动层用来屏蔽具体设备的细节,文件系统层向用户提供一组统一的接口。这种设备管理方法可以很好的实现设备无关性,使Linux系统可以随着外部设备的发展进行扩展。

Linux系统里将FLASH设备归属到MTD设备下管理,相对于常规块设备驱动程序,MTD设备驱动程序能更好的支持和管理闪存。具体讲,基于MTD的 FLAsH驱动程序,对上层可以很好的支持JFFS(针对NorFLASH)和YAFFS(针对NandFLASH)等文件系统,对下层FLASH的读写,擦除,坏块处理都能进行很好的管理,它在硬件设备和上层文件系统间提供一个抽象接口。

3.2 FLASH驱动程序开发流程

FLASH驱动程序有两种编程方式。一种是直接编程进内核(Kernel),另一种是编程成模块(Modules),如果编程进内核,会增加内核的大小,还要改动内核源文件,不能动态卸载,不利于调试。

FLASH驱动开发流程要经过四步:模块化设计,编译,加载,调用验证。如图4所示。

3.2.1 驱动程序的模块化设计

构成FLASH驱动程序的所有子程序,要进行模块化设计,必须加入两个函数:入口函数module init()和出口函数module_exit()。在执行程序时module_init()会调用int_init cfi probe_init(void),负责初始化MTD芯片,同时这个函数还调用register_mtd_chip_driver(),将cfi_chipdrv加入至 MTD驱动器列表chip_drvs_list中。初始化成功返回0,否则返回负值。实现代码为:

另一个函数module_exit()执行时,会调用staticvoid_exit cfi_probe_exit(void),负责清除MTD芯片驱动工作。同时这个函数还调用unregister_mtd_chip_driver(),将cfi_chipdrv从MTD芯片驱动器列表chip_drvs_list中删除。实现代码为:

其中:-O指定代码优化的级别;-D内核模块必须按照特殊定义的参数进行编译,这些参数跟在选项-D后;MODULE通知头文件要给出适当的内核模块定义;-KERNEL-通知头文件形成的目标代码在内核态运行。得到的文件*.O就是一个FLASH驱动程序的目标文件,这样FLAsH驱动程序编译好。

3.2.3 驱动程序的加载

加载模块要用到两个命令:insmod(加载),rmmod(卸载)。加载时,module_init()函数被调用,这个函数向系统设备表登记 FLAsH设备。卸载时,module_exit()函数被调用,它释放FLASH设备在系统设备表中占有的表项。注册成功后就可以用mknod命令将 FLASH设备映射为一个特别文件,其他程序使用FLASH设备时,只要对此文件进行操作就行。Linux在/dev目录中为每个设备建立了一个文件,用 ls-1命令列出函数返回值,若小于O,表示注册失败;否则表示注册成功。注册以后,Linux将FLAsH设备名与主、次设备号联系起来。当对 FLASH访问时,Linux通过请求访问FLASH设备名得到主、次设备号;然后把此访问发送到FLASH设备驱动,FLASH驱动再根据次设备号调用不同的函数。

3.2.4 驱动程序的调用验证

模块加载到内核后,然后就要调用验证。在Linux根目录下有dev子目录,这里面是节点名,这些结点是通过mknod建立的,里面有MTD字符设备节点和MTD块设备节点,通过访问这些节点来访问设备驱动程序。Open一般是设备节点上的第一个操作,访问设备时其实就是系统调用open()函数,然后 open()函数打开设备准备进行I/O操作,该函数注册进mtd_fops结构中。

上面就是NorFLASH和NandFLASH驱动程序架构,具体开发驱动程序时,就要填充架构里的程序代码,来完成驱动程序。这个框架中有一个函数表,具体到Linux系统里,需要提供一个结构来向系统说明FLASH驱动程序所提供的一组入口点,这个结构就是fop函数表。

FLASH驱动程序运行时,向内核注册,告诉系统fop函数表是跟FLASH驱动程序相关联的。当用户去访问驱动程序时,系统就告诉文件系统的管理程序,调用fop函数表就可以,然后调用函数表里的函数,完成用户要求。当从设备来收发数据时,系统不是调用read(),write()这两个函数,fop结构里没这两个函数,而是要用到一个函数blk_init_queue(),这个函数向上注册了一个请求处理函数request,对FLASH设备的读取和发送数据,都是从请求队列发出一个请求,请求调用请求处理函数,由请求处理函数执行具体的读写操作。

4 结 语

基于Samsung公司的s3c2410处理器平台,分析和设计NorFLASH和NandFLASH的接口和驱动,详细介绍两种FLASH的硬件结构、性能差异、读写时序、以及驱动开发。NorFLASH和NandFLASH因其在存储数据和程序以及性价比方面的优势,占据的存储器市场份额越来越多,并在嵌入式系统中得到广泛应用。



QICK

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

随着科技的飞速发展,电子产品在我们日常生活中扮演着越来越重要的角色。而在这些电子产品中,接口作为连接设备与外部设备的桥梁,其重要性不言而喻。其中,Type-C接口作为一种新型的接口标准,因其独特的优势,逐渐成为了众多电子...

关键字: 电子产品 Type-C 接口

随着电动汽车的普及,充电桩作为电动汽车的重要基础设施,越来越受到人们的关注。然而,对于许多电动汽车用户来说,直流充电桩和交流充电桩的接口和区别仍然是一个令人困惑的问题。本文将从接口和区别两个方面,详细探讨直流充电桩和交流...

关键字: 电动汽车 接口 充电桩

上海2023年9月20日 /美通社/ -- 2023年9月19日-23日,第二十三届中国国际工业博览会(以下简称“工博会”)在国家会展中心(上海)举行,来自全球30个国家和地区的2800家展商,覆盖从基础材料、基础零部件...

关键字: 富士 存储技术 IBM 数据流

武汉2023年9月19日 /美通社/ -- 目前,在国家政策和市场需求双重驱动下,国内数据库行业呈现出百花齐放的态势。充分竞争的市场环境下,达梦数据连续数年保持中国数据库管理系统市场占有率前列地位,成为当之无愧的国产数据...

关键字: DM DSC 国家电网 接口

深圳2023年9月15日 /美通社/ -- 9月14-15日,2023全球AI芯片峰会(GACS 2023)在深圳正式举行。峰会以【AI 大时代 逐鹿芯世界】为主题,共探AI芯片的产学研用,邀请了清华大学教授、中国半导体...

关键字: 接口 芯科 内存 AC

Type-C接口已经成为当今市场上备受青睐的接口之一。它以其小巧轻便、高速传输、支持多种协议等特点,吸引了越来越多的关注。

关键字: Type-C 接口 USB

USB-C和Type-C是两种不同的USB接口类型,它们在外观、结构和功能上有一些区别。下面将详细介绍这两种接口类型的区别和特点,帮助大家更好地了解和认识它们。

关键字: usb-c type-c 接口

USB接口是现代电子设备中常用的接口之一,它具有通用性强、传输速度快、易于使用等特点。USB接口的应用范围非常广泛,从智能手机、笔记本电脑到电脑外设、智能家居等都可以看到它的身影。在USB接口的发展历程中,出现了多种不同...

关键字: USB 接口

USB接口是一种常见的串行接口,它的全称是Universal Serial Bus,由USB Implementers Forum制定。USB接口具有通用性强、传输速度快、支持多种设备同时连接等优点,因此在现代电子设备中...

关键字: USB 接口 串行接口

总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类,计算机的总线可以划分为数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制信号。

关键字: 总线 计算机 接口
关闭
关闭