基于GPIF的USB-ATA解决方案

发布者:SparklingEyes最新更新时间:2006-05-07 来源: 电子技术应用 手机看文章 扫描二维码
随时随地手机看文章

    摘要:利用EZ-USB FX及FX2系列中GPIF的功能,提出了一套解决USB-ATA的可行性方案,并给出了单片机控制硬盘时PIO模式和UDMA模式的实现方法。此方案具有速度快、性能高、占用CPU资源少等特点。

    关键词:ATA接口 通用可编程接口(GPIF) 通用串行总线(USB) UDMA模式

目前,通过单片机去控制硬盘的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系列芯片的地址线、数据线都未用到。因此,在此方案上还可以进行其他扩展,从而实现基于硬盘的大容量数据采集系统,应用于某些特殊环境下的数据采集。

引用地址:基于GPIF的USB-ATA解决方案

上一篇:KeilMonitor-51仿真板的制作与使用
下一篇:USB接口单片机SL11R的特点及应用

热门资源推荐
热门放大器推荐
    Error

    An error occurred.

    Sorry, the page you are looking for is currently unavailable.
    Please try again later.

    If you are the system administrator of this resource then you should check the error log for details.

    Faithfully yours, OpenResty.

小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
最新工业控制文章
换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved