阅读:2584回复:29
关于D12的goodlink指示灯。。。
请做过的朋友帮个忙,GOODLINK指示灯在什么情况下有正常指示?什么情况下没有?为什么我这里怎么弄它就是没反应呢?
用软件设置 PIPE0使能他就亮了,不过,插上USB连接上电脑,就灭了!不知道这是什么原因呢? 需要从那几个方面来解决这个问题? |
|
|
沙发#
发布于:2004-04-14 14:30
\"插上USB连接上电脑,就灭了\"是因为枚举没成功。你插上USB后如果
GOODLINK指示灯闪都不闪那是你硬件连接有问题 |
|
板凳#
发布于:2004-04-14 14:33
\"插上USB连接上电脑,就灭了\"是因为枚举没成功。你插上USB后如果 对,我的插上去一闪都没闪,原来使能通道0之后,亮起来,插上USB线就没有了,不过我能够正确读出D12的ID,以及可以正确设置输出频率,难道是连接头和USB线的问题???? |
|
|
地板#
发布于:2004-04-14 14:42
我刚看了你另外一个帖子,你
“插上USB连接上电脑”电脑有没有显示发现USB设备呀,我想你的电脑应当没有显示发现USB设备。如果是这样的话,一点是你硬件连接问题。也许是你D12的问题也许是你电路连接有误 |
|
地下室#
发布于:2004-04-14 14:49
我刚看了你另外一个帖子,你 有,发现找到了一个位置设备,然后说\"在安装驱动的时候发生一个不明错误\"之类的提示,然后,可以在设备管理中发现一个未知设备----- 现在问题是,好像我这里根本还没有进入枚举阶段就死掉了,,,真是奇怪,硬件联接应该没有问题吧?总共也只有那么几个脚,一个一个都有确定状态,仅仅是不用DMA,所以,把三个脚分别通过4.7K电阻上拉,ALE接地,RESET接VCC(后来根据这里朋友的建议改了一个复位电路)其他都连上了单片机了,难道这里还有错? D+/-通过一个18电阻到USB座,其他就没什么问题了吧? 看数据手册,受到的0XC0/80/40都是和系统复位,总线复位一类的命令,就是无法收到除此之外的任何指令。 [编辑 - 4/14/04 by hejoin] |
|
|
5楼#
发布于:2004-04-14 15:11
\"D+/-通过一个18电阻到USB\",你不会D+和D-加了上拉电阻到3V3了么(仅一个需要加)?你的板子是USB总线供电还是外接电源?在插上USB后USB总线是要先发一个总线复位命令的,接下来才发获取描述符命令
|
|
6楼#
发布于:2004-04-14 15:15
\"D+/-通过一个18电阻到USB\",你不会D+和D-加了上拉电阻到3V3了么(仅一个需要加)?你的板子是USB总线供电还是外接电源?在插上USB后USB总线是要先发一个总线复位命令的,接下来才发获取描述符命令 那个信号要上拉?我没加任何上拉电阻,USB板子自供电,对,总线复位命令收到之后,我是不是要和总线进行联络?比如给他一个应答信号之类?我收到的命令从数据手册看来,都是复位命令啊, 看看我的处理代码是否有问题,谢谢指正 void main() { int p; setupcomm(); outs(\"start...\\r\\n\"); P1=0xfe; P3_6 = 1; P3_7 = 1; D12_suspend = 0; XmtBuff.out = 0x00; XmtBuff.in = 0x01; P1_4 = 0; //关闭蜂鸣器 XmtBuff.out = 0x00; XmtBuff.in = 0x01; D12_cs_n = 1; D12_cs_n = 0; // set_command( 0xf3);set_data( 0x06);set_data( 0x03);//初始化频率 12MHz set_command( 0xf3);set_data( 0x06);set_data( 0x03);//初始化频率 12MHz set_command(0xfd);//调用Read Chip ID(命令FDH)检查PDIUSBD12是否工作。该命令要读两个字节数 据 if(get_data()==0x12) { if(get_data()==0x10) {P1_4 = 0; outs(\" \\r\\nthe chip is connected \\r\\n\");}// 到这里来了,标明是对的 } for(p=0;p<10;p++) { delay(200); P1_4 = ~P1_4; } set_command( 0xd0);set_data( 0x80);//设置地址 0 使能 set_command( 0xd8);set_data( 0x01);//设置地址 pipe0 使能 set_command( 0xf3);set_data( 0x16);set_data( 0x03);//初始化频率 12MHz // set_command( 0xf3);set_data( 0x16); // set_command( 0xf3);set_data( 0x1e); // D12_cs_n = 0; while(1) { D12_cs_n = 0; if(!D12_int_n) //这里用查询方式来做,不知道这个方式是否可行?非得用中断方式么?????????? { outs(\"int-n is coming data1 = \"); D12_cs_n = 0; set_command(0xf4);// 读中断寄存器 XmtBuff.b[0] = get_data(); XmtBuff.b[1] = get_data(); printf(XmtBuff.b[1]); printf(XmtBuff.b[0]);outs(\"\\r\\n\"); if(XmtBuff.b[0] & 0x40) { outs(\"this commandid = 0x40 \\r\\n\"); set_command(0x40);//读 ep0 OUT 最后状态 get_data(); set_command( 0x00);// 选择端点0(指针指向0位置) get_data(); set_command (0xf1);// 应答SETUP包,使能(清 OUT 缓冲区、使能 IN 缓冲区)命令 set_command (0xf2);// 清 OUT 缓冲区 } //证明这里收到了一个0x40的协议包 if(XmtBuff.b[0] & 0x80) { if(D12_suspend == 1) { outs(\"this commandid = D12_suspend \\r\\n\"); set_command(0);//处理挂起事务 set_command(0xf6);//发送恢复命令 D12_suspend = 1; } outs(\"this commandid = 0x80 \\r\\n\"); set_command(0x40);//读 ep0 OUT 最后状态 get_data(); SETUP_read(); if (XmtBuff.b[0] == 0x80) GetStatus(); } else { if(XmtBuff.b[0] & 0x15)// 收到 OUT 包 { if(ii[0]==12) ii[0]=ii[0]; if(XmtBuff.b[0] & 0x01) { set_command(0x40);//读 OUT 最后状态 if(get_data() & 0x20)// 收到 SETUP 包 { P1_4 = 0; SETUP_read(); HandleSetup(); } }else if(XmtBuff.b[0] & 0x04) { set_command( 0x42);//读 OUT 最后状态 }else if(XmtBuff.b[0] & 0x10) { set_command( 0x44);//读 OUT 最后状态 } } else if(XmtBuff.b[0] & 0x2a)// 收到 IN 包 {P1_4 = 1; if(ii[1]==18) ii[0]=ii[0]; if(XmtBuff.b[0] & 0x02)XmtBuff.in = 1; else if(XmtBuff.b[0] & 0x08)XmtBuff.in = 3; else if(XmtBuff.b[0] & 0x20)XmtBuff.in = 5; set_command( (XmtBuff.in | 0x40));// 读 IN 最后状态 XmtBuff.b[1] = get_data(); //if(D12_DATA & 0x01) { ii[1]++; //if(ii[1]==4) //ii[0]=ii[0]; USB_submit(); } } } } } } |
|
|
7楼#
发布于:2004-04-14 15:16
用户被禁言,该主题自动屏蔽! |
|
8楼#
发布于:2004-04-14 15:19
闪都没闪,发现未知设备?! 不是灯故障,灯是好的,要不然,我把通道0使能之后他怎么会亮呢?发现未知设备这是微软的问题,他不管的,只要你D+有一个上拉电阻,他就发现一个未知设备,不信你可以做实验,10K一拉,他就跳出来了,呵呵,根本不管总线是否枚举成功。 |
|
|
9楼#
发布于:2004-04-14 15:30
用户被禁言,该主题自动屏蔽! |
|
10楼#
发布于:2004-04-14 15:42
D+上加上拉电阻1K5,表示全速设备。D-上加上拉1K5,表示低速设备。这是USB协议规定的。你用板子自供电,不加好像也可以,因为你总要在连接后进行软连接,使D12正确应答总线复位。我没做过自供电的电路。恐怕帮不了你了。周立功的电路是总线供电方式,你要用自供电,电路应当修改一下,或程序修改。具体的我也说不太清楚。
总线发送复位命令-》D12自动应答,返回ACK->总线发获取描述符指令,SETUP包。你应当从对SETUP应答开始。 [编辑 - 4/14/04 by bjdxwz] |
|
11楼#
发布于:2004-04-14 15:52
应该是你枚举失败了吧
我曾经也是这样 |
|
12楼#
发布于:2004-04-14 16:01
谢谢,我的情况,好像是根本没有进入枚举这个状态,还在总线复位或者系统复位状态就死掉了!
|
|
|
13楼#
发布于:2004-04-14 16:05
不会是片子坏了吧?
|
|
14楼#
发布于:2004-04-14 16:13
无法打开????好像是我的ie6不支持中文文件名????还是原本就没有文件? |
|
|
15楼#
发布于:2004-04-14 16:13
不会是片子坏了吧? 肯定不是啦,片子坏了还让我读id?还会响应单片机的命令输出时钟么?? |
|
|
16楼#
发布于:2004-04-14 16:21
那总线复位后,
控制输出端点有没有中断过? |
|
17楼#
发布于:2004-04-14 16:27
那总线复位后, 总线复位之后,进入中断,得到的中断数据分别出现 0xc0,0x80,0x40,0x40,0x80 然后就没有了 |
|
|
18楼#
发布于:2004-04-14 16:34
softconnect延时够不够?
|
|
19楼#
发布于:2004-04-14 16:40
softconnect延时够不够? 延时?在连上去之后延时?还是断开然后延时在连上去? |
|
|
上一页
下一页