基于ARM920T微处理器的IDE硬盘接口设计与实现

发布者:fengting最新更新时间:2010-02-01 来源: 计算机工程与设计关键字:ARM920T  S3C2410  ATA  PIO  DMA 手机看文章 扫描二维码
随时随地手机看文章

  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)解析设备特殊文件名,获得其VFSinode和dentry结构,根据dentry结构填写file结构,尤其是将file结构的f_op域设为其VFSinode中的缺省文件操作。

  (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处理在请求队列上排队的请求,通过向硬盘发出读、写命令完成对设备的真正操作。其伪代码如下:

  C程序

  5.4 释放设备

  由设备驱动程序中的release操作完成,一般完成与打开设备相反的动作:释放打开设备特殊文件时在file结构上所创建的私有结构;如果是最后一个设备的释放,则从硬件上关闭设备。

  6 结束语

  通过上述方法对IDE硬盘接口的设计与实现,我们可以在S3C2410开发板上安全自由地对硬盘上的各种文件系统进行访问,由于采用DMA方式,可以满足用户对速率的要求。

关键字:ARM920T  S3C2410  ATA  PIO  DMA 引用地址:基于ARM920T微处理器的IDE硬盘接口设计与实现

上一篇:一种嵌入式智能网络视频监控终端的研究与设计
下一篇:嵌入式Linux网络驱动程序的开发及实现原理

推荐阅读最新更新时间:2024-05-02 20:59

s3c2410 __attribute__ ((interrupt ("IRQ")))
在中断里面,有这个函数,不太明白是怎么回事,于是网上找答案~原文是关于s3c44B0的,不过感觉都差不多吧~下面整理下~ ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采用中断比以往的查询方式占用更少的CPU时间,让系统提供更好性能。 查询S3C2410的手册,发现它有?(我不清楚有几种)种工作模式,每种工作模式是不一样的。其中最常用的,就是FIQ和IRQ模式。在使用中断之前,一定要初始化每种模式的栈指针SP,如果不初始化,肯定会出错。在CPU进行初始化时,就需要依次进入IRQ模式,初始化SP,接着再进入FIQ模式初始化
[单片机]
STM32的使用之SPI通信DMA模式
MCU:STM32F303VC 在SPI通信中,可以同时开启发送和接收DMA请求,自动数据的发送和接收,完成数据的交换 基本步骤是: 1. 配置好SPI相应引脚功能 2. 配置和初始化SPI 3. 初始化DMA 4. 片选信号选择要通信的设备 5. 打开DMA 对应DMA通道:SPI1_RX---DMA1_Channel2;SPI1_TX---DMA1_Channel3 代码: #define L3GD20_SPI_TDR (u32)(SPI1_BASE+0x0C) #define L3GD20_SPI_RDR (u32)(SPI1_BASE+0x0C) u8 SPI_TXBUFFER ={0xE8,0x00,0x00,
[单片机]
ARM920T的MMU与Cache之cache
ARM920T有16K的数据Cache和16K的指令Cache,这两个Cache是基本相同的,数据Cache多了一些写回内存的机制,后面我们以数据Cache为例来介绍Cache的基本原理。我们已经知道,Cache中的存储单位是Cache Line,ARM920T的一个Cache Line是32字节,因此16K的Cache由512条Cache Line组成。要了解Cache的基本原理,我们从如何设计Cache这个问题入手。 设计Cache的一种最朴素的想法是,把VA分成以32字节为单位,从任何一个对齐到32字节地址边界的VA开始连续的32个字节(比如0x00-0x1f,0x20-0x3f,0x40-0x5f等等)都可以缓存到5
[单片机]
<font color='red'>ARM920T</font>的MMU与Cache之cache
关于linux的framebuffer和s3c2410的硬件接口与时序问题
像素时钟的公式: VCLK = HCLK/ 在本系统中,HCLK的值为100M HZ 下面是几个参量与s3c2410fb_display数据结构之间的关系: VBPD是vertical back porch 表示在一帧图像开始时,垂直同步信号以后的无效的行数,对应upper_margin; VFBD是vertical front porch 表示在一帧图像结束后,垂直同步信号以前的无效的行数,对应lower_margin; VSPW是vertical sync pulse width 表示垂直同步脉冲的宽度,用行数计算,对应vsync_len; HBPD是horizontal back porch 表示从水平同步信号的下降沿开始到
[单片机]
单片机是如何扩充DMA功能的
  单片机里的DMA是什么   DMA就是直接存储器访问的首字母缩写(Direct Memory Access)。   CPU的总线上同时会挂着多几个存储器,如果想要将存储器1的内容复制到存储器2,如果不用DMA的话,就得靠CPU直接去操作了,操作过程大致是:CPU准备好存储器1的地址和控制信号,读取存储器1的内容,存放到CPU内部寄存器中,再准备好存储器2的地址和控制信号,将寄存器中的内容写入到存储器2。   如果是单个数据的操作,这个过程都是必须的,效率问题也不明显,但如果一次要复制大量数据(比如一帧图像数据、一批语音数据等),那么靠CPU这样循环一个数据一个数据地操作,不仅速度慢(由于架构设计的原因,一般CPU访问外
[单片机]
单片机是如何扩充<font color='red'>DMA</font>功能的
STM32 DMA 应用之(一)SRAM 与flash 间数据传输
一、为什么要用DMA? DMA 全称:Direct MemoryAccess 就是可以直接内存存取; 正是它可以直接操作内存所以具备以下优点: 而无需经过CPU去操作内存的存取,这样可以解放CPU出来干其他的事情; 因为他可以进行存储器时间的数据传输,而不需经过cpu,所以大大加快了数据传输速度—是一种高速的数据传输; 二.DMA有几种传输数据方式: (1)内存到 内存之间的;即:SRAM?à SRAM (2)内存到 外设之间的; (例如:串口收到的数据 从数据寄存器 à 内存) (3) 外设到内存之间的; 三.传输的数据宽度是怎样的,数据是什么样的形式传输?DMA 能传输多大的数据量? A. 数据源地址到数据目的地址 传
[单片机]
基于DSP的图像压缩无线传输系统设计
   1 引言   随着航空航天技术的发展,图像无线传输技术日趋成熟。而嵌入式图像无线传输技术以其安装方便、灵活、适合广泛普及等优点在广大领域备受关注。本文介绍一种基于DSP的无线图像传输系统的设计方案与实现方法。    2 系统总体设计方案   图1为该系统设计框图。该系统分为图像采集、图像数据处理及无线通信3个模块。图像采集完成图像数据的采集;图像处理实现图像数据的压缩及相关处理:无线通信传输压缩数据。该系统选用TMS320VC5509A型DSP作为主处理器。    3 系统硬件设计   3.1图像采集模块   图像信号采集电路的基本工作方法分为独立和处理器两种采集法。前者采用专用图像采集器件,自动完成图像
[嵌入式]
STM32F7实现ADC采集(软件触发+DMA传输)解决了采样结果不实时更新的问题
前面我们虽然实现了STM32F7实现ADC采集(软件触发+DMA传输),但数据只有第一次更新。 先仔细研究了下一些配置的参数: ADC1DMA_Handler.Init.Mode DMA的正常模式(DMA_NORMAL):采集到DMA_BufferSize 的个数后,DMA停止。 DMA的循环模式(DMA_CIRCULAR):采集到DMA_BufferSize 的个数后,重新回到设置的RAM的起点位置,如此循环。 虽然道理很好理解,但个人感觉要配合触发信号来用,通过HAL_ADC_Start_DMA软件触发需要设置起点位置和长度,否则这个参数是没有意义的。 ADC1_Handler.Init.ScanConvMode
[单片机]
STM32F7实现ADC采集(软件触发+<font color='red'>DMA</font>传输)解决了采样结果不实时更新的问题
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved