hejoin
驱动小牛
驱动小牛
  • 注册日期2001-10-19
  • 最后登录2012-03-08
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望51点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:2555回复:29

关于D12的goodlink指示灯。。。

楼主#
更多 发布于:2004-04-14 14:07
请做过的朋友帮个忙,GOODLINK指示灯在什么情况下有正常指示?什么情况下没有?为什么我这里怎么弄它就是没反应呢?

用软件设置 PIPE0使能他就亮了,不过,插上USB连接上电脑,就灭了!不知道这是什么原因呢?

需要从那几个方面来解决这个问题?
恒坚电器([url]http://www.hejoin.com[/url])
bjdxwz
驱动牛犊
驱动牛犊
  • 注册日期2002-11-07
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-14 14:30
\"插上USB连接上电脑,就灭了\"是因为枚举没成功。你插上USB后如果
GOODLINK指示灯闪都不闪那是你硬件连接有问题
hejoin
驱动小牛
驱动小牛
  • 注册日期2001-10-19
  • 最后登录2012-03-08
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望51点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-04-14 14:33
\"插上USB连接上电脑,就灭了\"是因为枚举没成功。你插上USB后如果
GOODLINK指示灯闪都不闪那是你硬件连接有问题


对,我的插上去一闪都没闪,原来使能通道0之后,亮起来,插上USB线就没有了,不过我能够正确读出D12的ID,以及可以正确设置输出频率,难道是连接头和USB线的问题????
恒坚电器([url]http://www.hejoin.com[/url])
bjdxwz
驱动牛犊
驱动牛犊
  • 注册日期2002-11-07
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-04-14 14:42
我刚看了你另外一个帖子,你
“插上USB连接上电脑”电脑有没有显示发现USB设备呀,我想你的电脑应当没有显示发现USB设备。如果是这样的话,一点是你硬件连接问题。也许是你D12的问题也许是你电路连接有误
hejoin
驱动小牛
驱动小牛
  • 注册日期2001-10-19
  • 最后登录2012-03-08
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望51点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-04-14 14:49
我刚看了你另外一个帖子,你
“插上USB连接上电脑”电脑有没有显示发现USB设备呀,我想你的电脑应当没有显示发现USB设备。如果是这样的话,一点是你硬件连接问题。也许是你D12的问题也许是你电路连接有误


有,发现找到了一个位置设备,然后说\"在安装驱动的时候发生一个不明错误\"之类的提示,然后,可以在设备管理中发现一个未知设备-----

现在问题是,好像我这里根本还没有进入枚举阶段就死掉了,,,真是奇怪,硬件联接应该没有问题吧?总共也只有那么几个脚,一个一个都有确定状态,仅仅是不用DMA,所以,把三个脚分别通过4.7K电阻上拉,ALE接地,RESET接VCC(后来根据这里朋友的建议改了一个复位电路)其他都连上了单片机了,难道这里还有错?

D+/-通过一个18电阻到USB座,其他就没什么问题了吧?
看数据手册,受到的0XC0/80/40都是和系统复位,总线复位一类的命令,就是无法收到除此之外的任何指令。

[编辑 -  4/14/04 by  hejoin]
恒坚电器([url]http://www.hejoin.com[/url])
bjdxwz
驱动牛犊
驱动牛犊
  • 注册日期2002-11-07
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-04-14 15:11
\"D+/-通过一个18电阻到USB\",你不会D+和D-加了上拉电阻到3V3了么(仅一个需要加)?你的板子是USB总线供电还是外接电源?在插上USB后USB总线是要先发一个总线复位命令的,接下来才发获取描述符命令
hejoin
驱动小牛
驱动小牛
  • 注册日期2001-10-19
  • 最后登录2012-03-08
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望51点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
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();
                  }
              }
            }
        }
    }
}
恒坚电器([url]http://www.hejoin.com[/url])
tyant
禁止发言
禁止发言
  • 注册日期2004-03-17
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分74652分
  • 威望373563点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-04-14 15:16
用户被禁言,该主题自动屏蔽!
hejoin
驱动小牛
驱动小牛
  • 注册日期2001-10-19
  • 最后登录2012-03-08
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望51点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-04-14 15:19
闪都没闪,发现未知设备?!

灯故障!


不是灯故障,灯是好的,要不然,我把通道0使能之后他怎么会亮呢?发现未知设备这是微软的问题,他不管的,只要你D+有一个上拉电阻,他就发现一个未知设备,不信你可以做实验,10K一拉,他就跳出来了,呵呵,根本不管总线是否枚举成功。
恒坚电器([url]http://www.hejoin.com[/url])
tyant
禁止发言
禁止发言
  • 注册日期2004-03-17
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分74652分
  • 威望373563点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-04-14 15:30
用户被禁言,该主题自动屏蔽!
bjdxwz
驱动牛犊
驱动牛犊
  • 注册日期2002-11-07
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-04-14 15:42
D+上加上拉电阻1K5,表示全速设备。D-上加上拉1K5,表示低速设备。这是USB协议规定的。你用板子自供电,不加好像也可以,因为你总要在连接后进行软连接,使D12正确应答总线复位。我没做过自供电的电路。恐怕帮不了你了。周立功的电路是总线供电方式,你要用自供电,电路应当修改一下,或程序修改。具体的我也说不太清楚。
总线发送复位命令-》D12自动应答,返回ACK->总线发获取描述符指令,SETUP包。你应当从对SETUP应答开始。

[编辑 -  4/14/04 by  bjdxwz]
leoguo1980
驱动牛犊
驱动牛犊
  • 注册日期2004-03-15
  • 最后登录2018-05-26
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望40点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2004-04-14 15:52
应该是你枚举失败了吧
我曾经也是这样
hejoin
驱动小牛
驱动小牛
  • 注册日期2001-10-19
  • 最后登录2012-03-08
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望51点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-04-14 16:01
谢谢,我的情况,好像是根本没有进入枚举这个状态,还在总线复位或者系统复位状态就死掉了!
恒坚电器([url]http://www.hejoin.com[/url])
longyinjiuxiao
驱动小牛
驱动小牛
  • 注册日期2004-03-15
  • 最后登录2004-06-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-04-14 16:05
不会是片子坏了吧?
hejoin
驱动小牛
驱动小牛
  • 注册日期2001-10-19
  • 最后登录2012-03-08
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望51点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-04-14 16:13
   


无法打开????好像是我的ie6不支持中文文件名????还是原本就没有文件?
恒坚电器([url]http://www.hejoin.com[/url])
hejoin
驱动小牛
驱动小牛
  • 注册日期2001-10-19
  • 最后登录2012-03-08
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望51点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-04-14 16:13
不会是片子坏了吧?


肯定不是啦,片子坏了还让我读id?还会响应单片机的命令输出时钟么??
恒坚电器([url]http://www.hejoin.com[/url])
longyinjiuxiao
驱动小牛
驱动小牛
  • 注册日期2004-03-15
  • 最后登录2004-06-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-04-14 16:21
那总线复位后,
控制输出端点有没有中断过?
hejoin
驱动小牛
驱动小牛
  • 注册日期2001-10-19
  • 最后登录2012-03-08
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望51点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-04-14 16:27
那总线复位后,
控制输出端点有没有中断过?


总线复位之后,进入中断,得到的中断数据分别出现

0xc0,0x80,0x40,0x40,0x80 然后就没有了
恒坚电器([url]http://www.hejoin.com[/url])
longyinjiuxiao
驱动小牛
驱动小牛
  • 注册日期2004-03-15
  • 最后登录2004-06-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-04-14 16:34
softconnect延时够不够?
hejoin
驱动小牛
驱动小牛
  • 注册日期2001-10-19
  • 最后登录2012-03-08
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望51点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-04-14 16:40
softconnect延时够不够?


延时?在连上去之后延时?还是断开然后延时在连上去?
恒坚电器([url]http://www.hejoin.com[/url])
上一页
游客

返回顶部