根据手册,usb host模式下,非周期传输请求队列空间为8个,当正确初始化OTG CORE,并发现USB设备有插入后,配置OTG_FS_HCCHARx寄存器和OTG_FS_HCTSIZx寄存器,然后将OTG_FS_HCCHARx寄存器bit31置1,即可将一个传输请求放入非周期传输请求队列空间。如果是IN传输,不需要写FIFO,即有IN token发送出去。
而我现在碰到的问题是:已经按照上述方法放入一个IN传输请求进入请求队列空间,但是IN token并没有发出。
可能有人会怀疑我的OTG CORE初始化是否OK,怀疑我究竟有没有成功配置OTG_FS_HCCHARx寄存器和OTG_FS_HCTSIZx寄存器,所以我还是简单表述一下我已经成功实现了哪些。目前,我已经正确的初始化OTG CORE,正确的发现USB设备插入,正确的进行USB总线复位,正确的启动SOF,正确的枚举了USB device,并正确的执行了若干SCSI(U盘)命令。问题就是在正确的执行了若干SCSI(U盘)命令后,一个IN transaction却出不去了!
通过断点捕获到这个故障发生时的寄存器情况如下:OTG_FS_HCCHARx寄存器和OTG_FS_HCTSIZx寄存器全部正确,OTG_FS_HCINTx寄存器为0x00000000(没有任何中断),OTG_FS_HNPTXSTS寄存器的NPTQXSAV部分为7,表明还有7个空间空余,已有一个transaction请求存在。且,RxFifo已经通过OTG_FS_GRSTCTL寄存器的RXFFLSH位清空。我非常困惑,在这样的情况下,为什么host就是不发送IN token出来??????
STM32的专家们,请帮忙看看,如果是深圳的朋友帮我解决了这个问题,在下愿意赠送大餐,当面酬谢!专车接送! |