USB设备驱动开发-USB协议相关(1)

发布者:技术旅人最新更新时间:2016-08-05 来源: eefocus关键字:USB设备  驱动开发  USB协议 手机看文章 扫描二维码
随时随地手机看文章
一、USB设备模型

       USB设备模型从物理上分为两个部分:主机(host)控制端作为主机端,驱动的设备是USB Host Controller;外设端被称为设备端,驱动的设备是USB Device Controller。因此,USB设备驱动应该分为主机端驱动和设备端驱动两部分,只是由于USB协议的主从定位思想,从设备只需要响应主机控制器的请求,不能主动发起请求,通常所说的USB驱动都是指主机端的驱动程序。但近年来随着嵌入式设备的广泛使用,运行Linux系统嵌入式设备也需要通过USB协议与主机端通信,因此从设备端的Linux也需要进行USB设备驱动程序开发,为了避免和主机端的USB设备驱动开发混淆,就将运行Linux的从设备驱动开发成为USB gadget driver,进入与device driver区分开。

二、与驱动开发相关的USB协议规范

      1. USB设备被分为三层:

          usb host controller:最底层,也是总线接口层,负责传输和接收数据包;

          usb core:USB核心层,Linux系统已经根据USB协议规范实现的通用接口。作为中间层,主要完成总线与设备上端点的通信,端点是数据最终的生产者和消费者,一个设备可以有多个端点。因此,这一层其实就是总线和端点的路由。

         usb function:USB功能层,调用下层的接口实现不同的功能,如USB鼠标、USB键盘、USB话筒。通常的USB驱动开发指的都是这层的工作。

 

    2. USB设备的状态和状态机转换

        

       

 

        Attached:USB设备接入或拔出,USB协议规范只定义了USB设备接入时的状态;

        Powered:USB设备的供电分为两种,从USB总线取电的称为总线供电,USB设备从外部取电的称为自供电。即时是自供电设备在插入前已经接通电源仍不能认为其处于Powered状态,只有插入Attached加电后才处于Powered状态;

       支持两种供电模式的设备可以通过配置描述符来向主机报告它当前的供电模式。

       Default:当设备处于Powered状态后,仍不能相应任何总线通信,只有设备手段总线的reset请求后,设备才能通过默认地址进行通信。设备被成功reset后,可以相应配置描述符请求并返回相应的信息;

       Addess:在设备被reset后,每个USB设备将被分配一个独一无二的地址,USB设备在其挂起期间仍拥有这个地址。不论USB被分配了独一无二的地址或使用的默认地址,都能通过默认的通道(pipe,即每个设备的0号端点)进行通信;

      Configured:在设备的功能被正常使用前,设备必须被配置。从设备端来讲,配置就是正常处理一个带有非0参数的SetConfiguration()请求。包括将每个端点的数据包默认类型设为DATA0;

       Suspended:电源管理相关,在没有总线传输的一段时间后,USB设备将自动进入suspend状态。在suspend状态,USB设备自身维护它分配的地址和配置。当有一个总线激活信号后,设备从suspend状态返回。USB设备也可以支持远程唤醒(Remote Wakeup)来唤醒处于suspend状态的主机控制器,但需支持host可以使能或关闭这个功能。

 

  3. 总线枚举

      当一个USB设备接入或拔出时,主机需要通过总线枚举功能来管理设备的状态。当设备接入时,将采取下面的措施:

      1.  当设备接入后,接入的HUB通过一个状态改变通道通知主机这个事件,这时USB设备处于Powered状态并且其连接的端口是disabled的;

      2.  主机询问HUB这次事件的类型等信息;

      3.  当主机了解这是个插入事件后,将enable设备接入的端口并等待100ms,让设备的供电稳定,然后向这个端口发出reset命令;

      4.  HUB执行这次reset操作,USB设备将处于default状态,同时可以从Vbus获取不超过100ma的电源。当前设备的寄存器和状态都被reset了,并且可以通过默认地址进行响应;

      5.  主机将给USB设备分配一个独一无二的地址,设备将进入address状态;

      6.   在USB设备获取独一无二的地址之间,通过默认地址的默认控制通道仍然可以访问,host获取设备描述符来决定默认控制通道的最大数据载荷;

      7.   主机将从设备获取全部配置信息,从0到n-1的配置描述符,即设备所拥有的所有配置描述符;这将花费几毫秒;

      8.    通过获取的配置信息来决定设备将被如何使用,主机将分配各设备一个配置值,这时设备处于configured状态同时所有的端点也就具有这个配置下的特性,USB设备也将获取在其所指定的配置中的电流值。设备处于可用状态了;

关键字:USB设备  驱动开发  USB协议 引用地址:USB设备驱动开发-USB协议相关(1)

上一篇:USB标准诞生20周年:改变计算机的用法
下一篇:如何“正确地”用USB为电池充电

推荐阅读最新更新时间:2024-05-03 00:34

STM32开发笔记7: ST-LINK/V2-1驱动程序的安装
单片机型号:ST-LINK 插入ST-LINK/V2-1仿真器后,会提示驱动硬件的安装,除了大容量存储器外,虚拟串口和调试端口都需要安装驱动程序。 这个驱动程序存在于相应的IDE开发环境中,例如Keil软件,我们只需要将驱动程序的路径指定到相应的目录,即可进行正确的安装。 安装后的设备管理器如下图所示。 这样就完成了驱动程序的安装,我使用的开发板是STM32F030R8,与计算机正确连接后,LD1常亮,LD3常亮,LD2闪亮。
[单片机]
STM32<font color='red'>开发</font>笔记7: ST-LINK/V2-1<font color='red'>驱动</font>程序的安装
STM32开发笔记85: SX1268驱动程序设计(芯片唤醒)
单片机型号:STM32L053R8T6 本系列开发日志,将详述SX1268驱动程序的整个设计过程,本篇介绍芯片唤醒驱动程序。 一、RxDutyCycle模式 在讲述本篇内容之前,我们先来看一下SX1268的一种模式RxDutyCycle,译为中文为接收占空比模式。其可使用SetRxDutyCycle命令进入RxDutyCycle模式,我们来看一下该命令的详细解释。 该命令具有2个参数,从字面的意思可以看出,1个是指接收周期时间,另1个是指睡眠周期时间。我们可分析出,该命令是在RX模式和SLEEP模式之间自动转换的一种模式,其目的是为了节省芯片功耗。如果在使能外部中断后,则单片机可以进入睡眠态,SX1268大部分时间也是
[单片机]
STM32<font color='red'>开发</font>笔记85: SX1268<font color='red'>驱动</font>程序设计(芯片唤醒)
STM32开发笔记89: SX1268驱动程序设计(电源控制)
单片机型号:STM32L053R8T6 本系列开发日志,将详述SX1268驱动程序的整个设计过程,本篇介绍电源控制的相关驱动程序。 一、使用DC-DC或者LDO Two forms of voltage regulation (DC-DC buck converter or linear LDO regulator) are available depending upon the design priorities of the application. The linear LDO regulator is always present in all modes but the transceiver will use
[单片机]
STM32<font color='red'>开发</font>笔记89: SX1268<font color='red'>驱动</font>程序设计(电源控制)
S3C2416裸机开发系列十二_IIC驱动实现
IIC是Philips推出的芯片间串行传输总线,它以二根连线实现完善的全双工同步数据传送,可以极方便地构成多机系统和外围器件扩展系统。由于其接口简单灵活,很多外围器件均提供了IIC接口,如手机、平板常用的重力传感器、地磁感应、陀螺仪、电容屏接口等均是采用IIC接口的。这些器件采用IIC接口可减少芯片封装的引脚,使之更小型化,同时也可以降低布线难度,这对于手机、平板这些PCB芯片集成度相当高的产品来说是很有必要的。笔者此处就s3c2416的IIC接口应用作一个简单的介绍。 1. IIC总线概述 IIC总线物理上包括两条总线线路,一条串行数据线SDA,一条串行时钟线SCL。为了使各个IIC设备线与相连在总线上,IIC总线接口均采用开
[单片机]
S3C2416裸机<font color='red'>开发</font>系列十二_IIC<font color='red'>驱动</font>实现
基于恩智浦MPC5744P的CAN驱动开发和测试
摘要 本篇笔记主要记录基于恩智浦MPC5744P的CAN驱动开发和测试,接口设计,封装为BSP驱动,为之后实现CAN的高层通信打下基础。。 准备工作 安装S32DS for PA, 因为我们在S32DS下开发MPC5744P。 安装S32DS 的SDK, 我们使用最新版3.0.3 CAN 恩智浦的MPC5744P控制器局域网络CAN,跟我们之前使用的恩智浦Kinetis KV, 等系列的flexCAN结构基本是一样的,MPC5744P不仅仅支持经典CAN,还支持CANFD。 从系统框图也可以看出,总体包含消息缓冲RAM,发送仲裁,接收匹配,和协议引擎。要正常与其他CAN设备通信,必须外接收发器。关于MPC5744P的
[单片机]
基于恩智浦MPC5744P的CAN<font color='red'>驱动</font><font color='red'>开发</font>和测试
赛普拉斯推出汽车级USB-C控制器,用于车载快充设备
加利福尼亚州圣何塞,2018年2月22日—— 先进嵌入式系统解决方案的领导者赛普拉斯半导体公司(纳斯达克股票代码:CY)今日宣布推出支持协商供电(PD)功能的高集成度可编程汽车级USB-C控制器。这款适用于汽车的EZ-PD™CCG2控制器通过了USB-IF(USB开发者论坛)的认证,为汽车客户提供即插即用的USB-C用户体验。这款集成控制器符合PD 2.0标准,能有效地降低系统成本,提高充电速度。 赛普拉斯有线连接事业部副总裁Ajay Srikrishna表示:“市场对移动设备快速充电的需求日益增加,这带动了车内USB-C协商供电的应用。我们的汽车级EZ-PD CCG2控制器针对车内充电端口和信息娱乐端口进行了优化,并且与顶级
[半导体设计/制造]
用类/微驱动模型开发DSP视频驱动程序
近年来,DSP运算能力的不断增强,使其在电子设备方面得到了广泛的应用。DSP/BIOS是TI公司推出的一个实时操作系统,与TI的CCS(Code Composer Studio)集成在一起。用DSP/BIOS可以大大简化DSP应用程序的开发和调试,其中与外围设备的I/O接口是DSP应用开发中不可缺少的重要部分。TI公司为C64x系列DSP的开发者提供了一种类/微驱动模型(class/mini drivermodel)。通过对外围设备设计驱动程序,为高层应用程序提供统一的接口来操作底层硬件。只要是遵循此驱动程序接口标准开发的高层应用程序,都可以在具有相同接口的不同硬件平台上运行,从而使DSP软件系统与硬件系统相分离,提高了软件的可重
[嵌入式]
LCD控制驱动器的设计与开发
    摘要: 本文将介绍LCD的种类、驱动器的控制方式、市场动态、LCD控制驱动器的设计流程和设计中应解决的技术难题。     关键词: LCD 液晶控制/驱动器 产品设计 LCD及控制/驱动器     LCD的工作原理和结构 对于液晶显示屏,它通常包括玻璃基板、ITO(Indium Tin Oxide)膜、配向膜、偏光板等制成的夹板,上下共有两层。每个夹层都包含电极和配向膜上形成的沟槽,上下玻璃基板配向为90度。上下夹层中放置液晶,液晶将按照沟槽方向配向。整体看起来,液晶分子的排列就像螺旋形的扭转排列。当玻璃基板加入电场时,液晶分子配列产生变化,变成竖立状态。当液晶分子竖立时光线无法通过,结果
[应用]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

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

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