📄 基于gpif的usb-ata解决方案.htm
字号:
src="基于GPIF的USB-ATA解决方案.files/arrow3.gif" width=29></TD>
<TD width="73%">您现在的位置: <A
href="http://www.mculab.com/">MCULAB</A> >> <A
href="http://www.mculab.com/Article/Index.asp">文章中心</A> >> <A
href="http://www.mculab.com/Article/ShowClass.asp?ClassID=10">电子文摘</A> >> 正文</TD>
<TD align=right width="22%"><IMG height=13
src="基于GPIF的USB-ATA解决方案.files/User_Login.gif" width=13 align=absMiddle> <A
class=top_UserLogin href="http://www.mculab.com/User/User_Login.asp"
target=_blank>用户登录</A> <IMG height=13
src="基于GPIF的USB-ATA解决方案.files/User_Reg.gif" width=13 align=absMiddle> <A
class=top_UserLogin href="http://www.mculab.com/Reg/User_Reg.asp"
target=_blank>新用户注册</A> </TD></TR></TBODY></TABLE><!--导航代码结束--><!-- ********网页顶部代码结束******** --><!-- ********网页中部代码开始******** --><!--文章显示代码开始-->
<TABLE class=center_tdbgall style="WORD-BREAK: break-all" cellSpacing=0
cellPadding=0 width=760 align=center border=0>
<TBODY>
<TR>
<TD colSpan=2>
<TABLE class=main_title_760 style="WORD-BREAK: break-all" cellSpacing=0
cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=center width="3%"><IMG height=14
src="基于GPIF的USB-ATA解决方案.files/arrow.gif" width=11
align=absMiddle></TD>
<TD width="66%"><FONT color=blue>[组图]</FONT>基于GPIF的USB-ATA解决方案</TD>
<TD width="18%"> <FONT
color=red>热</FONT> <FONT
color=#009900></FONT></TD>
<TD align=right width="13%">【字体:<A class=top_UserLogin
href="javascript:fontZoomA();">小</A> <A class=top_UserLogin
href="javascript:fontZoomB();">大</A>】</TD></TR></TBODY></TABLE></TD></TR>
<TR vAlign=center align=middle>
<TD class=main_ArticleTitle style="WORD-BREAK: break-all" colSpan=2
height=50>基于GPIF的USB-ATA解决方案</TD></TR>
<TR vAlign=center align=middle>
<TD class=main_ArticleSubheading style="WORD-BREAK: break-all" colSpan=2
height=20></TD></TR>
<TR class=left_tdbgall align=middle>
<TD
colSpan=2>作者:杭州浙江大学电气工程学院(310027)张剑波 颜钢锋 文章来源:电子技术应用 点击数:1837 更新时间:2005-5-6</TD></TR>
<TR>
<TD class=main_tdbg_760 id=fontzoom style="WORD-BREAK: break-all" vAlign=top
colSpan=2 height=300>
<P class=MsoNormal><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
<B>摘要:</B></SPAN>利用EZ-USB
FX及FX2系列中GPIF的功能,提出了一套解决USB-ATA的可行性方案,并给出了单片机控制硬盘时PIO模式和UDMA模式的实现方法。此方案具有速度快、性能高、占用CPU资源少等特点。</P>
<P class=MsoNormal><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
<B>关键词:</B></SPAN>ATA接口 通用可编程接口(GPIF) 通用串行总线(USB) UDMA模式</P>
<P style="TEXT-INDENT: 30px">目前,通过单片机去控制硬盘的ATA接口,<IMG height=316 hspace=1
src="基于GPIF的USB-ATA解决方案.files/20050506214803591.gif" width=402 align=right
vspace=1
border=0>大多采用PIO模式实现,速度和性能上都不狗理想,硬盘与PC机的连接也相当繁琐。要频繁地与PC机交换大量资源,采用USB硬盘是一个相当好的解决方案。本文给出一个如何利用单片机完成对硬盘的读写,同时具有USB-ATA功能的可行方案。</P>
<P style="TEXT-INDENT: 0px"><B>1 USB、GPIF、ATA接口</B></P>
<P style="TEXT-INDENT: 30px">1.1 USB总线</P>
<P style="TEXT-INDENT: 30px">USB(Universal Serial
Bus)[4]是一种串行接口的新标准,其主要优点是速度快、功耗低、支持即插即用(Plug &
Play)、使用安装方便。USB支持最多5个Hub层以及127个外设,所有外设通过协议共享USB的带宽。目前使用中的USB协议有1.0、1.1和2.0三个版本,通过速率分别为1.5Mbps、12Mbps、480Mbps,USB协议向下兼容。</P>
<P
style="TEXT-INDENT: 30px">从逻辑结构上讲,USB数据的传输是通过管道进行的,管道的两端连接host和device的端点BUFFER,BUFFER的大小直接影响通讯的速率。USB系统软件通过缺省管道(与端点0相对应)管理设备,设备驱动程序通过其它管道来管理设备的功能接口。每一个USB设备在主机看来就是一个端点的集合,主机只能通过端点与设备进行通讯。在USB系统中,每一个端点都有唯一的地址,这是由设备地址和端点号给出的。每个端点都有一定的特性,其中包括:传输方式、总线访问频率、带宽、端点号、数据包的最大容量等。根据应用场合的同选择相应的端点类型。USB数据流模型见图1。</P>
<P style="TEXT-INDENT: 30px">1.2 GPIF</P>
<P style="TEXT-INDENT: 30px">GPIF(general programmable
interface)[1、2]即通用可编程接口,是CYPRESS公司在其EZ-USB
FX以及FX2系列单片机里设计的一个可由用户编程的接口,具有快速、灵活等特点,可使用多种协议完成与外围器件的无缝连接,如EIDE/ATAPI、IEEE1284、Utopia等。对其可以根据需要进行编程,且运行中不需要CPU的干预,仅通过一些CPU标志和中断与增强型8051内核通讯。GPIF与8051内核的关系见图2。<BR><IMG
height=314 hspace=30 src="基于GPIF的USB-ATA解决方案.files/20050506214803764.gif"
width=483 vspace=10 border=0><BR><FONT size=3>
</FONT><SPAN class=main1>GPIF主要组成部分:</P>
<P
style="TEXT-INDENT: 30px">(1)ADR[5..0]:地址线,可作为扩展存储器的低位地址,在连续执行GPIF动作时具有自动增一功能。可对其对应的寄存器进行读写(FX2系列中扩充为9根地址线)。</P>
<P
style="TEXT-INDENT: 30px">(2)RDY[5..0]:输入Ready信号,可对指定的信号进行连续采样,以确定GPIF动作继续、等待或是反复不断采样,直到信号的指定状态出现。通常用来等待指定信号的某个状态出现,然后继续剩余动作。</P>
<P
style="TEXT-INDENT: 30px">(3)CTL[5..0]:输出Control信号,根据编程指令输出高低电平或集电极开路。通常用作选通信号、非总线输出信号,以及产生简单的脉冲信号。</P>
<P style="TEXT-INDENT: 30px">(4)FD[15..0]:双向FIFO数据线,一般又称AFI、BFI。</P>
<P
style="TEXT-INDENT: 30px">(5)IFCLK:时钟接口,决定使用外接时钟还是使用内部48MHz或30MHz时钟周期。</P>
<P
style="TEXT-INDENT: 30px">(6)GSTATE[2..0]:当前GPIF状态数,可用来判断当前GPIF工作状态,一般调试用。</P>
<P style="TEXT-INDENT: 30px">(7)GPIF
PROGRAM:GPIF程序存储区间0x7900~0x797F,存储GPIF指令,可存储4组波形的程序代码(FX2系列存储区间为0xE400~0xE47F)。</P>
<P
style="TEXT-INDENT: 30px">每个GPIF动作都由七段组成:Interval0~Interval6,简称I0~I6。执行完I0~I6的动作后,最后都进入IDLE(I7),即空闲状态,以准备启动下次GPIF动作。每个Interval可以定义为Non-Decision
Interval,简称NDP;或是Decision Point Interval,简称DP。</P>
<P
style="TEXT-INDENT: 30px">当某个Interval定义为NDP,在执行这个Interval动作时,只是简单地延时,用来确定产生指定电平的延续时间;而当Interval定义为DP时,它将根据RDY0~RDY5上的输入信号状态,以及内部FIFO的可编程标志和一个内部自定义的Internal
Ready标志,将这些信号进行逻辑与、逻辑或,或是进行逻辑异或,根据得到的逻辑结果在I0~I6中选择下一个即将执行的Interval。在每个Interval执行时,都可指定CTL0~CTL5输出用户指定的状态。通过RDY和CTL以及内部一些标志位的组合,能完成各种复杂的时序电路的控制。<BR><IMG
height=577 hspace=10 src="基于GPIF的USB-ATA解决方案.files/20050506214803175.gif"
width=546 vspace=10 border=0><BR></SPAN><FONT size=3>
</FONT><SPAN class=main1>1.3 ATA接口</P>
<P
style="TEXT-INDENT: 30px">ATA[3]接口是在ST506基础上改进而成的,它将控制器集成到驱动器中,采用8个端口寄存器完成对硬盘的读写。这些端口寄存器统称为命令块寄存器,各寄存器功能见表1。ATA有两种工作模式:PIO模式和DMA模式。PIO传输模式是由处理器负责信息的传输,以扇区为单位,用中断请求方式与处理器进行数据交换。DMA传输模式分多点DMA和UDMA两种方式,其不需要处理器参与整个数据传输过程,而由I/O口直接将数据传送到存储器中,从而节约大量CPU时间,可更好地其他事务。UDMA中采用了冗余校验技术(CRC)。控制器对硬盘的操作分为两种:8位数据的命令操作和16位数据的数据传输操作。在对硬盘输出控制命令前,程序需对端口完整输出7字节的命令块。其中前六个端口输出为参数,最后一个端口为命令码。在读写数据端口时,以512个字节作为数据块进行读写。硬盘执行命令后,发出中断请求,表示操作结束(结束传输);或置控制器状态空闲,表示扇区请求传输(数据传输)。然后,控制器读取硬盘状态寄存器,检测硬盘操作的成功与否。操作正常,则进行下一次动作;否则,进入错误处理程序。状态寄存器各位信息描述见表2。<BR><BR><B>表1
端口寄存器功能及地址分配</B></P>
<TABLE borderColorDark=#ffffff width="100%" borderColorLight=#000000
border=1>
<TBODY>
<TR class=main>
<TD align=middle width="10%">A1</TD>
<TD align=middle width="10%">A2</TD>
<TD align=middle width="12%">A3</TD>
<TD align=middle width="29%">扇区读操作</TD>
<TD align=middle width="29%">扇区写操作</TD>
<TD align=middle width="10%">位数</TD></TR>
<TR class=main>
<TD align=middle width="10%">0<BR>0<BR>0<BR>0<BR>1<BR>1<BR>1<BR>1</TD>
<TD align=middle width="10%">0<BR>0<BR>1<BR>1<BR>0<BR>0<BR>1<BR>1</TD>
<TD align=middle width="12%">0<BR>1<BR>0<BR>1<BR>0<BR>1<BR>0<BR>1</TD>
<TD
width="29%">数据寄存器<BR>错误寄存器<BR>扇区计数器<BR>扇区号寄存器<BR>柱面号寄存器(低字节)<BR>柱面号寄存器(高字节)<BR>驱动器/头寄存器<BR>状态寄存器</TD>
<TD
width="29%">数据寄存器<BR>写预补偿寄存器<BR>扇区计数器<BR>扇区号寄存器<BR>柱面号寄存器(低字节)<BR>柱面号寄存器(高字节)<BR>驱动器/头寄存器<BR>命令寄存器</TD>
<TD align=middle
width="10%">16<BR>8<BR>8<BR>8<BR>8<BR>8<BR>8<BR>8</TD></TR></TBODY></TABLE>
<P style="TEXT-INDENT: 0px"><B>表2 状态寄存器各位信息</B></P>
<TABLE height=42 borderColorDark=#ffffff width="100%"
borderColorLight=#000000 border=1>
<TBODY>
<TR class=main>
<TD align=middle width="25%" height=14>符号</TD>
<TD align=middle width="25%" height=14>位</TD>
<TD width="25%" height=14>描述</TD>
<TD align=middle width="25%" height=14>真值</TD></TR>
<TR class=main>
<TD align=middle width="25%"
height=16>BSY<BR>DRDY<BR>DWF<BR>DSC<BR>DRQ<BR>CORR<BR>IDX<BR>ERR</TD>
<TD align=middle width="25%"
height=16>7<BR>6<BR>5<BR>4<BR>3<BR>2<BR>1<BR>0</TD>
<TD width="25%"
height=16>控制器忙<BR>驱动器就绪<BR>驱动器故障<BR>寻道结束<BR>服务请求<BR>ECC检验错误<BR>收到索引<BR>命令执行出错</TD>
<TD align=middle width="25%"
height=16>1<BR>1<BR>1<BR>1<BR>1<BR>1<BR>1<BR>1</TD></TR></TBODY></TABLE>
<P style="TEXT-INDENT: 0px"><B>2 GPIF与ATA接口的硬件连接</B></P>
<P style="TEXT-INDENT: 30px">GPIF与ATA接口的连接见表3。<BR><BR><B>表3
GPIF接口与ATA接口的硬件连接*</B></P>
<TABLE borderColorDark=#ffffff width="100%" borderColorLight=#000000
border=1>
<TBODY>
<TR class=main>
<TD align=middle width="25%">GPIF信号线</TD>
<TD align=middle width="25%">ATA接口信号线</TD>
<TD align=middle width="25%">GPIF信号线</TD>
<TD align=middle width="25%">ATA接口信号线</TD></TR>
<TR class=main>
<TD align=middle
width="25%">PA3<BR>PB[0..7]<BR>PD[0..7]<BR>ADR[0..2]<BR>PC6<BR>PC7<BR>RDY1</TD>
<TD align=middle
width="25%">RESET<BR>DD[0..7]<BR>DD[8..15]<BR>DA[0..2]<BR>CS0<BR>CS1<BR>IOCS16</TD>
<TD align=middle
width="25%">RDY0<BR>CTL0<BR>CTL1<BR>CTL2<BR>PC3<BR>RDY2<BR>INT0</TD>
<TD align=middle
width="25%">IORDY<BR>DIOW<BR>DIOR<BR>DMACK<BR>DASP<BR>DMARQ<BR>INTRQ</TD></TR></TBODY></TABLE>
<P style="TEXT-INDENT: 0px"><FONT
size=1>*KEYPIN、PDIAG引脚悬空,此处不涉及该引脚功能的实现。</FONT><BR><BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -