20楼#
发布于:2004-04-14 13:12
用户被禁言,该主题自动屏蔽! |
|
21楼#
发布于:2004-04-14 13:27
[quote]难道,d12的数据手册有问题?不是说内部有菲同步复位逻辑么? 我也是这么才通的。 [/quote] 晕死,真的还是假的啊?我板子做好了呀,割不断呀,受不了了。。。。。狂晕1小时。。。。 为什么我现在收到的都是0xc0,0x80,0x40这样的数据呢? 是不是表明芯片没有进入\"状态\"???? |
|
|
22楼#
发布于:2004-04-14 13:32
用户被禁言,该主题自动屏蔽! |
|
23楼#
发布于:2004-04-14 14:00
不是这些东西,正常的话能和数据手册的对上. 辛苦把线跳出来了,但是,还不行呀,现象一样的,无法收到任何有效信息,依然收到如下数据 int-n is coming data1 = 00c0 <===== this commandid = 0x40 this commandid = 0x80 into SETUP_read ... 00_00_00_00_00_00_00_00_ int-n is coming data1 = 00c0<===== this commandid = 0x40 this commandid = 0x80 into SETUP_read ... 00_00_00_00_00_00_00_00_ int-n is coming data1 = 0040<===== this commandid = 0x40 int-n is coming data1 = 0040<===== this commandid = 0x40 int-n is coming data1 = 0080<===== this commandid = 0x80 into SETUP_read ... 00_00_00_00_00_00_00_00_ goodlink指示灯没有任何反应啊,真是奇怪 |
|
|
24楼#
发布于:2004-04-14 14:49
用户被禁言,该主题自动屏蔽! |
|
25楼#
发布于:2004-04-14 14:50
你说你能改变CLKOUT? 是的,可以读取芯片ID, |
|
|
26楼#
发布于:2004-04-14 14:52
用户被禁言,该主题自动屏蔽! |
|
27楼#
发布于:2004-04-14 14:54
用户被禁言,该主题自动屏蔽! |
|
28楼#
发布于:2004-04-14 14:55
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(); } } } } } } ====为了看清楚,把一些其他的都忽略了。看上面,光这些代码是否有可以完成对D12的连接和枚举? [编辑 - 4/14/04 by hejoin] |
|
|
29楼#
发布于:2004-04-14 14:56
用户被禁言,该主题自动屏蔽! |
|
30楼#
发布于:2004-04-14 14:57
拿什么读ID? 用命令读啊 下面是我用串口得到的结果 start... the chip is connected int-n is coming data1 = 0080 this commandid = 0x80 into SETUP_read ... 00_00_00_00_00_00_00_00_ int-n is coming data1 = 00c0 this commandid = 0x40 this commandid = 0x80 into SETUP_read ... 00_00_00_00_00_00_00_00_ int-n is coming data1 = 0040 this commandid = 0x40 int-n is coming data1 = 0040 this commandid = 0x40 int-n is coming data1 = 0080 this commandid = 0x80 into SETUP_read ... 00_00_00_00_00_00_00_00_ |
|
|
31楼#
发布于:2004-04-14 14:58
用户被禁言,该主题自动屏蔽! |
|
32楼#
发布于:2004-04-14 15:00
用户被禁言,该主题自动屏蔽! |
|
33楼#
发布于:2004-04-14 15:01
哪个是读ID的? 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\");}// 到这里来了,表明硬件是对的 } |
|
|
34楼#
发布于:2004-04-14 15:06
用户被禁言,该主题自动屏蔽! |
|
35楼#
发布于:2004-04-14 15:09
用户被禁言,该主题自动屏蔽! |
|
36楼#
发布于:2004-04-14 15:11
用户被禁言,该主题自动屏蔽! |
|
37楼#
发布于:2004-04-14 15:17
你最好看看PHILIPPS提供的例程和编程指南 老兄能否提供一个参考?现在问题是,我的代码还没到枚举这一步好象,是不是? |
|
|
38楼#
发布于:2004-04-14 15:32
用户被禁言,该主题自动屏蔽! |
|
39楼#
发布于:2004-04-14 15:47
楼上的朋友,请教我怎么用bushound,好吗?
|
|