打印
[圈圈教你玩USB]

USB开发中的难题

[复制链接]
2393|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
phd8882004|  楼主 | 2008-9-5 16:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的USB芯片是PDIUSBD12,固件程序和应用程序都编写好了,驱动程序用的是WINDOWS自带的HID设备驱动程序。


    现在遇到个麻烦事,设备在WIN2000上能识别,但到XP(SP1)上就不识别了,而我在XP里的固件程序里如果设置一些断点,这样运行的话,在XP上就能识别,去掉断点整个程序全速运行又不行了


    用BUS HOUND捕捉到的数据只有 GET STATUS & CLEAR FEATURE两个过程。


     已经调试了两天,没有眉目,请大虾圈圈与高手不吝赐教!!!!多谢
 

相关帖子

沙发
iC921| | 2008-9-5 16:13 | 只看该作者

帮顶!

使用特权

评论回复
板凳
phd8882004|  楼主 | 2008-9-5 16:18 | 只看该作者

多谢,在线等大虾关怀的降临

使用特权

评论回复
地板
phd8882004|  楼主 | 2008-9-5 20:05 | 只看该作者

大家帮忙看下,感谢中

使用特权

评论回复
5
computer00| | 2008-9-5 21:20 | 只看该作者

有可能是你设置地址处理不对吧

需要先设置地址,再返回0长度的状态包。

关于D12的例子,我的USB小组里有很多。

使用特权

评论回复
6
phd8882004|  楼主 | 2008-9-6 18:14 | 只看该作者

圈圈你好~~~

5楼: 有可能是你设置地址处理不对吧 

需要先设置地址,再返回0长度的状态包。

关于D12的例子,我的USB小组里有很多。 
 
//////////////////////////////////////////////////////////
//设置地址
void set_address(void)
{
D12_SetAddressEnable((unsigned char)(ControlData.DeviceRequest.wValue &
DEVICE_ADDRESS_MASK), 1);
single_transmit(0, 0);


}


上面是我的代码,设置地址代码应该是没有问题的。
///////////////////////////////////////////////////////////
关于设置断点后枚举成功的问题,我导师说只是多了一个延时,后来我把下面的程序:

//USB中断服务子程序
void fn_usb_isr()
{
  unsigned int i_st;
  bEPPflags.bits.in_isr = 1;
  i_st = D12_ReadInterruptRegister();//读取中断寄存器 调用D12ci.c中的
  if(i_st != 0){........}

改成:

//USB中断服务子程序
void fn_usb_isr()
{
  unsigned int i_st;

  bEPPflags.bits.in_isr = 1;

  i_st = D12_ReadInterruptRegister();//读取中断寄存器 调用D12ci.c中的子程序
  
  i_st = D12_ReadInterruptRegister();//此处为加上去的,读中断寄存器两次
  if(i_st != 0)

这样却能在去掉断点后能成功枚举,电脑能识别到设备。
//////////////////////////////////////////////////////////
 请再问大家这是什么问题引起的呢?

使用特权

评论回复
7
phd8882004|  楼主 | 2008-9-6 18:20 | 只看该作者

问题补充

    这样一修改,同时在上位机应用程序与单片机通信时又出现新的问题,通信过程中,只能正确读取一个数据,应用程序发送第二个数据时,用BUS HOUND检测到不能成功发送到总线了,同时CreateFile函数返回值HidDevice为-1,但却能获得FindTheHid,请问这是什么原因造成的呢?

   这些问题是由系统引起的,WIN2000与WINXP系统在USB通信方面,主控制器识别设备的过程有什么不同吗?

使用特权

评论回复
8
computer00| | 2008-9-6 19:17 | 只看该作者

会不会是你将中断模式设置成了调试模式?原因很多的,要

使用特权

评论回复
9
phd8882004|  楼主 | 2008-9-6 21:04 | 只看该作者

谢谢圈圈的解答,你的书定价多少?我想买

   现在查出来是PID,VID没有及时清零,所以即使HidDevice为-1也发送数据,只是数据没有发送到总线上而已。至于固件程序,我还是用不理解的那个读中断寄存器两次的方式。

使用特权

评论回复
10
computer00| | 2008-9-6 22:23 | 只看该作者

书还没排版呢,定价就更别说了,再等等吧~~~

使用特权

评论回复
11
computer00| | 2008-9-8 10:00 | 只看该作者

扯的吧?俺都不知道呢~~~~~

使用特权

评论回复
12
hq_y| | 2008-9-8 10:03 | 只看该作者

看看书有多少页就知道大概齐的价格了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

12

帖子

0

粉丝