CN101840306A - VxWorks操作***中实现驱动SATA设备的方法和*** - Google Patents

VxWorks操作***中实现驱动SATA设备的方法和*** Download PDF

Info

Publication number
CN101840306A
CN101840306A CN200910106066A CN200910106066A CN101840306A CN 101840306 A CN101840306 A CN 101840306A CN 200910106066 A CN200910106066 A CN 200910106066A CN 200910106066 A CN200910106066 A CN 200910106066A CN 101840306 A CN101840306 A CN 101840306A
Authority
CN
China
Prior art keywords
command
ahci
sata
controller
initialization
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN200910106066A
Other languages
English (en)
Other versions
CN101840306B (zh
Inventor
曹雨田
匡尧文
王志明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Yanxiang Smart Technology Co ltd
Original Assignee
EVOC Intelligent Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by EVOC Intelligent Technology Co Ltd filed Critical EVOC Intelligent Technology Co Ltd
Priority to CN2009101060668A priority Critical patent/CN101840306B/zh
Publication of CN101840306A publication Critical patent/CN101840306A/zh
Application granted granted Critical
Publication of CN101840306B publication Critical patent/CN101840306B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Transfer Systems (AREA)

Abstract

本发明提供了一种VxWorks操作***下实现驱动SATA设备的方法,所述方法包括初始化和DMA读写,其中,所述初始化包括如下步骤:a)初始化AHCI控制器;b)分配AHCI内存空间;c)启动AHCI控制器的端口;所述DMA读写包括如下步骤:a)在命令列表中查找一个空命令头;b)初始化所述空命令头的命令头结构体;c)初始化一个SATA队列命令结构体;d)封装一个命令表;e)激活命令,实现DMA读写。同时本发明还公开了一种VxWorks操作***下实现驱动SATA设备的***。通过本发明提供的方法和***,实现了在VxWorks操作***最新6.6版本包括之前所有的版本上实现以AHCI模式驱动SATA硬盘。

Description

VxWorks操作***中实现驱动SATA设备的方法和***
技术领域
本发明涉及计算机技术领域,更具体地说,涉及一种VxWorks操作***中实现驱动SATA设备的方法和***。
背景技术
串行高级技术附件(Serial Advanced Technology Attachment,SATA)是由英特尔、IBM、戴尔、APT、迈拓和希捷公司共同提出的硬盘接口规范。串行高级技术附件规范的出现将会逐渐取代并行高级技术附件(Parallel AdvancedTechnology Attachment,PATA)。并行高级技术附件采用并行式传输,针脚数较多,缆线宽度较大,而且为了达到传输同步使得缆线的长度受限。而SATA硬盘驱动器是采用串行式传输,针脚线较少,缆线也可以较长,使得安装使用较为容易。而且,SATA硬盘驱动器的速度更快,最高可达600MB/S。SATA还具备更强的纠错能力,很大程度上提高了数据传输的可靠性,还具有结构简单、支持热插拔等优点。SATA可以传输所有的ATA和ATAPI协议,并且还与ATA和SATA标准向后兼容。第一代SATA的写入速度为150MB/S,第二代SATA写入速度高达300MB/S,最新的第三代SATA标准将实现600MB/S的最高数据传输率。
VxWorks操作***是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作***(Real-Time Operating System,RTOS),是嵌入式开发环境的关键组成部分。其良好的持续发展能力、高性能的内核、高可靠性和卓越的实时性被广泛应用在通信、军事、航空、航天等精尖技术及实时性要求极高的领域中。作为一个计算机***,不可避免的需要使用外部I/O设备,正是I/O设备的驱动程序为其提供了可访问性和可操作性。目前,VxWorks操作***提供了对多种I/O设备驱动程序包括串口、并口、网卡、ATA等的支持,但是VxWorks操作***最新6.6版本包括之前所有的版本都没有提供以AHCI模式驱动SATA设备的支持,而鉴于SATA诸多的优越性和取代PATA的趋势,在VxWorks操作***上实现以AHCI模式驱动SATA设备是必要的。
发明内容
本发明的目的在于针对现有技术的不足和缺陷,提供一种在VxWorks操作***上以AHCI模式实现驱动SATA设备的方法和***。
为实现上述目的,本发明实施例提供了如下技术方案:一种VxWorks操作***下实现驱动SATA设备的方法,包括初始化和DMA读写,
其中,所述初始化包括如下步骤:
a)初始化AHCI控制器;
b)分配AHCI内存空间;
c)启动AHCI控制器的端口;
所述DMA读写包括如下步骤:
a)在命令列表中查找一个空命令头;
b)初始化所述空命令头的命令头结构体;
c)初始化一个SATA队列命令结构体;
d)封装一个命令表;
e)激活命令,实现DMA读写。
所述初始化AHCI控制器具体包括:
AHCI控制器复位;
启动AHCI功能;
设置HOST CAP寄存器;
设置端口实现寄存器;
配置SATA控制器的PCI配置空间的端口控制和状态寄存器;
初始化AHCI控制器的端口。
所述初始化AHCI控制器的端口具体包括:
获取端口参数;
建立物理通信连接;
错误寄存器清零;
中断状态寄存器清零。
所述中断状态寄存器清零包括:
端口中断状态寄存器清零;
控制器中断状态寄存器清零。
所述分配AHCI内存空间具体实现为:
在物理内存空间中划分出一块连续的内存区域,所述内存区域存储命令列表、命令表和接收FIS。
所述启动AHCI控制器的端口具体包括:
设置命令列表的基地址;
设置接收FIS的基地址;
使能FIS Received DMA控制器;
使能数据传输DMA控制器。
所述启动AHCI控制器的端口之后还进一步包括:
软件复位;
使能中断。
所述初始化AHCI控制器之前或使能中断之后还进一步包括:
挂接中断服务程序。
一种VxWorks操作***下实现驱动SATA设备的***,包括:
第一初始化单元,用于初始化AHCI控制器;
内存分配单元,用于分配AHCI内存空间;
数据传输单元,用于使AHCI控制器与SATA设备之间实现DMA读写。
***还进一步包括:
中断处理挂接单元,用于挂接中断服务程序。
***还进一步包括:
中断处理单元,存储有中断服务程序,用于处理中断请求。
所述数据传输单元包括:
查找单元,用于在命令列表中找一个空命令头;
第二初始化单元,用于初始化所述空命令头的命令头结构体和SATA队列命令结构体;
封装单元,用于封装一个命令表;
激活单元,用于激活命令。
可见,本发明实施例提供的技术方案,实现了在VxWorks操作***(6.6以及之前所有版本)上以AHCI方式实现驱动SATA硬盘。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1为现有技术中基于Intel ICH南桥芯片的***硬件拓扑结构示意图;
图2为现有技术中SATA***驱动架构示意图;
图3为SATA的数据对象之间的关系结构示意图;
图4为AHCI内存结构示意图;
图5为本发明实施例提供的一种内存空间分配示意图;
图6为本发明实施例提供的一种SATA驱动初始化方法流程图;
图6a为本发明实施提供的一种初始化AHCI控制器方法流程图;
图6b为本发明实施提供的一种初始化端口方法流程图;
图7为现有技术中一种DMA读写的流程图;
图8为本发明实施例提供的一种DMA读写流程图;
图9为本发明实施例提供的一种VxWorks操作***下实现驱动SATA设备的***结构示意图。
具体实施方式
本发明实施例以在VxWorks操作***上以AHCI(Serial ATA AdvancedHost Controller Interface,串行ATA高级主机控制器接口)模式驱动SATA设备,特别是以驱动Intel ICH系列南桥芯片的AHCI SATA设备为例来详细说明。其中,所述AHCI是在Intel的指导下,由多家公司联合研发的接口标准,它允许存储驱动程序启用高级SATA功能,如本机命令队列和热插拔。
请参阅图1所示,图1为现有技术中基于Intel ICH南桥芯片的***硬件拓扑结构示意图。从图1中可以看见,Intel ICH7系列的南桥芯片集成了SATA控制器,SATA控制器作为主设备挂在PCI总线上,挂接在PCI总线上的SATA控制器都有自己的PCI配置空间寄存器。Intel ICH7系列的南桥芯片支持4个端口,每个端口挂接一个SATA设备。每个SATA设备都独占一个传输通道,可执行独立的DMA操作,没有PATA的主/从概念。每个端口上都可执行独立的DMA(Direct Memory Access,直接内存操作)操作,第二代SATA标准支持数据传输率最大为300MB/S。
请参阅图2所示,图2为现有技术中SATA***驱动架构示意图。所述SATA***驱动架构包括应用程序、I/O***层、文件***层、SATA驱动层、硬件设备。从图上可以看出SATA驱动层处于文件***层和硬件设备之间,挂接在文件***层上的,通过文件***层调用SATA驱动提供的各个函数,比如DMA读/写,来操作硬件设备。文件***层作为驱动程序挂接在I/O***层上,用户通过访问I/O***层访问硬件设备。对于I/O***,SATA硬件设备的驱动程序是不可见的,用户对文件的I/O请求由I/O***传递给文件***层,文件***层根据请求作出相应处理。
在本发明实施例中,以Intel ICH南桥芯片为例,所述ICH南桥芯片集成了一个SATA控制器,所述SATA控制器支持4个端口,每个端口连接一个存储设备,每个设备支持最大深度为32的命令队列。
请参阅图3所示,图3为SATA的数据对象之间的关系结构示意图。从图3中可以看出每个SATA控制器有多个(本实施例中为4个)端口,每个端口连接一个SATA设备,每个SATA设备有一个最大深度为n(1≤n≤32)的命令队列。每个命令队列含有多个命令,每条命令对应一个DMA请求或PIO请求,每个DMA请求由与数据结构和DMA对象相关的命令对象代表。用于DMA传输的PRDT(Physical Region Descriptor Table,物理区域描述符表)支持最大65535个PRD(Physical Region Descriptor,物理区域描述符),另外,每个控制器拥有一个控制器寄存器组,它们保存了控制器的相关信息;每个端口拥有一个端口寄存器组,它们保存了端口的相关信息。所述PIO请求用于请求获取SATA设备的设备信息。
请参阅图4所示,图4为AHCI内存结构示意图。控制和状态的通用域为AHCI控制器寄存器,Port 0~Port 31等32个端口分别对应端口寄存器。每个端口寄存器中都有一个命令列表基地址寄存器和一个接收FIS基地址寄存器,分别用来保存命令列表的基地址和接收FIS的基地址。需要说明的是,AHCI规范中规定的最大支持32个端口,而本发明实施例ICH7南桥芯片支持4个端口。
根据图4所示的AHCI内存结构,本发明实施例定义了以下主要的数据结构:SATA设备编程信息结构体(SATA_ID_INFO)、SATA设备结构体(SATA_DEV)、AHCI控制器结构体(AHCI_CTRL),AHCI端口结构体(AHCI_PORT),接收FIS结构体(RECIVED_FIS),SATA队列命令结构体(SATA_QC),命令列表结构体(COMMAND_LIST),命令头结构体(COMMAND_HEADER),命令表结构体(COMMAND_TABLE),物理区域描述符结构体(AHCI_PRD)。
本发明实施例中,命令头结构体(COMMAND_HEADER)定义如下:
typedef struct
{
 UINT32 opts;   /*命令头描述信息:包括物理区域表述符表的长度(PRDTL),是否支持端口多路器(PMP),BIST位,Reset位,命令预取,传输方向标志位,ATAPI标志位,命令FIS长度(CFL)等*/
UINT32 status;/*命令状态信息:物理区域描述符字节数(PRDBC)*/
UINT32 tbl_addr;  /*命令表基地址,必须128位地址对齐*/
UINT32 tbl_addr_hi;   /*命令表基地址高32位*/
UINT32 reserved[4];   /*4个32位的保留域*/
}COMMAND_HEADER;
本发明实施例中,物理区域描述符结构体(AHCI_PRD)定义如下:
    typedef struct
  {
UINT32 addr;     /*要传输的数据块的物理地址,必须双字节对齐*/
UINT32 addr_hi;  /*要传输的数据块的物理地址的高32位*/
UINT32 reserved; /*保留域 */
UINT32 flags_size;/*描述信息:包括中断完成标志位和数据块大小*/
}AHCI_PRD;
本发明实施例中,接收FIS结构体(RECIVED_FIS)定义如下:
typedef struct
{
UINT8_t dsfis[0x20]; /*[00-20h]DMA建立帧信息结构体*/
UINT8_t psfis[0x20]; /*[20-40h]PIO建立帧信息结构体*/
UINT8_t rfis[0x18]; /*[40-58h]D2HRegister帧信息结构体*/
UINT8_t sdbfis[0x8]; /*[58-60h]:设置设备字节帧信息结构体*/
UINT8_t unfis[0x40]; /*[60-A0H]未知帧信息结构体*/
UINT8_t reserved[0x5F];/*[A0-FFH]保留域*/
}RECIVED_FIS;
本发明实施例中,所述控制和状态的通用域(Generic Host Control)占用32字节(00h-20h),所述端口0(Port0)占用100h至180h(共计128字节),从180h至1100h依次为端口1(Port1)至端口31(Port31),每个端口占用128字节。
下面以端口0(Port0)为例,端口0的命令列表基地址寄存器中保存了命令列表的基地址值,一个命令列表包括若干个命令头结构体(COMMAND_HEADER)。本发明实施例中,一个命令列表中有32个命令头结构体(COMMAND_HEADER)。每个命令头结构体占有相同的长度,本发明实施例中每个命令头结构体占用32字节的长度。
请参阅图4所示,本发明实施例中,每个命令头包括PRDTL(PhysicalRegion Descriptor Table Length,物理区域描述符表的长度),CFL(Command FISLength,命令FIS的长度),PRDBC(Physical Region Descriptor Byte Count,物理区域描述字节计数),CTBA0(Command Table Base Address,代表命令表基地址),CTBA_U0(Command Table Base Address Up 32,代表命令表基地址高32位)以及16个字节的保留位。其中,所述COMMAND_TABLE由CFIS(COMMAND FIS),ACMD(ATAPI COMMAND)以及PRDT组成,其中,CFIS即主机向设备发送的命令的FIS封装结构;所述ACMD是可选的,它只在发送的命令是ATAPI命令时使用;所述PRDT是物理区域描述符表,它由最多达65535(64K)个PRD组成。每个PRD指定了发送或接收数据的缓冲区的指针和数据块的大小。
所述端口0的接收FIS基地址寄存器中保存了接收FIS的基地址值。
所述接收FIS结构体(RECIVE_FIS)用于保存设备返回给主机的FIS信息,具体包括DMA建立帧信息结构体(DMA SETUP FIS),PIO建立帧信息结构体(PIO SETUP FIS),D2HRegister帧信息结构体(D2HRegisterFIS)以及其他未知的帧信息结构体。每个帧信息结构体的长度不相同。
请参阅图5所示,本发明实施例采用了一种统一的内存分配方案,即在初始化过程中,在物理内存中开辟一段连续的空间,用于存储命令列表(COMMAND_LIST)、命令表(COMMAND_TABLE)和接收FIS(ReceivedFIS)。其中,命令列表(COMMAND_LIST)占用1024字节的空间、命令表(COMMAND_TABLE)占用(80h+168*16)*32字节的空间,接收FIS(ReceivedFIS)占用256字节的物理空间。
本发明实施例针对图4描述的内存结构,由驱动软件按图5所述的内存分配方法在实际物理内存中开辟一段空间供驱动使用。在驱动初始化中完成AHCI内存分配使得能够进行DMA读写操作。
本发明实施例提供了一种VxWorks操作***下实现驱动SATA设备的方法,包括初始化和DMA读写。
请参阅图6所示,图6为本发明实施例提供的一种初始化方法流程图,包括步骤:
步骤601:挂接中断服务程序(Interrupt Sever Routine,ISR)。
本发明实施例中,在SATA***中,驱动软件读SATA控制器的PCI配置空间获取AHCI主机控制器的基地址和中断号,挂接中断服务程序ISR。
需要说明的是,步骤601也可以在设置在步骤606之后执行,并不影响本发明所提供的技术方案的实现。
步骤602:初始化AHCI控制器;
请参阅图6a所示,本发明实施例中,所述初始化AHCI控制器具体包括以下步骤:
步骤6020:AHCI控制器复位;
本发明实施例中指的是对AHCI控制器的内部复位,与数据传输相关的所有状态寄存器都回到空闲状态,所有的端口通过COMRESET信号被重新初始化。本发明实施例通过在程序中写GHC(Global ICH7 Control)寄存器的HR(HBA Reset)位来实现AHCI复位。
步骤6021:启动AHCI功能;
步骤6022:设置HOST CAP寄存器;
HOST CAP寄存器是一个32位的寄存器。它的每一位对应AHCI制器能提供的一种功能。
本发明实施例中,先读所述HOST CAP寄存器,若不支持交错启动(Staggered Spin-up)则设置支持交错启动。
步骤6023:设置端口实现寄存器(Ports Implemented Register);
Intel ICH系列南桥芯片控制器内部的端口实现寄存器是一个32位的寄存器,其中低4位每一位对应控制器的一个端口(其余高位为保留位)。设置了对应的端口位为1,即说明设备提供了该端口的支持,软件编程可以使用它。反之,说明没有提供该端口,即不可用,软件就不能访问该端口对应的端口寄存器。该步骤将端口实现寄存器低4位每一位对应控制器的一个端口设置为1。
步骤6024:配置SATA控制器的PCI配置空间的端口控制和状态寄存器。
本步骤中所述端口控制和状态寄存器(Port Control and Status Register,PCS)是SATA配置空间寄存器中偏移92h的16位寄存器。它的低4位每一位对应一个端口,设置相应位为1,即激活对应的端口。激活后,端口就可以在半工作状态(Partial)和睡眠电源状态(Slumber)下传输数据和检测设备了。
步骤6025:初始化AHCI控制器的端口;
请参阅图6b所示,本发明实施例中,所述步骤6025具体包括以下步骤:
步骤60250:获取端口参数;
本发明实施例中,获取端口参数包括端口号、寄存器基地址及偏移,以及当前端口的设备绑定状态等。
步骤60251:建立物理通信连接;
步骤60252:错误寄存器清零;
步骤60253:中断状态寄存器清零。
本发明实施中,步骤60253具体包括端口中断状态寄存器清零和AHCI控制器中断状态寄存器清零。
步骤603:分配AHCI内存空间;
步骤604:启动AHCI控制器的端口;
本发明实施例中,将Intel ICH7系列的南桥芯片支持的4个AHCI控制器端口(port 0~port 3)全部启动。
进一步的,本发明实施例中,所述步骤604具体包括如下步骤:
步骤6041:设置命令列表基地址;
步骤6042:设置接收FIS基地址;
步骤6043:使能FIS Received DMA控制器;
步骤6044:使能数据传输DMA控制器。
进一步的,本发明实施例中,所述步骤604后还进一步包括:
步骤605:软件复位;
步骤606:使能中断。
步骤606中,包括使能AHCI控制器中断和使能AHCI控制器的端口中断。
在初始化之后,进行DMA读写,DMA读写原理包括:主机向SATA设备发送写命令;SATA控制器检测到命令写入,将该命令和执行命令所需的参数打包,通过SATA BUS下行线传输数据到SATA设备;SATA设备执行命令,并将执行结果和数据打包通过SATA上行线传送到ATA控制器;ATA控制器缓存数据并更新状态信号,等待CPU取走数据或以DMA方式写入内存。
请参阅图7所示,图7为现有技术中数据读写流程图,包括如下步骤:
步骤701:驱动软件通过PCI设置的DMA控制器的目的地址,传输方向,启动DMA;
步骤702:驱动软件通过PCI向控制器内部的寄存器写参数和命令;
步骤703:DMA控制器传输层根据命令设置状态寄存器忙标志,置BSY=1,并组建COMMAND FIS帧传输给设备;
步骤704:设备准备接收数据,准备完成后发送DMA Active FIS帧传输给设备,然后进入步骤707;
步骤705:如果没有更多数据接收,设备发送回应FIS帧完成操作,然后进入步骤708;
步骤706:写数据出错或其他出错,则进入步骤708;
需要说明的是,上述步骤704,705,706是并列情况,没有先后之分。
步骤707:DMA控制器传输层接收到DMA启动帧后导入数据到链路层,并启动DMA真正的数据传输,重复步骤704直至数据接收完;
步骤708:DMA控制器接收到响应FIS帧后根据帧内容设置状态寄存器以及置中断标志,并解除DMA控制器,置BSY=0。
为了实现本发明的目的,本发明实施例在DMA读命令发送之前对软件做了相应设置。
请参阅图8所示,图8为本发明实施例提供的一种DMA读写流程图。包括步骤:
步骤801:在命令列表中查找一个空命令头;
本发明实施例中,通过读端口命令发送寄存器(Port Command IssueRegister)来寻找。所述命令发送寄存器是一个32位的寄存器,每一位对应一个命令头,位置为0即代表该位对应的命令头为空。
步骤802:初始化所述空命令头的命令头结构体;
发送命令给设备之前,首先需要初始化该空命令头的命令头结构体的数据结构,将命令头结构体的各个成员变量赋值。
步骤803:初始化一个SATA队列命令结构体(SATA_QC);
        SATA_QC结构体的定义如下:
typedef struct
{
     UINT32  flags;
     UINT8  protocol;
     UINT8  ctl;
     UINT8  hob_feature;
     UINT8  hob_nsect;
     UINT8  hob_lbal;
     UINT8  hob_lbam;
     UINT8  hob_lbah;
     UINT8  feature;
     UINT8  nsect;
     UINT8  lbal;
     UINT8  lbam;
     UINT8  lbah;
     UINT8  device;
     UINT8  command;
}SATA_QC;
以DMA读为例,本发明实施例中必须设置几个重要参数:
命令码:Command=SATA_CMD_READ_DMA1;/*0xC8,DMA读命令*/
传输协议:protocol=SATA_PROT_DMA0;    /*DMA传输*/
传输块数:nsect=blocks;/*每次传输的数据块数,每个块512个字节*/以及feature、ctl、device、lbal、lbam、lbah、hob_lbal、hob_lbam、hob_lbah等参数。
步骤804:封装一个命令表;
本发明实施例中,该步骤将SATA_QC封装成一个命令FIS的结构体,将该FIS结构体填充在命令表的Command FIS位置上。
步骤805:激活命令,实现DMA读写。
在本发明实施例中,AHCI内存空间是在初始化过程中分配好,进行数据传输时对所述已分配好的AHCI内存空间填充上合适的值,最后再写命令发送寄存器,将命令发送给SATA设备,SATA设备作出相应的响应,从而完成数据的传输(读或写)。
通过上述方法,本发明提供的实施例实现了在VxWorks操作***(6.6以及之前所有版本)上实现对SATA硬盘的驱动支持。
根据上述的方法,本发明实施例还提供了一种VxWorks操作***下实现驱动SATA设备的***,如图9所示,***包括:
第一初始化单元901,用于初始化AHCI控制器;
内存分配单元902,用于分配AHCI内存空间;
数据传输单元903,用于使AHCI控制器与SATA设备之间实现DMA读写。
进一步的,所述***还包括:
中断使能单元904,用于触发中断命令。
需要说明的是,本发明实施例中,第一初始化单元901,内层分配单元902,和中断使能单元904位于一驱动初始化单元905中。
进一步的,所述***还包括:
中断挂接单元906,用于挂接中断服务程序。
中断处理单元907,存储有中断服务程序,用于处理中断请求。
需要说明的是,所述数据传输单元903包括:
查找单元9030,用于在命令列表中找一个空命令头;
第二初始化单元9031,用于初始化所述空命令头的命令头结构体和SATA队列命令结构体。
封装单元9032,用于封装一个命令表;
激活单元9033,用于激活命令。
需要说明的是,本发明实施例提供的各单元之间的连接关系是为了清楚的阐释其信息交互控制过程的需要,因此仅视为逻辑上的连接关系,而不应仅限于物理连接。
通过上述***,本发明提供的实施例实现了在VxWorks操作***(6.6以及之前所有版本)上实现对SATA硬盘的驱动。
综上所述,本发明实施例以驱动Intel ICH系列南桥芯片的兼容AHCI规范的SATA控制器为例,对本发明实施例的原理及实施方式进行了阐述。至于其他厂商的SATA独立芯片或扩展卡,同样都遵循SATA规范,只是控制器的定义和AHCI规范定义的有些差别。对于本技术领域人员来说,通过本发明实施例提供的技术方案即可开发出其他独立芯片的SATA驱动软件。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的硬件平台的方式来实现,当然也可以全部通过硬件来实施,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案对背景技术做出贡献的全部或者部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本发明实施例应用了具体的实施例对本发明实施例的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明实施例的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明实施例的限制。

Claims (12)

1.一种VxWorks操作***下实现驱动SATA设备的方法,其特征在于,包括初始化和DMA读写,
其中,所述初始化包括如下步骤:
a)初始化AHCI控制器;
b)分配AHCI内存空间;
c)启动AHCI控制器的端口;
所述DMA读写包括如下步骤:
a)在命令列表中查找一个空命令头;
b)初始化所述空命令头的命令头结构体;
c)初始化一个SATA队列命令结构体;
d)封装一个命令表;
e)激活命令,实现DMA读写。
2.根据权利要求1所述的方法,其特征在于,所述初始化AHCI控制器具体包括:
AHCI控制器复位;
启动AHCI功能;
设置HOST CAP寄存器;
设置端口实现寄存器;
配置SATA控制器的PCI配置空间的端口控制和状态寄存器;
初始化AHCI控制器的端口。
3.根据权利要求2所述的方法,其特征在于,所述初始化AHCI控制器的端口具体包括:
获取端口参数;
建立物理通信连接;
错误寄存器清零;
中断状态寄存器清零。
4.根据权利要求3所述的方法,其特征在于,所述中断状态寄存器清零包括:
端口中断状态寄存器清零;
控制器中断状态寄存器清零。
5.根据权利要求1所述的方法,其特征在于,所述分配AHCI内存空间具体实现为:
在物理内存空间中划分出一块连续的内存区域,所述内存区域存储命令列表、命令表和接收FIS。
6.根据权利要求1所述的方法,其特征在于,所述启动AHCI控制器的端口具体包括:
设置命令列表的基地址;
设置接收FIS的基地址;
使能FIS Received DMA控制器;
使能数据传输DMA控制器。
7.根据权利要求1所述的方法,其特征在于,所述启动AHCI控制器的端口之后还进一步包括:
软件复位;
使能中断。
8.根据权利要求1~7任一项所述的方法,其特征在于,所述初始化AHCI控制器之前或使能中断之后还进一步包括:
挂接中断服务程序。
9.一种VxWorks操作***下实现驱动SATA设备的***,其特征在于,包括:
第一初始化单元,用于初始化AHCI控制器;
内存分配单元,用于分配AHCI内存空间;
数据传输单元,用于使AHCI控制器与SATA设备之间实现DMA读写。
10.根据权利要求9所述的***,其特征在于,还进一步包括:
中断处理挂接单元,用于挂接中断服务程序。
11.根据权利要求9所述的***,其特征在于,还进一步包括:
中断处理单元,存储有中断服务程序,用于处理中断请求。
12.根据权利要求9所述的***,其特征在于,所述数据传输单元包括:
查找单元,用于在命令列表中找一个空命令头;
第二初始化单元,用于初始化所述空命令头的命令头结构体和SATA队列命令结构体;
封装单元,用于封装一个命令表;
激活单元,用于激活命令。
CN2009101060668A 2009-03-18 2009-03-18 VxWorks操作***中实现驱动SATA设备的方法和*** Active CN101840306B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2009101060668A CN101840306B (zh) 2009-03-18 2009-03-18 VxWorks操作***中实现驱动SATA设备的方法和***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2009101060668A CN101840306B (zh) 2009-03-18 2009-03-18 VxWorks操作***中实现驱动SATA设备的方法和***

Publications (2)

Publication Number Publication Date
CN101840306A true CN101840306A (zh) 2010-09-22
CN101840306B CN101840306B (zh) 2011-12-07

Family

ID=42743702

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2009101060668A Active CN101840306B (zh) 2009-03-18 2009-03-18 VxWorks操作***中实现驱动SATA设备的方法和***

Country Status (1)

Country Link
CN (1) CN101840306B (zh)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102567252A (zh) * 2010-12-09 2012-07-11 北京华虹集成电路设计有限责任公司 一种硬盘和主机之间数据传输方法和***
CN102999381A (zh) * 2011-09-09 2013-03-27 中国航天科工集团第三研究院第八三五七研究所 一种提高VxWorks实时性的CPCI设备中断复用方法
CN103092632A (zh) * 2011-10-28 2013-05-08 研祥智能科技股份有限公司 一种Vxworks操作***的安装方法
CN103106160A (zh) * 2013-01-31 2013-05-15 中国航空无线电电子研究所 机载环境sata总线存储控制***及其控制方法
CN103309830A (zh) * 2013-07-08 2013-09-18 哈尔滨工业大学 VxWorks操作***下CPCI总线CAN通信模块的驱动器及驱动方法
CN103984568A (zh) * 2014-04-25 2014-08-13 山东超越数控电子有限公司 一种pci转cf驱动方法
CN105786747A (zh) * 2016-02-22 2016-07-20 北京和利时***工程有限公司 一种实现热插拔处理的方法和装置
CN107346296A (zh) * 2016-05-05 2017-11-14 研祥智能科技股份有限公司 一种驱动方法及装置
CN109446133A (zh) * 2018-11-14 2019-03-08 天津津航计算技术研究所 在VxWorks***下提高SATA硬盘传输速度的方法
CN110928815A (zh) * 2019-11-29 2020-03-27 四川效率源科技有限责任公司 一种获取ahci基地址寄存器值的方法
CN112243122A (zh) * 2020-10-15 2021-01-19 天津津航计算技术研究所 一种h.265图像解压缩传输方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7130932B1 (en) * 2002-07-08 2006-10-31 Adaptec, Inc. Method and apparatus for increasing the performance of communications between a host processor and a SATA or ATA device
CN100383736C (zh) * 2004-05-08 2008-04-23 鸿富锦精密工业(深圳)有限公司 串行高阶硬盘架构控制器自动初始化方法
US20060095594A1 (en) * 2004-11-03 2006-05-04 Jaan-Huei Chen System and method of automatically executing ata/atapi commands

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102567252A (zh) * 2010-12-09 2012-07-11 北京华虹集成电路设计有限责任公司 一种硬盘和主机之间数据传输方法和***
CN102999381B (zh) * 2011-09-09 2015-03-04 中国航天科工集团第三研究院第八三五七研究所 一种提高VxWorks实时性的CPCI设备中断复用方法
CN102999381A (zh) * 2011-09-09 2013-03-27 中国航天科工集团第三研究院第八三五七研究所 一种提高VxWorks实时性的CPCI设备中断复用方法
CN103092632A (zh) * 2011-10-28 2013-05-08 研祥智能科技股份有限公司 一种Vxworks操作***的安装方法
CN103106160A (zh) * 2013-01-31 2013-05-15 中国航空无线电电子研究所 机载环境sata总线存储控制***及其控制方法
CN103106160B (zh) * 2013-01-31 2015-07-01 中国航空无线电电子研究所 机载环境sata总线存储控制***及其控制方法
CN103309830A (zh) * 2013-07-08 2013-09-18 哈尔滨工业大学 VxWorks操作***下CPCI总线CAN通信模块的驱动器及驱动方法
CN103984568A (zh) * 2014-04-25 2014-08-13 山东超越数控电子有限公司 一种pci转cf驱动方法
CN105786747A (zh) * 2016-02-22 2016-07-20 北京和利时***工程有限公司 一种实现热插拔处理的方法和装置
CN107346296A (zh) * 2016-05-05 2017-11-14 研祥智能科技股份有限公司 一种驱动方法及装置
CN107346296B (zh) * 2016-05-05 2022-01-18 研祥智能科技股份有限公司 一种驱动方法及装置
CN109446133A (zh) * 2018-11-14 2019-03-08 天津津航计算技术研究所 在VxWorks***下提高SATA硬盘传输速度的方法
CN110928815A (zh) * 2019-11-29 2020-03-27 四川效率源科技有限责任公司 一种获取ahci基地址寄存器值的方法
CN110928815B (zh) * 2019-11-29 2023-05-05 四川效率源科技有限责任公司 一种获取ahci基地址寄存器值的方法
CN112243122A (zh) * 2020-10-15 2021-01-19 天津津航计算技术研究所 一种h.265图像解压缩传输方法

Also Published As

Publication number Publication date
CN101840306B (zh) 2011-12-07

Similar Documents

Publication Publication Date Title
CN101840306B (zh) VxWorks操作***中实现驱动SATA设备的方法和***
JP6796304B2 (ja) 最終レベルキャッシュシステム及び対応する方法
WO2017066944A1 (zh) 一种存储设备访问方法、装置和***
US6195730B1 (en) Computer system with storage device mapping input/output processor
JP5159902B2 (ja) 入出力処理システム内のチャネル・サブシステムと通信するように構成された制御装置において可変長のデバイス・コマンド・ワード(dcw)を処理するための方法
US9292224B2 (en) Providing indirect data addressing for a control block at a channel subsystem of an I/O processing system
US9043494B2 (en) Providing indirect data addressing in an input/output processing system where the indirect data address list is non-contiguous
KR102358477B1 (ko) 인터페이스 제어 메커니즘을 갖는 전자 시스템 및 그것의 동작 방법
TWI718969B (zh) 記憶體裝置、記憶體定址方法與包括非暫時性儲存媒體的物品
US10620841B2 (en) Transfer of object memory references in a data storage device
WO2016058560A1 (zh) 一种基于服务端与外部缓存***的外接式计算设备加速方法与实现该方法的设备
US20040019706A1 (en) Methods and structure for SCSI/IDE translation in a storage subsystem
CN113031862B (zh) 一种基于nvme协议控制sata盘的存储***
US7818473B2 (en) Embedded locate records for device command word processing
US7171396B2 (en) Method and program product for specifying the different data access route for the first data set includes storing an indication of the different access for the first data set providing alternative data access routes to a data storage
CN116680714A (zh) 一种分布式数据加密记录***及方法
US20060277326A1 (en) Data transfer system and method
CN101561760A (zh) 接口卡固件升级方法
CN113220238B (zh) 一种通用sas控制器接口实现方法
US20240168876A1 (en) Solving submission queue entry overflow using metadata or data pointers
JP2008299747A (ja) Usbホストシステム及び転送データの転送方法
US20130275627A1 (en) Methods for exchanging adminsitrative information through a communication interface with limited administrative information exchange features
US7532625B2 (en) Block transfer for WLAN device control
KR20170108421A (ko) 메모리 카드로부터 파일을 읽는 방법

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20230621

Address after: 518000 1701, Yanxiang Science and Technology Building, No. 31, High-tech Middle 4th Road, Maling Community, Yuehai Street, Nanshan District, Shenzhen, Guangdong Province

Patentee after: Shenzhen Yanxiang Smart Technology Co.,Ltd.

Address before: 518057 Guangdong city of Shenzhen province Nanshan District high in the four EVOC Technology Building No. 31

Patentee before: EVOC INTELLIGENT TECHNOLOGY Co.,Ltd.