原创 硬盘存储在单片机上的应用

2009-8-13 18:32 1482 4 4 分类: MCU/ 嵌入式
摘 要:本文介绍了通用硬盘在8031系列单片机上的应用,介绍了硬盘的接口信号与协议,硬盘寄存器组,与8031单片机的硬件接口及对硬盘读写的软件。电子园51单片机学习网3^4}aO0e(r
   关键词:硬盘;8031单片机;ATA命令集电子园51单片机学习网"]L|,~,_5d"? K3k k7|
8031 系列单片机是应用非常广泛的CPU,但随着控制领域不断智能化和复杂化,程序与数据空间可能远远大于64K字节的限制。在8031系列单片机上扩展硬盘接口,使存储容量只受到硬盘容量的限制,可以达到Gbyte级的容量。在需要大容量存储的应用场合,如数据库、图像处理、采样分析等场合,有着广泛的应用。 电子园51单片机学习网"JK1mE(l ]4sGA6G

电子园51单片机学习网n,^wc,j J,t


#~4M!PdB#N E`44606一、基本知识
MP#iJw@m%hWq446061. IDE接口
:\#L9[4N4Z,{5J7hQOw$I44606在PC上,硬盘通过IDE40芯的扁平非屏蔽电缆与主板连接,数据和命令在其上异步传输。详细的信号描述请参照Information Technology -AT Attachment with Packet Interface - 6(ATA/ATAPI-6)协议。
](J}6S(Xd446062. 硬盘寄存器描述
Aqg }3?2b6] {Q44606与硬盘通信是通过IO寄存器来完成的,访问硬盘上的寄存器是由CS0FX,CS3FX,A2,A1,A0来译码完成的。硬盘的寄存器分为命令寄存器组和控制寄存器组。
2s[J*x4j1F44606参照图1,详细说明如下:
G&l5Z+E7E$\446061) 数据寄存器,在CS3FX为高电平,CS0FX,A2,A1,A0为低电平时选通,其地址为0x8000。单片机通过读写该寄存器与硬盘交互数据。
{qS'B~*MF)P;z446062) 错误信息寄存器,在CS3FX,A0为高电平,CS0FX,A2,A1为低电平时选通,其地址为0x8001。该寄存器为只读,寄存器位如置1代表不同的错误信息。电子园51单片机学习网K D `:t@
3)属性寄存器,在CS3FX,A0为高电平,CS0FX,A2,A1为低电平时选通,其地址为0x8001。该寄存器为只写,对该寄存器的操作可使硬盘工作在不同的模式。由于8031单片机为8位的数据总线,而硬盘默认为16位IO,需要对属性寄存器写0x01,使其工作在8位总线模式。电子园51单片机学习网Tp_&iSgg6I
4) 扇区数目寄存器,在CS3FX,A1为高电平,CS0FX,A2,A0为低电平时选通,其地址为0x8002。其值表示需对硬盘读写的扇区数目,注意对硬盘的操作都是以扇区位单位,每个扇区包含512个字节,即每次对硬盘的数据读写都是512个字节的倍数。电子园51单片机学习网ei,A0zl o5I gor
5) LBA低8位地址寄存器,在CS3FX,A1,A0为高电平,CS0FX,A2为低电平时选通,其地址为0x8003。本文中对硬盘的操作是以LBA模式进行,即硬盘上的存储扇区映射成连续的逻辑块地址。要使能LBA模式,需要对模式寄存器的第6位置1。
e j(V Y'E!f446066) LBA 地址8-15位寄存器,在CS3FX,A2为高电平,CS0FX,A1,A0为低电平时选通,其地址为0x8004。LBA地址共28位表示。电子园51单片机学习网t/T(C6p4e6O5RQ
7) LBA 地址16-23位寄存器,在CS3FX,A2,A0为高电平,CS0FX,A1为低电平时选通,其地址为0x8005。电子园51单片机学习网%TwT G:kc
8)模式寄存器,在CS3FX,A2,A1为高电平,CS0FX,A0为低电平时选通,参照原理图1,其地址为0x8006。其低4位为LBA地址的24- 27位,第4位为主从硬盘选择位,若连接J1,则硬盘设为主设备,相应的第4位应为0;若断开J1,则硬盘为从设备,相应的第4位应置1。电子园51单片机学习网"yJrH2vBv"m
9) 状态寄存器,在CS3FX, A2, A1, A0为高电平,CS0FX为低电平时选通,其地址为0x8007。该寄存器为只读。其中第7位若为1,表示硬盘处于忙状态,第3位若为1,表示数据准备好,等待传输。详细的检验程序请参照所附的程序。电子园51单片机学习网sf|2|^'K[
10) 命令寄存器,在CS3FX, A2, A1, A0为高电平,CS0FX为低电平时选通,其地址为0x8007。该寄存器为只写。注意硬盘的命令有带参数和不带参数两种,在具有参数的命令操作时,需要首先写入所有的参数到各个寄存器,最后写命令寄存器。

s\8kRw(x44606 电子园51单片机学习网s7a4l D {T?

二、硬件连接电子园51单片机学习网 Tm%J @?nj~
8031单片机与硬盘的连接如图1所示。A0 A1 A2经74LS373锁存后,连接到硬盘的A0 A1 A2脚,因其工作在8位模式,硬盘的高8位数据线悬空。
8Dp ~/p6j!w0d(y44606J1用来选择主从硬盘,在连接J1时,该硬盘位主硬盘,否则为从硬盘。8031应检测P1.0上的电平,相应地设置模式寄存器的第4位。电子园51单片机学习网 w(H,?-J\%KB3k
P1.1用于硬复位硬盘,在低电平时有效。因8031不支持DMA模式,硬盘工作于PIO模式,所以DMA请求与应答信号悬空。所附软件工作于查询模式,中断请求信号悬空。电子园51单片机学习网$[%q ]N!HK$rt.l
在硬盘读写操作时,DASP脚为低电平,相应的LED指示灯亮。

I3Z8T-sI:o2O0SA9u Xz!F44606 电子园51单片机学习网*qp3jTiA3d

三、相应软件电子园51单片机学习网w)A;]9Z!X:m
以对硬盘写入和读出一个扇区为例,说明8031对硬盘的操作。流程图如图2所示。电子园51单片机学习网-V;AAn"g't
现结合具体程序分析。为便于程序阅读,定义了如下的符号:电子园51单片机学习网'ePm)H4`j
ReadSctr EQU 20h电子园51单片机学习网+A6x,_ Hk|9P6@
WriteSctr EQU 30h 电子园51单片机学习网d!u:j8CrP
Data_Reg EQU 8000h ; 数据寄存器,可读写电子园51单片机学习网:J5qc zp
Error_Reg EQU 8001h ; 错误信息寄存器,只读电子园51单片机学习网3L$@P'S g
Features EQU 8001h ; 属性寄存器,只写
~LG\(FPpP&O_4aC44606Sectr_Cnt EQU 8002h ; 扇区数目寄存器,可读写
-baUI2y1VQ44606LBA0_7 EQU 8003h ; LBA低8位地址寄存器,可读写
n*P1U1A1}6];b#s,h44606LBA8_15 EQU 8004h ; LBA地址8-15位寄存器,可读写
"lI WEo},fb44606LBA16_24 EQU 8005h ; LBA 地址16-23位寄存器,可读写电子园51单片机学习网 Nu]5udkQ'O
Drv_Head EQU 8006h ; 模式寄存器,可读写
5T7` A d9P.e,X@44606Status EQU 8007h ; 状态寄存器, 只读
R i)CB6G#]`r44606Command EQU 8007h ; 命令寄存器,只写电子园51单片机学习网sy}c+j8Y y
1) 检测主从硬盘并设置相应的模式寄存器子程序
LaNPj`rS%K44606功能为检测跳线设置,对模式寄存器写对应值,并置为LBA模式。
] dH;[wNg44606Init:电子园51单片机学习网"X,{5IN)Ypb
mov B, #11100000b ; D4=0 默认为主硬盘,LBA模式
.v{9X {|44606jnb P1.0, master ; 若P1.0=0,为主硬盘 电子园51单片机学习网Q[nB8k^}
mov B, #11110000b ; D4=1 为对从硬盘操作
aHv o*FF/V}44606master:
T2GE3}C[N8b2O44606mov dptr, #Drv_Head ; 对模式寄存器写入
M1C,q([C44606mov a, B ;
-u SK O/qa.G/HY44606movx @dptr, a电子园51单片机学习网}#`Z6Op/FK fq
ret电子园51单片机学习网.~T^6Xa#O rV
2) 忙状态检测子程序
bK+PR)V44606功能为,读状态寄存器,在BUSY=0和没有错误时,返回A=0和C=0。电子园51单片机学习网 ^2|jw+n.m
Busy:
Q/ZFWS4};Q44606mov dptr, #status; 读状态寄存器电子园51单片机学习网&Rp+oj-kl2i5g
movx a, @dptr
*|R,oW3}n'z;@44606jb acc.7, Busy; 在BUSY为高时,等待
c D\.i9c3[ R u }o44606jb acc.0, errors; 若第0位为1,表示有错误产生,跳转到error处理
4S0?G"dD+v6@c44606clr a ; A C 为0表示非忙,没有错误
~X CfBk#L4w+V44606clr C ;电子园51单片机学习网R9j-S EoJ!kh+~ i
ret ; 电子园51单片机学习网z H)y.L _{7xB
errors:
Ow1y3C+K#Z44606mov dptr, #Error_Reg电子园51单片机学习网%l&mb al%c)ow
movx a, @dptr; A中值表示错误指示电子园51单片机学习网 ?2ir [6X!EMA8M
setb C ; C为1,表示有错误产生
+z%D;AR#~/u5C;c7_44606ret电子园51单片机学习网'FDhTv5`'{
3) 等待数据准备好子程序电子园51单片机学习网)C"~H)Up @ ~A+h
功能为,读状态寄存器,在BUSY=0,DRQ=1,没有错误时,返回A=0和C=0。
,].n }'Iet${$R#OA+KI5o44606WaitDRQ:
N&Iv cV3b!Nuu44606mov dptr, #status; 读状态寄存器
u:C:}a$@`44606movx a, @dptr
W#mt%[ bb+kD q44606jb acc.7, WaitDRQ ; 在BUSY为高时,等待电子园51单片机学习网r/B1c+U'n\
jnb acc.3, WaitDRQ ; 在第3位DRQ为0时, 等待
h:jTl"ygW44606jb acc.0, errors ; 若第0位为1,表示有错误产生,跳转到error处理电子园51单片机学习网0Anlw wN
clr a电子园51单片机学习网 Q{9x!K^0R}:U ?F
clr C ; A C 为0表示非忙,没有错误,数据已准备好电子园51单片机学习网1X U5\ ]+E~(A g%@G[5K
ret
*b*`f#`v:X/H446064) 置硬盘工作在8位数据IO模式子程序电子园51单片机学习网 z7h5b} C)N:Y*U
功能设置硬盘属性,使其工作在8位模式,与8031的8位数据总线配合。
jVQ:K/dxy44606Enable8bit:
4JpP*ET,u44606acall Busy电子园51单片机学习网#SkP-aT
mov dptr, #Features电子园51单片机学习网9R!IZ C$\q
mov a, #01h ; 使能8位模式
!b4g7Gm-Z^44606movx @dptr, a电子园51单片机学习网?rn*er*gn$IG
mov dptr, #COMMAND电子园51单片机学习网K{/W%q1TJ[w
mov a, #0EFh; 0xEF为设置硬盘属性命令
xuo9z!a`:v u44606movx @dptr, a电子园51单片机学习网%E8rY*} O `g Y|.M M
ret电子园51单片机学习网-t4iT m:bN_
5) 填充硬盘寄存器子程序
.MVw]Y{ L2FT*h1C44606入口为R2(扇区数目),R3(LBA地址的b0-b7),R4(LBA地址的b8-b15), R5(LBA地址的b16-b23) ,R6(低4位为LBA地址的b24-b27), R7(命令字)电子园51单片机学习网1vH1Od-KAK/z$Y5T
功能为将R2-R7中值写入到硬盘寄存器组。
,Z8Qo:W\zl44606Function: 电子园51单片机学习网`B$`:UT
acall Busy; 调用Busy子程序,如三.2)所述电子园51单片机学习网#M/c{,bdl v
mov dptr, #Sectr_Cnt; 扇区数目寄存器
iu}*k'\3fh+KF"w44606mov a, R2 ; R2中值为扇区数目电子园51单片机学习网Q gM&|a!gE
movx @dptr, a电子园51单片机学习网(Z.Y(u q"fifM|
mov dptr, #LBA0_7; LBA地址的b0-b7寄存器
kt)nTTK8nx!R44606mov a, R3 ; R3中值为LBA地址的b0-b7
4X.ow2no {y A44606movx @dptr, a电子园51单片机学习网(_SL0I a9vy`
mov dptr, #LBA8_15; LBA地址的b8-b15寄存器
s6]y Bo44606mov a, R4 ; R4中值为LBA地址的b8-b15电子园51单片机学习网i-`-f(E jO
movx @dptr, a电子园51单片机学习网sV@b%DG
mov dptr, #LBA16_24; LBA地址的b16-b23寄存器电子园51单片机学习网u2eL |,Vpqb
mov a, R5 ; R5中值为LBA地址的b16-b23
(` r;p?1HFv&P44606movx @dptr, a电子园51单片机学习网/fu"T9\`e
mov dptr, #Drv_Head; 模式寄存器电子园51单片机学习网&C aHv1\F:d3m(g/\R@
mov a, R6 ; R6中值为低4位为LBA地址的b24-b27电子园51单片机学习网kZk-f8P`4c E3f
anl a, #00001111b
0Ha9O0_ {(g*A;q3`44606orl a, B;B在Init子程序中已赋值.电子园51单片机学习网xlm6[ y9]CgL
movx @dptr, a电子园51单片机学习网o&I^|l&o*J j sD u
mov dptr, #command; 命令寄存器电子园51单片机学习网"E&s4y;fs
mov a, R7 ; R7中值为命令字电子园51单片机学习网~1_~ Nf^c
movx @dptr, a电子园51单片机学习网Q+q(X8wnW0N
ret
k GoMR#s@446066) 写扇区子程序
s%g*PV2W,S(Y;D N4h:\44606假定对LBA地址为0x0A的扇区写,
oY @:x3q!e!r2A xY44606Write_Sctr: 电子园51单片机学习网Vuy)y/U:b
mov R2, #1 ; 对R2-R7填入适当值,调用Function
%g1]/}9PK@+{q7e44606mov R3, #0Ah ;电子园51单片机学习网 TDZ8kGV%v A
mov R4, #0电子园51单片机学习网3v$Fg!m%Bn} k1ui#k
mov R5, #0
vCB}E]44606mov R6, #0
BNC5Y1krBV~[44606mov R7, #WriteSctr电子园51单片机学习网8k8}1Tu?3pQj C
acall Function电子园51单片机学习网i[ P]/i1S:Nw
acall WaitDRQ电子园51单片机学习网x_T%?(ll
acall Write512电子园51单片机学习网*sN-E:uk
ret电子园51单片机学习网8fj2SXZ+b$f2zf
Write512:
1hqm@ds3`&h#{R$[44606mov R0, #high(message) ; 取需写入信息的高位地址电子园51单片机学习网 iyzY&DC
mov R1, #low(message) ; 取需写入信息的低位地址电子园51单片机学习网{&BSd |
mov R7, #2 ; 512字节 = 2 * 256电子园51单片机学习网iTU3e0t7VQ$t(y
mov R6, #0电子园51单片机学习网c9X@'V~ n L
write: 电子园51单片机学习网z K*g`K*^
mov dph, R0 ;
:A5Z(d3N;t!j.Rz;Bm44606mov dpl, R1电子园51单片机学习网9H aH ]%L3C
clr a电子园51单片机学习网$|+RYG%N.G,T,{
movc a, @a+dptr ; 读取信息的内容电子园51单片机学习网$zY hab ]/v saU`!O1j
inc dptr ; 指针指向下一个字节地址
9HT kB%l4O,LW44606mov R0, dph ;
*A3s]6f Xop44606mov R1, dpl
"MJk.|T-{-j44606mov DPTR, #Data_Reg ; 数据寄存器
1lh [-N"t2V/}0}.?%e44606movx @dptr, a ; 写一个字节到硬盘电子园51单片机学习网Kre&}9_B
djnz R6, write电子园51单片机学习网s ~a,{0{HV
djnz R7, write ; 循环直到512个字节全部写完电子园51单片机学习网8|;HzB6z2o
ret电子园51单片机学习网~F_ JY%{d


4|Z n.n5q#M}-l.C44606四、总结电子园51单片机学习网i6OiS+w
由于篇幅所限,不详细介绍对硬盘的读操作,其流程类似于写操作。感兴趣读者可对照ATA协议规范,编写相应的驱动程序。对硬盘操作的ATA命令很多,可以通过ATA命令进行电源管理,读取硬盘参数,进行多个扇区的读写操作。欲详细了解对硬盘的操作,可参照最新的ATA-6协议。本文中,对硬盘的访问采用轮询模式,也可以使对硬盘的访问工作于中断模式,使其在BUSY=0或DRQ=1时触发中断。
DJ T_K}W44606在8031上,硬盘只可以工作在8位IO,PIO模式,依照本文的思路,可使硬盘工作于任何嵌入式系统中,工作于DMA模式或16位IO模式。

zu R sk1Rj44606
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条