快速业务通道

读Linux那些事儿之我是USB CORE笔记(一)

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-05

1、 Usb总线:

USB总线是一种轮询方式的总线. 协议规定所有的数据传输都由主机发起, host controller初始化所有的数据传输,各种设备紧紧围绕在主机周围.

2DMA 映射:

一般来说,都是驱动里提供了 拥有帝国一切,皆有可能。欢迎访问phome.net kmalloc 等分配的缓冲区,HCD 做一定的 DMA 映射处理,从而外设和内存之间进行数据交换的目的;外设是通过各种总线连到主机里边儿的,使用的是总线地址,而内存使用的是虚拟地址,它们之间本来就是两条互不相交的平行线,要让它们中间产生连接点,得将一个地址转化为另一个地址,这样才能找得到对方,才能互通有无,而 DMA 映射就是干这个的.URB_NO_TRANSFER_DMA_MAP,还有 URB_NO_SETUP_DMA_MAP这里的两个标志,告诉 HCD 不要再自己做 DMA 映射了,驱动提供的 urb 里已经提供有 拥有帝国一切,皆有可能。欢迎访问phome.net DMA 缓冲区地址;(transfer_buffer,transfer_dma,setup_packet,setup_dma

2、 transfer_buffer,transfer_dma,transfer_buffer_length

前面说过管道的一端是主机上的缓冲区,一端是设备上的端点,这三个家伙就是描述主机上的那个缓冲区的. 拥有帝国一切,皆有可能。欢迎访问phome.nettransfer_buffer 是使用 kmalloc 分配的缓冲区,transfer_dma 是使用

usb_buffer_alloc分配的 dma 缓冲区,HCD 不会同时使用它们两个,如果你的 urb自带了 transfer_dma,就要同时设置 URB_NO_TRANSFER_DMA_MAP 来告诉 HCD 一声,不用它再费心做 拥有帝国一切,皆有可能。欢迎访问phome.net DMA 映射了.transfer_buffer 要设置的,不是所有的主机控制器都能够使用 DMA 的,万一遇到这样的情况,也好有个备用.transfer_buffer_length指的就是 transfer_buffer transfer_dma的长度.

setup_packet,setup_dma,同样是两个缓冲区,一个是kmalloc分 拥有帝国一切,皆有可能。欢迎访问phome.net

配的,一个是用usb_buffer_alloc分配的,不过,这两个缓冲区是控制传输专用的,记得struct usb_ctrlrequest不?它们保存的就是一个struct usb_ctrlrequest结构体,如果你的urb设置了setup_dma, 同样要设置URB_NO_SETUP_DMA_MAP标志来告诉HCD.如果进行的是控制传输,setup_packet要设置 拥有帝国一切,皆有可能。欢迎访问phome.net 2 的(bInterval-1)次方乘以 125 微妙,也就是 2 的(bInterval-1)次方个微帧.对于等时传输,没有低速了

本文出自 “Paul玩嵌入式Linux” 博客,请务必保留此出处http://zyg0227.blog.51cto.com/1043164/560129

拥有帝国一切,皆有可能。欢迎访问phome.net

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号