更多>>所有分类 >学习指南 >学习资料 >基于ARM920T的IDE硬盘接口设计>详细
| 王景辉主讲《新版标准日本语初级上下册》在线视频课程。 进入免费试听! 标签:ARM 嵌入式系统 编程把持,设备,硬盘,存放,结构, 基于ARM920T的IDE硬盘接口设计 软件开发学习资料 |
1 引言
20世纪90年代后期,嵌进式系统在产业把持、远程监控和数据采集等领域的利用日趋广泛,人们对嵌进式系统的存储容量也提出了较高的请求。因此研制实用于嵌进式系统的大容量、高速率、高可靠性的数据存储系统变得日益重要。本文针对一款基于ARM920T芯片的开发板,根据ATA硬盘接口规范,设计了IDE硬盘接口电路,实现了对IDE硬盘的读写,可以在Linux系统中对其上的文件系统自由访问,达到了高速率和高可靠性的请求。
2 ARM920T与S3C2410先容
ARM 包含一系列微处理芯片技巧。ARM920T是ARM 系列微处理器的一种,它采用5阶段管道化ARM9TDMI内核,同时配备了Thumb扩大、EmbeddedICE调试技巧和Harvard总线。在生产工艺雷同的情况下,性能可达ARM7TDMI芯片的两倍之多。ARM920T系列重要利用于机顶盒产品、掌上电脑、笔记本电脑和打印机。
S3C2410处理器是Samsung 公司基于ARM 公司的ARM920T处理器核,采用0.18umSU造工艺的32位微把持器。该处理器拥有独立的16KB指令Cache和16KB数据Cache、MMU、支撑TFT的LCD把持器、NAND 闪存把持器、3路UART、4路DMA、4路带PWM 的Timer、I/O口、RTC、8路10位ADC、TouchScreen接口、IIC-BuS接口、IIS-BuS接口、2个USB主机、1个USB设备、SD主机和MMC接口和2路SPI。S3C2410处理器最高可运行在268MHz。
3 IDE接口及其规范
IDE(Integrated Drive Electronics)是从IBM PC/AT上应用的ATA接口发展而来的。IDE/ATA磁盘驱动器与早期的ATA驱动器相比,增长了任务文件存放器,包含数据存放器、状态存放器以及反响地址的驱动器号、磁头号、道号和扇区号存放器等。ATA接口规范定义了信号电缆和电源线的电器特点、互联信号的电器和逻辑特点,还定义了存储设备中可把持的存放器以及命令和协议。
3.1 存放器
规范定义了两组存放器:命令存放器和把持存放器。命令存放器用来吸收命令和传送数据,把持存放器用来把持磁盘把持。常用的存放器包含数据存放器、命令存放器、驱动器/磁头存放器、柱面号存放器、扇区号存放器、扇区数存放器和状态存放器。
3.2 数据传输方法
ATA接口规范定义了两种数据传输方法:可编程I/O(PIO)方法和DMA方法。PIO传送方法下,CPU对把持器的访问都是通过PIO进行的,包含从把持器读取状态信息和毛病信息,以及向把持器发送命令和参数。在一次PIO数据传输过程中,CPU先选址,然后使读/写信号有效,CPU或把持器放数据到数据总线,把持器或CPU读取数据,把持完成后,开释总线,这样一次数据传输完成。DMA方法,即直接内存访问,CPU把缓冲区的地址与需要读写的长度告诉外设,外设在准备好后向CPU发出一个DMA恳求,请求CPU暂停应用内存,获得批准后就直接在内存和外设之间传输数据,完成后再把对内存的访问权回还给CPU。
4 硬件实现
如图1所示,S3C2410与硬盘之间接口电路分为3个部分:片选信号、数据信号和把持信号。硬盘上存放器分为两组,分辨由IDE_CS0和IDE_CS1选中,DA0~DA2则用于组内存放器寻址;数据线DD0~DD15因存在输进/输出方向标题,故用nOE(读信号)接buffer(74LVTH162245)的DIR引脚来把持缓冲器方向;把持信号部分因该CPU与硬盘之间DMA时序不一致,故采用一块EPM7032AETC44-7芯片用于调剂其时序。PIO模式下,不需要DMARQ和nDMACK信号,DMA模式下,这两个信号才起作用。
5 软件实现
硬盘驱动程序实现分为初始化、打开设备、设备I/O把持和开释设备等几部分。
5.1 硬盘初始化
与X86不同,在ARM 系统结构中,对内存和外设的访问应用同一的指令,所以要对外设地址进行内存映射。也就是说,通过一张表将I/O地址映射到内存空间中来,这部分工作是在系统初始化期间完成的。
在IDE子系统初始化期间,Linux系同一旦创造一个IDE把持器,就设置它的ide_hwif_t结构来反响这个把持器和与之相连的磁盘;向Linux的VFS登记每一个把持器,并分辨把它加到blk_dev和blkdevs向量表中;恳求把持适当的IRQ中断(主IDE把持器是14,次IDE把持器是15)和I/O空间(主把持器0x1f0,次把持器0x170):为每一个找到的IDE把持器在gendisk列表中增长一个条目。
IDE硬盘的初始化工作由idedisk_init完成:
(1)在数组ide_hwifs中找出已登记得各IDE把持器把持的所有IDE硬盘(一个把持器最多把持两个硬盘),每个IDE硬盘对应一个ide_drive_t结构。
(2)对找到的每个IDE硬盘,调用函数ide_register_subdriver填写各IDE硬盘结构中的相干信息域,重要是填写其驱动程序结构ide_driver_t。硬盘驱动中的函数do_rw_disk通过向磁盘把持存放器写参数启动磁盘把持,完成真正的数据读写。
(3)对找到的每个IDE硬盘,调用函数idedisk_setup进一步设置其ide_drive_t结构,包含设置该结构的settings域、doorlocking域、cyl、head、sect域、id域等。
5.2 打开设备
打开块设备的把持与打开普通文件的把持基础雷同。
(1)在当前过程的文件描写符表中为打开文件找一个空位,申请一块内存,用于建立新文件的打开文件对象,即结构file。
(2)解析设备特别文件名,获得其VFS inode和dentry结构,根据dentry结构填写file结构,尤其是将file结构的f_op域设为其VFS inode中的缺省文件把持。
(3)履行该文件把持集中的open把持,即blkdev_open,它根据设备特别文件的主次设备号从blkdevs向量表中取出已经注册的文件把持集(file_operations)fops,用该结构代替file结构中的f_op域。
(4)履行中新文件把持集中的open把持,即bl带头kdev_open,它根据VFS inode中的i_rdev域查找数组ide_hwifsp[],从中找出该IDE硬盘所对应的ide_drive_t结构;假如ide_drive_t结构中注册有驱动程序,履行驱动程序集中的open把持。
(5)将打开文件对象插进到当前过程的文件描写符表中,返回文件描写符,即打开文件对象在过程文件描写符表中的索引。
5.3 设备I/O把持
读写块设备时要用到块缓冲区(bufer),对bufer的治理采用BuferCache机制。它治理bufer的创立、撤销、回收、查找、更新等,同时还要与系统中的其它部分(如文件系统、内存治理等)交互。Linux将Buffer Cache从块设备驱动程序中独立出来,作为对块设备读写的通用机制,所以对块设备的读、写、同步等把持采用的都是由把持系统供给的公共函数,一般为block_read()和block_write()。
为了减少对块设备把持的次数,读写块设备时采用延迟把持,尽量将多个读写把持合并,所以把持恳求不是马上递交给物理设备,而是供给了一种手段记载每次的恳求(request),并为每类块设备供给一个恳求队列用来排队、合并、重组对该块设备的恳求。
当需要从硬盘读时,block_read()函数首先查找Buffer Cache 假如在其中能找到需要的buffer,则立即返回:否则,天生一个读恳求,并将其加进相应的恳求队列排队。
当需要向硬盘写时,block_write()为此次写把持天生一个buffer,而后天生一个写恳求,并将其加进相应的恳求队列排队。
块设备驱动程序供给了一个恳求处理函数,对硬盘而言是函数do_rw_disk。在适当的时候,硬盘的恳求处理函数启动,do_rw_disk处理在恳求队列上排队的恳求,通过向硬盘发出读、写命令完成对设备的真正把持。其伪代码如下:
DO_RW_DISK(COMMAND)
{
Set_Registers();
if(COMMAND=READ){
Set read_intr as interrupt process function
Send WIN_READ or WIN_MULTREAD command to Command register
}
if(COMMAND=WRITE){
Send WIN_WRITE or WIN_MULTWRITE command to Command register
Get the status of Status register and set DRQ bit
Set write intr as interrupt process function
Senddatato buferin thedisk
}
}
5.4 开释设备
由设备驱动程序中的release把持完成,一般完成与打开设备相反的动作:开释打开设备特别文件时在file结构上所创立的私有结构;假如是最后一个设备的开释,则从硬件上封闭设备。
6 结束语
通过上述方法对IDE硬盘接口的设计与实现,我们可以在S3C2410开发板上安全自由地对硬盘上的各种文件系统进行访问,由于采用DMA方法,可以满足用户对速率的请求。
编辑推荐:
J2ME--丰富多彩的领域中生机勃勃的技术
基于ARM920T的IDE硬盘接口设计
s3c2410 中断异常处理
EnterpriseJavaBean的结构优点的探讨
