摘要:本文提出了一种用单片机扩展8255来控制IDE硬盘的方法,并给出了完整的硬件和软件设计方案,详细讨论并成功解决了控制过程中所遇到的问题,较好的实现了对硬盘的存取操作。
B!O#b2{H po28152关键词:单片机 IDE 接口电子园51单片机学习网 y%vT;PQ+p\;E@
&J3h"^JB5o k6J281521.概述电子园51单片机学习网,qB5mHq
o$Zn,{4e8y28152 近年来作为数据存储介质的硬盘,其接口智能化程度越来越高,容量不断增大,反而体积在变小,并可脱离系统主机,控制起来比较方便,已经受到人们的普遍重视。现今,在许多以单片机为核心的持续数据采集存储应用系统中,数据存储是一项关键技术,因此,若能将脱机高速大容量硬盘应用到此类系统中,则可提高读写速度、降低单位成本、具有很大优势。但是,硬盘读写是一个复杂的过程,它涉及到硬盘的接口方式、寻址方式、控制寄存器模型等。这样以来,我们就急需找到一种方案,占用较少的单片机资源,却能比较方便的控制硬盘.本文通过8255[1]对单片机进行I/O扩展,驱动IDE硬盘,成功的解决了上述问题,从而使硬盘可以应用到许多智能系统中。
^z)l"C)b,xX D28152电子园51单片机学习网"_7|Z;~l#M*r$]*t2. 系统硬件结构
2sB$Zq%Zs$FG28152
+{^;fcYx&A S28152 如图1所示,本系统由单片机(W78E52)、地址锁存器(74HC373)、8255、施密特反向器(74HC04)、IDE硬盘驱动器组成。单片机通过8位数据总线、A0、A1、CS、WR、RD与8255相连。单片机将8255作为I/O口扩展,8255的端口A和端口B与IDE接口的16位数据线相连;端口C产生IDE总线的控制信号。IDE接口的DASP脚所接的LED作为指示灯,类似PC机,当硬盘忙时,指示灯亮。电子园51单片机学习网VRG5^7et
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单片机学习网L'~C~a!V0v
6@R H]rN"Fv#~28152 IDE接口的硬盘驱动器提供两种数据传输模式:PIO模式和DMA模式。由于采用PIO模式控制相对容易,并且提供了一种可编程控制输入/输出的快速传输方法,所以本系统使用PIO模式。该模式采用高速的数据块I/O,以扇区为单位,用中断请求方式与CPU进行批量数据交换。通常情况下,在扇区读写操作时,每次按16位长度通过内部的高速PIO数据寄存器进行传输,每传输一扇区数据就产生一次中断。电子园51单片机学习网x/Y,DQVl(l4Cc
系统不能直接用8255的输出口控制IDE接口,是由于8255有一个不良特性:当切换芯片I/O口的输入/输出模式时,将重新复位所有的引脚状态,当然也包括所有的输出信号。这对于作为数据总线的信号影响不大,但对控制信号却有不小的冲击,尤其是它会将IDE接口的复位线使能(IDE的控制引脚都是低电平有效),这样就不能正常控制硬盘。因此,本系统通过74HC04将8255的控制端口接到IDE接口上。此时,当8255改变I/O口的工作模式时,所有的输出全部复位为“0”,经74HC04后所有的控制信号被拉成高电平,IDE驱动器就不会处于使能状态。电子园51单片机学习网:k9dC%hJ4P
a2c!R~ FnL#K%d281523. 系统软件设计电子园51单片机学习网a$UdqE#q4N,_*s
电子园51单片机学习网9I5h9bN:HoJR本系统的软件设计采用程序结构化和功能模块化的设计方法,以便于此设计具有良好的可移植性。系统软件包括主程序和任务子程序。任务子程序由读扇区 (Read_sector),写扇区 (Write_sector),错误处理 (Process_error),逻辑块地址写 (wr_lba),IDE读 (ide_rd),IDE写 (ide_wr)等组成。主程序流程图如图2所示:电子园51单片机学习网 osCA5p S~"@?
电子园51单片机学习网&A0v%^[r#WL@
9}D*O'u5E8R[l28152 单片机上电后对8255以及IDE驱动器进行初始化,并不停查询键盘,以判断是否有任务到达,如有任务,则根据命令进入到相应任务子程序。在进入任务子程序之前,必须先检测IDE驱动器的状态,IDE驱动器的状态寄存器如表2所示:
ga5kJ-{X8_'f28152 在PIO[4]工作模式下,向硬盘发出命令前,必须先检测驱动器是否忙(BSY)。如果在规定时间内硬盘驱动器一直忙碌,置超时错,否则表示硬盘驱动器空闲,可接受命令,对硬盘进行相应操作。IDE接口通过两个协议来执行命令:PI协议(读扇区)和PO协议(写扇区)。电子园51单片机学习网*C xY6K4\){S#S
3.1 读扇区操作电子园51单片机学习网N k(H'[Y,p8^ja}p
处理器在接收到读扇区的命令后,首先调用ide_rd线程,将8255数据线端口配置成输入模式,然后读出IDE的状态,查询硬盘是否准备好(DRDY=1?);若准备好则调用wr_lba线程,把逻辑块地址写入到相应寄存器;调用ide_wr线程,将8255数据线端口配置成输出模式,把命令代码写入命令寄存器,读扇区命令开始执行。此时对驱动器状态寄存器的BSY位置1,同时将硬盘上指定扇区上的数据送入扇区缓冲区。当扇区缓冲区准备好时,置位DRQ位,清除BSY位,发中断请求INTRQ信号。
P6EZU _,e28152 而后处理器读取状态寄存器,若DRQ=1,则将扇区缓冲区中的数据读走,完毕后,驱动器置BSY,准备读下一个扇区,直到请求的扇区全部读完。电子园51单片机学习网n^Vh6s7o-o3z
在读的过程中查询状态寄存器的ERR位,若有错误产生,则跳入错误处理子程序。电子园51单片机学习网4i.L'O5q6T)j
其程序流程图如图3:电子园51单片机学习网n$?@[g V
@ SjatIKWL28152电子园51单片机学习网2Q,[7} Y m$H,q
电子园51单片机学习网 ^*]N:\(D0B yl
3.2 写扇区操作电子园51单片机学习网wwcMC)tS-W
)~5D$@'xBBmE28152 如图4所示,处理器在接收到写扇区的命令后,读IDE的状态,查询硬盘是否准备好(DRDY=1?);若准备好则把逻辑块地址写入到相应寄存器,告之所需要操作的扇区;将写扇区命令代码写入命令寄存器,同时驱动器设置状态寄存器的DRQ位,表示准备好接收数据,处理器通过数据寄存器将数据写入扇区缓冲区,当扇区缓冲区添满后,驱动器清除DRQ位,并置位BSY。驱动器将扇区缓冲区中的数据写入硬盘,当写盘结束,清除BSY位,发中断请求信号INTRQ,CPU接收到中断信号后,读驱动器状态寄存器,同时将中断信号INTRQ清除。而后处理器读取状态寄存器,若DRQ=1,则将扇区缓冲区中的数据读走,完毕后,驱动器置BSY,准备读下一个扇区,直到请求的扇区全部读完。电子园51单片机学习网@Q3Jg{/]q
在写的过程中查询状态寄存器的ERR位,若有错误产生,则跳入错误处理子程序。
3.3逻辑块寻址操作电子园51单片机学习网 N5],dS%O9b
IDE可以用两种方法来寻址即物理寻址方式(CHS)和逻辑寻找方式(LBA)。由于LAB是将物理参数转换成线性地址,对用户来说驱动器是有由连续数据块(扇区)组成的存储介质,不需要知道驱动器的磁头、磁道等参数。因此,本系统采用LBA,其与CHS影射关系为:电子园51单片机学习网5dK*VE%yePo3jC
LBA=(柱面号*磁头数+磁头号)*扇区数+扇区编号?1电子园51单片机学习网J%|Z5}K6]Z5H
在该操作中,处理器根据上述映射关系通过写4个字节LBA地址分别向磁头号寄存器、柱面号高字节寄存器、柱面号低字节寄存器以及起始扇区号寄存器写入数据,以得出需要操作的扇区。
`d1`/f0`281523.4 ide_rd线程和ide_wr线程电子园51单片机学习网 CO/EUZ/F
处理器通过ide_rd线程和ide_wr线程,设置8255工作模式,对IDE硬盘的寄存器进行读写操作,控制IDE读写周期。
+}R/P_,sG"J*a28152读周期(ide_rd):
%g;n X0G5v!z28152ide_rd:
7l,Ww.~5Z.J#a#v28152push acc
p7p/n6BI0I5}N n!f28152mov dptr, #cfg8255
;T'MN6ly!|-Q28152mov a, #rd_ide_8255
d1d%c*DeS q'J;q/L28152movx @dptr, a ;配置8255的 工作方式为读模式
"b1G!` ~ Dk]*a7S28152mov dptr, #ide_8255_ctl电子园51单片机学习网%NSe3bf bL m\o:N
pop acc电子园51单片机学习网.|W)S8S I ^)p
movx @dptr, a ;选中所需寄存器
e3c|1q)|X7_[28152orl a, #ide_rd_line
s"he^7z,S F!x28152movx @dptr, a ;使能读引脚电子园51单片机学习网'c{ x-{*[sNO
mov dptr, #ide_8255_msb
DHX1yU28152clr a电子园51单片机学习网+\{ f:?-O.k.n
movc a, @a+dptr ;读寄存器高字节电子园51单片机学习网 V xr?x`"ta5P \
mov r3,a
-mQ:t)](I Oww"O-E28152mov dptr, #ide_8255_lsb
2S/Ya9}/L,UH`28152clr a电子园51单片机学习网Qa8O cj
movc a,@a+dptr ;读寄存器低字节
pup?,p(K S)s?7m _28152mov r2, a
n6EZ}X)UIrSi2L"f28152mov dptr, #ide_8255_ctl
N)r \YRQ#T9XFkI,|28152clr a
[$`M*DTKH28152movx @dptr, a ;将控制端口复位电子园51单片机学习网*G'xI(Bw F rd
ret ;子程序返回
写周期(ide_wr):电子园51单片机学习网mv-G"~WGo
写周期与读周期类似,首先将8255配置为写模式,选中所所要操作寄存器,将寄存器高8位和低8位数据分别送到端口A、B,激活IDE总线的写信号;写完毕,通过复位端口的相应位清除IDE总线的写信号。
X3d#~0`4h@281523.5错误处理操作
0U%Eo1BR'_28152 在对硬盘读写操作时,需要查询状态寄存器的ERR位,判断是否有错。若有错,查询IDE的错误寄存器,判断错误类型,进行相应的错误处理:在写扇区操作中,当检测到坏扇区(BBK)错误时,跳过并标记坏扇区,重新分配扇区;在读写操作中,如果没有发现0磁道,将调用驱动器重校命令来使驱动器从错误中恢复出来;在读扇区过程中,若发生错误,驱动器将重读出错扇区,若仍有错误,操作将被终止。
xS0Memo-V U)Z&v+H281524. 结束语电子园51单片机学习网9rH `\bBf7k
K{4mJkF28152 本系统提出了一种单片机控制硬盘的方法,能够比较简洁方便对硬盘进行读写等操作,并成功的应用实际产品中,具有良好的可靠性和稳定性,可以应用到许多要求大容量数据存储的系统中,并可取得了良好的社会效益。
"`K$mKF28152电子园51单片机学习网N*ES Y/@8n参考文献电子园51单片机学习网vj3y)N*J#W {zp
[1]. 李华 MCS—51系列单片机实用接口技术[M] 北京 北京航空航天大学出版社 1993 P98-120
3w(m7zp9NP"]{28152[2]. 陈利学 孙彪 赵玉连 微机总线与接口设计[M] 成都 电子科技大学出版社 1988 P45-90
B#E$F2Wn C5x ? q(H28152[3].AT Attachment with Packet Interface Extension (ATA/ATAPI-5) ANSI NCITS 1998 P317
iCgXQ;~W^,X28152[4].Maury Wright. Disk Drivers at 40 Lean . Mean Storage Machines .1996 P41
$pO e^/HU Y'H ~28152[5]. 徐厚俊 IDE接口和IDE硬盘驱动器 新浪潮 1996 P17电子园51单片机学习网#W%KHv%N+\
文章评论(0条评论)
登录后参与讨论