USB系统设备模型建立流程

发布者:PeacefulWarrior最新更新时间:2016-12-03 来源: eefocus关键字:USB系统  设备模型  建立流程 手机看文章 扫描二维码
随时随地手机看文章

USB系统设备模型建立流程 - 尘 - 我的电子小屋

USB系统设备模型建立流程 - 尘 - 我的电子小屋

 

USB系统设备模型建立流程 - 尘 - 我的电子小屋

USB系统设备模型建立流程 - 尘 - 我的电子小屋

 

USB系统设备模型建立流程 - 尘 - 我的电子小屋

 

 


                                                         USB设备模型建立流程概览


S3c2440处理器中集成有USB控制器,该主控制器作为平台设备s3c_device_usb添加到内核,该设备与驱动ohci_hcd_s3c2410_driver匹配后调用函数usb_hcd_s3c2410_probe。在函数usb_hcd_s3c2410_probe中获取硬件资源,为USB主控制器结构体usb_hcd分配内存,调用函数usb_add_hcd填充usb_hcd。一个主控制器对应一条USB总线,在函数usb_add_hcd中将该总线注册到内核usb_register_bus(&hcd->self)。一个主控制器绑定了一个root_hub。Root_hub,hub,插到hub端口上的设备都是 usb_device。因此在函数usb_add_hcd中为root_hub的usb_device分配了存储空间usb_alloc_dev。为了初始化root_hub的usb_device并把它注册到内核又调用了函数register_root_hub。无论是root_hub,hub,还是插到hub端口上的设备都是usb_device,所以都有设备描述符,在函数register_root_hub中调用函数 usb_get_device_descriptor获取了root_hub设备的设备描述符。一个新设备需要先进行相应的配置然后再加入内核,为完成这项工作在函数register_root_hub又调用了usb_new_device 

  每个USB设备有一种或多种配置;每种配置有一个或多个接口;一个接口有一种或多种设置;一种设置有一个或多个端点。为了对配置,接口,端点进行描述,每一个USB设备都有配置描述符,接口描述符,端点描述符。为了获取并解析这些描述符在函数usb_new_device中调用了函数usb_configure_device。然后将该设备添加到内核device_add(&udev->dev)。每个USB设备都有一个控制端点。它通常用于配置设备,获取设备信息,发送命令到设备,或者获取设备的状态报告。在设备建立的过程中需要用到它,要让它工作得先把它添加到内核,为此在函数usb_new_device中调用了函数usb_create_ep_devs。


所有USB设备所属的总线类型为usb_bus_type 设备类型为usb_device_type。当一个USB设备添加到总线上时都会去寻找它对应的驱动,为此内核创建了一个能匹配所有USB设备的驱动usb_generic_driver。当有usb_device添加到内核都会与驱动usb_generic_driver相匹配并调用函数generic_probe。在函数generic_probe中会调用函数usb_choose_configuration为设备选择一个合理的配置,到此就可以用选定配置下的所有描述符进行设备配置了。函数usb_set_configuration即是完成此项功能。在函数usb_set_configuratio中将设备的所有接口都添加到内核device_add(&intf->dev)。这些接口设备的总线类型为usb_bus_type,设备类型为usb_if_device_type。


USB接口也是作为设备添加到了内核,它有它所属的总线usb_bus_type,因此每一个接口都有它对应的驱动。接口又分为HUB的接口和USB设备的接口。


1、如果是HUB的接口:

HUB不同于设备,它除了有设备描述符外还有它独有的HUB描述符。有管理HUB的结构体struct usb_hub。为配置HUB,填充HUB结构体usb_hub内核又创建了HUB驱动hub_driver。一旦有新的HUB插入,驱动hub_driver都会与新HUB的接口相匹配,而后调用函数hub_probe。在函数hub_probe中位HUB结构体分配内存usb_hub,并调用函数hub_configure获取HUB描述符,配置HUB。在函数hub_configure中调用函数get_hub_descriptor获取HUB描述符,对HUB的一些参数进行合理性检测和配置。然后创建了一个URB,将该URB初始化为一个中断URBusb_fill_int_urb(hub->urb, hdev, pipe, *hub->buffer, maxp, hub_irq,hub, endpoint->bInterval);,中断回调函数为hub_irq。该中断URB的作用后面再述。最后调用函数hub_activate激活该HUB。一个HUB可能有多个端口,用于插入USB设备,在函数hub_activate中对该HUB上所有端口的状态进行检测并标记各端口上的变化hub->change_bits。最后提交中断URB,usb_submit_urb(hub->urb, GFP_NOIO),唤醒内核线程kick_khubd(hub)(下面论述)。

到此USB主控制器,root_hub都已添加到内核,整个USB系统都正常的工作了起来,只等着USB设备插入HUB端口。


2 、如果是设备的接口:

一个USB设备可能有多个接口,一个接口代表了一个基本功能,每个USB驱动程序控制一个接口。这个驱动程序的实现即是驱动编写者的主要工作。这个接口设备与相应驱动匹配后调用probe函数,做相应的初始化设备模型建立等工作。。。。。。

到此一个插入HUB的USB设备也就可以正常工作了。


   关于内核线程:


   在注册HUB驱动usb_register(&hub_driver)的同时,也创建了一个内核线程

khubd_task = kthread_run(hub_thread, NULL, "khubd")。该线程的工作是,当HUB的端口上有变化时,该线程被唤醒去处理这些变化。在正常情况下该线程是出于睡眠状态的。此时链表hub_event_list上没有待处理的HUB。那么线程何时被唤醒?在HUB被创建时在函数hub_configure中会创建一个中断URB,并在HUB激活的函数hub_activate中提交该HUB。这个URB会定时获取HUB的状态,一旦HUB端口上的状态发生变化,会在URB回调函数hub_irq中标记这一变化hub->event_bits[0] = bits,并调用kick_khubd(hub)将有变化的HUB结构体添加到链表hub_event_list,唤醒内核线程。

 这种变化可能是复位,电磁干扰,有设备插入HUB端口或拔下等等。我们想要看到的当然是HUB端口连接的变化。为处理这种变化线程调用函数hub_events。在函数hub_events中调用函数hub_port_status(hub, i,&portstatus, &portchange);来获取端口的状态。对这些变化进行判断,设置变化标志,然后调用函数hub_port_connect_change进行处理。在函数hub_port_connect_change中确定具体的变化类型,并作相应的处理。如果有设备插入HUB端口,为该设备建立设备模型。插入HUB端口的无论是另一个HUB还是一个USB设备在内核中都有一个usb_device结构,都会调用函数usb_alloc_dev为该结构分配存储空间。

调用函数hub_port_init(hub, udev, port1, i)复位该设备,并获取其设备描述符。然后调用函数usb_new_device(udev)获取配置描述符,接口描述符,端点描述符,并将该设备添加到内核。然后是匹配USB设备驱动usb_generic_driver调用 函数generic_probe,配置该USB设备,初始化设备接口添加到内核。接下来是该USB设备每一个接口与其对应驱动的匹配。如果该USB设备是HUB则匹配驱动hub_driver,调用函数hub_probe,建立HUB模型。如果是设备则匹配其相应驱动。对于这些工作上面已有论述。


关键字:USB系统  设备模型  建立流程 引用地址:USB系统设备模型建立流程

上一篇:内核定时器用于按键处理
下一篇:nandflash裸机程序分析

推荐阅读最新更新时间:2024-03-16 15:23

基于USB/RS232的无线通讯终端系统应用设计
1.引言 目前仪器设备多数采用RS232接口与计算机通信,但是随着计算机技术的发展,支持热插拔的USB标准接口将取代RS232接口,因此计算机将越来越少配置甚至不配置RS232接口。 本文详细介绍了一种采用USB通信接口设计的无线数据通讯终端系统。此系统以高速、可 靠、可在线编程的STM32F103C6T6为主控制器件,实现了通过计算机与其他终端之间数据及文件的无线传输功能。实验证明,该系统的设计具有低成 本、高集成度和设计简单等优点,实现无线联网和组网功能,适于便携式电子设备的文件远端下载和上传,为诸如无线切割机、各类物联网掌上终端等设备的数据传输提供了解决方案。 RS232接口与USB接口虽然都属于串行接口,但它们的数据格式、
[电源管理]
基于<font color='red'>USB</font>/RS232的无线通讯终端<font color='red'>系统</font>应用设计
浅谈USB闪存盘与PIC微控制器系统的连接
  作为现今普遍接受的移动存储工具,USB闪存盘在各种嵌入式系统中也获得广泛应用。本文介绍低成本PIC控制器通过USB2.0全速接口与闪存盘进行连接的实现过程,并着重针对PIC微控制器和VinculumUSB接口芯片说明有关嵌入式接口的硬件设计以及程序的编写。   如今各种闪存盘和USB外设价格已相当低廉,并被广泛应用到带USB接口的PC中.而要将它们应用于8位或16位嵌入式系统中,如何解决成本和功耗等问题才是关键.这其中的原因主要是这类系统中用到的嵌入式控制器,如Microchip公司推出并得到广泛应用的PIC系列器件具有多种存储密度和外设,但由于缺乏接口、资源和性能,无法作为USB的主控制器。   在实际应用中,可用VNC1LV
[单片机]
USB在PCR仪嵌入式系统中的应用
  0 引 言   聚合酶链反应(Polymerase Chain Reaction,PCR)是20世纪80年代中期发展起来的体外核酸扩增技术。该技术是分子生物学发展史上的一个里程碑,它使得DNA分子可以在生物体外进行放大扩增。在短短的数年内,这项技术已广泛应用于生命科学的研究中,对基因克隆、DNA序列分析等现代分子生物学技术的发展起到了重要的作用。我国目前使用的PCR仪主要依赖于进口,为了在该技术领域追赶国际先进水平,与海尔集团联合对PCR仪进行了开发研究。   随着U盘的普遍使用和USB技术的嵌入式系统应用,方便用户进行程序修改和程序的存储,PCR设计中采用可以热插拔的USB接口,即在PCR硬件系统中加入了USB主控芯
[嵌入式]
基于C8051F系列单片机的数据采集系统USB接口设计
1 引言 随着现代工业生产和科学研究对数据采集系统的要求日益提高,传输速度、纠错能力和操作安装的简易性是人们进行采集数据时一直关注的问题,这使得数据通讯技术不可避免地成为了其中的关键技术,而数据采集系统采用何种接口进行数据通讯是影响系统整体效率的重要因素之一。USB(通用串行总线)总线接口技术由于具有速度快、设备安装和配置容易、易于扩展、能够采用总线供电及使用灵活等优点,已逐渐成为现代数据传输的发展趋势[1-5]。 本文给出了一种基于C8051F320的数据采集系统USB 接口设计方案,完成了USB 接口硬件电路设计和软件程序开发,并将其应用到仓库视频监控系统中,实现了快速、方便的数据采集和传输。 2 C8051F320
[单片机]
基于C8051F系列单片机的数据采集<font color='red'>系统</font><font color='red'>USB</font>接口设计
高速USB数据采集系统的设计
    在图像处理、瞬态信号测量等一些高速、高精度的应用中,需要进行高速数据采集。USB 2.0接口以其高速率等优点渐有取代传统ISA及PCI数据总线的趋势,热插拔特性也使其成为各种PC外设的首选接口。EZ-USB FX2是Cypress公司推出的集成USB 2.0的微处理器,它集成了USB 2.0收发器、SIE(串行接口引擎)、增强的8051微控制器和可编程的外围接口。本文将介绍基于EZ-USB FX2系列CY7C68013芯片的高速数据采集系统的设计,该系统具有限幅保护功能,固件和驱动程序的编写简便,能够完成对数据的高速采集和传送。 数据采集系统方案设计     数据采集系统的框图如图1所示,硬件电路如图2所示。其中,AD1
[嵌入式]
基于DDS与USB技术的通信对抗教学演示系统中硬件的设计与实现
1概 述   扩展频谱通信具有抗干扰能力强、隐蔽性好等优点,已成为通信对抗与反对抗中最重要的技术手段,在军事通信中日益受到重视,跳频电台就是扩频通信在军事领域中的重要应用。在通信对抗中如何有效地对抗跳频电台是目前的一个热点问题。在通信对抗的教学中为了以实验的形式向人们展示跳频通信中干扰与抗干扰的原理,并能对跳频通信进行侦察和实施多种干扰的效果进行比较,为科研中寻找对跳频通信的最有效干扰方式提供有效的数据和参考,本文给出了一种基于DDS与USB技术的通信对抗教学演示系统中硬件方案的设计与实现。 2 系统整体结构设计及原理说明   系统主要由控制计算机、发射机、电子侦察模块、电子干扰模块和接收机等五部分组成,如图1所示
[嵌入式]
基于单片无操作系统USB 主机控制器接口
1引言 论文以Compaq、Microsoft 等公开的 USB 主机控制器接口规范为基础,遵循USB 主机的协议规范,开发了独立于操作系统的USB 主机底层驱动程序,并在S3C2410 平台上得到了验证。下面详细论述主机控制器接口规范及 驱动程序实现。   2 USB 体系结构 USB 体系包括一系列的硬件层和软件层,如图1 所示。   为了实现其可重用性和适合嵌入式系统特性,图 1 借鉴了PC 机上的USB 主机系统结 构,同时对一些在嵌入式系统中不必要的功能进行了取舍。用户程序和USB 设备类驱动通 过加工和分解IRP,构建相应的URB(Universal Request Block)并通过HCD(Ho
[电源管理]
基于单片无操作<font color='red'>系统</font>的 <font color='red'>USB</font> 主机控制器接口
基于USB接口的电化学沉积仪器数据采集系统的研究
  引 言   智能仪器自动化程度的提高为科学研究提供了十分方便的实验手段。电化学沉积仪器是由PC机控制的全自动的恒电位仪、恒电流仪及恒电位脉冲试验仪的集合体。相对于手动的设备而言更为先进,功能更强大,试验精度更高。具体工作时,仪器按照用户设定的实验类型执行具体的试验,同时采集系统实时的电压和电流信号。采集到的信号,由仪器内置的微处理器解析后,转换为数字信号反馈到上位机(PC机)。上位机的仪器数据处理软件,具有强大的解析功能,可以对原始数据进行各种分析,得到研究体系的详细信息。   在PC机控制的系统中,常采用通用串行总线(USB)进行通信。因为基于USB总线的数据采集系统具有安装方便、可靠性高、数据不易丢失、抗干扰能力强、便于
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved