您好,欢迎访问三七文档
SATA协议简介SATAProtocol第一部分物理层SATAProtocolSATAProtocol物理层的功能以1.5Gbps、3.0Gbps或者6Gbps的速率传输DNRZ串行数据流;发送端和接收端提供100欧姆的终端匹配电阻;将链路层接收的并行数据进行串行化之后发送;接收高速串行数据转换成并行数据,包括从串行数据流中进行数据提取和时钟恢复;检测ALIGN原语,进行数据对齐;带外信号的接收和发送;使用带外信号进行SATA接口初始化和主从之间速率协商;向链路层发连接状态(已连接、未连接、已连接但是速率协商失败);SATAProtocol物理层的主要状态ResetCOMINITAwaitCOMWAKEAwaitNoCOMWAKECalibrateCOMWAKESendAlignReadyParity、SlubmberReduceSpeedSATAProtocol物理层上电初始化SATAProtocol电源管理Partial模式:物理层部分电路进入休眠模式,能够在10us之内被唤醒。SATAProtocolSlumber模式:与Partial模式相比可以关闭更多的电路,能够在10ms之内被唤醒。第二部分链路层SATAProtocol链路层的功能与对方的链路层相互协商传送帧和原语;接收传输层传送的数据(Dword),计算数据的CRC校验值,给数据加上帧头、帧尾和CRC校验信息;接收对方链路层的数据信息,进行CRC校验,移除数据中的帧头、帧尾和CRC校验信息;帧流量控制;向传输层报告传输状态;8b/10b编解码;对数据加扰、解扰;SATAProtocol链路层数据结构SATAProtocol链路层原语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发送数据就绪SATAProtocolDMAT原语功能:通知发送方停止数据传送。主机到设备的数据传输,主机收到DMAT原语之后,会停止数据发送,开始发送CRC和EOF原语,关闭DMA,保存当前DMA的状态。设备之后可以发送DMAActiveFIS重新激活主机DMA,继续数据传送。设备到主机的数据传输,设备收到DMAT原语之后,设备会永久终止本次数据传输。SATAProtocolCONT原语功能:避免发送长串重复原语,减少电磁干扰。接收方收到CONT原语之后会认为当前发送方一直发送CONT之前的最后一个原语,直到收到另外一个原语。设备和主机必须支持接收和处理CONT原语的功能,可以选择是否支持发送CONT原语的功能。CONT原语之后的数据要加扰。SATAProtocol流量控制接收方为了避免接收数据缓冲区溢出,使用HOLD原语进行流量控制。在接收数据缓冲区将要满的时候,接收方会发送HOLD原语通知发送方暂停数据发送,由于HOLD原语传到发送方会有一定的延时,在延时期间发送方会继续发送数据,因此接收缓冲区必须有一定的容量来继续接收接下来HOLDA之前的数据。SATAProtocol链路层状态链路层状态机是链路层的控制模块,是链路层的核心,主要包括以下四个部分:空闲状态机发送状态机接收状态机电源管理状态机SATAProtocol空闲状态机主要完成复位操作和建立连接,主要包括以下6个状态:L_IDLEL_SyncEscapeL_NoCommErrL_NoCommL_SendAlignL_RESET空闲状态机SATAProtocolL_IDLE符合以下条件保持空闲状态:①物理层连接正常;②传输层没有传送数据请求;③没有接收到X_RDY、PMREQ_P和PMREQ_S原语;当收到传输层的数据传输请求,链路层进入数据传输状态。当接收到X_RDY原语,链路层进入数据接收状态。当收到传输层进入电源管理模式的请求或者收到PMREQ_P或PMREQ_S原语,链路层进入电源管理状态。当物理层失去连接,进入L_NoCommErr状态。SATAProtocolL_NoCommErr、L_NoComm和L_SendAlign状态当检测到物理层失去连接进入L_NoCommErr状态,然后进入L_NoComm状态,需要向传输层报告物理层失去连接的状态。直到检测到物理层连接正常之后,链路层进入L_SendAlign状态,否则保持L_NoComm状态。在SendAlign状态,链路层发送ALIGN原语,之后如果物理层报告连接正常,进入L_IDLE状态,否则进入L_NoComm状态。SATAProtocol发送状态机主要响应传输层发送请求,启动数据发送,通过各类原语的发送和接收实现与主机之间的传输通道的建立和流量控制。SATAProtocolL_SendData状态传输数据状态表示正在发送数据。如果更多的数据需要继续发送但是传输层还未准备好,链路层进入SendHold状态。如果更多的数据需要发送但是接收端收到了HOLD原语,发送方链路层进入RecvHOLD状态(SendHOLDA)。如果数据发送完毕或者接收到DMAT原语,链路层进入SendCRC状态发送CRC。如果收到SYNC原语,表示接收方传输层想要取消这次数据传输,发送方链路层进入IDLE状态。如果发送方传输层想要取消本次数据传输,链路层进入SyncEscape状态。如果检测到物理层失去连接,链路层进入NoCommErr状态。SATAProtocol接收状态机接收数据的时候,接收状态机控制原语的接收和响应,建立数据传输通道,接收数据并校验其正确性,向发送方返回接收状态。SATAProtocolL_SyncEscape当链路层在数据发送或者数据接收状态的时候,如果传输层需要取消当前数据接收或发送,链路层会进入L_SyncEscape状态。当前状态链路层发送SYNC原语。当前状态接收到SYNC原语或者X_RDY原语之后跳到L_IDLE。当前状态如果物理层失去连接,进入L_NoCommErr状态。SATAProtocolL_RcvData状态接收数据状态,正常回应R_IP。如果FIFO空间不足,进入Hold状态,发送HOLD原语告知发送方暂停发送数据。如果收到HOLD原语,表示发送方暂停发送数据,链路层接收状态机进入RecvHold状态。如果收到EOP原语,表示数据传输完毕,进入RecvEOF状态。如果收到WTRM原语(未收到帧结束原语),表示数据传输错误,进入BadEnd状态。如果收到SYNC原语,表示发送方传输层要取消本次数据传输,进入IDLE状态。如果物理层失去连接,进入NoCommErr状态。如果接收方传输层想要取消本次数据传输,进入SyncEscape状态,之后会向发送方发送SYNC原语。SATAProtocol第三部分传输层SATAProtocol传输层传输层在链路层和应用层之间,负责组帧和解帧,主机和设备通过传输层帧的交互来完成命令交互和数据传递。发送FIS时,传输层完成以下功能:根据应用层的请求组建帧;通知链路层需要发送数据帧,并把数据帧内容传给链路层;管理数据缓存区,给链路层发送流量控制信息;向应用层报告传输状态;接收FIS时,传输层完成以下功能:从链路层接收FIS内容;根据FIS类型,把FIS内容放到合适的位置;向应用层报告接收状态;SATAProtocol传输层FIS是以Dword为基本单元,用来在主机和设备之间传递信息的一种帧结构,SOF和EOF原语分别作为FIS的开头和结尾,传输过程中可能在FIS中间插入HOLD原语来进行流量控制。第0个Dword的第0字节决定了FIS类型。SATAProtocolSetDeviceBitFIS用于更新主机映射寄存器中错误寄存器和状态寄存器的内容。由设备应用层发起传输该FIS的请求。DMAActivateFIS用于同意主机向设备以DMA方式发送数据。当设备向主机发送该数据帧的时候,设备应该准备好接收后续的DataFIS。当主机收到该帧,如果主机DMA控制器已经配置好,主机应该开始发送DataFIS。如果主机DMA控制器未配置好,主机应该配置DMA控制器,配置好之后激活DMA控制器开始数据帧的发送。SATAProtocolRegisterFISHosttoDevice:用来传输主机映射寄存器的内容到设备,ATA命令集就是用这个FIS发往设备的。当设备收到一个有效的RegisterFIS之后,设备更新它的命令寄存器和控制寄存器中的内容,然后检查FIS中的C位,如果是1,则执行命令寄存器中的命令,如果是0,则执行控制寄存器中的控制请求。DevicetoHost:用来更新主机映射寄存器的内容。当设备执行完一个命令,应该发送该帧向主机报告完成状态。SATAProtocolDMASetupFIS(Bidirectional)发送方发送该帧要求对方按照帧的内容配置好DMA控制器,发送此帧是进行DMA传输的第一步。该帧中包含了DMA操作地址、DMA传输数量和传输方向等信息。一般接收方收到该帧之后需要发送DMAActivateFIS来激活DMA传输(如果DMASetupFIS帧中的Auto-Activate位被置一,则接收方不需要回复DMAActivateFIS)。由应用层发出该帧的传输请求。PIOSetup–DevicetoHost该帧由设备发送给主机告诉主机相关PIO操作信息(比如接下来的数据传输方向、传输数量),还包括了在PIO传输前和传输后映射寄存器的状态信息。SATAProtocolDataFIS(Bidirectional)该帧用来传输数据,数据长度是不定的,数据净荷的长度最多2048个Dwords。在发送数据帧之前都需要用PIOSetupFIS或DMASetupFIS等帧建立操作参数。SATAProtocol设备传输层状态机SATAProtocol设备传输层状态机SATAProtocol第四部分命令层SATAProtocol设备命令层设备命令层主要完成对收到的ATA/ATAPI命令的解析(RegisterFIS),并做出相应的回应。主要以下几类命令:NON_Data命令PIO命令DMA命令NCQ命令这几类命令中,每一类命令都有多种命令构成。SATAProtocolNON_Data命令主机端通过NON_Data命令来查询设备的状态,或者做功能的设置。设备应用层软件会解析并执行该命令,执行结果通过设备发往主机端的寄存器FIS发给主机。SATAProtocolPIOIN命令主机端通过RegisterHosttoDeviceFIS发送命令到设备端,设备端应用层收到该命令之后,准备好数据,然后控制传输层发送PIOSetupFIS来通知主机准备接收数据,之后发送DataFIS,DataFIS长度如果超过2048个Dwords,需要分开发送,每个DataFIS之前都要发送一个PIOSetupFIS。如果传输过程中出现错误,设备要向主机发送RegFIS(FIS内容需要根据ATA8-ACS标准)。SATAProtocolPIOOUT命令主机端通过RegisterHosttoDeviceFIS发送命令到设备端,设备端应用层收到该命令之后,准备好存放数据的空间,然后控制传输层发送PIOSetupFIS来通知主机开始发送数据,
本文标题:SATA协议总结
链接地址:https://www.777doc.com/doc-3374239 .html