本文档是自己以前学习USB规范时的笔记。因为最先是在word里写成,带有一些图片和代码,发到blog上不方便,所以转成了pdf格式上传。放在正文的下载链接里供大伙下载。正文里只是一下摘录。
usb笔记.rar
事务:一次完整的传输。一次事务由一个TOKEN包,一个数据包,一个ACK包构成。每个包的大小不能超过端点最大包大小。
伙伴控制器:为了实现上的方便与向前兼容USB1.1,EHCI控制器内部集成了EHCI控制器和UHCI/OHCI控制器。这样,EHCI就可以专注于支持USB2.0,而将对UHCI/OHCI的支持效交给内部集成了OHCI/UHCI控制器,这集成的OHCI/UHCI控制器被称为Companion Host Controller,中文可以叫做伙伴控制器,简称CC。 。。。。。。。。。。。。。。。。。。。。
以EHCI为例。对于EHCI,它是连接在PCI总线上的,所以,很自然的,EHCI HC的注册也应该由一个PCI驱动完成。
。。。。。
我们不必知道经过了多少艰难险阻,只需知道,最终usb_hcd_pci_probe()函数将要被调用。在这个函数中,略去与PCI有关的部分,余下的就只两个函数:usb_create_hcd()和usb_add_hcd(),这正是我们所要关注的。我们是以EHCI的例子进入这两函数的,但实际上,不管是EHCI、UHCI、OHCI、还是MUSB,对HC的注册都是通过这两函数。
。。。。。。
程序步骤: 1、首先设置该主机控制器可用了: set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); 2、使用hcd_buffer_create(hcd)为HCD创建DMA缓冲池。 。。。。。。。。。。。。。。
同样,先是操作线路规程的引用计数,然后调用do_tty_write,在do_tty_write中,会使用线路规程的write函数(参数传入) do_tty_write主要是将大量数据分批发送。在设置了TTY_NO_WRITE_SPLIT的情况下,chunk(一次发送的大小)为65536。否则,如果发送数据量count大于2048字节,则每个chunk为2048 bytes,否则,就为count 个字节。
|