关键词不能为空

当前您在: 主页 > 英语 >

基于Linux的USB主、从设备之间的三种通信方式

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-06 08:58
tags:

-

2021年2月6日发(作者:hern)


基于


Linux



US B



/


从设备之间的三种通信方式



随着简单易用的


USB

< br>接口日益流行,在


嵌入式系统


中添加对

< br>USB


接口的支持已


成为大势所趋。本文通过介绍


Linux


中支持


USB

的各种模块和库,分析了在


Linux


上利用


USB


实现高速串口和以太网连接等通信方式的具体方法。

< br>


通用串行总线


(USB,Universal Serial Bus)


是一种非常实用的通信接口,其应


用日 益广泛。有三种方法可以使运行


Linux


操作系统的嵌入式系 统支持


USB



口,本文将对这三种方 法逐一进行介绍。



基于


Linux



USB


设备与


USB


主机一般有以下三种通信方式:


1

.一些功能最完


备结构也最复杂的设备采用用户定制核模块来实现在标准

< p>
USB


总线上运行复杂


的高级协议,而由


USB


主机上相应的用户驱动程序和应用来完成连接。

< br>2


.另一


些基于


Linux



USB


设备则利用


USB


总线来实现与主机上所运行的某个应用的


简单的点对点 串行连接。主机上的应用虽然利用了主操作系统所提供的


USB



程接口,但表面看来却似乎是在通过一个典型的串口进行通信。


3


.最后,还有


些设备以主计算机作为网关,将


USB


设备连接到办公局域网或互联网上,从而


使< /p>


USB


设备看起仿佛构成了一个以太网。这种方法专业性较强,但 通常可行,


是主机驱动程序使该方法成为可能。


< p>
在这三种方法中,您可以根据预留给开发的时间长短和期望


USB


接口在嵌入式


应用中所扮演的角色来决定选用那一种方法比较恰当。为了 帮助您做出正确的


选择,下一节将向您介绍这三种方法分别应用于基于

< br>Linux



USB


设备时的情


况,但首先让我们对


USB


接口做一个 大致介绍。



USB


概述



USB


是一种方便快捷的接口,可用于为计算机工作站连接一些小配件。根据


USB


规的定义,鼠标、键盘、音频播放和录音设备、照相机、大容量存 储设备以及


许多其他设备均可以通过


USB

接口,以高达


480Mbps


的速度连接到一台主计算


机。协议定制者对


USB


上运行的这种复杂 的主从式协议做出了仔细的说明,这


就帮助保证了所有这些设备之间具备互操作性和兼容 性。例如,该协议规定,


USB


设备只有在被询问时才可以回答 ,并且


USB


主机会根据所连接的


US B


设备


类型的不同,采用某些特定的格式,在某些特定的时间段 从不同的设备获取数


据。



USB< /p>


设备和主机之间通常通过专用的总线控制芯片建立连接。在


USB


主机上,


名为


UHCI



OHCI


等的控制芯片通过插卡形式加入主机或直接 集成到工作站的


主板上。在主机一端的总线控制驱动程序管理着主机控制芯片,它同时还 跟踪


监视着主机目前连接的是哪些


USB


设备,从而决定应如何与它们通信。



可用于连接照相机和 鼠标之类


USB


设备的总线控制器有很多种。其中的一种就


在一块芯片上同时集成了


USB


接口以及另 一端的串口、


I2C


接口或并口。


US B



制器


(


包 括主机上的和


USB


设备上的控制器


)


也可能集成到英特尔


StrongARM




Hitachi H8


之类的微 控制器中去。这些芯片及其外围部件有点类似以太网和


CAN


控 制器,不同的是他们用于连接


USB


设备,并运行


USB


协议。



很多人都 知道


Linux


操作系统中包含了


US B


主机控制器的驱动程序,因而


USB


键盘、数码相机以及其他一些


USB


设备都可以在一个运行


Linux


操作系统的桌


面工作站上使用。 但很少有人知道


Linux


中还包含了一组

USB


设备控制器的驱


动程序,尤其是集成到


StrongARM SA1110


处理器中的控制器。有了这些控制器


驱动程序,基于


Linux


的嵌入式系统就 能利用


USB


接口来与主计算机


(


运行


Linux


或其他操作系统

< p>
)


通信。大多数


USB


通 信的实现过程都是双端的。主机利


用一个核模块或驱动程序来与


USB


设备通信,而


USB


设备则通过 其自身的驱动


程序来与主机通信。根据主机和


USB

< p>
设备所采用的通信风格的不同,驱动程序


可以很简单明白,也可以很复杂, 很具挑战性。本文主要关注


USB


设备端的通

< br>信过程,但也在适当的地方包含了关于主机端通信过程实现的信息。



以下讨论的技术应当引起读者的注意。本文的目的是介绍如何在数码相机和


PDA


等基于


Linux



USB


设备上使用


Linux

< br>。此处所指的


USB


设备是严格意义上

< br>的


USB


设备,即带正方形连接器的完整的设备,而不是 哪些连接器形状为扁平


矩形的设备。此外,


USB


连接的另一端


(


通常是一台


PC


工作站


)


,应该是一台

< p>
USB


主机。



关于< /p>


USB


信息包的格式和通信参数的详细信息,见本文的参考文献。



通过编写核模块添加


USB


接口



1. USB


设备端通信过程



向一个基于


Linux


的设备中添加


USB


接口的第一种方法是编写一个用户定制的


Linux

< br>核模块,这也是可实现最完备功能的一种做法。采用这种方法时通常需


要针对主机 的操作系统


(Windows, Linux



)


开发相应的驱动程序。




一旦在设备中实现了用户定制的核模块,就可以使该设备完成相当复杂的功


能,例如仿真一个文件系统,从而允许嵌入式应用将其


USB


主机当作一个远程


存储设备。除此以外,采用这种方法之后,设备还可以具备存 储转发


(store-


and-forward)


的功能,因而能够在与


USB


主机的连接建立之前对 来自嵌入式应


用的数据流进行缓冲。



在基于


StrongARM



Lin ux


设备中,核代码用于管理芯片所携带的


USB


设备控


制器外设,通过调用函数


sa1100_us b_open()


来初始化。在初始化之后,核模


块还会调用函 数


sa1100_usb_get_descriptor_ptr()



sa1100_usb_set_string_descriptor( )


来设置在设备查询期间传送给


USB


主机


的描述符,其中包含设备的数字厂商号和产品标识符,以及可以让主机用来识


别设备的字符串,甚至还有一个序列号域,以便主机可以唯一地识别一个连接

< br>在


USB


接口上的设备,或者在同种型号的多个设备中进 行区分。



设备查询过程是由


USB


设备控制器驱动的,并且一旦和


USB


主机连上之后会自


动执行,所以核模块必须在


USB

< p>
通信开始之前设置好每个设备的描述符。当准


备工作就绪之后,

< p>
USB


设备模块就会调用函数


sa1100_us b_start()


来通知核接


收主机发来的

< br>USB


连接请求。如果设备模块在连上


USB


主机之前调用了函数


sa1100_set_configured_c allback()


,那么接着核模块就会在查询过程结束时


调 用回调函数。回调函数很适合用来在设备上发出警告或给出一些形象的暗


示,说明连接已 经建立。



如果不再需要进行


USB


通信,那么设备的核模块就会先调用函数


sa1100_usb _stop()


,然后调用


sa1100_usb_close ()


,来关闭


SA1100


上的


USB


控制器。



StrongARM



USB


控制器支持


bulk- in



bulk-out


两种数据传送 方式。当接收


来自


USB


主机的数据包 时,核模块会调用


sa1100_usb_recv()


,将一 个数据缓


冲区的地址和一个回调函数送给它。然后核中的


USB


设备控制代码会从主机取


回一个


bul k- out


数据包,将其容存入制定的缓冲区,接着调用回调函数。



下一步,回调函数从接收缓冲区中提取出数据,将其存放到其他地方,或者将

< p>
缓冲区空间添加到一个队列中,然后分配一个新的缓冲区来接收下一个数据


包。然后,如果还有数据需要接收,那么回调函数会重新调用


sa1100_usb_r ecv()


,准备接收另一个数据包。




USB


主机发送数据的过程与此类 似。核模块收集了一帧数据之后,将数据的


存放地址、数据长度和回调函数的地址送给< /p>


sa1100_usb_send()


函数。接着,


在数据传送结束之后,核模块会调用回调函数。




ed./(arch/arm/mach- sa1100/usb-char.c)


可以找到一


个叫做


usb- char


的模块,这是一个很好的设备端


SA1110 Linux USB


模块的例


子。该模块将

USB


设备与


USB


主机之间的连接变成一种高速串行。此外,



usb-eth( arch/arm/mach-sa1100/usb-eth.c )


模块也是个不错的例子,该模块



U SB


变成了一种虚拟的以太型网络。后面会深入探讨这两种模块。


-


-


-


-


-


-


-


-



本文更新与2021-02-06 08:58,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/606934.html

基于Linux的USB主、从设备之间的三种通信方式的相关文章

  • 余华爱情经典语录,余华爱情句子

    余华的经典语录——余华《第七天》40、我不怕死,一点都不怕,只怕再也不能看见你——余华《第七天》4可是我再也没遇到一个像福贵这样令我难忘的人了,对自己的经历如此清楚,

    语文
  • 心情低落的图片压抑,心情低落的图片发朋友圈

    心情压抑的图片(心太累没人理解的说说带图片)1、有时候很想找个人倾诉一下,却又不知从何说起,最终是什么也不说,只想快点睡过去,告诉自己,明天就好了。有时候,突然会觉得

    语文
  • 经典古训100句图片大全,古训名言警句

    古代经典励志名言100句译:好的药物味苦但对治病有利;忠言劝诫的话听起来不顺耳却对人的行为有利。3良言一句三冬暖,恶语伤人六月寒。喷泉的高度不会超过它的源头;一个人的事

    语文
  • 关于青春奋斗的名人名言鲁迅,关于青年奋斗的名言鲁迅

    鲁迅名言名句大全励志1、世上本没有路,走的人多了自然便成了路。下面是我整理的鲁迅先生的名言名句大全,希望对你有所帮助!当生存时,还是将遭践踏,将遭删刈,直至于死亡而

    语文
  • 三国群英单机版手游礼包码,三国群英手机单机版攻略

    三国群英传7五神兽洞有什么用那是多一个武将技能。青龙飞升召唤出东方的守护兽,神兽之一的青龙。玄武怒流召唤出北方的守护兽,神兽之一的玄武。白虎傲啸召唤出西方的守护兽,

    语文
  • 不收费的情感挽回专家电话,情感挽回免费咨询

    免费的情感挽回机构(揭秘情感挽回机构骗局)1、牛牛(化名)向上海市公安局金山分局报案,称自己为了挽回与女友的感情,被一家名为“实花教育咨询”的情感咨询机构诈骗4万余元。

    语文