发明内容
本发明的目的在于,针对上述问题,提出一种基于协处理器的SATA控制器,以实现硬件结构简单,软件结构清晰,运用灵活,实现功能控制容易且便于软件的更新和占用硬件逻辑资源小的优点。
为实现上述目的,本发明采用的技术方案是:一种基于协处理器的SATA控制器,主要包括:
SATA控制器物理层模块:位于SATA控制器的物理层,作为SATA控制器与外围硬件设备之间的硬件接口,主要用于在数据传输前期实现SATA控制器与外围硬件设备进行握手,若握手成功则通知数据链路层开始传输数据,若握手失败则终止当前数据传输;
SATA控制器数据链路层模块:位于SATA控制器的数据链路层,作为SATA控制器中物理层和传输层之间的数据接口,主要用于在SATA控制器与外围硬件设备握手成功时,对传输数据进行加解扰、拆组帧和CRC校验处理,并负责将帧数据传输请求转换为帧数据的local link接口请求;
DMA模块:位于SATA控制器的传输层,与所述SATA控制器数据链路层模块连接,作为SATA控制器进行数据搬移的控制模块,主要用于实现SATA控制器的读/写数据与内存之间的交互;
CPU协处理器:主要用于通过firmware软件代码,实现SATA控制器中传输层的状态机跳转和功能控制;
DCR接口模块:连接在所述DMA模块与CPU协处理器之间,作为所述CPU协处理器访问DMA模块的DCR总线接口,主要用于负责将所述CPU协处理器的请求传送给DMA模块;所述DMA模块在成功接收CPU协处理器的请求后,按照请求的长度、源地址和目标地址进行数据搬移;
主机接口模块:连接在所述DMA模块与CPU协处理器之间,作为所述CPU协处理器访问DMA模块中寄存器的DCR总线接口,主要用于负责完成所述CPU协处理器对DMA模块中指定寄存器的读写请求。
进一步地,与所述DMA模块相匹配,上述基于协处理器的SATA控制器还包括:
Rx_local link接口模块和Tx_local link接口模块:位于SATA控制器的传输层和数据链路层之间,主要用于负责数据链路层的数据到传输层中DMA模块的local link接口和数据缓存的实现;
信号控制模块:位于SATA控制器的传输层,主要用于负责local link接口信号跨时钟域的转换以保证local link的信号质量;
主机写内存接口模块和:位于SATA控制器的传输层,作为所述DMA模块写内存的接口,主要用于负责所述DMA模块操作内存的Lis接口的实现;所述Lis接口是DMA模块访问内存的总线接口;
主机读内存接口模块:位于SATA控制器的传输层,作为所述DMA模块读内存的接口,主要用于负责所述DMA模块操作内存的Lis接口的实现;所述Lis接口是DMA模块访问内存的总线接口。
进一步地,在所述DMA模块,DMA模块通过Lis接口与内存相连,通过local link接口与SATA控制器数据链路层模块相连,通过DCR总线与CPU协处理器相连;CPU协处理器处理来自DMA模块的中断请求,通过DCR总线将DMA请求操作的数据源地址信息,目标地址信息和数据长度以及功能控制位信息写入到硬件DMA模块的DCR寄存器;DMA模块的硬件逻辑依据DCR寄存器的值来判断和处理数据搬移过程;
所述的DMA模块做数据搬移(数据搬移是DMA读写时数据在内存和外部存储设备之间的一个数据传输过程),数据搬移的外部存储设备是通过Rx_local link接口模块和Tx_local link接口模块实现;在Rx_local link接口模块和Tx_local link接口模块中分别调用一个用于缓存接收数据的接收缓存器rxfifo和用于缓存发送数据的发送缓存器txfifo;
所述的rxfifo和txfifo中数据的读出和写入是通过rxfifo和txfifo的空满标志位来确定,而rxfifo和txfifo空满标志位是CPU协处理器处理DMA模块请求通过DCR总线将请求命令信息下发到DMA模块硬件DCR寄存器的。
进一步地,所述CPU协处理器包括软核microblaze和固件firmware两个部分,microblaze是调用的FPGA软核IP,firmware是运行在microblaze上的C语言软件代码,编译后最终被固化到FPGA内部;CPU协处理器通过内嵌firmware固件,丰富了软核功能,firmware代码实现较灵活,占用硬件逻辑资源少,用于实现SATA控制器的传输层状态机跳转以及系统驱动的硬件接口;所述系统驱动的硬件接口,包括提供包括接口描述符的数据结构功能,给应用层驱动访问。
进一步地,所述固件firmware,主要用于实现以下操作:
SATA控制器中传输层的状态机跳转;
SATA控制器中传输层的FIS包的状态信息控制和传输层数据结构控制;
与SATA控制器中应用层硬件接口寄存器的功能控制。
进一步地,所述Rx_local link接口模块,包括:
Rx_local link接口子模块:与所述SATA控制器数据链路层模块连接,主要用于接收来自SATA控制器中数据链路层的数据和local link接口信息,并将接收到的信息存放在接收数据缓存模块中;
Rx_locallink状态控制子模块:分别与所述DMA模块和Rx_local link接口子模块连接,作为数据和信号的接口转换子模块,主要用于将一个子模块的输入信息输出到另一个子模块;
接收数据缓存子模块:分别与所述Rx_local link接口子模块和Rx_locallink状态控制子模块连接,主要用于缓存通过Rx_local link接口子模块传输进来的数据,该数据能够被所述DMA模块读出到内存,即被写入到内存。
进一步地,所述Tx_local link接口模块,包括:
Tx_local link接口子模块:与所述SATA控制器数据链路层模块连接,主要用于发送来自所述DMA模块操作的内存信息,并将发送的内存信息存放在发送数据缓存子模块中;
Tx_locallink状态控制子模块:分别与所述DMA模块和Tx_local link接口子模块连接,作为数据和信号的接口转换子模块,主要用于将一个子模块的输入信息输出到另一个子模块;
发送数据缓存子模块:分别与所述Tx_local link接口子模块和Tx_locallink状态控制子模块连接,主要用于缓存所述DMA模块读内存操作即内存输出的数据。
进一步地,所述SATA控制器数据链路层模块,包括:
物理层接口子模块:与所述SATA控制器物理层模块连接,主要用于在SATA控制器中传输层与物理层之间建立数据通路数据;
数据链路层状态机子模块:与所述物理层接口子模块连接,主要用于实现SATA控制器中数据链路层协议的主要功能,该主要功能包括状态跳转、发送传输层控制信号源语、接收物理层的控制信号源语,以及处理物理层和传输层中主机和从机的传输请求和传输数据、并控制信号数据的发送;
接收数据CRC校验和加扰子模块:分别与所述物理层接口子模块、数据链路层状态机子模块和Rx_local link接口模块连接,主要用于实现数据的CRC校验、数据加扰检测和状态信息的输出,该状态信息包括local link接口信息和状态调试信息;
发送数据CRC校验和解扰子模块:分别与所述物理层接口子模块、数据链路层状态机子模块和Tx_local link接口模块连接,主要用于实现数据的CRC校验、数据解扰检测和状态信息的输出,该状态信息包括local link接口信息和状态调试信息。
进一步地,该基于协处理器的SATA控制器的实现方法,主要包括:
在SATA控制器中,预先定义具有高速接口的四层协议,即物理层、数据链路层、传输层和应用层;
通过位于物理层的SATA控制器物理层模块,在数据传输前期的准备工作中,实现SATA控制器与外围硬件设备之间的握手;该握手成功时,通过位于数据链路层的SATA控制器数据链路层模块,对传输数据进行加解扰、拆组帧和CRC校验处理,并负责将帧数据传输请求转换为帧数据的local link接口请求;
通过位于传输层的DMA模块,作为SATA控制器进行数据搬移的控制模块,实现SATA控制器的读/写数据与内存之间的交互;
通过与DMA模块通信连接的CPU协处理器,主要用于实现传输层状态机跳转以及系统驱动的硬件接口功能,包括实现提供接口描述符等数据结构功能给应用层驱动访问;物理层和数据链路层仍然用硬件逻辑来实现。
本发明各实施例的基于协处理器的SATA控制器,由于主要包括:位于物理层的SATA控制器物理层模块,用于在数据传输前期实现SATA控制器与外围硬件设备进行握手;位于数据链路层的SATA控制器数据链路层模块,用于对传输数据进行加解扰、拆组帧和CRC校验处理,负责将帧数据传输请求转换为帧数据的local link接口请求;位于传输层的DMA模块,用于实现SATA控制器的读/写数据与内存之间的交互;与DMA模块连接的CPU协处理器,用于通过firmware软件代码,实现SATA控制器中传输层的状态机跳转和功能控制;相对于现有SATA控制器结构来说,CPU协处理器占用资源少,而且firmware运用灵活性好,便于上传和更新控制器功能,通过C语言代码实现的firmware控制也非常简洁方便;从而可以实现SATA控制器的硬件结构简单,占用硬件逻辑资源少优点;软件结构清晰,运用灵活,实现起来容易且便于软件的上传更新和功能控制的优点。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
现有SATA控制器中物理层、数据链路层和传输层的协议实现,完全是由硬件逻辑来实现,这样硬件结构复杂,导致了实现的过程复杂而且硬件逻辑资源消耗很大。为了克服现有SATA控制器的硬件结构复杂、实现过程复杂和硬件逻辑资源消耗量大等缺陷,使SATA控制器的实现可以更加灵活,实现的逻辑结构可以简单清楚,根据本发明实施例,如图1-图5所示,提供了一种基于协处理器的SATA控制器。
本实施例的基于协处理器的SATA控制器,主要是通过软核协处理器来实现SATA控制器四层协议中传输层状态机跳转以及系统驱动的硬件接口,包括提供接口描述符等数据结构功能给应用层驱动访问,SATA控制器的物理层和数据链路层仍然用硬件逻辑来实现;该软核协处理器,包括软核(microblaze)和固件(firmware)两部分。虽然firmware占用FPGA内部逻辑资源,但是相对于现有SATA控制器结构来说,CPU协处理器占用资源少,而且firmware运用灵活性好,便于上传和更新控制器功能,通过C语言代码实现的firmware控制,也非常简洁方便。
参见图1,本实施例的基于协处理器的SATA控制器,定义了高速接口的物理层(phy)、数据链路层(link)、传输层(transport)和应用层(application)这四层协议,该基于协处理器的SATA控制器主要包括SATA控制器物理层模块19、SATA控制器数据链路层模块18、直接内存存取(Direct Memory Access,简称DMA)模块17、信号控制模块16、Rx_local link接口模块15、Tx_local link接口模块14、主机读内存接口模块11、主机写内存接口模块10、DCR接口模块12、主机接口模块13和CPU协处理器20,每个模块的功能描述如下:
SATA控制器物理层模块19:位于SATA控制器的物理层,作为SATA控制器与外围硬件设备之间的硬件接口,主要用于在数据传输前期实现SATA控制器与外围硬件设备进行握手,若握手成功则通知数据链路层开始传输数据,若握手失败则终止当前数据传输;SATA控制器的物理层实现与Device(外部存储设备,比如硬盘等)间的握手,是通过传输层协议使用带外数据(out-of-band,简称OOB)信号来实现的。
SATA控制器协议规定有三种OOB信号,分别为:
1、comreset:通讯复位,由主机端(Host)先发起;
2、comminit:通讯初始化,由从机端(Device)先发起;
3、commwake:通信激活,由主机端(Host)或者从机端(Device)发起。
SATA控制器的物理层与外部物理设备的握手通过oob状态机来实现,状态机实现过程也是SATA控制器四层协议定义好的在host和device端实现oob信号握手,任何一端不能违反信号的通信规则,否则将导致握手不成功。SATA控制器的物理层和物理设备之间的握手协议大致过程如下:
1、Host端到Device
1)、首先由Host端先发起,发送comreset信号给Device;Device端接收到comreset信号会向Hoset端发送cominit信号;
2)、Host端接收到Device的cominit信号并对信号进行检验,然后发送comwake信号给Device;Device接收到comwake信号进行校验,再给Host端回comwake信号和Align源语;
3)、Host端接收到Device的comwake信号后会对Device发D10.2的源语和Align源语,(D10.2源语和Align源语是协议规定的一串固定字符)同时会去匹配Device的传输速度;
4)、Device端接收到Host端的Align源语,匹配Host端的速率,并发送SYNC源语;
5)、Host端收到3个或3个以上的非Align源语后则认为通信握手成功,输出link_up信号到SATA控制器的数据链路层。
2、Device端到Host
1)、首先由Device端先发起,发送cominit信号给Host;Host端接收到cominit信号并校验它然后向Device端发送comreset信号;
2)、Device端接收到Host的comreset信号并对信号进行校验,然后发送comwake信号给Host;Host端接收到comwale信号和Align源语;
3)、Host端接收到Device的comwake信号后会对Device发D10.2的源语和Align源语,同时会去匹配Device的传输速度;
4)、Device端接收到Host端的Align源语,匹配Host端的速率,并发送SYNC源语;
5)、Host端收到3个或3个以上的非Align源语后则认为通信握手成功,输出link_up信号到SATA控制器的数据链路层。
SATA控制器数据链路层模块18:位于SATA控制器的数据链路层,作为SATA控制器中物理层和传输层之间的数据接口,主要用于在SATA控制器与外围硬件设备握手成功时,对传输数据进行加解扰、拆组帧和CRC校验处理,并负责将帧数据传输请求转换为帧数据的local link接口请求;
Rx_local link接口模块15和Tx_local link接口模块14:位于SATA控制器的传输层和数据链路层之间,主要用于负责数据链路层的数据到传输层中DMA模块的local link接口和数据缓存的实现;在Rx_local link接口模块和Tx_local link接口模块里面分别调用一个用于缓存接收数据的接收缓存器(rxfifo)、以及用于缓存发送数据的发送缓存器(txfifo);对rxfifo和txfifo数据测的操作,是由DMA模块操作;DMA模块接收到CPU协处理器的请求时,执行该请求命令,在内存与rxfifo和txfifo中进行数据搬移;
主机写内存接口模块10:位于SATA控制器的传输层,作为DMA模块写内存的接口,主要用于负责DMA模块操作内存的Lis接口的实现;该Lis接口是DMA模块访问内存的总线接口;
主机读内存接口模块11:位于SATA控制器的传输层,作为DMA模块读内存的接口,主要用于负责DMA模块操作内存的Lis接口的实现;该Lis接口是DMA模块访问内存的总线接口;
信号控制模块16:位于SATA控制器的传输层,主要用于负责local link接口信号跨时钟域的转换,保证local link的信号质量;
DCR接口模块12:连接在DMA模块与CPU协处理器之间,作为CPU协处理器访问DMA模块的DCR总线接口,主要用于负责将CPU协处理器的请求传送给DMA模块;DMA模块在成功接收CPU协处理器的请求后,按照请求的长度、源地址和目标地址进行数据搬移;
主机接口模块13:连接在DMA模块与CPU协处理器之间,作为CPU协处理器访问DMA模块中寄存器的DCR总线接口,主要用于负责完成CPU协处理器对DMA模块中指定寄存器的访问(如读写请求);
DMA模块17:位于SATA控制器的传输层,与SATA控制器数据链路层模块连接,作为SATA控制器进行数据搬移的控制模块,主要用于实现SATA控制器的读/写数据与内存之间的交互,DMA模块的操作可以是读内存和写内存;
CPU协处理器20:主要用于通过firmware软件代码,实现SATA控制器中传输层的状态机跳转和功能控制;该CPU协处理器,包括软核microblaze和固件firmware,microblaze是软核,固件firmware是运行在microblaze上的C语言软件代码,编译后最终被固化到FPGA内部;软核microblaze和固件firmware,用于实现SATA控制器中传输层状态机跳转以及系统驱动的硬件接口;系统驱动的硬件接口,包括提供包括接口描述符的数据结构功能,给应用层驱动访问。协处理器通过firmware实现SATA控制器传输层协议,主要是SATA控制器四层协议的传输层状态机状态跳转,以及对传输层FIS(Frame Information Structure)包的状态信息控制,对传输层错误信息Error的处理和提供系统应用层驱动的硬件接口功能。
在上述实施例中,协处理器的firmware软件实现方案,主要包括以下操作:
⑴实现SATA控制器四层协议中传输层的状态机跳转,具体操作如下:
SATA控制器四层协议中传输层状态机的每个状态和每个状态之间的跳转,在firmware程序中是事先定义好的,它是调用了QP(QP是一个通用的事件驱动框架,面向MCU,面向并发的层次式状态机模型)状态机框架来实现状态机跳转的一段代码(QP状态机框架可以理解为状态机建模的一个工具);通过firmware的事件驱动程序(event-driven programming)来处理中断请求,每个中断请求都对应SATA控制器中传输层状态机的一组状态跳转过程,在状态跳转的每一个状态中firmware中firmware程序回处理状态跳转命令信息,包括状态标志信息、下一状态命令请求信息和状态指示信息;
⑵SATA控制器四层协议中传输层的FIS(Frame Information Structure)包的状态信息控制、传输层数据结构的控制,具体操作如下:
firmware程序根据事件请求执行相应状态的跳转,每个状态处理状态信息的控制和传输层数据结构的控制。状态信息的控制主要包括传输层状态信息的输出以及检查传输层状态机错误信息等输出;传输层数据结构的控制包括对传输层数据的接收(RX)数据结构和发送(TX)数据结构的控制。firmware程序定义了传输层数据的接收和发送数据结构为结构体指针、每个结构体包含有FIS的类型、命令提示符(CMD)寄存器和中断信息请求等,通过指针操作实现传输层数据结构和状态信息的控制。
⑶实现与应用层硬件接口寄存器功能控制,具体操作如下:
firmware程序实现与应用层硬件寄存器的接口是也是通过寄存器控制结构体指针来完成,控制寄存器结构体指针定义了与硬件接口的寄存器,主CPU申请共享内存地址,协处理器也能访问,这样就使得应用层驱动和firmware程序都能访问,也实现了应用层驱动的硬件接口寄存器功能控制实现。
在上述实施例中,其它与基于协处理器的SATA控制器的外围硬件设备,有外围存储设备和内存(memory)。该基于协处理器的SATA控制器涉及到总线接口,有Lis接口、DCR接口和Local link接口,其中,Lis接口为DMA模块访问内存的总线接口,DCR接口为CPU协处理器访问DMA模块中寄存器的总线接口,Local link接口为link数据传输总线接口。
参见图2,Rx_local link接口模块是接收数据的local link接口模块,包括三个子模块,即接收数据local link接口子模块(Rx_local link接口子模块),接收local link状态控制子模块(Rx_locallink状态控制子模块)和接收数据缓存子模块(Rx_locallink_fifo)。其中:
Rx_local link接口子模块:与SATA控制器数据链路层模块连接,主要用于接收来自SATA控制器中数据链路层的数据和local link接口信息,并将接收到的信息存放在接收数据缓存模块中;
Rx_locallink状态控制子模块:分别与DMA模块和Rx_local link接口子模块连接,作为数据和信号的接口转换子模块,主要用于将一个子模块的输入信息输出到另一个子模块;
接收数据缓存子模块:分别与Rx_local link接口子模块和Rx_locallink状态控制子模块连接,主要用于缓存通过Rx_local link接口子模块传输进来的数据,该数据能够被DMA模块读出到内存,即被写入到内存。
参见图3,Tx_local link接口模块是发送数据的local link接口模块,包括三个子模块,即发送数据local link接口子模块(Tx_local link接口子模块),发送local link状态控制子模块(Tx_locallink状态控制子模块)和发送数据缓存子模块(Tx_locallink_fifo)。其中:
Tx_local link接口子模块:与SATA控制器数据链路层模块连接,主要用于发送来自DMA模块操作的内存信息,并将发送的内存信息存放在发送数据缓存子模块中;
Tx_locallink状态控制子模块:分别与DMA模块和Tx_local link接口子模块连接,作为数据和信号的接口转换子模块,主要用于将一个子模块的输入信息输出到另一个子模块;
发送数据缓存子模块:分别与Tx_local link接口子模块和Tx_locallink状态控制子模块连接,主要用于缓存DMA模块读内存操作即内存输出的数据。
参见图4,SATA控制器数据链路层模块,包括:
物理层接口子模块:与SATA控制器物理层模块连接,主要用于在SATA控制器中传输层与物理层之间建立数据通路数据;
数据链路层状态机子模块:与物理层接口子模块连接,主要用于实现SATA控制器中数据链路层协议的主要功能,该主要功能包括状态跳转、发送传输层控制信号源语、接收物理层的控制信号源语,以及处理物理层和传输层中主机和从机的传输请求和传输数据、并控制信号数据的发送;
接收数据CRC校验和加扰子模块:分别与物理层接口子模块、数据链路层状态机子模块和Rx_local link接口模块连接,主要用于实现数据的CRC校验、数据加扰检测和状态信息的输出,该状态信息包括local link接口信息和状态调试信息;
发送数据CRC校验和解扰子模块:分别与物理层接口子模块、数据链路层状态机子模块和Tx_local link接口模块连接,主要用于实现数据的CRC校验、数据解扰检测和状态信息的输出,该状态信息包括local link接口信息和状态调试信息。
图4所示的SATA控制器数据链路层模块,处于SATA控制器的数据链路层,实现SATA控制器四层协议中的数据链路层协议。SATA控制器数据链路层模块,用来在传输层和物理层之间建立数据通路数据,发送传输层控制信号源语和接收物理层的控制信号源语,处理主机和从机的传输请求来传输数据,主要通过数据链路层的状态机来实现。
在SATA控制器四层协议中的数据链路层,传输是以帧形式来进行传输的,所以SATA控制器的SATA控制器数据链路层模块主要处理物理层和传输层的请求,按照请求对数据进行拆帧和组帧过程,SATA控制器数据链路层模块还包括有三个子模块,即数据链路层状态机子模块子模块、接收数据CRC校验和加扰子模块、以及发送数据CRC校验和解扰子模块。接收数据CRC校验和加扰子模块与发送数据CRC校验和解扰子模块实现数据的CRC校验和数据加扰解扰检测和状态信息包括local link接口信息,状态调试信息的输出。
数据链路层状态机子模块实现SATA控制器的数据链路层协议的主要功能包括状态跳转以及控制信号数据。在SATA控制器四层协议中数据链路层Host和Device进行数据帧交互是通过特定的格式来进行,这个格式或者语言必须是Host和Device协商好的,他们都能够识别,SATA控制器四层协议规定好了这种交互的格式是通过数据链路层的源语来实现。数据链路层处理数据的格式以数据帧为单位,而在整个传输过程中的数据帧包括数据源语,数据字以及CRC校验值。一帧数据的组成如下:
SOFp+Dwords+CRC+EOFp
其中,SOFp、EOFp为源语;Dwords为传输的data;CRC为数据的CRC校验值。源语是一个双字信号(32位),是数据链路层主机和设备交互信息的最小信息模块,在数据链路层数据传输过程中它用来控制和提供串行线上的数据状态信息。
数据链路层状态机子模块通过在Host和Device端进行源语的交互实现数据传输的握手,传输层请求传输数据时,link状态机处理Host和Device仲裁,对传输层数据添加SOFp、CRC和EOFp源语(即组帧过程),按照数据传输格式传输数据并对数据进行校验输出传输状态信息;物理层请求数据传输时,link状态机同样处理来自Host和Device的仲裁,对帧数据移除SOFp、CRC和EOFp源语(即拆帧过程),按照数据格式传输数据输出状态信息。
参见图5,上述SATA控制器firmware主程序的流程,包括:
首先,主机驱动firmware使能,主机端驱动给协处理器发送enable信号,如果enable为1则程序往下执行,如果enable为0则程序一直处于等待状态;之后进入初始化结构体指针,软件定义硬件接口寄存器的结构体指针,软件初始化结构体指针的值;之后进入初始化端口状态机,软件定义硬件SATA控制器四层协议传输层端口寄存器的结构体指针,软件初始化结构体指针和SATA控制器四层协议传输层状态机跳转状态指针的值,如果是DMA0请求,就是硬件port0的DMA请求操作,那么进入firmware请求握手0,执行端口port0的DMA请求握手程序。如果是DMA1请求,就是硬件port1的DMA请求操作,那么进入firmware请求握手1,执行端口port1的DMA请求握手程序。如果是DMA2请求,就是硬件port2的DMA请求操作,那么进入firmware请求握手2,执行端口port2的DMA请求握手程序。如果是DMA3请求:就是硬件port3的DMA请求操作,那么进入firmware请求握手3,执行端口port3的DMA请求握手程序。进入主机请求,主机驱动端CPU请求。接着进入主机请求握手,驱动端与firmware请求握手程序。请求状态为0,表示非以上DMA请求和主机请求条件,最后进入firmware请求tick事件,firmware硬件给主机发送脉冲电平。
上述firmware主程序的跳转状态,包括多个状态。下面分别对一些状态进行详细说明。
例如,Ht_HostIdle状态:主机传输空闲状态;具体为:
1、命令寄存器FIS包传输信号被挂起时,传输层状态跳转到Ht_CmdFis状态;
2、firmware状态机接收到传输层的FIS包传输信号被挂起时,传输层状态机跳转到HT_ChkTyp状态;
3、firmware状态机接收到应用层的DMA设置FIS包传输被挂起时,传输层状态机跳转到HT_DMASTUPFIS状态。
又如,HT_ChkTyp状态:FIS包类型检查状态;具体为:
1、firmware状态机检查校验接收FIS包类型为register类型时,状态跳转到Ht_RegFis状态;
2、firmware状态机检查校验接收FIS包类型为SDB类型时,状态跳转到Ht_DbFis状态;
3、firmware状态机检查校验接收FIS包类型为DMA Activate类型即为DMA激活FIS包(DMA Activate FIS)时,状态跳转到Ht_DmaFis状态;
4、firmware状态机检查校验接收FIS包类型为PIO Setup类型时,状态跳转到Ht_PsFis状态;
5、firmware状态机检查校验接收FIS包类型为DMA Setup类型时,状态跳转到Ht_DsFis状态;
6、firmware状态机检查校验接收FIS包类型为Data类型即数据FIS包(Data FIS包)时,状态跳转到Ht_DmaITrans状态;
7、firmware状态机检查校验接收到的FIS包类型非以上类型时,状态跳转到Ht_ufis状态。
又如,Ht_CmdFis状态:传输层寄存器FIS包(register FIS包)构建状态,发送Host to Device FIS包到数据链路层;具体为:
1、firmware状态机接收到传输层的非法状态信息时,状态跳转到Ht_HostIdle状态;
2、数据链路层状态指示正在接收FIS包时,状态跳转到Ht_HostIdle状态;
3、传输层指示数据链路层传输FIS包结束时,状态跳转到Ht_CmdTransStatus状态。
又如,Ht_CmdTransStatus状态:传输层register FIS包传输等待状态;具体为:
1、firmware状态机检查数据链路层和phy层的传输状态信息完成后,状态跳转到Ht_HostIdle状态;
又如,Ht_RegFis状态:接收register FIS包状态;具体为:
1、firmware状态机接收到Device to Host的“register FIS”包时,状态跳转到HT_RegTransStatus状态;
2、firmware状态机接收到传输层的非法状态信息时,状态跳转到Ht_HostIdle状态。
又如,HT_RegTransStatus状态:firmware状态机检查数据链路层和物理层的传输状态信息完成后,状态跳转到Ht_HostIdle状态。
又如,Ht_Db Fis状态:接收SDB类型FIS包状态;具体为:
1、firmware状态机检查接收到的FIS包类型即置设备的位FIS包(Set Device BitsFIS包)时,状态跳转到Ht_Dev_Bits状态;
2、firmware状态机检查接收包状态错误时,状态跳转到Ht_HostIdle状态;
又如,Ht_Dev_Bits状态:设置bit状态,根据接收到FIS包设置状态位。
又如,Ht_Dma Fis状态:DMA请求数据传输状态;具体为:
1、firmware状态机接收到DMA Active FIS包状态时,状态跳转到Ht_DmaOTrans状态;
2、firmware状态机接收到DMA Active FIS包状态信息错误时,状态跳转到Ht_HostIdle状态。
又如,Ht_DmaOTrans状态:DMA数据传输状态;具体为:
1、等待DMA控制器初始化完成,检测传输数据小于2048Dwords,状态跳转到Ht_DmaOTrans状态;
2、等待DMA控制器初始化完成,检测传输数据等于2048Dwords,状态跳转到Ht_DMAEnd状态。
又如,Ht_DMAEnd状态:DMA控制器完成传输数据,检查数据传输状态无误时状态跳转到Ht_HostIdle状态。
又如,Ht_DmaITrans状态:传输层检查到device端的DMA Active传输状态;传输层激活DMA控制器准备好接收device端数据;具体为:
1、firmware状态机接收数据传输没有完成时,状态跳转到Ht_DmaITrans状态;
2、firmware状态机接收到device端状态的复位信息,或者host端发起软件复位(SRST位为1)时,状态跳转到Ht_HostIdle状态;
3、数据接收完成,状态跳转到Ht_DMAEnd状态;
4、传输层接收到非法状态信息和校验错误信息时,状态跳转到Ht_HostIdle状态。
又如,Ht_PsFis状态:请求PIO数据FIS包传输状态;具体为:
1、PIO设置FIS包(PIO Setup FIS包)的D位为0时,状态跳转到HT_PIOOTrans状态;
2、PIO Setup FIS包的D位为1时,状态跳转到Ht_HostIdle状态;
3、firmware状态机检测到有错误状态信息传输给数据链路层时,状态跳转到Ht_HostIdle状态;
4、传输层接收到数据链路层的非法状态信息时,状态跳转到Ht_HostIdle状态;
又如,HT_PIOOTrans为数据传输和传输类型状态寄存器信息设置状态,如果FIS包类型及状态信息设置完成,数据传输完成后状态跳转到转到Ht_HostIdle状态。
又如,Ht_DsFis状态:DMA控制器设置状态;具体为:
1、DMA控制器被初始化完成,DMA设置FIS包(DMA Setup FIS包)是请求读或者写状态且Auto-Activate状态位为0时跳转到Ht_HostIdle状态;
2、firmware状态机检测到数据链路层报告传输状态错误状态信息时,状态跳转到Ht_HostIdle状态;
3、传输层接收到数据链路层的非法状态信息时,状态跳转到Ht_HostIdle状态;
4、DMA控制器被初始化完成,DMA Setup FIS包是请求写状态且Auto-Activate状态位为1时跳转到HT_DMAOTrans状态。
又如,Ht_ufis状态:打印状态字符,直接跳转到Ht_HostIdle状态。
又如,ERR_FatalTaskFile状态:错误致命任务文件状态,检查到状态信息错误时,打印前状态信息是致命任务信息输出。
又如,ERR_NotFatal状态:非致命信息状态,检查到非法字符信息是非致命错误时,打印前状态信息是非致命信息字符输出。
又如,ERR_Fatal状态:致命信息状态,检查到非法字符信息是致命错误时,打印前状态信息是致命的信息字符输出。
上述实施例的基于协处理器的SATA控制器的实现方法,主要包括:
在SATA控制器中,预先定义具有高速接口的四层协议,即物理层、数据链路层、传输层和应用层;
通过位于物理层的SATA控制器物理层模块,在数据传输前期的准备工作中,实现SATA控制器与外围硬件设备之间的握手;该握手成功时,通过位于数据链路层的SATA控制器数据链路层模块,对传输数据进行加解扰、拆组帧和CRC校验处理,并负责将帧数据传输请求转换为帧数据的local link接口请求;
通过位于传输层的DMA模块,作为SATA控制器进行数据搬移的控制模块,实现SATA控制器的读/写数据与内存之间的交互;
通过与DMA模块通信连接的CPU协处理器,主要用于实现传输层状态机跳转以及系统驱动的硬件接口功能,包括实现提供接口描述符等数据结构功能给应用层驱动访问;物理层和数据链路层仍然用硬件逻辑来实现。
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。