31.6.2.7管理输出传输
当一个输出令牌被检测到,并且令牌包的设备地址不和DADD.DADD匹配,这个包将丢弃并且USB模块返回
空闲模式并且等待下一个令牌包。
如果地址匹配,USB模块检查是否接收的端点数量在地址端点的EPCFG中使能。如果所指地址端点是失能
的,包将丢弃并且USB模块返回空闲模式,等待下一个令牌包。
当端点是使能的,USB模块就检查地址输出端点的端点配置寄存器(EPCFG)。如果端点类型
(EPCFG.EPTYPE0)没有设到输出,USB模块将返回到空闲并且等待下一个令牌包。
USB模块然后返回从指定地址端点的描述符中的数据缓冲的地址。并且等待DATA0或DATA1的地址。如果
PID错误或任何其它PID比DATA0或DATA1先检测到,USB模块返回空闲模式并且等下一个令牌包到来。
如果EPSTATUS.STALLRQ0在EPSTATUS被设置,进入的数据被丢弃。如果端点不是等时性的,一个拖延握手
信号返给主机并且在EPINTFLAG(EPINTFLAG.TRFAIL0)传输拖延Bank 0中断比特置1。
对一个等时端点,数据从DATA0和DATA1两者都可接收包。对于别的端点类型除了PID还要核对
EPSTATUS.DTGLOUT。如果一个PID不匹配发生,进来的数据被丢弃,一个ACK握手返回到主机。
如果EPSTATUS.BK0RDY被设置,进入的数据被丢弃,在EPINTFLAG中的传输失败0中断比特和状态比特被置
位。如果端点是非等时的,一个NAK握手返到主机。
进入的数据写到数据缓冲通过数据缓冲地址(ADDR)所指的地址。如果接收的数据比特超过PCKSIZE.SIZE
所定义的装载的最大数据,剩余的接收的字节被丢弃。包将仍然被检查比特满和CRC错误。如果比特满或CRC
错误在包中被检测到,USB模块返回空闲并且等待下一个令牌包。
如果端点是等时性的并且在进入的数据中有比特满或CRC错误,接收到的数据字节数量,除了CRC,被写
到PCKSIZE.BYTE_COUNT。最后EPINTFLAG.TRFAIL0和CRC错误在所指地址的端点的设备Bank状态寄存器
(STATUS_BK.CRCERR)被置位。
如果数据成功,一个ACK握手信号返回到主机如果端点不是等时性的,接收数据的字节数量,除了CRC,
被写到PCKSIZE.BYTE_COUNT。如果接收数据字节数是PCKSIZE.SIZE所指定的最大载入数,CRC数据将不写在数
据缓冲。如果接收的数据字节数是PCKSIZE.SIZE所指定的最大装载数少1,只有第一个CRC数据字节写入到数
据缓冲。如果接收的数据字节数是PCKSIZE.SIZE所指定的最大装载数少2,则两个CRC数据字节都写入到数据
缓冲。
最后在EPSTATUS为指定地址的输出端点,EPSTATUS.BK0RDY被设置并且在端点是非等时EPSTATUS.DTGLOUT
被切换。在指定端点EPINTFLAG中的传输完成0中断标志(EPINTFLAG.TRCPT0)被设置。
|