USB (Universal Serial Bus 通用串行总线)
USB 是一种通用的串行通信接口,一种标准的接口技术,广泛用于连接计算机和其他外部设备。USB 的主要特点包括:
- 通用性:支持多种类型的设备,如键盘、鼠标、打印机、摄像头、存储设备等。
- 多速率支持:支持多种传输速率,从低速(1.5 Mbps)到高速(480 Mbps)再到超高速(5 Gbps及以上)。
- 热插拔和即插即用:支持设备的热插拔(即在不关闭系统的情况下插入或移除设备)和即插即用(即系统能够自动识别新设备并安装必要的驱动程序)功能。
- 应用场景:广泛应用于计算机、移动设备、网络设备等。
- 设计目的:USB 设计的主要目的是为了简化个人计算机上的外设连接,提供一种易于使用的即插即用接口。它支持热插拔功能,意味着用户可以在不关闭系统或设备的情况下连接或断开设备。
- 通信方式:USB 是一种主从式通信协议,主机控制所有数据传输活动。它支持高速率的数据传输,适用于键盘、鼠标、打印机、存储设备等。USB 标准包括多种版本,如 USB 1.1, USB 2.0, USB 3.0/3.1/3.2 以及最新的 USB4。
- 供电能力:USB 接口还能够为连接的设备供电,这对于许多小型设备来说非常有用。
传输模式
USB分为四种传输模式,分别为中断传输
模式,控制传输
模式、批量传输
模式和同步(等时)传输
模式。
-
控制传输(Control Transfer):
- 应用场景:用于设备的初始化、配置和状态查询。例如,当连接一个新的USB设备时,主机(通常是计算机)会发送控制请求来获取设备描述符、设置配置等。
- 特点:保证数据包的
可靠性和顺序性
,但不适用于大量数据传输。- 用于发送配置请求或少量的数据,比如设置设备参数或获取设备状态。
- 这是唯一一种可以保证数据包按序且可靠传递的传输类型。
- 控制传输通常用在初始化设备或与设备进行通信时,确保正确地交换信息。
-
批量传输(Bulk Transfer):
- 应用场景:适合于打印机、扫描仪、数码相机等需要
传输大文件或大量数据
的设备。也适用于存储设备如U盘和外部硬盘。 - 特点:提供错误检测和纠正,确保数据完整性;不是实时传输,带宽利用效率取决于当前USB总线上的流量情况。
- 无保证的数据传输:Bulk传输不保证数据传输的时间,也就是说,它没有固定的带宽分配,也不保证数据包会在特定时间内到达目的地。这是因为Bulk传输主要用于那些对时间敏感度不高,但对数据完整性要求较高的应用场景。
- 高效率的数据传输:虽然Bulk传输不能确保数据的即时性,但它能高效地利用可用带宽,适合传输大文件或大量数据。例如,在打印文档、传输图像或视频文件时,Bulk传输模式可以提供较高的数据吞吐量。
- 错误检测与重传机制:Bulk传输模式具有错误检测功能,如果在传输过程中检测到错误,会自动请求重新发送数据包,从而确保数据的正确性。
- 应用场景:适合于打印机、扫描仪、数码相机等需要
-
中断传输(Interrupt Transfer):
- 应用场景:主要用于人机接口设备(HID),如鼠标、键盘、游戏控制器等,这些设备需要频繁地向主机报告状态变化。
- 特点:提供固定的轮询间隔,确保了及时的数据交换,但每次传输的数据量很小。它并不真正“中断”其他传输,而是按照预定的时间表进行。
- 主要用于需要定期检查的小型数据包,如鼠标、键盘等输入设备。
- 尽管名为“中断”,它并不真正中断其他传输,而是按照预定的时间间隔轮询设备。
- 中断传输保证了一定的响应时间,但不保证带宽。
-
同步(等时)传输(Isochronous Transfer):
- 应用场景:非常适合音频和视频流设备,如网络摄像头、麦克风、扬声器和其他多媒体设备。这些设备要求持续稳定的带宽以保证无延迟的数据流。
- 特点:优先级高,能够保证实时性,但为了实现这一点,牺牲了错误恢复的能力。如果一个数据包丢失或损坏,系统不会尝试重新发送该包。
- 适用于需要
持续的数据流和固定带宽
的应用,例如音频和视频设备。 - 等时传输不提供错误恢复机制;如果一个数据包丢失或损坏,则不会重新发送该数据包。
- 优先级高于批量传输,确保了实时性和带宽的稳定性。
- 适用于需要
综上所述,不同的USB传输模式针对不同类型的应用进行了优化,选择合适的模式可以显著提升用户体验和系统的整体性能。
一些概念
在USB通信中,涉及到多个重要的概念和知识点,这些是理解USB工作原理及其应用的基础。以下是其中一些关键的概念:
-
主机(Host)与设备(Device) :
- USB系统通常采用主从架构,其中只有一个主机(通常是计算机),它可以管理多个下游的USB设备。
- 设备可以是任何类型的外设,如键盘、鼠标、打印机、存储器等。
-
端点(Endpoint) :
- 端点是USB设备内部用于数据传输的逻辑实体。每个端点都有一个唯一的地址,并且只能进行一种类型的数据传输(控制、批量、中断或等时)。
- 一个设备可以有多个端点,以支持不同类型的传输需求。
端点0通常作为控制传输的默认端点
-
管道(Pipe) :
- 管道是指主机与设备之间的一个双向或单向的数据流通道。它由一个端点和一组属性定义,包括传输类型、最大包大小等。
- LIBUSB_ERROR_PIPE = -9
-
事务(Transaction) :
- 一次完整的USB数据交换称为一个事务,它可能包含令牌包(Token Packet)、数据包(Data Packet)和状态包(Handshake Packet)。对于等时传输,不使用握手包。
-
配置(Configuration) :
- 每个USB设备可以有一个或多个配置,每个配置定义了一组功能集,允许设备根据不同的使用场景调整其行为。
-
接口(Interface) :
- 接口是设备的一部分,代表了特定的功能集合。例如,一个复合设备(如带内置麦克风的耳机)可能会有两个接口:一个用于音频播放,另一个用于音频录制。
-
描述符(Descriptor) :
- 描述符是USB设备用来向主机报告自身信息的数据结构,包括设备描述符、配置描述符、接口描述符和端点描述符等。
- 设备描述符:
PID,VID
-
总线枚举(Bus Enumeration) :
- 当USB设备连接到主机时,主机操作系统会执行总线枚举过程,识别新设备并加载相应的驱动程序。
-
电源管理(Power Management) :
- USB标准支持多种电源管理模式,如挂起/恢复(Suspend/Resume),以节省能源。
-
高速(High-Speed)、全速(Full-Speed)和低速(Low-Speed) :
- 这些术语指的是USB通信的速度等级。高速(HS)为480 Mbps,全速(FS)为12 Mbps,低速(LS)为1.5 Mbps。随着USB 3.x标准的推出,还有超高速(SuperSpeed)及更高的速度级别。
USB OTG
USB OTG是USB On-The-Go的缩写,主要应用于各种不同的设备或移动设备间的连接,进行数据交换,特别是PAD、移动电话、消费类设备。
标准的USB使用主从式的架构,USB主机端(即计算机)是“主”,而USB周边设备是“从”。只有USB服务器可以调度该链接的设置与数据传输。USB周边设备不能够自行启动数据传输,只能回应服务器的指令。
USB OTG改变了这种状况,配件不再需要一定要成为单纯的周边设备,它们有时候也可以成为主机端。举例来说,USB打印机与计算机连接时作为计算机的外界周边被计算机控制,与其他USB储存设备连接时作为控制主机来读取储存设备;平板电脑等手持智能终端与计算机连接时主要作为计算机的储存设备等,单独与USB储存设备或USB输入设备连接时则作为这些接入设备的主机来操控储存设备或接收输入。
涉及到的工具
- Android上可以使用
<USB调试助手.apk>
,root过的手机能看到更多信息; - 用于对比验证的apk:
USB摄像头
- Windows上查看设备枚举:
USBTreeViewer
; - Windows上查看固件日志
MobaXterm
重点方法
// 打开设备
dev_handle = libusb_open_device_with_vid_pid(NULL, VENDOR_ID, PRODUCT_ID);
// 从接口分离内核驱动程序。如果成功,您就可以声明接口并执行I/O
int r = libusb_detach_kernel_driver(dev_handle, 0);
// 声明接口
r = libusb_claim_interface(dev_handle, 0);
// 指定接口
ret = libusb_set_interface_alt_setting(iruvc_handle->libusb_device_handle, 1, 1);
// control指令
libusb_control_transfer(dev_handle, 0xA1, 0x21, 0, 0, NULL, 0, 0);
// bulk指令
int r = libusb_bulk_transfer(dev_handle, OUT_ENDPOINT, &arr[0], len, &actual, 0);
......
UVC (USB Video Class)
UVC 是 USB 设备类的一种,专门针对视频设备而设计,例如网络摄像头、数字摄像机等。UVC 标准定义了如何通过 USB 接口进行视频数据的传输,并且规定了设备与主机之间通信的协议。UVC 的主要优点是兼容性好,大多数现代操作系统(如 Windows、macOS、Linux)都内置了对 UVC 设备的支持,这意味着用户通常不需要安装额外的驱动程序就可以使用这些设备。
与USB的区别
"UVC" 和 "USB" 是两个相关但不同的概念。
- 目的不同:USB 是一个通用的连接标准,旨在简化各种外部设备与计算机的连接;而 UVC 是专门为视频设备设计的一个子集,属于 USB 规范的一部分。
- 应用范围不同:所有类型的 USB 设备,比如键盘、鼠标、硬盘、打印机等都可以遵循 USB 标准;而 UVC 则特指那些可以产生视频流的设备,如摄像头。
- 实现方式不同:USB 设备需要遵循 USB 协议进行数据传输,而 UVC 设备除了要遵循 USB 基本规范外,还需要遵守 UVC 规定的特定协议来传输视频数据。
简单来说,UVC 是基于 USB 技术的一个特定应用领域,专注于视频捕捉设备的标准化。如果你购买的是支持 UVC 标准的摄像头,那么你可以期待它能够在大多数现代操作系统上无需安装额外软件即可工作。
I²C(Inter-Integrated Circuit 内部集成电路总线)
- 设计目的:I2C 是一种简单、双向的二线制同步串行通信协议,主要用于短距离通信,常应用于同一电路板上多个IC之间的数据交换。
- 通信方式:I2C 协议允许一个或多个主设备与一个或多个从设备进行通信。它通过两条线(SDA - 数据线,SCL - 时钟线)实现数据传输,支持多主设备和多从设备的配置。
- 速度:相比于 USB,I2C 的数据传输速率较低,但它胜在简单易用,硬件成本低。
特点
-
两线制:
- SDA(Serial Data Line):串行数据线,用于传输数据。
- SCL(Serial Clock Line):串行时钟线,用于同步数据传输。
-
主从架构:
- 主设备:控制总线,发起通信,提供时钟信号。
- 从设备:响应主设备的请求,可以有多个从设备连接到同一个总线上。
-
多主设备支持:
- I²C 总线允许多个主设备共存,通过仲裁机制避免冲突。
-
地址寻址:
- 每个从设备都有一个唯一的7位或10位地址,主设备通过这个地址与特定的从设备通信。
-
数据传输速率:
- 标准模式:100 kbps
- 快速模式:400 kbps
- 高速模式:3.4 Mbps
- 超高速模式:5 Mbps(I²C HS)
-
简单的硬件接口:
- 只需要两个引脚(SDA和SCL),并且通常需要上拉电阻来确保信号的稳定性。
应用场景
I²C 由于其简单、低成本和灵活性,被广泛应用于各种电子设备中,例如:
- 传感器:温度传感器、湿度传感器、加速度计等。
- 显示器:LCD、OLED 显示屏。
- 存储设备:EEPROM、Flash 存储器。
- 电源管理芯片:电池管理、电压监控。
- 音频编解码器:音频输入输出设备。
优势
- 简单易用:只需要两个引脚,硬件接口简单。
- 多设备支持:可以连接多个从设备,扩展性强。
- 低功耗:适用于低功耗应用。
- 广泛的设备支持:许多集成电路和模块都支持 I²C 通信。
缺点
- 传输速率较低:相比其他高速通信协议(如SPI),I²C的传输速率较低。
- 总线负载:多个设备连接时,总线负载增加,可能影响性能。
总的来说,I²C 是一种非常实用的通信协议,特别适合于短距离、低速率、多设备通信的场景。
SPI(Serial Peripheral Interface 串行外设接口)
SPI是一种简单、高效的同步串行通信接口,适用于短距离、高速数据传输的应用场景。SPI 以其简单、高效和高速的特点而著称。
特点
-
全双工通信:
- SPI 支持全双工通信,主设备和从设备可以同时发送和接收数据。
-
高速传输:
- SPI 可以支持很高的传输速率,具体速率取决于设备和应用的需求。
-
简单的硬件接口:
- 只需要四根线(MISO、MOSI、SCLK、SS/CS),硬件实现相对简单。
-
多从设备支持:
- 可以通过多个 SS/CS 线连接多个从设备,主设备通过选择不同的 SS/CS 线来与特定的从设备通信。
-
灵活的时钟配置:
- 时钟极性和相位可以配置,以适应不同的设备和应用需求。
应用场景
- 传感器:温度传感器、湿度传感器、加速度计等。
- 存储设备:Flash 存储器、EEPROM 等。
- 显示器:LCD、OLED 显示屏。
- 模拟数字转换器(ADC)和数字模拟转换器(DAC)。
- 通信模块:无线模块、有线通信模块等。
优缺点
优点
- 高速传输:支持高带宽数据传输,适用于需要快速数据交换的应用。
- 全双工通信:主设备和从设备可以同时发送和接收数据,提高通信效率。
- 简单的硬件接口:只需要四根线,硬件实现简单,成本低。
- 多从设备支持:通过多个 SS/CS 线可以连接多个从设备,扩展性强。
- 灵活的时钟配置:时钟极性和相位可配置,适应不同的设备和应用需求。
缺点
- 点对点通信:虽然可以连接多个从设备,但每次只能与一个从设备通信。
- 占用引脚较多:每个从设备都需要一个独立的 SS/CS 线,对于引脚资源有限的微控制器,可能会成为一个限制。
- 传输距离有限:适用于短距离通信,不适合长距离传输。
MIPI(Mobile Industry Processor Interface 移动行业处理器接口)
MIPI 是一种专为移动设备设计的接口标准,由 MIPI Alliance 组织制定。MIPI 接口的主要特点包括:
- 高速串行接口:使用差分信号线(通常是一对或多对)来传输数据,支持高带宽和低功耗。
- 多种协议:MIPI 标准包括多种协议,如 CSI-2(Camera Serial Interface 2)用于摄像头数据传输,DSI(Display Serial Interface)用于显示数据传输。
- 灵活的配置:可以根据需要调整数据线的数量和传输速率,支持多种分辨率和帧率。
- 应用场景:广泛应用于智能手机、平板电脑、汽车电子等高性能设备。
DVP(Data Video Port 数字视频端口)
DVP 是一种用于摄像头模组和处理器之间传输视频数据的接口。它通常用于低端摄像头模组,特别是那些不需要高带宽的应用。DVP 接口的主要特点包括:
- 简单的并行接口:使用多条数据线(通常是8位、10位或12位)和几条控制线(如时钟线、垂直同步线、水平同步线等)。
- 低带宽:适合低分辨率和低帧率的视频传输。
- 成本低:硬件实现相对简单,成本较低。
- 应用场景:常用于低端摄像头模组、物联网设备、嵌入式系统等。
对比总结
USB (通用串行总线)
- 应用:广泛用于计算机与外部设备之间的连接,如摄像头、打印机、移动硬盘等。
- 特性:
- 异步串行接口,支持热插拔和即插即用功能。
- 数据传输速率高,最新的USB 3.2 Gen 2x2 可以达到20 Gbps。
- 具有供电能力,可以为外设提供电力。
- 抗干扰能力强,使用差分信号传输数据。
- 对用户来说开发成本低,通常不需要额外的驱动程序。
I2C (内部集成电路总线)
- 应用:适用于短距离通信,常见于同一电路板上的芯片间通信。
- 特性:
- 同步串行接口,仅需两根线:串行数据线(SDA)和串行时钟线(SCL)。
- 支持多主控和多从设备。
- 速度较慢,标准模式下最大100 kbps,快速模式下可达400 kbps。
- 拥有简单的硬件设计和协议,但相比SPI需要更复杂的软件处理。
SPI (串行外设接口)
- 应用:常用于微控制器与各种外围设备(如传感器、存储器)之间的短距离通信。
- 特性:
- 同步串行接口,需要时钟线(SCLK)、数据输入线(MOSI)、数据输出线(MISO)和片选线(CS)。
- 高速传输,但实际速度取决于具体的实现。
- 支持全双工通信。
- 简单的物理层设计,易于实现。
MIPI (移动行业处理器接口)
- 应用:广泛应用于手机和平板电脑等移动设备的摄像头和显示屏连接。
- 特性:
- 同步串行接口,具有非常高的数据传输速率,如CSI-2接口可支持高达2.5Gbps/lane。
- 使用低压差分信号(LVDS),抗干扰能力强,走线要求严格。
- 支持纠错机制,确保数据完整性。
- 适用于高分辨率和高速度的应用场景。
- 由于其复杂性,开发成本较高,但能提供优秀的性能和功耗表现。
DVP (数字视频端口)
- 应用:主要用于嵌入式系统中的图像传感器到处理器的数据传输。
- 特性:
- 同步并行接口,包括电源总线、时钟信号总线、数据总线和控制总线。
- 适合较低分辨率和帧率的应用,典型分辨率为500W及以下。
- PCB布局要求相对宽松,但对走线长度有限制。
- 开发成本较高,因为可能需要专门的驱动程序支持。