新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于单片机的IDE硬盘控制的研究与设计

基于单片机的IDE硬盘控制的研究与设计

作者:时间:2012-03-29来源:网络收藏

1.概述

本文引用地址:http://www.eepw.com.cn/article/171744.htm

近年来作为数据存储介质的,其接口智能化程度越来越高,容量不断增大,反而体积在变小,并可脱离系统主机,起来比较方便,已经受到人们的普遍重视。现今,在许多以为核心的持续数据采集存储应用系统中,数据存储是一项关键技术,因此,若能将脱机高速大容量应用到此类系统中,则可提高读写速度、降低单位成本、具有很大优势。但是,读写是一个复杂的过程,它涉及到硬盘的接口方式、寻址方式、寄存器模型等。这样以来,我们就急需找到一种方案,占用较少的资源,却能比较方便的硬盘.本文通过8255[1]对进行I/O扩展,驱动硬盘,成功的解决了上述问题,从而使硬盘可以应用到许多智能系统中。

2. 系统硬件结构

50.jpg

如图1所示,本系统由单片机(W78E52)、地址锁存器(74HC373)、8255、施密特反向器(74HC04)、硬盘驱动器组成。单片机通过8位数据总线、A0、A1、CS、WR、RD与8255相连。单片机将8255作为I/O口扩展,8255的端口A和端口B与接口的16位数据线相连;端口C产生IDE总线的控制信号。IDE接口的DASP脚所接的LED作为指示灯,类似PC机,当硬盘忙时,指示灯亮。

IDE[2][5]接口是将ST506控制器集成到驱动器中,从处理器角度看,IDE接口可被描述成一系列I/O端口----一组8/16位的I/O端口,两根片选线(CS1FX和CS3FX),读写控制线(RD和WR),三根地址线(DA0,DA1,DA2)和一个中断请求(INTRQ)以及用来设置数据传输模式的控制线。IDE接口在硬盘的存取采用16位数据总线方式。在ATA[3]标准中,IDE接口对硬盘的输入输出操作均是通过对相应寄存器的读写来实现的,这些端口寄存器统称为命令块寄存器,是由片选线和地址线进行统一编址的,其功能如表1所示:

51.jpg

IDE接口的硬盘驱动器提供两种数据传输模式:PIO模式和DMA模式。由于采用PIO模式控制相对容易,并且提供了一种可编程控制输入/输出的快速传输方法,所以本系统使用PIO模式。该模式采用高速的数据块I/O,以扇区为单位,用中断请求方式与CPU进行批量数据交换。通常情况下,在扇区读写操作时,每次按16位长度通过内部的高速PIO数据寄存器进行传输,每传输一扇区数据就产生一次中断。

系统不能直接用8255的输出口控制IDE接口,是由于8255有一个不良特性:当切换芯片I/O口的输入/输出模式时,将重新复位所有的引脚状态,当然也包括所有的输出信号。这对于作为数据总线的信号影响不大,但对控制信号却有不小的冲击,尤其是它会将IDE接口的复位线使能(IDE的控制引脚都是低电平有效),这样就不能正常控制硬盘。因此,本系统通过74HC04将8255的控制端口接到IDE接口上。此时,当8255改变I/O口的工作模式时,所有的输出全部复位为“0”,经74HC04后所有的控制信号被拉成高电平,IDE驱动器就不会处于使能状态。

3. 系统软件

本系统的软件采用程序结构化和功能模块化的方法,以便于此设计具有良好的可移植性。系统软件包括主程序和任务子程序。任务子程序由读扇区 (Read_sector),写扇区 (Write_sector),错误处理 (Process_error),逻辑块地址写(wr_lba),IDE读 (ide_rd),IDE写 (ide_wr)等组成。主程序流程图如图2所示:

52.jpg

单片机上电后对8255以及IDE驱动器进行初始化,并不停查询键盘,以判断是否有任务到达,如有任务,则根据命令进入到相应任务子程序。在进入任务子程序之前,必须先检测IDE驱动器的状态,IDE驱动器的状态寄存器如表2所示:

53.jpg


上一页 1 2 3 4 下一页

评论


相关推荐

技术专区

关闭