资源描述
SATA协议简介qqSATA PSATA Protocolrotocol第一部分 物理层qqSATA PSATA ProtocolrotocolqqSATA PSATA Protocolrotocol物理层的功能物理层的功能 以以1.5Gbps、3.0Gbps或者或者6Gbps的速率传输的速率传输DNRZ串行数据流;串行数据流;发送端和接收端提供发送端和接收端提供100欧姆的终端匹配电阻;欧姆的终端匹配电阻;将链路层接收的并行数据进行串行化之后发送;将链路层接收的并行数据进行串行化之后发送;接收高速串行数据转换成并行数据,包括从串行数据流中进行数据提取接收高速串行数据转换成并行数据,包括从串行数据流中进行数据提取和时钟恢复;和时钟恢复;检测检测ALIGN原语,进行数据对齐;原语,进行数据对齐;带外信号的接收和发送;带外信号的接收和发送;使用带外信号进行使用带外信号进行SATA接口初始化和主从之间速率协商;接口初始化和主从之间速率协商;向链路层发连接状态(已连接、未连接、已连接但是速率协商失败);向链路层发连接状态(已连接、未连接、已连接但是速率协商失败);qqSATA PSATA Protocolrotocol物理层的主要状态物理层的主要状态l Resetl COMINITl AwaitCOMWAKEl AwaitNoCOMWAKEl Calibratel COMWAKEl SendAlignl Readyl Parity、Slubmberl Reduce SpeedqqSATA PSATA Protocolrotocol物理层上电初始化物理层上电初始化 qqSATA PSATA Protocolrotocol电源管理电源管理Partial模式:模式:物理层部分电路进入休眠模式,能够在物理层部分电路进入休眠模式,能够在10us之内被唤醒。之内被唤醒。qqSATA PSATA ProtocolrotocolSlumber模式:模式:与与Partial模式相比可以关闭更多的电路,能够在模式相比可以关闭更多的电路,能够在10ms之内被唤之内被唤醒。醒。第二部分 链路层qqSATA PSATA Protocolrotocol链路层的功能链路层的功能与对方的链路层相互协商传送帧和原语;与对方的链路层相互协商传送帧和原语;接收传输层传送的数据(接收传输层传送的数据(Dword),计算数据的),计算数据的CRC校验值,给数据加校验值,给数据加上帧头、帧尾和上帧头、帧尾和CRC校验信息;校验信息;接收对方链路层的数据信息,进行接收对方链路层的数据信息,进行CRC校验,移除数据中的帧头、帧尾校验,移除数据中的帧头、帧尾和和CRC校验信息;校验信息;帧流量控制;帧流量控制;向传输层报告传输状态;向传输层报告传输状态;8b/10b编解码;编解码;对数据加扰、解扰;对数据加扰、解扰;qqSATA PSATA Protocolrotocol链路层数据结构链路层数据结构qqSATA PSATA Protocolrotocol链路层原语链路层原语 ALIGNp物理层依靠物理层依靠ALIGN原语进行数据对齐,成对发送原语进行数据对齐,成对发送CONTp避免连续发送长串重复原语DMATp用于通知发送方提前终止DMA数据发送EOFp表示数据帧的结束HOLDp发送方发送HOLD表示数据未准备好,接收方发送HOLD表示接受FIFO将满HOLDAp用于响应HOLD原语PMACKp用于响应PMREQ_Pp和PMREQ_Sp,接收方收到这个原语之后进入电源管理状态PMNAKp拒绝电源管理模式原语PMREQ_Pp请求进入Parity模式PMREQ_Sp请求进入Slumber模式R_ERRp接收错误R_IPp表示正常接收数据R_OKp接收数据正确R_RDYp用于回应X_RDY原语,表示接收端准备就绪SOFp表示数据帧的开始SYNCp同步原语WTRMp数据帧发送完成之后,发送方发送这个原语,等待接收方回应接收状态X_RDYp发送数据就绪qqSATA PSATA ProtocolrotocolDMAT原语原语功能:通知发送方停止数据传送。功能:通知发送方停止数据传送。主机到设备的数据传输,主机收到主机到设备的数据传输,主机收到DMAT原语之后,会停止数据原语之后,会停止数据发送,开始发送发送,开始发送CRC和和EOF原语,关闭原语,关闭DMA,保存当前,保存当前DMA的状态。设的状态。设备之后可以发送备之后可以发送DMA Active FIS重新激活主机重新激活主机DMA,继续数据传送。,继续数据传送。设备到主机的数据传输,设备收到设备到主机的数据传输,设备收到DMAT原语之后,设备会永久原语之后,设备会永久终止本次数据传输。终止本次数据传输。qqSATA PSATA ProtocolrotocolCONT原语原语 功能:避免发送长串重复原语,减少电磁干扰。功能:避免发送长串重复原语,减少电磁干扰。接收方收到接收方收到CONT原语之后会认为当前发送方一直发送原语之后会认为当前发送方一直发送CONT之前之前的最后一个原语,直到收到另外一个原语。的最后一个原语,直到收到另外一个原语。设备和主机必须支持接收和处理设备和主机必须支持接收和处理CONT原语的功能,可以选择是原语的功能,可以选择是否支持发送否支持发送CONT原语的功能。原语的功能。CONT原语之后的数据要加扰。原语之后的数据要加扰。qqSATA PSATA Protocolrotocol流量控制流量控制接收方为了避免接收数据缓冲区溢出,使用接收方为了避免接收数据缓冲区溢出,使用HOLD原语进行流量原语进行流量控制。控制。在接收数据缓冲区将要满的时候,接收方会发送在接收数据缓冲区将要满的时候,接收方会发送HOLD原语通知原语通知发送方暂停数据发送,由于发送方暂停数据发送,由于HOLD原语传到发送方会有一定的延时,在延原语传到发送方会有一定的延时,在延时期间发送方会继续发送数据,因此接收缓冲区必须有一定的容量来继续时期间发送方会继续发送数据,因此接收缓冲区必须有一定的容量来继续接收接下来接收接下来HOLDA之前的数据。之前的数据。qqSATA PSATA Protocolrotocol链路层状态链路层状态链路层状态机是链路层的控制模块,是链路层的核心,主要包括链路层状态机是链路层的控制模块,是链路层的核心,主要包括以下四个部分:以下四个部分:u空闲状态机空闲状态机u发送状态机发送状态机u接收状态机接收状态机u电源管理状态机电源管理状态机qqSATA PSATA Protocolrotocol空闲状态机主要完成复位操作和建立连接,主要包括以下空闲状态机主要完成复位操作和建立连接,主要包括以下6个状态:个状态:uL_IDLEuL_SyncEscapeuL_NoCommErruL_NoCommuL_SendAlignuL_RESET空闲状态机空闲状态机qqSATA PSATA ProtocolrotocolL_IDLE符合以下条件保持空闲状态:符合以下条件保持空闲状态:物理层连接正常;物理层连接正常;传输层没有传送数据请求;传输层没有传送数据请求;没有接收到没有接收到X_RDY、PMREQ_P和和PMREQ_S原语;原语;当收到传输层的数据传输请求,链路层进入数据传输状态。当收到传输层的数据传输请求,链路层进入数据传输状态。当接收到当接收到X_RDY原语,链路层进入数据接收状态。原语,链路层进入数据接收状态。当收到传输层进入电源管理模式的请求或者收到当收到传输层进入电源管理模式的请求或者收到PMREQ_P或或PMREQ_S原语,链路层进入电源管理状态。原语,链路层进入电源管理状态。当物理层失去连接,进入当物理层失去连接,进入L_NoCommErr状态。状态。qqSATA PSATA ProtocolrotocolL_NoCommErr、L_NoComm和和L_SendAlign状态状态当检测到物理层失去连接进入当检测到物理层失去连接进入L_NoCommErr状态,然后进入状态,然后进入L_NoComm状态,需要向传输层报告物理层失去连接的状态。状态,需要向传输层报告物理层失去连接的状态。直到检测到物理层连接正常之后,链路层进入直到检测到物理层连接正常之后,链路层进入L_SendAlign状态,状态,否则保持否则保持L_NoComm状态。状态。在在SendAlign状态,链路层发送状态,链路层发送ALIGN原语,之后如果物理层报原语,之后如果物理层报告连接正常,进入告连接正常,进入L_IDLE状态,否则进入状态,否则进入L_NoComm状态。状态。qqSATA PSATA Protocolrotocol发送状态机发送状态机主要响应主要响应 传输层发送请求,启动数据发送,通过各类原语的发送和接收传输层发送请求,启动数据发送,通过各类原语的发送和接收实现与主机之间的传输通道的建立和流量控制。实现与主机之间的传输通道的建立和流量控制。qqSATA PSATA ProtocolrotocolL_SendData状态状态传输数据状态表示正在发送数据。传输数据状态表示正在发送数据。如果更多的数据需要继续发送但是传输层还未准备好,链路层进入如果更多的数据需要继续发送但是传输层还未准备好,链路层进入SendHold状态。状态。如果更多的数据需要发送但是接收端收到了如果更多的数据需要发送但是接收端收到了HOLD原语,发送方链路层原语,发送方链路层进入进入RecvHOLD状态(状态(SendHOLDA)。)。如果数据发送完毕或者接收到如果数据发送完毕或者接收到DMAT原语,链路层进入原语,链路层进入SendCRC状态发状态发送送CRC。如果收到如果收到SYNC原语,表示接收方传输层想要取消这次数据传输,发送原语,表示接收方传输层想要取消这次数据传输,发送方链路层进入方链路层进入IDLE状态。状态。如果发送方传输层想要取消本次数据传输,链路层进入如果发送方传输层想要取消本次数据传输,链路层进入SyncEscape状状态。态。如果检测到物理层失去连接,链路层进入如果检测到物理层失去连接,链路层进入NoCommErr状态。状态。qqSATA PSATA Protocolrotocol接收状态机接收状态机接收数据的时候,接收状态机控制原语的接收和响应,建立数据传输通接收数据的时候,接收状态机控制原语的接收和响应,建立数据传输通道,接收数据并校验其正确性,向发送方返回接收状态。道,接收数据并校验其正确性,向发送方返回接收状态。qqSATA PSATA ProtocolrotocolL_SyncEscape当链路层在数据发送或者数据接收状态的时候,如果传输层需要当链路层在数据发送或者数据接收状态的时候,如果传输层需要取消当前数据接收或发送,链路层会进入取消当前数据接收或发送,链路层会进入L_SyncEscape状态。状态。当前状态链路层发送当前状态链路层发送SYNC原语。原语。当前状态接收到当前状态接收到SYNC原语或者原语或者X_RDY原语之后跳到原语之后跳到L_IDLE。当前状态如果物理层失去连接,进入当前状态如果物理层失去连接,进入L_NoCommErr状态。状态。qqSATA PSATA ProtocolrotocolL_RcvData状态状态接收数据状态,正常回应接收数据状态,正常回应R_IP。如果如果FIFO空间不足,进入空间不足,进入Hold状态,发送状态,发送HOLD原语告知发送方暂停发原语告知发送方暂停发送数据。送数据。如果收到如果收到HOLD原语,表示发送方暂停发送数据,链路层接收状态机进原语,表示发送方暂停发送数据,链路层接收状态机进入入RecvHold状态。状态。如果收到如果收到EOP原语,表示数据传输完毕,进入原语,表示数据传输完毕,进入RecvEOF状态。状态。如果收到如果收到WTRM原语(未收到帧结束原语),表示数据传输错误,进入原语(未收到帧结束原语),表示数据传输错误,进入BadEnd状态。状态。如果收到如果收到SYNC原语,表示发送方传输层要取消本次数据传输,进入原语,表示发送方传输层要取消本次数据传输,进入IDLE状态。状态。如果物理层失去连接,进入如果物理层失去连接,进入NoCommErr状态。状态。如果接收方传输层想要取消本次数据传输,进入如果接收方传输层想要取消本次数据传输,进入SyncEscape状态,之状态,之后会向发送方发送后会向发送方发送SYNC原语。原语。qqSATA PSATA Protocolrotocol第三部分 传输层qqSATA PSATA Protocolrotocol传输层传输层传输层在链路层和应用层之间,负责组帧和解帧,主机和设备通过传输传输层在链路层和应用层之间,负责组帧和解帧,主机和设备通过传输层帧的交互来完成命令交互和数据传递。层帧的交互来完成命令交互和数据传递。发送发送FIS时,传输层完成以下功能:时,传输层完成以下功能:u根据应用层的请求组建帧;根据应用层的请求组建帧;u通知链路层需要发送数据帧,并把数据帧内容传给链路层;通知链路层需要发送数据帧,并把数据帧内容传给链路层;u管理数据缓存区,给链路层发送流量控制信息;管理数据缓存区,给链路层发送流量控制信息;u向应用层报告传输状态;向应用层报告传输状态;接收接收FIS时,传输层完成以下功能:时,传输层完成以下功能:u从链路层接收从链路层接收FIS内容;内容;u根据根据FIS类型,把类型,把FIS内容放到合适的位置;内容放到合适的位置;u向应用层报告接收状态;向应用层报告接收状态;qqSATA PSATA Protocolrotocol传输层传输层FIS是以是以Dword为基本单元,用来在主机和设备之间传递信息的一种帧结为基本单元,用来在主机和设备之间传递信息的一种帧结构,构,SOF和和EOF原语分别作为原语分别作为FIS的开头和结尾,传输过程中可能在的开头和结尾,传输过程中可能在FIS中间插入中间插入HOLD原语来进行流量控制。原语来进行流量控制。第第0个个Dword的第的第0字节决定了字节决定了FIS类型。类型。qqSATA PSATA ProtocolrotocolSet Device Bit FIS用于更新主机映射寄存器中错误寄存器和状态寄存器的内容。用于更新主机映射寄存器中错误寄存器和状态寄存器的内容。由设备应用层发起传输该由设备应用层发起传输该FIS的请求。的请求。DMA Activate FIS用于同意主机向设备以用于同意主机向设备以DMA方式发送数据。方式发送数据。当设备向主机发送该数据帧的时候,设备应该准备好接收后续的当设备向主机发送该数据帧的时候,设备应该准备好接收后续的Data FIS。当主机收到该帧,如果主机当主机收到该帧,如果主机DMA控制器已经配置好,主机应该开始发送控制器已经配置好,主机应该开始发送Data FIS。如果主机。如果主机DMA控制器未配置好,主机应该配置控制器未配置好,主机应该配置DMA控制器,配置好控制器,配置好之后激活之后激活DMA控制器开始数据帧的发送。控制器开始数据帧的发送。qqSATA PSATA ProtocolrotocolRegister FISHost to Device:用来传输主机映射寄存器的内容到设备,用来传输主机映射寄存器的内容到设备,ATA命令集就是用这个命令集就是用这个FIS发往设备的。发往设备的。当设备收到一个有效的当设备收到一个有效的Register FIS之后,设备更新它的命令寄存器和控制寄存器中的内之后,设备更新它的命令寄存器和控制寄存器中的内容,然后检查容,然后检查FIS中的中的C位,如果是位,如果是1,则执行命令寄存器中的命令,如果是,则执行命令寄存器中的命令,如果是0,则执行控,则执行控制寄存器中的控制请求。制寄存器中的控制请求。Device to Host:用来更新主机映射寄存器的内容。当设备执行完一个命令,应该发送该帧向主机用来更新主机映射寄存器的内容。当设备执行完一个命令,应该发送该帧向主机报告完成状态。报告完成状态。qqSATA PSATA ProtocolrotocolDMA Setup FIS(Bidirectional)发送方发送该帧要求对方按照帧的内容配置好发送方发送该帧要求对方按照帧的内容配置好DMA控制器,发送此帧是控制器,发送此帧是进行进行DMA传输的第一步。该帧中包含了传输的第一步。该帧中包含了DMA操作地址、操作地址、DMA传输数量和传输方传输数量和传输方向等信息。一般接收方收到该帧之后需要发送向等信息。一般接收方收到该帧之后需要发送DMA Activate FIS来激活来激活DMA传传输(如果输(如果DMA Setup FIS帧中的帧中的Auto-Activate位被置一,则接收方不需要回复位被置一,则接收方不需要回复DMA Activate FIS)。)。由应用层发出该帧的传输请求。由应用层发出该帧的传输请求。PIO Setup Device to Host该帧由设备发送给主机告诉主机相关该帧由设备发送给主机告诉主机相关PIO操作信息(比如接下来的数据操作信息(比如接下来的数据传输方向、传输数量),还包括了在传输方向、传输数量),还包括了在PIO传输前和传输后映射寄存器的状态信息。传输前和传输后映射寄存器的状态信息。qqSATA PSATA ProtocolrotocolData FIS(Bidirectional)该帧用来传输数据,数据长度是不定的,数据净荷的长度最多该帧用来传输数据,数据长度是不定的,数据净荷的长度最多2048个个Dwords。在发送数据帧之前都需要用在发送数据帧之前都需要用PIO Setup FIS或或DMA Setup FIS等帧建立等帧建立操作参数。操作参数。qqSATA PSATA Protocolrotocol设备传输层状态机设备传输层状态机qqSATA PSATA Protocolrotocol设备传输层状态机设备传输层状态机qqSATA PSATA Protocolrotocol第四部分 命令层qqSATA PSATA Protocolrotocol设备命令层设备命令层设备命令层主要完成对收到的设备命令层主要完成对收到的ATA/ATAPI命令的解析(命令的解析(Register FIS),),并做出相应的回应。并做出相应的回应。主要以下几类命令:主要以下几类命令:uNON_Data命令命令uPIO命令命令uDMA命令命令uNCQ命令命令这几类命令中,每一类命令都有多种命令构成。这几类命令中,每一类命令都有多种命令构成。qqSATA PSATA ProtocolrotocolNON_Data命令命令主机端通过主机端通过NON_Data命令命令来查询设备的状态,或者做功能的来查询设备的状态,或者做功能的设置。设备应用层软件会解析并执设置。设备应用层软件会解析并执行该命令,执行结果通过设备发往行该命令,执行结果通过设备发往主机端的寄存器主机端的寄存器FIS发给主机。发给主机。qqSATA PSATA ProtocolrotocolPIO IN命令命令主机端通过主机端通过Register Host to Device FIS发送命令到设备端,设备发送命令到设备端,设备端应用层收到该命令之后,准备好数端应用层收到该命令之后,准备好数据,然后控制传输层发送据,然后控制传输层发送PIO SetupFIS来通知主机准备接收数据,之后发来通知主机准备接收数据,之后发送送Data FIS,Data FIS长度如果超过长度如果超过2048个个Dwords,需要分开发送,每个,需要分开发送,每个Data FIS之前都要发送一个之前都要发送一个PIO SetupFIS。如果传输过程中出现错误,设如果传输过程中出现错误,设备要向主机发送备要向主机发送RegFIS(FIS内容需要内容需要根据根据ATA8-ACS标准)标准)。qqSATA PSATA ProtocolrotocolPIO OUT命令命令主机端通过主机端通过Register Host to Device FIS发送命令到设备端,设备发送命令到设备端,设备端应用层收到该命令之后,准备好存端应用层收到该命令之后,准备好存放数据的空间,然后控制传输层发送放数据的空间,然后控制传输层发送PIO Setup FIS来通知主机开始发送数来通知主机开始发送数据,然后设备开始接收据,然后设备开始接收Data FIS,当,当所有数据传输完成之后,设备端需要所有数据传输完成之后,设备端需要返回一个返回一个RegFIS来告知主机接收状态。来告知主机接收状态。qqSATA PSATA ProtocolrotocolDMA IN和和DMA OUT命令命令qqSATA PSATA ProtocolrotocolNCQ命令命令NCQ(Native Command Queue)命令的特点是主机端可以一次发送多个命令的特点是主机端可以一次发送多个命令,而不需要等第一个命令执行完成之后再发送第二个命令,设备端可以决定命令,而不需要等第一个命令执行完成之后再发送第二个命令,设备端可以决定命令的执行顺序。而且命令对应的数据不再限制在一个数据块内,而是受数据命令的执行顺序。而且命令对应的数据不再限制在一个数据块内,而是受数据FIS大小限制。例如主机发送两个大小限制。例如主机发送两个PIO IN命令,设备可能只需要回一个命令,设备可能只需要回一个PIO SETUP FIS和一个和一个Data FIS就完成数据传输。这样在传输数据时可以减少主机端就完成数据传输。这样在传输数据时可以减少主机端与设备端的与设备端的FIS交互,可以以更高的效率传输数据。交互,可以以更高的效率传输数据。qqSATA PSATA ProtocolrotocolqqSATA PSATA ProtocolrotocolqqSATA PSATA Protocolrotocol
展开阅读全文