31.6.2.4 USB复位
USB总线复位通过连接的主机初始化并且硬件管理:
在USB复位期间下列寄存器被清除:
。设备端点配置寄存器(EPCFG)-除了端点0
。设备帧数寄存器(FNUM)
。设备地址寄存器(DADD)
。设备端点中断使能清除/设置寄存器(EPINTENCLR/SET)
。设备端点中断标志寄存器(EPINTFLAG)
。端点状态寄存器传输拖延0比特位(EPSTATUS.STALLRQ0)
。端点状态寄存器传输拖延1比特位(EPSTATUS.STALLRQ1)
。端点中断摘要寄存器(EPINTSMRY)
。控制B寄存器中的向上恢复比特(CTRLB.UPRSM)
在复位过程的结尾,中断标志寄存器中的复位结尾比特位置1(INTFLAG.EORST)
31.6.2.6 帧开始
当一个帧开始(SOF)令牌被检测到,从令牌得到的帧数存于设备帧数寄存器的帧数字段,并且开始帧中断比特在设备中断标志寄存器(INTFLAG.SOF)被设置。如果这里有一个CRC或比特满错误,帧数量错误状态标志(FNUM.FNCERR)在FNUM寄存器被设置。
31.6.2.6 SETUP传输的管理
当一个SETUP令牌被检测到并且令牌的设备的地址不同DADD.DADD匹配,这个包将丢弃并且USB模块转到空闲等待下一个令牌包。
当地址匹配,USB模块检查端点在EPCFG中是否使能,如果地址的端点没有使能,包将丢弃并且USB模块转到空闲状态并且等待下一个令牌包。
当端点使能,USB模块检查EPCFG的地址端点。如果EPCFG.EPTYPE0没有设置控制,USB模块返回空闲状态并且等待下一个包。
当EPCFG.EPTYPE0匹配,USB模块返回数据缓冲地址(ADDR)从地址端点的描述符并且等等DATA0数据包。如果一个PID错误或者其它PID比DATA0先检到,USB模块返回空闲状态并且等等下一个令牌包。
当数据PID匹配并且如果设备端点中断标志寄存器中接收设置完成中断比特是0(EPINTFLAG.RXSTP)等于0,忽略Bank 0 准备好比特在设备端点状态寄存器(EPSTATUS.BK0RDY),输入数据写到数据缓冲地址指示的数据缓冲。如果接收数据字节数量超过端点PCKSIZE.SIZE指示的最大的装载长度数据,剩余的接收数据字节丢弃。包将仍然被检测比特满和CRC错误。软件必须从来也不向主机报告端点长度大于在PCKSIZE.SIZE中配置的长度。如果在包中比特满或CRC错误被检测到,USB模块将返回空闲模式并且等等下一个令牌包。
如果数据成功被接收,一个ACK握手信号返回主机,并且接收的数据字节,除了CRC,被写到比特记数(PCKSIZE.BYTE_COUNT)。如果接收的数据字节是在PCKSIZE.SIZE中指定的最大装载值,没有CRC数据被写入数据缓冲。如果接收的数据字节是PCKSIZE.SIZE指定的最大数据装载值差一个字节,只有第一个CRC数据被写入到数据缓冲。如果接收数据的数量是等于或小于PCKSIZE.SIZE两个字节两个CRC数据字节都写到数据缓冲。
最后EPSTATUS被更新。数据开关输出比特(EPSTATUS.DTGLOUT),数据开关输入比特(EPSTATUS.DTGLIN),当前bank比特(EPSTATUS.CURRBK)和Bank准备好0比特(EPSTATUS.BK0RDY)被设置。Bank准备好1比特(EPSTATUS.BK1RDY)和拖延Bank 0/1比特(EPSTATUS.STALLQR0/1)在收到SETUP请求后清0。RXSTP比特被设置并且如果在端点中断使能设置/清除寄数器接收Setup中断允许比特置位(EPINTENSET/CLR.RXSTP)。
|