阅读:1262回复:0
关于USB device not present的问题~
各位大虾,我在用SL811做主机枚举设备时,想做一个简单的测试,发送一个SETUP包,但是无法正常发送
用的是12M的晶振 具体是: 我先进行初始化 SL811Hinit(); 我把第一个SETUP包(0x80, 0x06, 0x00, 0x01, 0x00, 0x00,0x12 , 0x00 )写入SL811的缓冲区, SL811HbufWrite( 0x10 , wbuf , 8); // SL811缓冲写, 从地址0x10开始,把wbuf中的数据写到sl811中,写8个字节 SL811Write(EP0Status, 0x90); // PID=IN(0x69), EP address 为 0 “pid << 4 | epaddr” SL811Write(EP0Counter, 0); // USB address = 0 刚插上设备,还没有枚举和分配地址 SL811Write(EP0Address, 0x10); //SL811 的缓冲地址,start with 0x10; SL811Write(EP0XferLen, 0x08); //数据传输的长度: 8个字节 SL811Write(IntStatus, INT_CLEAR);//INT_CLEAR用来清除IntStatus的寄存器 SL811Write(EP0Control, 0x47); //命令字Cmd0x47启动发送。 While(true) { while(true) { // 问题出现的地方 intr = SL811Read(IntStatus); // intr 读出来的是0x40 是device not present if( intr & 0x01) // 如果USB_A_DONE ,就是发送成功 break; } SL811Write(IntStatus, INT_CLEAR); result = SL811Read(EP0Status); // 当我直接读这一步的时候,result是0x90 , STALL 和 SETUP } 不知道,各位是否出现过相同的问题,相互探讨一下,我的Usb设备是视频摄像头,用在PC机上的是好的,但是在S3c 44b0上就是出现了device not present的问题。 急啊!!! 请各位分析一下,可能存在的问题和解决方法 |
|