基于GPIF的USB-ATA解决方案

2006-05-07 15:49:41来源: 电子技术应用

目前,通过单片机去控制硬盘的ATA接口,大多采用PIO模式实现,速度和性能上都不狗理想,硬盘与PC机的连接也相当繁琐。要频繁地与PC机交换大量资源,采用USB硬盘是一个相当好的解决方案。本文给出一个如何利用单片机完成对硬盘的读写,同时具有USB-ATA功能的可行方案。

1 USB、GPIF、ATA接口

1.1 USB总线

USB(Universal Serial Bus)[4]是一种串行接口的新标准,其主要优点是速度快、功耗低、支持即插即用(Plug & Play)、使用安装方便。USB支持最多5个Hub层以及127个外设,所有外设通过协议共享USB的带宽。目前使用中的USB协议有1.0、1.1和2.0三个版本,通过速率分别为1.5Mbps、12Mbps、480Mbps,USB协议向下兼容。

从逻辑结构上讲,USB数据的传输是通过管道进行的,管道的两端连接host和device的端点BUFFER,BUFFER的大小直接影响通讯的速率。USB系统软件通过缺省管道(与端点0相对应)管理设备,设备驱动程序通过其它管道来管理设备的功能接口。每一个USB设备在主机看来就是一个端点的集合,主机只能通过端点与设备进行通讯。在USB系统中,每一个端点都有唯一的地址,这是由设备地址和端点号给出的。每个端点都有一定的特性,其中包括:传输方式、总线访问频率、带宽、端点号、数据包的最大容量等。根据应用场合的同选择相应的端点类型。USB数据流模型见图1。

1.2 GPIF

GPIF(general programmable interface)[1、2]即通用可编程接口,是CYPRESS公司在其EZ-USB FX以及FX2系列单片机里设计的一个可由用户编程的接口,具有快速、灵活等特点,可使用多种协议完成与外围器件的无缝连接,如EIDE/ATAPI、IEEE1284、Utopia等。对其可以根据需要进行编程,且运行中不需要CPU的干预,仅通过一些CPU标志和中断与增强型8051内核通讯。GPIF与8051内核的关系见图2。

    GPIF主要组成部分:

(1)ADR[5..0]:地址线,可作为扩展存储器的低位地址,在连续执行GPIF动作时具有自动增一功能。可对其对应的寄存器进行读写(FX2系列中扩充为9根地址线)。

(2)RDY[5..0]:输入Ready信号,可对指定的信号进行连续采样,以确定GPIF动作继续、等待或是反复不断采样,直到信号的指定状态出现。通常用来等待指定信号的某个状态出现,然后继续剩余动作。

(3)CTL[5..0]:输出Control信号,根据编程指令输出高低电平或集电极开路。通常用作选通信号、非总线输出信号,以及产生简单的脉冲信号。

(4)FD[15..0]:双向FIFO数据线,一般又称AFI、BFI。

(5)IFCLK:时钟接口,决定使用外接时钟还是使用内部48MHz或30MHz时钟周期。

(6)GSTATE[2..0]:当前GPIF状态数,可用来判断当前GPIF工作状态,一般调试用。

(7)GPIF PROGRAM:GPIF程序存储区间0x7900~0x797F,存储GPIF指令,可存储4组波形的程序代码(FX2系列存储区间为0xE400~0xE47F)。

每个GPIF动作都由七段组成:Interval0~Interval6,简称I0~I6。执行完I0~I6的动作后,最后都进入IDLE(I7),即空闲状态,以准备启动下次GPIF动作。每个Interval可以定义为Non-Decision Interval,简称NDP;或是Decision Point Interval,简称DP。

当某个Interval定义为NDP,在执行这个Interval动作时,只是简单地延时,用来确定产生指定电平的延续时间;而当Interval定义为DP时,它将根据RDY0~RDY5上的输入信号状态,以及内部FIFO的可编程标志和一个内部自定义的Internal Ready标志,将这些信号进行逻辑与、逻辑或,或是进行逻辑异或,根据得到的逻辑结果在I0~I6中选择下一个即将执行的Interval。在每个Interval执行时,都可指定CTL0~CTL5输出用户指定的状态。通过RDY和CTL以及内部一些标志位的组合,能完成各种复杂的时序电路的控制。

    1.3 ATA接口

ATA[3]接口是在ST506基础上改进而成的,它将控制器集成到驱动器中,采用8个端口寄存器完成对硬盘的读写。这些端口寄存器统称为命令块寄存器,各寄存器功能见表1。ATA有两种工作模式:PIO模式和DMA模式。PIO传输模式是由处理器负责信息的传输,以扇区为单位,用中断请求方式与处理器进行数据交换。DMA传输模式分多点DMA和UDMA两种方式,其不需要处理器参与整个数据传输过程,而由I/O口直接将数据传送到存储器中,从而节约大量CPU时间,可更好地其他事务。UDMA中采用了冗余校验技术(CRC)。控制器对硬盘的操作分为两种:8位数据的命令操作和16位数据的数据传输操作。在对硬盘输出控制命令前,程序需对端口完整输出7字节的命令块。其中前六个端口输出为参数,最后一个端口为命令码。在读写数据端口时,以512个字节作为数据块进行读写。硬盘执行命令后,发出中断请求,表示操作结束(结束传输);或置控制器状态空闲,表示扇区请求传输(数据传输)。然后,控制器读取硬盘状态寄存器,检测硬盘操作的成功与否。操作正常,则进行下一次动作;否则,进入错误处理程序。状态寄存器各位信息描述见表2。

表1 端口寄存器功能及地址分配

A1 A2 A3 扇区读操作 扇区写操作 位数
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
数据寄存器
错误寄存器
扇区计数器
扇区号寄存器
柱面号寄存器(低字节)
柱面号寄存器(高字节)
驱动器/头寄存器
状态寄存器
数据寄存器
写预补偿寄存器
扇区计数器
扇区号寄存器
柱面号寄存器(低字节)
柱面号寄存器(高字节)
驱动器/头寄存器
命令寄存器
16
8
8
8
8
8
8
8

表2 状态寄存器各位信息

符号 描述 真值
BSY
DRDY
DWF
DSC
DRQ
CORR
IDX
ERR
7
6
5
4
3
2
1
0
控制器忙
驱动器就绪
驱动器故障
寻道结束
服务请求
ECC检验错误
收到索引
命令执行出错
1
1
1
1
1
1
1
1

2 GPIF与ATA接口的硬件连接

GPIF与ATA接口的连接见表3。

表3 GPIF接口与ATA接口的硬件连接*

GPIF信号线 ATA接口信号线 GPIF信号线 ATA接口信号线
PA3
PB[0..7]
PD[0..7]
ADR[0..2]
PC6
PC7
RDY1
RESET
DD[0..7]
DD[8..15]
DA[0..2]
CS0
CS1
IOCS16
RDY0
CTL0
CTL1
CTL2
PC3
RDY2
INT0
IORDY
DIOW
DIOR
DMACK
DASP
DMARQ
INTRQ

*KEYPIN、PDIAG引脚悬空,此处不涉及该引脚功能的实现。

    其中PB[0..7]和PD[0..7]是双向FIFO数据线,用来连接数据线DD[0..15],进行数据的传送;PA3连接RESET信号线,对硬盘进行复位操作;ADR[0..2]与DA[0..2]连接,对寄存器地址;RDY0、RDY1分别与IORDY、IOCS16连接,使FIFO分别工作在8位的命令传输和16位的数据传输模式下。

3 软件设计流程

GPIF的程序存储区可存储4组波形的程序代码。一般情况下存储的4组波形分别用于单字节读、单字节写、多字节连续读、多字节连续写。对不同寄存器的读写操作将触发指定波形程序代码的执行,例如:读SGLDATLTRIG寄存器,GPIF则执行单字节写操作。当GPIF处于IDLE方式时,可以对程序区进行读写操作,从而改变波形程序。对GPIF的编程,可采用CYPRESS公司提供的一个基于Windows界面的开发工具。这个工具使得好GPIF的编程成为一个填表式的选择过程。对所有选项选择完毕后,它将自动生成C51的源代码,完成初始化过程。现分别以EZ-USB FX系列和EZ-USB FX2系列中的GPIF为例,实现ATA接口中的PIO工作模式和UDMA工作模式。

在EZ-USB FX系列里,FIFO只有64字节大小,BULK端点UBFFER最大也只能设置为64字节。因此,用此系列的GPIF实现ATA接口的PIO模式比较合适。GPIF程序存储区分别存储单元字节读、单字节写、多字节连续读、多字节连续写4条波形程序。单字节读、写操作时,选择数据宽度为8位,完成命令传输操作。多字节读、写操作时,选择数据宽度为16位,完成数据传输操作。USB数据上传给PC机,采用BULK方式。在EZ-USB FX系列中,端点2支持BULK方式,且可以设置成双缓冲模式。单字节读过程中,总线宽度为8位,RDY0信号接IORDY经脚,在每个Interval中可以根据选定的PIO模式指定合适的延时,也可以对IORDY信号采样,直到指定状态出现才继续动作。图3是根据PIO模式4采用GPIF产生的单字节读波形。单字节写波形的编程类似于单字节读过程,如图4所示。单字节操作一般用在命令传输中,数据传输则采用多字节读写操作,此时FIFO宽度为16,长度为64字节。与单字节操作不同的是,多字节读写操作在一次读写操作完成后,自动开始下一次读写操作,不需要再次触发,直到完成指定的次数,从而减少了CPU参与的时间。在对一个扇区进行操作时,总共需要连续进行256次读写。为此,设计一个连续64次读写的多字节读写操作程序,调用4次,则完成对一个扇区的读写。PIO模式流程图如图5所示。

    在EZ-USB FX2系列中,GPIF功能进一步完善,能更好地与ATA接口连接,并可以支持UDMA功能。FX2系列支持USB2.0的控制芯片,BULK端点大小可以设置为512字节或者1024字节。为实现UDMA功能,FX2系列中的GPIF做了几方面的改善。先是让GPIF中的Slave FIFO与USB通讯中端点BUFFER直接建立连接,数据的传送不再需要CPU的参与。当端点BUFFER写满后,置BUFFER满标志位,而GPIF则根据此标志位停止读写动作。此外,GPIF中还多了一项Re-execute功能,即重复执行功能。设定此项后,GPIF可以不经过IDLE状态而根据采样RDY信号重复下一次动作,直到出现了指定的标志位后才停止动作。这项功能一般用于大批量数据的连续读写,如UDMA模式下对一个或多个扇区的读写操作。为完成UDMA模式下的CRC校验,FX2系列的芯片中还设置了特殊寄存器来完成CRC校验工作,具体使用详见芯片技术手册。可见,FX2系列芯片的GPIF能很好地胜任ATA接口中的UDMA模式传输。

上述方案较好地实现了USB-ATA的功能,并实现了PIO和UDMA两种模式。在运行中,GPIF不需要CPU的干预,仅通过一些CPU标志和中断与8051内核通讯,节约大量CPU资源。从该方案中还可以看出,EZ-USB FX以及FX2系列芯片的地址线、数据线都未用到。因此,在此方案上还可以进行其他扩展,从而实现基于硬盘的大容量数据采集系统,应用于某些特殊环境下的数据采集。

编辑: 引用地址:http://www.eeworld.com.cn/designarticles/control/200605/1785.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部

小广播

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

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