阅读:1994回复:16
【救命】D12调试遇到的问题(50分)
终于把固件搞定,才happy了一会,问题就接踵而来,还请各位网友一起讨论。
1.d12的bus_reset中断是何时发生的,和reset_n管脚有关系吗? 我的reset_n管脚是一直接高的。还有setmode寄存器中的设置何时回 复默认值?我断电再上电似乎不变的。 2.Link我的固件程序时出现如下两类warning: WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: ?C?CLDOPTR MODULE: D:MYUSBFMD12CI.OBJ (D12CI) WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: ?C?CSTOPTR MODULE: D:MYUSBFMD12CI.OBJ (D12CI) ADDRESS: 03F0H 第一个warning里的cldoptr在我的程序里从没出现过啊,第二个 warning显示的地址处是一个Ljmp,直接跳到0000h处,如何修改 ? 3.我先没管2中的warning,直接运行固件,pc可以认出有设备 ,但枚举不行,用bushound抓到如下数据: DI 02 . 0us 1.1.0 CTL a3 00 00 00 - 01 00 04 00 CLASS 18us 2.1.0 DI 01 01 01 00 .... 22us 2.2.0 CTL a3 00 00 00 - 01 00 04 00 CLASS 295us 3.1.0 DI 01 01 01 00 .... 12us 3.2.0 CTL 23 01 10 00 - 01 00 00 00 CLASS 19us 4.1.0 ………… ………… 看不懂什么意思,似乎根本没有发送请求,还有我d12的int_n脚大多 时候是一直保持低的,程序开始处我读了中断寄存器,有时有用有时 没有,非常郁闷,不知怎么回事? [编辑 - 3/5/04 by holyrock] [编辑 - 3/9/04 by holyrock] |
|
最新喜欢:![]() |
沙发#
发布于:2004-03-10 22:35
谢谢,我换了一个bushound4.0的,可以看到请求了
|
|
板凳#
发布于:2004-03-10 00:13
bus hound下载一个破解版吧!
|
|
|
地板#
发布于:2004-03-09 20:53
没人知道吗?急死我了
|
|
地下室#
发布于:2004-03-08 18:56
为什么没有看到"80"打头的请求?到底算成功了吗?我用usbview
可以看到设备描述符已经被读入,但是还没有配置(我还未装驱动程 序),地址也是默认的02,这应该不算成功吧,还是装完驱动才配置 的呢?诚心请教。 [编辑 - 3/8/04 by holyrock] |
|
5楼#
发布于:2004-03-08 15:58
硬件复位电路不用也可以枚举成功的
|
|
|
6楼#
发布于:2004-03-08 15:45
谢谢duanjong,我接了复位电路,pc可以弹出找到新硬件的框,
并且提示我装驱动程序,这是不是代表枚举成功? 可是我用bushound抓到的数据好像有问题: DI 02 . 0us 1.1.0 CTL a3 00 00 00 - 01 00 04 00 CLASS 18us 2.1.0 DI 00 01 03 00 .... 22us 2.2.0 CTL 23 01 11 00 - 01 00 00 00 CLASS 4us 3.1.0 DI 02 . 100ms 4.1.0 CTL a3 00 00 00 - 01 00 04 00 CLASS 18us 5.1.0 DI 00 01 01 00 .... 19us 5.2.0 CTL a3 00 00 00 - 01 00 04 00 CLASS 69us 6.1.0 DI 00 01 01 00 .... 32us 6.2.0 CTL 23 01 10 00 - 01 00 00 00 CLASS 18us 7.1.0 CTL a3 00 00 00 - 01 00 04 00 CLASS 49us 8.1.0 DI 00 01 00 00 .... 9us 8.2.0 CTL a3 00 00 00 - 02 00 04 00 CLASS 16us 9.1.0 DI 00 01 00 00 .... 7us 9.2.0 CTL a3 00 00 00 - 01 00 04 00 CLASS 3.7ms 10.1.0 DI 00 01 00 00 .... 28us 10.2.0 CTL a3 00 00 00 - 02 00 04 00 CLASS 24us 11.1.0 DI 00 01 00 00 .... 8us 11.2.0 DI 02 . 4.4mn 12.1.0 CTL a3 00 00 00 - 01 00 04 00 CLASS 19us 13.1.0 DI 01 01 01 00 .... 21us 13.2.0 CTL a3 00 00 00 - 01 00 04 00 CLASS 1.3ms 14.1.0 DI 01 01 01 00 .... 14us 14.2.0 CTL 23 01 10 00 - 01 00 00 00 CLASS 19us 15.1.0 CTL a3 00 00 00 - 01 00 04 00 CLASS 112ms 17.1.0 DI 01 01 00 00 .... 33us 17.2.0 CTL 23 03 04 00 - 01 00 00 00 CLASS 19us 18.1.0 DI 02 . 87ms 19.1.0 CTL a3 00 00 00 - 01 00 04 00 CLASS 19us 20.1.0 DI 03 01 10 00 .... 20us 20.2.0 CTL 23 01 14 00 - 01 00 00 00 CLASS 4us 21.1.0 CTL a3 00 00 00 - 01 00 04 00 CLASS 19ms 22.1.0 DI 03 01 00 00 .... 32us 22.2.0 DI 12 01 10 01 - dc 00 00 10 ........ 10ms 23.1.0 CTL a3 00 00 00 - 01 00 04 00 CLASS 3.0ms 24.1.0 DI 03 01 00 00 .... 14us 24.2.0 CTL 23 03 04 00 - 01 00 00 00 CLASS 17us 25.1.0 DI 02 . 67ms 26.1.0 CTL a3 00 00 00 - 01 00 04 00 CLASS 31us 27.1.0 DI 03 01 10 00 .... 19us 27.2.0 CTL 23 01 14 00 - 01 00 00 00 CLASS 5us 28.1.0 DI 12 01 10 01 - dc 00 00 10 ........ 40ms 29.1.0 DI 09 02 2e 00 - 01 01 00 a0 ........ 6.9ms 30.1.0 CTL a3 00 00 00 - 02 00 04 00 CLASS 16ms 31.1.0 DI 00 01 00 00 .... 28us 31.2.0 除了倒数第三行认识之外,其他怎么都看不懂呢,怎么没有setup 包的请求?觉得有问题,不敢肯定是不是枚举成功,请大家帮忙看看 是怎么回事?(bushound的setting里设的是32和8) 还有上面我提的问题有人知道吗? |
|
7楼#
发布于:2004-03-06 16:57
枚举失败,可能是如下的原因,其实一般D12的复位引脚应该接一个上电复位电路(用一个10K的电阻和4.7uf的电容),而不用电阻分压构成复位电路,不放试试
[编辑 - 3/6/04 by duanjong] |
|
8楼#
发布于:2004-03-06 00:13
多谢各位,终于通过了,不是程序的问题,我把keil的c51目录
copy过来代替,结果成功了,BIN、INT和LIB三个目录一定要匹配 ,否则就会出问题。 不过现在枚举失败,程序停在suspend_change里的while,bus hound抓到的数据跟上面差不多,什么原因呢,一直不太明白sus- pend_change什么时候发生,只有非挂起->挂起才发生,还是无论 非挂起->挂起还是挂起->非挂起都会发生? |
|
9楼#
发布于:2004-03-05 19:27
你们用的c51的连接器(就是BL51.exe)版本是多少?我的是5.0,有没有大于6.0的版本?
[编辑 - 3/5/04 by holyrock] |
|
10楼#
发布于:2004-03-05 14:40
这个我以前也遇到过的
|
|
|
11楼#
发布于:2004-03-05 14:33
你的程序中肯定有定义了外部地址,而在程序中也操作到了这个地址,而实际上你没连接这个物理设备
|
|
|
12楼#
发布于:2004-03-05 14:18
什么叫“把那个地址修改了”?代码是c的,怎么会莫名其妙编译
出Ljmp的指令,俺就是不知道怎么改才头疼啊 [编辑 - 3/5/04 by holyrock] |
|
13楼#
发布于:2004-03-05 09:44
该warning提示你声明了某个符号(可能是全局变量或函数),但是并没有该符号的实例。
例如: 你在代码中包含了 extern in gnCount; 但是真正拥有该gnCount的C文件并没有包含在工程中。 再如: 如果你声明了 void ClearLcd(); 但是包含该函数的代码并没有包含在工程中。 或者函数的真正代码是 void clearlcd(){...}与声明的不同。此时会再报一个warning16出来。 记住C是区分大小写的。但Keil C在连接后就不区分大小写了。而且使用单个下划线也有一些问题,所以 _CallThis() 最好改成__CallThis(). |
|
|
14楼#
发布于:2004-03-05 09:05
所以就会出错了啊,把那个地址修改了就可以
|
|
|
15楼#
发布于:2004-03-05 08:56
为什么是外部地址?我没有外接ram啊,只有d12。而且几个相同
warning的地方都是这个Ljmp。 [编辑 - 3/5/04 by holyrock] |
|
16楼#
发布于:2004-03-05 08:25
03F0H
是外部RAM地址吧 |
|
|