31.6.2.8 输出端点的多包传输
正常操作下接收的数据字节的数量存在端点的PCKSIZE.BYTE_COUNT。由于PCKSIZE.BYTE_COUNT是在每个
传输后更新,所以它必须在一个新的传输前清零。总接收的字节数必须被写到PCKSIZE.MULTI_PACKET_SIZE。
这个值必须是一个PCKSIZE.SIZE的倍数,否则多余的数据可以被写入SRAM的位置由应用程序的其他部分使用
。
EPSTATUS.DTGLOUT管理非同步包并且EPINTFLAG.BK1RDY/BK0RDY掌管通常的操作。
如果一个最大装载长度包被接收到,在传输完成后PCKSIZE.BYTE_COUNT将被通过PCKSIZE.SIZE增加,并
且EPSTATUS.DTGLOUT将切换如果端点不是同步的。如果更新EPSTATUS.BK1RDY/BK0RDY,并且
EPINTFLAG.TRCPT0/TRCPT1将要被设置。
31.6.2.9 管理输入传输
当一个输入令牌被检测到并且令牌设备地址不匹配DADD.DADD,这个包装丢弃并且USB模块返回空闲等待
下一个令牌包。
当地址匹配,USB模块检查是否在指定地址端点的EPCFG接收是使能,如果不是则包丢弃USB模块返回空闲
等待下一个令牌包。
当端点使能,USB模块然后检查指定地址的输入端点的EPCFG,如果EPCFG.EPTYPE1没有设到输入,USB模
块返回空闲等待下一个令牌包。
如果EPSTATUS中的EPSTATUS.STALLRQ1被设置,并且端是不同步的,一个STALL握手回返到主机并且
EPINTFLAG.STALL1被设置。
如果EPSTATUS.BK1RDY被清除,EPINTFLAG.TRFAIL1被设置。如果端点是非同步,一个NAK握手返回到主机
USB模块然后从指定的端点描述符中取出数据缓冲的地址(ADDR)。如果端点是非同步的通过数据缓冲地址指向的数据被发送到主机。对非同步端点一个DATA0或DATA1包被发送依据EPSTATUS.DTGLIN的状态。当在端点PCKSIZE.BYTE_COUNT指定的数据字节数量被发送,CRC增加并发送到主机。
对同步端点为,EPSTATUS.BK1RDY被清除并且EPINTFLAG.TRCPT1被设置。
对所有非同步端点,USB模块等待一个从主机来的ACK握手。如果一枪战ACK握手没有在16比特时间收到,USB模块返回空闲并且等待下一个令牌包。如果一个ACK握手成功收到EPSTATUS.BK1RDY被清除,EPINTFLAG.TRCPT1被设置EPSTATUS.DTGLIN被切换。
|