阅读:1603回复:4
请教几个关于usb的初级问题
我是因为项目所需,才接触usb,说实在的,初次接触这个东西,真有写盲无头绪。不过还在在本驱动网站上,各位大虾给于很多技术资料,和相关网址。为了缩短开发周期,我采用了别人提供的at89c52+d12的解决方案,其电路原理图和fireware,driver都参照了他们的成果。
可是在实际的调试过程中却遇到了好多迷茫的问题,这些问题困扰了我还几天,不得其解。 第一,在fireware中有两个数组extern unsigned char idata GenEpBuf[];extern unsigned char idata EpBuf[];按照这样的定义,在编译调试的过程中,程序总是告知pc指针超出范围,即便是把断点打在主函数的入口之处,也会出现这样的现象,可是我将idata改为xdata后,这个问题可以解决掉,不过还是会出现如下的告警信息: *** WARNING 15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?_OUTPORTB?D12CI CALLER1: ?PR?USB_ISR?ISR CALLER2: ?C_C51STARTUP *** WARNING 15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?_INPORTB?D12CI CALLER1: ?PR?USB_ISR?ISR CALLER2: ?C_C51STARTUP *** WARNING 15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?_D12_WRITEENDPOINT?D12CI CALLER1: ?PR?USB_ISR?ISR CALLER2: ?C_C51STARTUP *** WARNING 15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?_D12_SETENDPOINTSTATUS?D12CI CALLER1: ?PR?USB_ISR?ISR CALLER2: ?C_C51STARTUP 不知道这样解决会不会影响结果的正确性。 第二,我在调试的过程中,如果按相关资料上所说的,在设备枚举成功后GL_N引脚对应的LED会常亮,可是我只发现过一次常亮,还有一次是程序初次运行的时候的该指示灯闪烁几次后熄灭,其余的情况是该指示灯一直处于熄灭状态。 第三,程序调试的过程中,中断一直不能够进入。这样的话中断服务程序也就不能运行。我不知道这是不是因为只调试fireware而没有同上层应用程序联起来调试的缘故。 第四,fireware运行的时候,我将usb电缆插在计算机的时候,会出现找到新的usb设备,然后按步骤加载驱动程序,加载完后在设备状态栏出现如下错误信息“该设备无法启动。 (代码 10)”,当然这个驱动程序我是在philip网站下载的,我不知道问题除在那了。 以上几个问题,我知道对于各位前辈来说算不了是一个问题,可是现在却困扰了我几天,希望各位能够及时指点一二,不胜感激。 |
|
沙发#
发布于:2003-08-25 10:56
另外一个问题,当把断点打在
void usb_isr() interrupt 0 { DISABLE; fn_usb_isr(); ENABLE; } 中 fn_usb_isr()的前面的时候,发现程序也可以进入,可是在fn_usb_isr()服务程序打断点的时候就会出现pc指针超出范围的现象,不知道是什么原因。 |
|
板凳#
发布于:2003-08-26 11:19
1,警告是说你有函数可能会重入,即在执行OUTPORTB时可能会有中断到来而再次调用OUTPORTB。其他类似。有没有问题要由你的程序具体执行方式来决定了。
2,在设备枚举成功后GL_N引脚输出低电平,你根据你的电路连接判断是否为常亮或常灭。一般为常亮,表示已经连接好。 3,感觉你的固件和驱动不匹配,usb枚举都没成功。 |
|
地板#
发布于:2003-08-26 12:35
谢谢你的答复,如果设备枚举成功驱动是不是就不出现那种问题了,我看了看枚举的信息,大部分感觉和周立功那本书上列的差不多,只是长度和有些区别,还有就是,前面几个对得上,可是最后两三个字节好像不太一样。
|
|
地下室#
发布于:2003-08-28 22:00
我是用USBN9604开发的
遇到和你相似的问题,能过收到主机的请求GetDescribetion 我发送18个字节的数据给主机 端点0发送了8个字节后,收不到TX0发送成功的中断 所以厚10个字节也发不出去 为什么会这样? |
|