Linux USB总线架构

USB 总线介绍

USB发展史:
USB(Universal Serial Bus ),通用串行总线,是一种外部总线标准,用于规范电脑与外部设备的连接和通讯。USB是在1994年底由英特尔、康柏、IBM、Microsoft等多家公司联合提出的,自1996年推出后,已成功替代串口和并口,成为当今个人电脑和大量智能设备的必配接口之一。

  • USB 1.0出现在1996年的,速度只有1.5Mb/s。
  • 1998年升级为USB 1.1,速度也提升到12Mb/s,称之为 “full speed”。
  • USB2.0规范是由USB1.1规范演变而来的。它的传输速率达到了 480Mbps ,称之为“high speed”。
  • USB3.0提供了十倍于USB 2.0的传输速度和更高的节能效率,被称为“super speed”。

各种型号USB接口的图片:(来源互联网)
这里写图片描述

USB信号线:
USB接口有4根线,两根电源线,两根信号线。USB接口的输出电压和电流是:+5V 500mA

这里写图片描述

USB电源: 标有VCC、Power、5V、5VSB字样
USB数据线:(正)DATA+、USBD+、PD+、USBDT+
USB数据线:(负)DATA-、USBD-、PD-、USBDT-
地线: GND、Ground

系统拓扑结构:
对于每个USB系统来说,都有一个称为主机控制器的设备,该控制器和一个 根 Hub 作为一个整体。这个根Hub下可以接多级的Hub,每个子Hub又可以接子Hub。每个USB设备作为一个节点接在不同级别的Hub上。 每条USB总线上最多可以接127个设备。

这里写图片描述

这里写图片描述

常见的USB主控制器规格:
OHCI:主要是非PC系统上的USB芯片
UHCI:大多是 Intel 和 Via 主板上的 USB 控制器芯片。他们都是由USB1.1规格的。
EHCI:由 Intel 等几个厂商研发,兼容 OHCI 和 UHCI ,遵循USB2.0规范。

USB 协议分析

USB设备逻辑结构:
在USB设备的逻辑组织中,包含 设备配置接口端点 4个层次。设备通常有一个或多个配置,配置通常有一个或多个接口,接口有零或多个端点。

这里写图片描述

每个USB设备都可以包含一个或多个配置,不同的配置使设备表现出不同的功能组合,配置由多个接口组成。在USB协议中,接口代表一个基本的功能,一个功能复杂的USB设备可以具有多个接口,而接口是端点的汇集。

举例说明:
一个USB播放器带有音频,视频功能,还有旋钮和按钮。
配置1:音频(接口)+旋钮(接口)
配置2:视频(接口)+旋钮(接口)
配置3:音频(接口)+视频(接口)+按钮(接口)
音频接口,视频接口,按钮接口,旋钮接口均需要一个驱动程序。

USB设备中的唯一可寻址的部分是设备端点,端点的作用类似于寄存器。每个端点在设备内部有唯一的端点号,这个端点号是在设备设计时给定的。主机和设备的通信最终都作用于设备上的各个端点。每个端点所支持的操作都是单向的,要么只读,要么只写。

USB描述符:
在每一个USB设备内部,包含了固定格式的数据,通过这些数据,USB主机就可以获取USB设备的类型、生产厂商等信息。这些固定格式的数据,我们就称之为USB描述符

标准的USB设备有 5种 USB描述符: 设备描述符配置描述符接口描述符端点描述符字符串描述符

1、设备描述符:
一个USB设备只有一个设备描述符,设备描述符长度为18个字节,参考《USB specification : Table-9.8》。

这里写图片描述

2、配置描述符:
USB配置描述符长度为8个字节,格式参考《USB specification :Table-9.10》。

这里写图片描述

3、接口描述符:
USB接口描述符长度为8个字节,参考《USB specification Table-9.12》。

这里写图片描述

4、端点描述符:
USB端点描述符长度为7个字节,参考《USB specification :Table-9.13》。

这里写图片描述

USB数据通讯
1、USB的数据通讯首先是基于传输(Transfer)的,传输的类型有:中断传输批量传输同步传输控制传输

这里写图片描述

2、一次传输由一个或多个事务(transaction)构成,事务可分为:In事务Out事务Setup事务

这里写图片描述

3、一个事务由一个或多个包(packet)构成,包可分为:令牌包(setup)数据包(data)握手包(ACK)特殊包

这里写图片描述

4、一个包由多个构成,域可分为:同步域(SYNC),标识域(PID),地址域(ADDR),端点域(ENDP),帧号域(FRAM),数据域(DATA),校验域(CRC)。

这里写图片描述

USB设备枚举
USB设备在正常工作以前,第一件要做的事就是枚举。枚举是让主机认得这个USB设备,并且为该设备准备资源,建立好主机和设备之间的数据传递通道。

枚举的过程:
这里写图片描述

Linux USB 系统架构

开发板既可以作为USB主机使用,也可以作为USB设备来使用。

开发板作为USB主机使用:
这里写图片描述

在启动了开发板的Linux系统之后,可以将U盘插入开发板上的USB口上,这样开发板就可以作为主机使用。可以使用MassStorage驱动。

MassStorage驱动
内核驱动设置:
1、主控制器驱动设置
这里写图片描述

2、设备驱动
这里写图片描述

3、其他配置
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

在开发板上挂载使用U盘
在U盘插入开发板之后,执行命令:
mount /dev/uba /mnt/
挂载U盘,然后通过 ls /mnt/ 命令就可以查看U盘的文件

开发板作为USB设备使用:
在开发板连接到电脑时,就可以作为USB设备来使用,可以使用 Gadget驱动,该驱动可以把开发板作为网口、串口等设备来使用。
这里写图片描述

RNDIS驱动(Gadget驱动的一种)
1、控制器驱动
这里写图片描述

2、Gadget驱动
这里写图片描述
在上图的例子中,将USB设备作为一个网口来使用。将编译之后的内核模块 .ko 文件拷贝到开发板中,加载模块。
执行 如下命令:
这里写图片描述

在计算机的设备管理器中会发现多了一个设备:
这里写图片描述

右击选择更新驱动设备,选择从计算机的设备驱动程序列表中安装,设备类型选择网络适配器,厂商做如下选择:
这里写图片描述

在安装了驱动之后,就可以在计算机的网络中发现开发板的连接,多了一个网卡。RNDIS驱动在计算机上将USB口模拟成网口,同时RNDIS驱动在开发板上也将USB口模拟成网口,这样就实现了计算机与开发板通过USB的网口连接。

设置计算机的IP地址,在开发板上执行ping命令,就可以ping通计算机。

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值