VxWorks操作系统中实现驱动SATA设备的方法和系统的制作方法

文档序号:6576196阅读:453来源:国知局
专利名称: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的最高数据传输率。Vxfforks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时 操作系统(Real-Time Operating System, RTOS),是嵌入式开发环境的关键组成部分。其 良好的持续发展能力、高性能的内核、高可靠性和卓越的实时性被广泛应用在通信、军事、 航空、航天等精尖技术及实时性要求极高的领域中。作为一个计算机系统,不可避免的需 要使用外部I/O设备,正是I/O设备的驱动程序为其提供了可访问性和可操作性。目前, Vxfforks操作系统提供了对多种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 Memor y 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设备有一个最大深度为η (1 ^ η ^ 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_INF0)、SATA设备结构体(SATA_DEV)、AHCI控制器结构体 (AHCI_CTRL),AHCI 端 口 结构体(AHCI_P0RT),接收 FIS 结构体(RECIVED_FIS),SATA 队列命 令结构体(SATA_QC),命令列表结构体(C0MMAND_LIST),命令头结构体(C0MMAND_HEADER), 命令表结构体(C0MMAND_TABLE),物理区域描述符结构体(AHCI_PRD)。本发明实施例中,命令头结构体(C0MMAND_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 位的保留域 */} C0MMAND_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
; /*
DMA 建立帧信息结构体 */UINT8_t psfis
; /* [20_40h] PIO 建立帧信息结构体 */UINT8_t rfis
; /*[40_58h]D2HRegister 帧信息结构体 */UINT8_t sdbfis
; /*[58_60h]设置设备字节帧信息结构体 */UINT8_t unfis
; /*[60_A0H]未知帧信息结构体 */UINT8_t reserved
;/*[A0_FFH]保留域 */}RECIVED_FIS ;本发明实施例中,所述控制和状态的通用域(Generic Host Control)占用32字 节(00h-20h),所述端口 0 (PortO)占用IOOh至180h (共计128字节),从180h至1 IOOh依 次为端口 I(Portl)至端口 31(Port31),每个端口占用128字节。下面以端口 O(PortO)为例,端口 0的命令列表基地址寄存器中保存了命令列表的 基地址值,一个命令列表包括若干个命令头结构体(COMMAND_HEADER)。本发明实施例中,一 个命令列表中有32个命令头结构体(COMMAND_HEADER)。每个命令头结构体占有相同的长 度,本发明实施例中每个命令头结构体占用32字节的长度。请参阅图4所示,本发明实施例中,每个命令头包括PRDTL (PhysicalRegion Descriptor Table Length,物理区域描述符表的长度),CFL (Command FISLength,命令FIS 的长度),PRDBC (Physical Region Descriptor Byte Count,物理区域描述字节计数), CTBAO (Command Table Base Address,代表命令表基地址),CTBA_U0 (Command Table Base Address Up 32,代表命令表基地址高32位)以及16个字节的保留位。其中,所述C0MMAND_ 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建立帧信息结构体(ΡΙ0 SETUP FIS), D2HRegiSter帧信息结构体(D2HRegisterFIS)以及其他未知的帧信息结构体。每个帧信息 结构体的长度不相同。
请参阅图5所示,本发明实施例采用了一种统一的内存分配方案,即在初始化过程中,在物理内存中开辟一段连续的空间,用于存储命令列表(C0MMAND_LIST)、命令 表(C0MMAND_TABLE)和接收 FIS(ReceivedFIS)。其中,命令列表(C0MMAND_LIST)占 用1024字节的空间、命令表(C0MMAND_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控制器的内部复位,与数据传输相关的所有状态 寄存器都回到空闲状态,所有的端口通过C0MRESET信号被重新初始化。本发明实施例通过 在程序中写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 Ibal ;UINT8 Ibam ;UINT8 Ibah ;UINT8 device ;UINT8 command ;} SATA_QC ;以DMA读为例,本发明实施例中必须设置几个重要参数命令码Command= SATA_CMD_READ_DMA1 ;/*0xC8,DMA 读命令 */传输协议protocol= SATA_PR0T_DMA0 ; /*DMA 传输 */传输块数msect = blocks ;/*每 次传输的数据块数,每个块512个字节*/以及 feature、ctl、device、Ibal、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、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务 器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本发明实施例应用了具体的实施例对本发明实施例的原理及实施方式进行了阐 述,以上实施例的说明只是用于帮助理解本发明实施例的方法及其核心思想;同时,对于本 领域的一般技术人员,依据本发明实施例的思想,在具体实施方式
及应用范围上均会有改 变之处,综上所述,本说明书内容不应理解 为对本发明实施例的限制。
权利要求
一种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队列命令结构体; 封装单元,用于封装一个命令表; 激活单元,用于激活命令。
全文摘要
本发明提供了一种VxWorks操作系统下实现驱动SATA设备的方法,所述方法包括初始化和DMA读写,其中,所述初始化包括如下步骤a)初始化AHCI控制器;b)分配AHCI内存空间;c)启动AHCI控制器的端口;所述DMA读写包括如下步骤a)在命令列表中查找一个空命令头;b)初始化所述空命令头的命令头结构体;c)初始化一个SATA队列命令结构体;d)封装一个命令表;e)激活命令,实现DMA读写。同时本发明还公开了一种VxWorks操作系统下实现驱动SATA设备的系统。通过本发明提供的方法和系统,实现了在VxWorks操作系统最新6.6版本包括之前所有的版本上实现以AHCI模式驱动SATA硬盘。
文档编号G06F3/06GK101840306SQ20091010606
公开日2010年9月22日 申请日期2009年3月18日 优先权日2009年3月18日
发明者匡尧文, 曹雨田, 王志明 申请人:研祥智能科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1