sata

来源:互联网 发布:淘宝客服绩效怎么算 编辑:程序博客网 时间:2024/04/29 14:49

Ata8(sata)与ata6(pata)是兼容的
SSD之前的HDD使用cyllinder,SSD使用LBA
disparity表示在串口上传输的数据里0和1中数目的不同个数
adapter是包含了所有层次的适配器
包括device adapter和host adapter
primitive由4个Byte构成的DWORD,第一个byte是控制信号(K开头)后面三个byte是数据信号(D开头)
靠改变register的某些位来执行的指令叫registerdelivered command;这是介于高层软件和底层硬件之间的操作,类似于单片机的汇编语言
signature用来让host辨别device,signature由device设置,signature在command register block中随着FIS传送
sata传输时,16bit的数据发送时,高8位首先发送然后再是低8位
pata是用一个port接多个device,device编号不同表示不同的device总线是共用的,一根连线上有device0和device1;
sata是用多个port接每一个device每个device有自己的连线,devie都是devive0;
host中的state machine与device中同层的state machine配合使用,host或device中相邻层次之间的state machine配合使用;
SATA连接可以直接和host连接也可以通过电缆和host连接,就像USB接口一样;PATA也一样;
模拟前端由高速差分信号驱动器和高速差分信号接收器构成
OOB信号的辨别依靠两个align原语间空操作的时间长度
comreset和cominit形式上是一样的,但comreset只能从host到device,而cominit只能从device到host
SATA发送和接收时是以单bit方式传输的,但是在接受方会连续收到10bit以后再解码

OOB:
  device与host连接是首先从device支持的最高速开始的,如果最高速不满足则用较低速率再次匹配,直到最低速率也不能匹配后device将进入error状态;
换速等待时间为54.6us;
  速率匹配是以一连串的align字符收发实现的,这一连串的align字符要跟在6个comwake(deviceto host)之后;
  host接受到device发来的comwake以后就开始在TX端以最低速率发送D10.2数据,同时在RX端接受device发来的align流 (align流紧跟在6个comwake之后),align流最多可以接受32K个(,接受完align流以后又在TX端将这些align流以接收速度发 送给device,即送回给device,873us内没有接受到则host重启物理连接过程;
D10.2表示此时连接已建立,但要协商传输速度;
  通信链路建立完毕,device发送sync表示可以进行读写等操作了;
 
      out of band
      comreset cominit comwake
      用于物理联路的连接与速率匹配;
      power on时的timing

链路层功能:
  1.与对等传输层协商传送,并在双方都要传输时进行仲裁冲突
  2.在传输层的FIS两端加入SOF CRC  EOF原语封装成frame
  3.以DWORD形式接受传输层送来的FIS
  4.对传输层送来的FIS进行CRC校验
  5.提供流量控制(加入控制原语)
  6.加扰与解扰
  7.8b 10b编解码
  8.接受对等链路层的确认信息,向传输层报告发送情况
链路层:
  primitive原语是基于control signals的(以K开头)
  链路层不必知道frame中的内容(FIS),只需要能够识别frame中的原语信号(一个frame由4个原语构成);
  link层是一个中间过渡层,位于传输层和物理层之间;
  每当传输完一个10b的character后都要根据刚才传输的character重新计算running disparity的值,RD的值只有+  - 0三种
  RD会在5b/6b 3b/4b两个子模块里计算,5b/6b编码前的RD是上一个8b/10b编码以后计算的RD结果;
  5B/6B编码完以后重新计算一次RD,作为3b/4b编码前的RD,3b/4b编码完成以后再次计算RD,作为下一个8B/10B中5b/6b编码前的RD
  如果编码以后的0的个数与1的个数相同则rd的值不变,0与1的个数相同的编码称为neutral disparity;000111  111000 0011  1100被限制出现;
  SOF  EOF  CRC payload都是以DWORD形式存在
  FIS是以多个DWORDS形式存在的
  data和control signal之前总是primitive先行;只有hold原语可以插入在frame中
  frame总是由sof  fis crc eof组成
  crc也要以DWORD方式存在;
  另外一些原语可以存在于SOf和EOF的有效FIS之间直接存在于SOF和EOF之间;
  原语用来在host device之间传输实时信息用来匹配通信;
  k28.5开头的原语表示停顿(align),后跟3个byte以凑成一个DWORD;
  其它作用的原语均以k28.3字节开头,所有原语都是以DWORD形式存在的;
  align原语本身是neutral disparity的所以align的插入不会改变disparity
  align原语总是成对发出的;
  通信链路建立完成以后,链路层发出的前两个DWORD(first and second words)应该是2个连续的align原语,后跟254个非align的DWORD;
  align原语的第一个byte是k28.5;
  align原语用来调整物理层,它对link层不起作用
  扰码是通过一个线性反馈移位寄存器实现的;
  扰码的单位是frame,以检测到SOF原语作为新的扰码操作的开始;
  扰码最多可以对2048个DWORD进行(位于一个frame里的数据)
  正常的DMA传输以EOF作为结束;
  DMAT是中断DMA传输的原语,由当前的backchannel发出;
  收到DMAT原语后,计算CRC和加上EOF,中止当前DMA;
  DMA Active FIS可以重新启动DMA传输;
  EOF后还会继续传送register device to host FIS给host,以报告状态,这符合ATA7-1;
  SATA中的FIS传输类似于PATA中的信号线;
  hold/holda原语就是用来进行流量控制的,它们插在FIS之间里传输;
  R_ok、R_ip、R_rdy 、R_err  x_rdy都是针对payload而言的,即针对FIS而言
  这也属于register delivered command,只不过在PATA中直接写device的commandblock reigster,在SATA中是先写host中的shadow command block register,然后通过FIS传到device中的command block reigster;
  SATA里面是通过FIS来表示此时采用PIO还是DMA方式传输的;PATA中使用专用的DMA信号线和16位的data port;
  CRC只针对payload部分;串扰既包括对data的串扰也包括对crc校验部分的串扰;8b/10b编码包括SOF和EOF等四部分的编码;

传输层作用:
  a.发送时根据FIS的种类及格式构造FIS,接受时检测FIS种类并分解得到有用信息
  b.通知链路层传送frame以及获取链路层传来的framereceipt确认(host收到FIS后也会向device发送确认信息的FIS)
  c.管理和流量控制
  d.向上层报告传输完成或者报错

传输层:
  传输层的作用就是如何构造FIS 以及如何解析FIS,不需要知道frame是如何传输的,这和link层刚好相反
  host和device传输层的状态因FIS的内容不同而不同
  a.FIS是由一些DWORD(4个byte)构成的
  b.原语primitive用来定义边界信息以及流量控制(hold/holda)、传输速率控制、状态报告
  payload content是真正有用信息,先写到shadow command blockregister和shadow control block register里,再通过FIS形式、frame形式、DOWRD比特流形式传到device里的command register block和control register block;
  shadow command block用于映射到command register block;shadow control block用于映射到control registerblock;
  exp: 扩展地址内的内容,用48bit寻址时采用;

FIS register-host to device:
  a.host的command register写操作或者device的control register写操作都会引起host-device FIS的传送
  b.host adapter在write操作后的400ns内会代替device将BSY置1,然后再将register FIS host to device传到device的寄存器中;
  c.host里status register中的BSY或DRQ置位时不允许写command block register
  a. 如果该FIS是用来更新device的command register 则C置位为1,如果该FIS是用来更新devicecontrol register(位于control block register里)则C置位为0;
  b. 同时将device中寄存器C和SRST都置位为1是不允许的
  c. 在PATA中是通过CS0 CS1/CA0CA1 CA2来选择command block register还是control block register;在SATA中仅用一个register FIS host to device就搞定;
  a.device接受到host发出的FIS以后,用已接受的FIS中寄存器的内容更新device的本地寄存器内容,如果C位为1,则执行command部分指定的操作,如果C为0则执行control部分指定的操作

FIS register-device to host:
  由FIS的种类就可以确定FIS的格式和长度;FIS中包含了command的号,在commandregister处指定;
  本来应该是device的中断未决状态,在此由FISregister device to host传送到host的shadow command/control register block内;
  a.device to host FIS用于device修改host中shadow block里的commandregister和control register
  b.还可以返回device执行的命令已经完成
  c.由device先发起的FIS
  当host中status register中的BSY和DRQ位都为0时,device to host FIS可以用来置位host中 status register的SERV,以获得总线使用权,这相当于PATA中的ASSERT信号;
  接受到device to host FIS以后将会重写host shadow command block和shadow controlblock
  当host中shadow register里的BSY和DRQ位都是0时,将丢弃device to host FIS,不更新host 的shadow command block和 shadow control block,进入空闲

FIS set device bits:
  用于device向host,作用与IDENTIFY DEVICE命令完全不同;SET device bits FIS是device用来改写host adapter的shadow寄存器中的error或status里的某些位;IDENTIFY DEVICE作用是向host表明device当前状况,如速率和特征集的支持情况等;
  I表示在收到该FIS以后,如果shadowstatus register中BSY和DRQ位都为0时,host adapter进入中断等待状态
  设置host shadow status中的高低位:包括8位的error register和statusregister中的6位,但不影响status中的BSY  DRQ  以及bit3   bit7
  将I位置1后可以设置host中status register的SERV位置1,以要求总线使用权,此时BSY和DRQ位要都为0;这是本FIS常见用法;
  Set device bits FIS到达host端后:
    FIS中的error部分写入host内shadow bolock中的errorregister(8位)
    status-Hi部分写入 status的6 5 4三位
    sataus-Lo部分写入satus的2 1 0三位
    FIS中的I位为1且host中status中的BSY和DRQ都为0则host进入中断等待状态(实际上表明device进入中断等待状态)

FIS DMA Activate-device to host:
  DMA传输由device发出DMA激活FIS,然后host将数据以DMA方式传送到device;
  每发送一个DMA DATA  FIS后,要再次收到DMA Activate FIS才能发送下一个DMA DATA FIS;
  收到DMA activate FIS以后,如果hostadapter的DMA控制器已经被编程过则开始将数据封装成DMAdata FIS传送,;如果DMA控制器没有被编程则等待,一旦编程就开始DMA传输
  dma avtivate FIS只能在DMA写中用

FIS first party DMA SETUP:
  DMA first pary是双向的,既可以从host到device 也可以从device到host;
  BUFFER OFFSET用于random access;
  DMA transfer count是以BYTE形式为单位的;
  DMA first party只支持sata不支持pata;
  SATA中的DMA是host向device传输,first partyDMA是双向传输;
  PATA中的multi-word DMA和ultraDMA都可以双向传输,仅仅采样频率不同;
  first party dma setup FIS只在DMA context改变时需要用到,一旦DMA传输硬件环境建立完毕,DMA数据就按顺序传输,传输方式也是DWORD
  传输时一方的D为1 另一方的D为0
  如果I位置1则DMA传输完成以后则进入中断未决状态;
  接受方用接受到的fist party DMA FIS来给自己的DMAC编程;

FIS PIO SETUP:
  PIOsetup FIS是device到host,用于要求建立PIO传输;DMA传输也是一样需要先发送activate;
  D=1 write  D=0 read;
  该FIS向host提供了足够的信息用于host掌控PIO传输;
  与DMA传输一样,每传一个DATA FIS就要一个PIO SETUP FIS传输下一个DATA FIS;
  host收到device发来的PIO setupFIS以后会将FIS中status、error寄存器的值写入host的shadowregister里的satus register和errorregister,然后host software对shadowregister进行写操作,每写一次就将一个word写入dataFIS里,此时countdown寄存器要相应减1,E_status在countdown寄存器减为0后的400ns内传到shadowstatus register,data最后以DWORD形式存在

FIS DATA:
  如果有n个DWORD要传输则data FIS有n+1个DWORD长(第一个DWORD用于控制);
  32个bit(一个DWORD),但在一个frame里的DWORD不能超过2048个(8k byte);
  传输前不够DWORD的将在高word(左边的word)补0成DWORD
  first party dma可以从device角度出发将host read操作看成是device write操作;
  data-device to host用于PIO read,DMA read,First party DMA write to hostmemory;
  data-host to device用于PIO write,DMA write, firstparty DMA read of host memory;

sata如何实现ATA命令:通过不同的FIS完成在PATA中复杂的信号连线以及时序功能;
物理层的原理图及内部信号功能:
物理层主要作用:
物理层的数据线、电源线及组合接口
物理层的OOB信号
BIST:环路测试
电源模式管理: slumber partial

IDENTIFY DEVICE属于general featureset,在PATA和SATA中都是通过PIO模式传输256WORD,以供host了解device的信息;    

 

 

原创粉丝点击