基于S3C2410处理器的IDE硬盘接口设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

基于S3C2410处理器的IDE硬盘接口设计1设计任务在学习了接口技术这门课后,基于对课堂的知识的理解,加上自己查阅的一些资料。对S3C2410处理器做了一些了解,尤其是IDE硬盘接口,作为适用于嵌入式系统的大容量、高速率、高可靠性的数据存储系统,它的重要性不用明说。在这次论文中主要完成以下任务:1.对S3C2410处理器的概述;2.对IDE硬盘接口的概述;3.完成原理图和硬件设计说明;4.完成软件设计和驱动设计;5.给出应用示例。其中应用示例由于现在还在学习中,所以借鉴他人的示例进行解读和学习,并尝试加入自己的创新。2S3C2410处理器S3C2410处理器是Samsung公司基于ARM公司的ARM920T处理器核,采用0.18um制造工艺的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处理器最高可运行在203MHz。ARM包括一系列微处理芯片技术。ARM920T是ARM系列微处理器的一种,ARM920T的32位微处理器结构带有一个5阶管线,可以极低的功耗提供优异的性能。16K指令高速缓存和16K数据高速缓存可为现有的程序和数据提供零等待时间,或者也可被锁定,以确保对关键指令和数据的无延迟存取。ARM920T的单/双精度整数及浮点运算能力。当对数字音频和视频格式进行编码、执行工业控制运算以及其它运算密集型计算和数据处理功能时,该协处理器可具有高速精确计算能力。同时配备了Thumb扩展、EmbeddedICE调试技术和Harvard总线。在生产工艺相同的情况下,性能可达ARM7TDMI芯片的两倍之多。ARM920T系列主要应用于机顶盒产品、掌上电脑、笔记本电脑和打印机。3IDE接口3.1IDE接口基本概况IDE的英文全称为“IntegratedDriveElectronics”,即“电子集成驱动器”,它的本意是指把“硬盘控制器”与“盘体”集成在一起的硬盘驱动器。是现在普遍使用的外部接口,主要接硬盘和光驱。采用16位数据并行传送方式,体积小,数据传输快。一个IDE接口只能接两个外部设备。把盘体与控制器集成在一起的做法减少了硬盘接口的电缆数目与长度,数据传输的可靠性得到了增强,硬盘制造起来变得更容易,因为硬盘生产厂商不需要再担心自己的硬盘是否与其它厂商生产的控制器兼容。对用户而言,硬盘安装起来也更为方便。IDE这一接口技术从诞生至今就一直在不断发展,性能也不断的提高,其拥有的价格低廉、兼容性强的特点,为其造就了其它类型硬盘无法替代的地位。但其传输最大只能是133MB/s,远远低于串口的600MB/s的速度。IDE/ATA磁盘驱动器与早期的ATA驱动器相比,增加了任务文件寄存器,包括数据寄存器、状态寄存器以及反映地址的驱动器号、磁头号、道号和扇区号寄存器等。ATA接口规范定义了信号电缆和电源线的电器特征、互联信号的电器和逻辑特征,还定义了存储设备中可操作的寄存器以及命令和协议。3.2IDE接口的发展和作用早期的IDE接口有两种传输模式,一个是PIO(ProgrammingI/O)模式,另一个是DMA(DirectMemoryAccess)。虽然DMA模式系统资源占用少,但需要额外的驱动程序或设置,因此被接受的程度比较低。后来在对速度要求愈来愈高的情况下,DMA模式由于执行效率较好,操作系统开始直接支持,而且厂商更推出了愈来愈快的DMA模式传输速度标准。而从英特尔的430TX芯片组开始,就提供了对UltraDMA33的支持,提供了最大33MB/sec的的数据传输率,以后又很快发展到了ATA66,ATA100以及迈拓提出的ATA133标准,分别提供66MB/sec,100MB/sec以及133MB/sec的最大数据传输率。值得注意的是,迈拓提出的ATA133标准并没能获得业界的广泛支持,硬盘厂商中只有迈拓自己才采用ATA133标准,而日立(IBM),希捷和西部数据则都采用ATA100标准,芯片组厂商中也只有VIA,SIS,ALi以及nViidia对次标准提供支持,芯片组厂商中英特尔则只支持ATA100标准。3.3寄存器规范定义了两组寄存器:命令寄存器和控制寄存器。命令寄存器用来接收命令和传送数据,控制寄存器用来控制磁盘操作。常用的寄存器包括数据寄存器、命令寄存器、驱动器/磁头寄存器、柱面号寄存器、扇区号寄存器、扇区数寄存器和状态寄存器。3.4数据传输方式ATA接口规范定义了两种数据传输方式:可编程I/O(PIO)方式和DMA方式。PIO传送方式下,CPU对控制器的访问都是通过PIO进行的,包括从控制器读取状态信息和错误信息,以及向控制器发送命令和参数。在一次PIO数据传输过程中,CPU先选址,然后使读/写信号有效,CPU或控制器放数据到数据总线,控制器或CPU读取数据,操作完成后,释放总线,这样一次数据传输完成。DMA方式,即直接内存访问,CPU把缓冲区的地址与需要读写的长度告诉外设,外设在准备好后向CPU发出一个DMA请求,要求CPU暂停使用内存,获得同意后就直接在内存和外设之间传输数据,完成后再把对内存的访问权归还给CPU。IDE实物图4硬件设计IDE设备(例如硬盘、光驱等)上都会使用一组跳线来确定安装后的主盘(Master,MA)、从盘(Slave,SL)状态。如果在一根IDE数据线上接两个IDE设备的话,还必须分别将这两个IDE设备设置为一个为主盘,另一个为从盘状态。这样,安装后才能正常使用。如果一根IDE数据线上只接惟一的IDE设备,不管这个IDE设备原先是设置为主盘还是从盘状态,都不需要对这个惟一的IDE设备重新设置跳线。确定好硬盘的连接方案后,就要设置硬盘跳线了。一般可以在硬盘的IDE接口与电源接口之间找到由3~5列跳线。不管是什么硬盘,在跳线设置上,大致可分成主盘、从盘与电缆选择(CableSelect)三种。硬盘的出厂预设值都是设为主盘,所以如果将硬盘设为主盘,一般就不用设置跳线了。如图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)解析设备特殊文件名,获得其VFSinode和dentry结构,根据dentry结构填写file结构,尤其是将file结构的f_op域设为其VFSinode中的缺省文件操作。(3)执行该文件操作集中的open操作,即blkdev_open,它根据设备特殊文件的主次设备号从blkdevs向量表中取出已经注册的文件操作集(file_operations)fops,用该结构代替file结构中的f_op域。(4)执行中新文件操作集中的open操作,即bl带头kdev_open,它根据VFSinode中的i_rdev域查找数组ide_hwifsp[],从中找出该IDE硬盘所对应的ide_drive_t结构;如果ide_drive_t结构中注册有驱动程序,执行驱动程序集中的open操作。(5)将打开文件对象插入到当前进程的文件描述符表中,返回文件描述符,即打开文件对象在进程文件描述符表中的索引。5.3设备I/O操作读写块设备时要用到块缓冲区(bufer),对bufer的管理采用BuferCache机制。它管理bufer的创建、撤销、回收、查找、更新等,同时还要与系统中的其它部分(如文件系统、内存管理等)交互。Linux将BufferCache从块设备驱动程序中独立出来,作为对块设备读写的通用机制,所以对块设备的读、写、同步等操作采用的都是由操作系统提供的公共函数,一般为block_read()和block_write()。为了减少对块设备操作的次数,读写块设备时采用延迟操作,尽量将多个读写操作合并,所以操作请求不是马上递交给物理设备,而是提供了一种手段记录每次的请求(request),并为每类块设备提供一个请求队列用来排队、合并、重组对该块设备的请求。当需要从硬盘读时,block_read()函数首先查找BufferCache如果在其中能找到需要的buffer,则立刻返回:否则,生成一个读请求,并将其加入相应的请求队列排队。当需要向硬盘写时,block_write()为此次写操作生成一个buffer,而后生成一个写请求,并将其加入相应的请求队列排队。块设备驱动程序提供了一个请求处理函数,对硬盘而言是函数do_rw_disk。在适当的时候,硬盘的请求处理函数启动,do_rw_disk处理在请求队列上排队的请求,通过向硬盘发出读、写命令完成对设备的真正操作。其伪代码如下:DO_RW_DISK(COMMAND){Set_Registers();if(COMMAND=READ){Setread_intrasinterruptprocessfunctionSendWIN_READorWIN_MULTREADcommandtoCommandregister}if(COMMAND=WRITE){SendWIN_WRITEorWIN_MULTWRITEcommandtoCommandregisterGetthestatusofStatusregisterandsetDRQbitSetwriteintrasinterruptprocessfunctionSenddatatobuferinthedisk}}5.4释放设备由设备驱动程序中的release操作完成,一般

1 / 26
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功