珊瑚虫 发表于 2005-8-10 13:57:42

usb一问

最近帮同学看usb驱动程序,发现一个奇怪的问题如下:

原来的驱动程序是基于ucosii写的(他的开发板是lpc2200,里面有一个实验是通过usb接口,往IIC器件CAT24WC02读写数据),然后,他想不使用操作系统,所以就将与ucosii有关的代码去掉了。可是这时问题来了,他的主函数如下:

int main (void)
{
     OSSemCreate(1);
TargetInit();               //定时器及相关中断初始化
Init_D12Int();      // 配置D12的中断
Init_D12();       // PDIUSBD12初始化
bEPPflags.bits.setup_packet=0;
 ...
}
由于不使用ucosii,所以他将OSSemCreate(1);注释掉,可这时主机识别不出有usb设备;如果将这句话加上,那么主机就能正确识别出usb设备。而事实上,由于OSSemCreate(1)这句话并没有将返回值保存下来,所以其实即使加上这句话也起不到什么实际作用。
很纳闷,我帮他看了半天,实在不懂什么问题。
编译是能通过的,就是必须加这句实际好像没什么作用的话才能识别出usb设备。
一直不明白USB设备插入主机的USB端点时,主机是怎么识别USB设备,是如何一种机制呢,中断?
指点一下,呵呵
谢谢

limingth 发表于 2005-8-12 11:52:23

USB 的机制很多地方都能找到。网站上有一篇王云飞的论文可以参考看看,附件里是北航的 Frank 写的制作 u 盘的经典文章。
你同学的问题单单这些代码不太好说,现在解决了么?

珊瑚虫 发表于 2005-8-12 22:12:23

谢谢。
他那问题还没解决。
觉得蛮奇怪的,呵呵

CoryXie 发表于 2005-8-15 17:36:10

我对这个问题作一点解释:
USB Host (比如OHCI HC)上一般有一个Root Hub,Root Hub显现出来的的端口就是我们常说的Downstream ports,其实Root Hub 的UpStream Port就在主机控制器里面,和主机控制器结合得很紧密。Root Hub和其它的普通Hub的功能其实差不多,区别仅仅在于它直接附加在主机控制器里面了。在主机控制器的驱动(即HCD)里面,一般会有一部分Root Hub Emulation的代码,来描述Root Hub 本身。在初始化整个USB Host Stack的时候,先初始化USBD,然后必须初始化Hub class driver,然后初始化HCD。Root Hub 的地址会被设为1。在Hub Class driver里面,都有一个线程(linux里面就是内核线程叫做“khubd”,vxWorks里面就是一个任务),这个线程不干别的,就是发起对Root Hub的Interrupt Request(这里的interrupt不是我们说的那种硬件中断噢!),周期性的查询一种叫做Root Hub Status Change(RHSC)的事件,这是关键的,没有这个线程,绝对检测不到设备的连入/拔除。楼上的猜得对,当有RHSC(可能是拔除,插入,过流等)事件发生时,主机控制器都会产生一个中断,在中断处理里面,如果发现适当的状态改变,比如是插入设备,那么紧接着会做一个debonce的动作,还有Reset Port的动作,此后,就会使用USBD提供的一个类似UsbNewDevice()的函数,新创建一个设备。在执行UsbNewDevice()这个函数的第一步,会制定一个新的地址。第二步就是构建一个getDeviceDescriptor的控制传输,通过HCD,发给HC,最终产生一些USB transaction,从USB 总线上读取设备描述符(一般是分几步才能真正完成!),有了设备描述符,就可以分配一些数据结构来描述这个新设备了。

珊瑚虫 发表于 2005-8-15 19:35:46

强!
呵呵,楼上这位大侠,看到你的签名档,真是冷汗不止啊
路漫漫其修远矣,看来小弟连门都还没入
努力中......

CoryXie 发表于 2005-8-15 22:08:11

不要那么说嘛,其实我有好多都是略知一二!还是要向大家学习啊!以前还没搞过uCLinux呢,怎么强呢?个人觉得自己最近比较浮躁,搞工程的还是要沉着才好!

珊瑚虫 发表于 2005-8-16 09:14:44

再问一个比较弱的问题:

   在开发板配套光盘里,usb驱动程序/win2k_xp下有两个文件:D12test.inf和D12TEST.sys.
请问,这两个文件怎么使用?是不是要拷贝到某个系统文件夹下去?
这两个文件有什么作用呢?
谢谢。

limingth 发表于 2005-8-16 09:56:52

可参考看看 chw75 的帖子,写的非常清楚了. 8)
http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=128582

珊瑚虫 发表于 2005-8-16 10:33:35

谢谢。
明白了。
页: [1]
查看完整版本: usb一问