浅谈 USB Bulk 深入浅出 (1) - USB 传输模式 及 何谓 USB bulk

2023-12-11 19:20

本文主要是介绍浅谈 USB Bulk 深入浅出 (1) - USB 传输模式 及 何谓 USB bulk,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

来源:大大通【阿福的随笔】浅谈 USB Bulk 深入浅出 (1) - USB 传输模式 及 何谓 USB bulk

1. USB 传输模式有哪些

USB 是即插即用使用差动信号的装置界面,是以 端点 ( Endpoint ),做为传输装置的输出入端,透过不同的端点 ( Endpoint ) 和模式,来进行与装置的沟通,可从传输方块图来观看会比较好理解。从硬体的hot plug 通知 Host 端目前有装置连接的行为开始,到 USB波形交握,再到USB 命令沟通,取得 装置的描述符和之后如何传输规划的设定,这一切的规范都是来自 USB org 的 USB spec  所定义的。

下载链接如下:

USB 2.0 Specification | USB-IF

今天要主要是要探讨 USB Bulk 的传输架构,不过还是先从USB传输模式说明开始

USB 四种传输模式如下 :

  • 控制中断传输 ( Control )
  • 中断传输 ( Interrupt )
  • 批量资料传输 ( Bulk )
  • 同步传输 ( Isochronous )

后面会再详细说明。 

1.1 方块图

传输方块图,如‘图1.1.1’( 注1 )

图1.1.1注1 )

2. 传输模式说明

(1) 控制中断传输 ( Control ) : 一开始的 USB 命令控制,如 configuration ( 组态命令 ) ,用来取得传输速度或是设定传输速度及取得描述符… 等等,且一定是使用 Endpoint 0。因为控制传输是 USB装置一开始的命令,所以每个 USB装置一定都会有 Endpoint 0。

Full speed 控制框架为 63bytes  (9 SYNC bytes, 9 PID bytes, 6 Endpoint + CRC bytes, 6 CRC bytes, 8 Setup data bytes, and a 7-byte interpacket delay (EOP, etc.))

而 High speed 框架为 173bytes


(2) 中断传输 ( Interrupt ) : 使用中断方式来做传输 ,需要设定间隔时间 ,在Full speed 最小间隔时间为 1ms ,high Speed 最小间隔时间为 125us,中断传输通常是发生事件时才传输资料,或是固定在间隔时间上传资料,例如 : 一般的 USB HID 装置,USB键盘,鼠标,或自定义的传输,虽然在中断传输时,同一个端点可以同时设定 In 和 out ,但若是端点资源充足的话,还是建议分开来设定,若是 In  因为某种原因而卡住在 Still 时,因为同一个端点 busy 所以 out也一样会卡住。( 但在程式上还是需要分时来传 )

Full speed框架为 13 bytes

High speed 框架为 55 bytes

(3) 批量资料传输 ( Bulk ) : 需要大量资料传输时使用,且一个端点只能 bulk in 或是 bulk out,批量资料传输的装置有多,例如 : USBCDC ,USB mass storage,ADB,印表机 … 等等,一般自定义的 Bulk 是需要 driver 的,或是强制指定使用 windows 内建的 driver ,但强制指定的方式,可能只能用于 底层 driver 呼叫,例如 BUS hound ,若是使用 winUSB ( winUSB.sys or winUSB.dll ) 来当 base 的 driver 来说,会碰到 Windows API 无法指定使用的问题。这时候若是不想另外找 driver 来使用的话,可以先将 USB Bulk装置 ,改写成 USB CDC ,USB mass storage 或是 ADB 已经有人写好 driver 的USB 描述符宣告方式,但是这样就会受限于目前使用的 driver 了。若是 driver没有数位签章的认证的话,可另外找有包含数位签章的 driver 或是先停用数位签章来测试 USB bulk 装置是否能正常传输。

Full speed框架为 13 bytes

High speed 框架为 55 bytes
 

(4) 同步传输 ( Isochronous ) : 时间同步的资料传输,需要及时资料更新时使用,规划上可大量传输,但是资料不验证,若错误也不修正,资料丢失也不重送,也没有 CRC check,但是若是接收端不允许掉资料的话,建议就不要使用此方式传输,一般是使用在有一点错误也不影响的影像与声音传输,例如 : UVC ,UAC规范的装置,常见于 USB Camera,喇叭,麦克风或耳机…等。

Full speed框架为 9 bytes

High speed 框架为 38 bytes

3 参考资料

注1 : 作者: USB ORG ( Compaq ,Hewlett-Packard ,Intel ,Lucent,Microsoft,NEC,Philips );
出处 : USB 2.0 Specification | USB-IF

登录大大通,了解更多详情,查看更多相关文章,解锁1500+完整应用方案,更有大联大700+FAE在线答疑解惑!

这篇关于浅谈 USB Bulk 深入浅出 (1) - USB 传输模式 及 何谓 USB bulk的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/481828

相关文章

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施:

模版方法模式template method

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/template-method 超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 上层接口有默认实现的方法和子类需要自己实现的方法

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

迭代器模式iterator

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/iterator 不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者

springboot实战学习(1)(开发模式与环境)

目录 一、实战学习的引言 (1)前后端的大致学习模块 (2)后端 (3)前端 二、开发模式 一、实战学习的引言 (1)前后端的大致学习模块 (2)后端 Validation:做参数校验Mybatis:做数据库的操作Redis:做缓存Junit:单元测试项目部署:springboot项目部署相关的知识 (3)前端 Vite:Vue项目的脚手架Router:路由Pina:状态管理Eleme

状态模式state

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/state 在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样。 在状态模式中,player.getState()获取的是player的当前状态,通常是一个实现了状态接口的对象。 onPlay()是状态模式中定义的一个方法,不同状态下(例如“正在播放”、“暂停

软件架构模式:5 分钟阅读

原文: https://orkhanscience.medium.com/software-architecture-patterns-5-mins-read-e9e3c8eb47d2 软件架构模式:5 分钟阅读 当有人潜入软件工程世界时,有一天他需要学习软件架构模式的基础知识。当我刚接触编码时,我不知道从哪里获得简要介绍现有架构模式的资源,这样它就不会太详细和混乱,而是非常抽象和易