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的信息;