Linux那些事儿 之 戏说USB(4)最终奥义

本文深入探讨USB系统的层次结构,从HostController到客户软件各层作用及交互方式,介绍USB设备如何通过一致的BusInterface与主机通信,以及复合设备与组合设备的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



一个完整的USB系统应该实现上面图里的各个部分,图里主要显示了四个层次,USB物理设备(USB Physical Device)、客户软件(Client SW)、USB系统软件(USB System SW)以及USB Host Controller。Host Controller已经说过了,系统软件就是操作系统里用来支持USB的部分,像咱们的usb core,还有各种设备驱动等等,客户软件么,就是上层应用了,只有设备和驱动程序,我们仍然什么都做不了,现实生活中一个很浅显的道理就是只靠摄像头和驱动是不可能和mm视频的。

真的是这样么?多少年以前,作为一个普通人,我会坚定的说是。只是现在,作为一个读了协议的普通人,我要说并不完全是这样。上面的系统软件,只表示了系统里支持USB的部分,也就是系统相关设备无关的部分,相对于咱们的linux来说,就是usb core,并不包括所谓的各种设备驱动。而客户软件则指设备相关,也就是对应于特定设备的部分,你的USB键盘驱动、触摸屏驱动什么的都在这儿。这里的名字太迷惑人了,一直觉得写驱动是系统级的编程,原来搞协议的这些同志觉得不是这么回事,我羞愧的低下了无知的脑袋。

为什么会对这几个概念这么较真儿那,不是因为它们有多可爱,只是它们在协议里无处不在。主机这边就分这三层,Host Controller看似在最低层,却掌控着整个USB的通信,你的USB设备要想发挥作用,首先得获得它的批准。

USB物理设备这边看着好像也分了三层,其实我们可以把它们看成一样的东东,只是为了对应了主机这边的不同层次,Host Controller看到的是一个个hub还有hub上的USB device,而在系统软件的眼里没那么多道道儿,hub还有各种设备什么的都是一个个的逻辑设备,客户软件看到的是设备提供的功能。接下来还会有说到。站在不同的高度看到不同的风景,不然为什么买房子时高一层要加多少钱那。

已经被计算机网络中的七层协议洗过脑的我们应该很容易的就看出,真实的数据流只发生在Host Controller和设备的Bus Interface之间,其它的都是逻辑上的,也就说是虚的。

各种USB设备提供的功能是不同的,但是面向主机的Bus Interface却是一致的,主机也不是神仙,掐指一算就可以知道哪个是哪个,所以,那些设备本身还必须要提供用来确认自己身份的信息,这些信息里有些是共有的,有些是个别设备特有的。

各种设备和主机是怎么连接在一起的那?前面的那颗树已经描绘的比较形象了,不过那棵树里的compound device被有意的飘过了。那么,compound 设备又是什么样的设备?其实,在USB的世界里,不仅仅有compound device,还有composite device,简单的中文名字已经无法形象的表达它们的区别,就还是使用它们的英文原名了。compound device是那些将hub和连在hub上的设备封装在一起所组成的设备,而composite device是包含彼此独立的多个接口的设备。从主机的角度看,一个compound device和单独的一个hub然后连接了多个USB设备是一样的,它里面包含的hub和各个设备都会有自己独立的地址,而一个composite device里不管具有多少接口,它都只有一个地址。


上面都是站在host controller的层次上,说的是实实在在的物理拓扑,对于系统软件来说,没有这么复杂,所有的hub和设备都是一个个的逻辑设备。站的越高,看的越远,快乐如此简单。



一个USB逻辑设备就是一系列端点(endpoint)的集合,它与主机之间的通信发生在主机上的一个缓冲区和设备上的一个端点之间,通过管道来传输数据。意思就是管道的一端是主机上的一个缓冲区,一端是设备上的端点。



图里的Interface是怎么回事?这里先简单说说吧,反正代码里会不停的遇到再遇到。USB端点被捆绑为接口(Interface),一个接口代表一个基本功能。有的设备具有多个接口,像USB扬声器就包括一个键盘接口和一个音频流接口。在内核里一个接口要对应一个驱动程序,USB扬声器在linux里就需要两个不同的驱动程序。到目前为止,可以这么说,一个设备可以包括多个接口,一个接口可以没有或具有一个以上的端点,当然以后我们会发现并不仅仅止于此。不过先说这么多吧,省得说得慷慨激昂,看的昏昏欲睡。

现在已经说了USB的历史发展体系结构等比较基本的东东,也就是协议的前几章,更多的东东还是下面和代码一块说吧。为了纪念这个历史性的时刻,学学电影里的酷哥警察说句:好戏开始了。
内容概要:本文详细介绍了如何使用Matlab对地表水源热泵系统进行建模,并采用粒子群算法来优化每小时的制冷量和制热量。首先,文章解释了地表水源热泵的工作原理及其重要性,随后展示了如何设定基本参数并构建热泵机组的基础模型。接着,文章深入探讨了粒子群算法的具体实现步骤,包括参数设置、粒子初始化、适应度评估以及粒子位置和速度的更新规则。为了确保优化的有效性和实用性,文中还讨论了如何处理实际应用中的约束条件,如设备的最大能力和制冷/制热模式之间的互斥关系。此外,作者分享了一些实用技巧,例如引入混合优化方法以加快收敛速度,以及在目标函数中加入额外的惩罚项来减少不必要的模式切换。最终,通过对优化结果的可视化分析,验证了所提出的方法能够显著降低能耗并提高系统的运行效率。 适用人群:从事暖通空调系统设计、优化及相关领域的工程师和技术人员,尤其是那些希望深入了解地表水源热泵系统特性和优化方法的专业人士。 使用场景及目标:适用于需要对地表水源热泵系统进行精确建模和优化的情景,旨在找到既满足建筑负荷需求又能使机组运行在最高效率点的制冷/制热量组合。主要目标是在保证室内舒适度的前提下,最大限度地节约能源并延长设备使用寿命。 其他说明:文中提供的Matlab代码片段可以帮助读者更好地理解和复现整个建模和优化过程。同时,作者强调了在实际工程项目中灵活调整相关参数的重要性,以便获得更好的优化效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值