阅读:1601回复:14
还是闪三下的问题.没解决,急死了.
一直是这个问题.D12的设备,在98下正常,但是在XP下就是闪三下,然后说未知设备.查了这里的贴子,只发现有提问的,但是还是不知道怎么解决.我是天津的,解决了一定请吃饭.呵呵.
1.有人说是XP下USB2.0驱动的问题.我换了台机器,没装USB2.0的驱动,也是一样的现象. 2.XP下是不是USB的枚举时间比98下要短?如果是这样的话,我的晶振频率已经是最大了,12M,还能有什么别的方法减少枚举的时间?我看源程序中,只有TIMER0的触发时间,但是也不能改得太少呀. 3.在XP下还有其他的现象,就是当我在第一次枚举失败的时候,按REST键复位,则还可以在这一级找到这个设备,并且安装上周立功提供的XP/2000下的驱动.但是在安装成功后,紧接着又会弹出一个窗口说检测到未知的USB设备,真郁闷了.再装,就说此位置不包含任何硬件信息.我觉得是不是说是设备的PID和VID其实并没有被枚举到PC机?该如何解决?而且,D12的灯也没有亮. 我是自己做的ADUC824+D12设备,用的是周立功的固件源程序,稍徽改了一下端口. 看yyoukin大侠说他也遇到过相关的问题,但是解决了.说要改动一些地方,不知具体是什么地方?谢谢赐教. |
|
沙发#
发布于:2004-02-17 20:57
是yyouking,少打了个g,对不起了.
我的EMAIL是liupipi@163.com,谢谢大家了. |
|
板凳#
发布于:2004-02-17 21:41
我用bushound看的结果是这样的
Bus Hound 3.02 capture. Complements of www.perisoft.net Dev - Device ID Time - Elapsed time since the start of the previous Phase Phase - ADDR= 1394 transfer address LOCK= 1394 lock transaction CDB = Command block NSTS= NT status CTL = USB control packet RSET= bus reset DI = Data In RSTS= I/O Request Status DO = Data Out SNS = SCSI Sense Data IDE = IDE task file command SSTS= SCSI Request Block Status ISOC= Isochronous Transfer USTS= USB status (10) USB Root Hub [76KB/Sec] Dev Phase Data Info Time Cmd.Phase.Ofs --- ----- ------------------------- ------------- ----- ------------------ 10 CTL 23 01 01 00 - 02 00 00 00 CLASS 0us 1.1.0 10 CTL a3 00 00 00 - 02 00 04 00 CLASS 27sc 2.1.0 10 DI 00 01 01 00 .... 33us 2.2.0 10 CTL a3 00 00 00 - 02 00 04 00 CLASS 23us 3.1.0 10 DI 00 01 01 00 .... 23us 3.2.0 10 CTL 23 01 10 00 - 02 00 00 00 CLASS 24us 4.1.0 10 CTL a3 00 00 00 - 01 00 04 00 CLASS 101us 5.1.0 10 DI 00 01 00 00 .... 28us 5.2.0 10 CTL a3 00 00 00 - 02 00 04 00 CLASS 22us 6.1.0 10 DI 00 01 00 00 .... 22us 6.2.0 10 USTS 00 00 01 c0 canceled 3.0ms 7.1.0 10 CTL a3 00 00 00 - 02 00 04 00 CLASS 12sc 8.1.0 10 DI 01 01 01 00 .... 27us 8.2.0 10 CTL a3 00 00 00 - 02 00 04 00 CLASS 27us 9.1.0 10 DI 01 01 01 00 .... 23us 9.2.0 10 CTL 23 01 10 00 - 02 00 00 00 CLASS 21us 10.1.0 10 CTL a3 00 00 00 - 01 00 04 00 CLASS 1.3sc 11.1.0 10 DI 00 01 00 00 .... 49us 11.2.0 10 CTL a3 00 00 00 - 02 00 04 00 CLASS 29us 12.1.0 10 DI 01 01 00 00 .... 23us 12.2.0 10 CTL a3 00 00 00 - 02 00 04 00 CLASS 123ms 13.1.0 10 DI 01 01 00 00 .... 45us 13.2.0 10 CTL 23 03 04 00 - 02 00 00 00 CLASS 172us 14.1.0 10 CTL a3 00 00 00 - 02 00 04 00 CLASS 31ms 15.1.0 10 DI 03 01 10 00 .... 32us 15.2.0 10 CTL 23 01 14 00 - 02 00 00 00 CLASS 5us 16.1.0 10 CTL a3 00 00 00 - 02 00 04 00 CLASS 31ms 17.1.0 10 DI 03 01 00 00 .... 45us 17.2.0 10 CTL a3 00 00 00 - 02 00 04 00 CLASS 5.7sc 18.1.0 10 DI 03 01 00 00 .... 44us 18.2.0 10 CTL 23 03 04 00 - 02 00 00 00 CLASS 27us 19.1.0 10 CTL a3 00 00 00 - 02 00 04 00 CLASS 31ms 20.1.0 10 DI 03 01 10 00 .... 301us 20.2.0 10 CTL 23 01 14 00 - 02 00 00 00 CLASS 9us 21.1.0 10 CTL a3 00 00 00 - 02 00 04 00 CLASS 5.6sc 22.1.0 10 DI 03 01 00 00 .... 44us 22.2.0 10 CTL 23 03 04 00 - 02 00 00 00 CLASS 27us 23.1.0 10 CTL a3 00 00 00 - 02 00 04 00 CLASS 31ms 24.1.0 10 DI 03 01 10 00 .... 31us 24.2.0 10 CTL 23 01 14 00 - 02 00 00 00 CLASS 4us 25.1.0 10 CTL 23 01 01 00 - 02 00 00 00 CLASS 5.6sc 26.1.0 10 CTL 80 00 00 00 - 00 00 02 00 GET STATUS 7.9sc 27.1.0 10 DI 01 00 .. 44us 27.2.0 |
|
地板#
发布于:2004-02-18 08:28
把固件的PID,VID 还有一个延时程序修改一下,试试
|
|
|
地下室#
发布于:2004-02-18 21:00
PID,VID随便改个数就行嘛?
嗯,还有,延时程序指的是TIMER0的时间间隔嘛? 好象程序没有别的地方延时了呀. |
|
5楼#
发布于:2004-02-18 21:12
我把PID和VID改了 ,而且把延时程序TH0改为0x80,并且时间判断上改为10次计数.
可是,在BUSHOUND中,还是什么都没接到,全是0200 0400呀. |
|
6楼#
发布于:2004-02-19 18:34
在CONNECT函数中的,一个循环
|
|
|
7楼#
发布于:2004-02-20 23:50
这里面没有循环呀.
是不是应该插入些循环? //连接USB总线 void connect_USB(void) { // reset event flags DISABLE; bEPPflags.value = 0;//清除所有状态 ENABLE; // V2.1 enable normal+sof interrupt D12_SetDMA(D12_ENDP4INTENABLE | D12_ENDP5INTENABLE); // Initialize D12 configuration D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M); } |
|
8楼#
发布于:2004-02-20 23:53
只有RECONNECT函数中有循环.
void reconnect_USB(void) { unsigned long clk_cnt; // Pull-down D12's SUSPEND pin // Disable 74HCT123 pulse generation before disconnect // Release D12's SUSPEND pin after receiving bus reset from host D12SUSPD = 0; disconnect_USB(); //printf("Wait for 1 second ...\n"); clk_cnt = ClockTicks; while(ClockTicks < clk_cnt + 20) ; connect_USB(); } |
|
9楼#
发布于:2004-11-01 16:52
解决没有?能不能说清楚一点啊
|
|
10楼#
发布于:2004-12-14 16:51
我也有同样的问题,可否交流一下,共同进步。qq:343056590
|
|
|
11楼#
发布于:2004-12-17 10:22
大侠们能不能再仔细的说明一下呢。谢谢了
|
|
|
12楼#
发布于:2004-12-17 10:26
顶,祝楼组进展顺利
|
|
|
13楼#
发布于:2004-12-20 09:32
ding
|
|
|
14楼#
发布于:2004-12-20 11:58
devking.51.net
只有RECONNECT函数中有循环. void reconnect_USB(void) { unsigned long clk_cnt; // Pull-down D12's SUSPEND pin // Disable 74HCT123 pulse generation before disconnect // Release D12's SUSPEND pin after receiving bus reset from host D12SUSPD = 0; disconnect_USB(); //printf("Wait for 1 second ...n"); while(ClockTicks < 1220) ClockTicks++; connect_USB(); } |
|
|