USB3.0接口系列:
USB3.0接口——(1)基础知识
USB3.0接口——(2)数据结构
USB3.0接口——(3)协议层(包格式)
USB3.0接口——(4)生产消费者模型
USB3.0接口——(5)Host数据传输模型
USB3.0接口——(6)Device数据传输模型
…
1.Device数据传输模型
Device模式下,IP厂商自定义实现USB3.0 Device。
数据传输机制由厂商实现,区别于xHCI标准,相对来说简单一些。
1.1EP命令结构
n:端点序号。
1.1.1.DEPCFG
设置EP配置。
1.1.2.DEPXFERCFG
1.1.3.DEPGETSTATE
略
1.1.4.DEPSSTALL
略
1.1.5.DEPCSTALL
略
1.1.6.DEPSTRTXFER
1.1.7.DEPUPDXFER
如果软件将当前使用的TRB缓冲区的HWO位由0更新为1,则必须执行Update Transfer command。硬件会使用该信息来re-cache TRB。
1.1.8.DEPENDXFER
软件使用该命令来请求DMA停止端点/特殊流上的TRB的传输资源索引,并且DEPCMD的ForceRM需设置为0。
1.1.9.DEPSTARTCFG
略
1.2.Event Buffer
1.2.1.DEPEVT
Device Endpoint-Specific Event,设备特殊端点事件。(Event[0]=0x0)
1.2.2.DEVT
Device-Specific Event,设备特殊事件。(Event[0]=0x1,Event[7:1]=0x00)
1.3.Device TRB数据结构
1.3.1.dWord 0
1.3.1.1.BPTRL
Buffer-Pointer-Low,数据buffer指针的低32位地址。(BPTR[31:0])
1.3.2.dWord 1
1.3.2.1.BPTRH
Buffer-Pointer-High,数据buffer指针的高32位地址。(BPTR[63:32])
1.3.3.dWord 2
1.3.3.1.TRBSTS
在硬件释放TRB之前更新该字段信号,用以反馈TRB状态信息。
1.3.3.2.SPR
如果GUCTL1[DEV_TRB_OUT_SPR_IND]为1,表示最后一个要传输处理的TRB接收到一个短包。
如果GUCTL1[DEV_TRB_OUT_SPR_IND]为0,该字段保留。
1.3.3.3.PCM1
Packect Count M1。
对于高速、高带宽的同步IN端点,Isoc First TRB中的该字段表示缓冲区描述符中的包总数减去1。
1.3.3.4.BUFSIZ
如果TRB的CHN=0和HWO=0,该字段表示缓存描述符剩余的缓存字节数(以字节为单位)。(有效值为0(16MB-1byte),即016777216 byte)
对于Link TRB,则该字段应为0。
1.3.4.dWord 3
1.3.4.1.Stream ID/SOF Number
1.3.4.1.1.Stream ID
对于bulk EP的stream管道,传输TRB的流ID是连续的。所有TRBs的流ID必须一样。
1.3.4.1.2.SOF Number
对于同步EP表示发送或接收此TRB缓冲区的最后一个数据包的帧号。
1.3.4.2.IOC
Interrupt on Complete,完成中断。
当TRB的IOC设置为1时,一旦传输buffer被处理完成,控制器会在XferInProgress event的事件状态里产生一个IOC位标志。这表示缓冲区可供软件重复使用或释放。
1.3.4.3.ISP/IMI
1.3.4.3.1.ISP(Interrupt on short packect)
对于OUT EP,当CSP=1和LSt=0时,如果ISP设置为1,表示控制器接收到短包时要产生一个XferInProgress事件。
1.3.4.3.2.IMI
对于Isochronous EP,如果该位为1,控制器产生一个XferInProgress事件来表示内部的Buffer Descriptor处于“missed isoc”状态——丢失同步数据包。
1.3.4.4.TRBCTL
注意:Control-Data——第一个TRB,控制传输data阶段。
Control-Data-2+——除第一个TRB之外,控制传输数据阶段。
1.3.4.5.CSP
Continue on Short Packect。
仅适用于当OUT EP接收到一个短包时:
如果该位设置为1,则要求控制器接收到一个短包后,继续下一个Buffer Descriptor的处理。(对于Iso EP该位必须设置为1——由于Iso EP是同步传输,是周期性的,对于接收到短包的行为,可以忽略该短包,继续下一个描述符的处理,实现同步性)
如果该位设置为0,则要求控制器接收到一个短包后产生一个XferComplete事件并且移除流。
1.3.4.6.CHN
Chain Buffers,缓存链。
应用于OUT和IN EP。
软件设置为1时,表示当前TRB与下一个TRB互相关联,用于组建TRBs链表——TD。(TRBs中的,最后一个TRB的CHN位应为0,其他TRB的CHN应为1)
一个Buffer Descriptor中表示有一个或多个TRBs。该位用于识别TRBs是否包含Buffer Descriptor。当Buffer Descriptor的最后一个TRB的LST位设置为1时,CHN位总是为0。
1.3.4.7.LST
Last TRB,最后一个TRB。
表示链表的最后一个TRB。完成传输Buffe处理后,控制器会停止EP或bulk-stream的传输,并且产生一个XferComplete事件。流会由硬件自动移除。
1.3.4.8.HWO
Hardware Owner of Descriptor,硬件拥有描述符所有权,表示当前TRB属于硬件所有。
软件创建好TRB后,设置该位为1,并且在硬件将该位清0前,软件都不能随意改变该位。
当然,OUT EP的短包和link TRBs除外。
由于硬件会自动检查该位来判断TRB条目是否有效,软件必须在准备好TRB的其他3个DWORDs的有效信息后,及时将该位置1。
1.4.Device TRB类型
1.4.1.Normal,Isochronous,Status TRB
1.4.1.1.Normal TRB
用于Bulk/Control-Data/Interrupt端点传输。
Example:
控制传输data stage(IN 512 Byte)
第一个TRB的控制传输data stage:
非第一个TRB的控制传输data stage:
1.4.1.2.Isochronous TRB
Example:
第1个Isoc-first TRB uSOF为1,CHN为0(表示未与下一个TRB关联),第2个Isoc-first TRB uSOF为2,IOC为1(产生传输完成中断),第3个为Link TRB(指示当前Ring结束,跳转到Ring开头)。
第1个Isoc-first TRB uSOF为1,CHN为1(表示与下一个非 Isoc-first TRB关联),第2个Isoc TRB uSOF也为1。
1.4.1.3.Status TRB
略
1.4.2.Setup,Status TRB
1.4.2.1.Setup TRB
Example:
1.4.2.2.Status TRB
Example:
2阶段setup传输(无data stage):
3阶段setup传输(有data stage):
1.4.3.Link TRB
略