chongqingzhaoch
驱动牛犊
驱动牛犊
  • 注册日期2003-07-17
  • 最后登录2003-08-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1603回复:4

请教几个关于usb的初级问题

楼主#
更多 发布于:2003-08-25 10:49
    我是因为项目所需,才接触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网站下载的,我不知道问题除在那了。
    以上几个问题,我知道对于各位前辈来说算不了是一个问题,可是现在却困扰了我几天,希望各位能够及时指点一二,不胜感激。
chongqingzhaoch
驱动牛犊
驱动牛犊
  • 注册日期2003-07-17
  • 最后登录2003-08-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-08-25 10:56
另外一个问题,当把断点打在
void usb_isr() interrupt 0
{
DISABLE;
fn_usb_isr();
ENABLE;
}
中 fn_usb_isr()的前面的时候,发现程序也可以进入,可是在fn_usb_isr()服务程序打断点的时候就会出现pc指针超出范围的现象,不知道是什么原因。


bjdxwz
驱动牛犊
驱动牛犊
  • 注册日期2002-11-07
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-08-26 11:19
1,警告是说你有函数可能会重入,即在执行OUTPORTB时可能会有中断到来而再次调用OUTPORTB。其他类似。有没有问题要由你的程序具体执行方式来决定了。
2,在设备枚举成功后GL_N引脚输出低电平,你根据你的电路连接判断是否为常亮或常灭。一般为常亮,表示已经连接好。
3,感觉你的固件和驱动不匹配,usb枚举都没成功。
chongqingzhaoch
驱动牛犊
驱动牛犊
  • 注册日期2003-07-17
  • 最后登录2003-08-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-08-26 12:35
谢谢你的答复,如果设备枚举成功驱动是不是就不出现那种问题了,我看了看枚举的信息,大部分感觉和周立功那本书上列的差不多,只是长度和有些区别,还有就是,前面几个对得上,可是最后两三个字节好像不太一样。
aba
aba
驱动牛犊
驱动牛犊
  • 注册日期2002-04-29
  • 最后登录2006-07-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-08-28 22:00
我是用USBN9604开发的

遇到和你相似的问题,能过收到主机的请求GetDescribetion

我发送18个字节的数据给主机
端点0发送了8个字节后,收不到TX0发送成功的中断
所以厚10个字节也发不出去

为什么会这样?
游客

返回顶部