0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何将USB应用到嵌入式领域?如何实现USB点对点的通讯?

Q4MP_gh_c472c21 来源:未知 作者:李倩 2018-08-06 16:51 次阅读

USB On-The-Go 扩大了USB 的应用领域,将USB 从传统的PC 与外设通讯的模式,扩展到移动电子嵌入式领域中,抛开主机PC,实现通常的外设与外设之间点对点(Point to Point)的数据传输模式。

1 什么是USB On-The-Go

我们先来回顾一下通用串行总线(Universal Serial Bus,简称为USB)发展的历史:

i)1994 年11 月,以Intel 为首的7 家公司(Intel、Compaq、Microsoft、IBM、DEC、Northern Telecom 和NEC)推出了USB 协议的第一个草案,USB 作为一种新型的串行总线,揭开了新一轮的USB 总线的革命,但这时,USB 并不为计算机技术人员所熟知;

ii)1996 年2 月,USB 协议规范1.0 版本发布,版权属于Compaq、Intel、Microsoft和NEC 等4 家公司,并同意任何人可免费使用。自此,USB 开始逐渐被广大技术人员和用户所认可,并逐渐开始成为PC 主板上的标准接口;

iii)1998 年10 月,USB 1.1 版本发布,集中修订了USB 1.0 中的问题,并进一步突出了USB 的优势。到目前,USB 1.1 仍是开发USB 低速(1.5Mbps,Low-Speed)和全速(12Mbps,Full-Speed)设备的标准版本。USB 的低功耗、速度高、成本低、支持即插即用和维护方便等优势更加稳定,USB 开始成为鼠标、键盘、游戏杆、打印机、光驱、硬盘、显示器和数码相机等几乎各种PC 外设与PC 连接的标准协议之一。各种USB 的外设产品如雨后春笋般出现,如USB Flash 读卡器、USB 移动硬盘、USB 数码相机、USB 键盘等,几乎所有的PC 外设都有相应的USB 接口的产品。一时间,USB 成为了最为流行的PC 接口标准,嵌入式软硬件工程师也将USB 应用到自己的设计之中;

iv)2000 年4 月,Compaq、HP、Intel、Lucent、Microsoft、NEC 和Philips 等7 家公司联合发布USB 2.0 协议规范版本。新版本最大的变化就是将USB 的总线速度一下子提高到了480Mbps,即开始支持高速设备(High-Speed)。由此,USB 翻开了新的一页,彻底打破了USB 应用在视频等高速传输领域中的速度瓶颈,大大扩展了USB 应用领域。从低速的鼠标、键盘,到全速的硬盘,再到高速的视频传输,USB 几乎无所不能,可以应用到任何一种PC 外设中。USB 取代串口、并口等传统PC 接口只是个时间问题了。

从问世,到协议规范2.0 版本,USB 不断在自我完善,走向成熟。从普通计算机用户,计算机工程师,到硬件芯片生产厂商,都已经完全认可了USB。厂商对于USB 的硬件和软件支持的也越来越完备,现在开发一个USB 外设产品,所需要投入的成本和时间大大降低了,几年前是没有办法做到这一点的。但是,随着USB 应用领域的逐渐扩大,人们对于USB的期望也越来越高,希望USB 能应用在各种计算机领域中,尤其是在移动通讯领域中,希望能通过PDA 等移动设备来直接和USB 外设通信,使得USB 能应用在没有PC 的领域中。非PC 应用领域? 这正是USB 一个致命的弱点。USB 的拓扑结构中居于核心地位的是Host,任何一次USB 的数据传输都必须由Host 来发起和控制,所有的USB 外设都只能和Host 建立连接,任何两个外设之间或是两个Host 之间无法直接通信。而目前,大量的扮演Host 角色的是个

电脑PC。因此,“如何将USB 应用到嵌入式领域?如何实现USB 点对点的通讯?”等问题,开始进入了USB 开发者的讨论议程。正是在这种新的需求之下,USB On-The-Go 应运而生。2001 年12 月,USB On-The-Go 版本协议1.0 正式发布(简写为OTG 1.0)。

USB On-The-Go,顾名思义,是USB 应用在便携式移动设备领域中,因此,我们姑且将其翻译为“便携式USB”(或者“移动USB”),简记成USB OTG。OTG 1.0 作为USB 2.0的补充协议,基本上符合USB 2.0 规范。但是,有所不同的是符合USB OTG 的设备完全抛开了PC,既可以作为Host,也可以作为外设,而与另一个OTG 设备直接实现点对点(Pear to Pear)通讯。因此,这类OTG 设备也被成为是双角色设备(Dual-Role Device,简称为DRD),并能够根据接入设备的特性和数据传输过程中的情况,自动切换为Host 或是外设。例如,一个OTG 数码相机可以直接与OTG 打印机相连,打印图片;两个OTG MP3 播放器可以之间连在一起,实现音乐文件的共享。需要注意的是,USB OTG 设备保留了作为普通USB 2.0 外设的功能,可以作为外设直接连接到PC Host 上。

2 USB OTG 设备的功能

USB OTG 定义了两种设备类型:双角色设备DRD 和单外部设备(Peripheral-OnlyDevice,简称为POD)。DRD 具备Host 和外设的两种功能,POD 基本与外设功能近似,因此,我们这里着重讨论DRD。

要成为一个USB Host,必须具有存储外设驱动程序、提供足够的USB 端口电流和A型Host 插座的能力。而其所要实现的基本功能包括3 部分:

i)管理和控制总线,包括提供USB 端口电源管理;

ii)检测外设的接入和断开,枚举(Enumerate)设备;

iii)初始化总线上所有的数据包传输等活动。

同样,USB 外设也具有特定的功能:

i)响应USB Host 的命令,执行又Host 发起的发送设备描述符、传送数据等活动;

ii) 远程唤醒处于挂起(Suspend)状态的主机;

iii) 提供自供电(Self-Powered)电源(如果所需电流大于总线能提供的限额,选此项)。

DRD 具有USB Host 和外设的双重功能,但是,正因为具有了双重的角色任务,DRD又必须有切换角色等新的任务和功能,因此,我们可以用(1)式来简单的定义OTG DRD的功能:

DRD = Host + Peripheral + OtherLL(1)

由(1)式可知,完整的USB OTG DRD 还必须具有除了通常的Host 和外设之外的一些功能,当然DRD 的Host 功能是有限的,不要求完全实现PC Host 的功能,不过,这正符合了嵌入式领域中对USB 灵活性和便携性的要求:

i)作为外设,支持12Mbps 的全速模式(或者是480Mbps 的高速模式);

ii)作为Host,也支持全速模式(或者是低速和高速模式);

iii)产生目标外设列表(Targeted Peripheral List,简写为TPL);

iv)会话请求协议(Session Request Protocol,简写为SRP);

v)主机交流协议(Host Negotiation Protocol,简写为HNP);

vi)有且仅有1 个Mini-AB 插座;

vii)至少为总线提供8mA 的电流;

viii)能及时将总线活动状态通知给设备用户。

3 USB OTG 体系的软件描述

3.1 OTG 配置描述符

在OTG 系统处于枚举过程时,A 设备就会发送GetDescriptor 命令给B 设备(开始处于外设状态的设备),要求B 设备发送OTG 配置描述符。配置描述符包括3 个字节,分别是bLength、bDescriptorType 和bmAttributes。

3.2 会话请求协议(Session Request Protocol,简写为SRP)

SRP 用于B 设备向A 设备请求建立会话和使用总线。

一般,OTG 系统中的A 设备采用的是电池供电,因为这些设备是便携式和可移动的,这就决定了,OTG 系统电源管理是非常重要的一个专题。因此,为了节省OTG 系统的电源开支,OTG 2.0 规定A 设备在没有总线活动的时候,可以关掉VBus 上的电源。这样,当一个B 设备连接到A 设备上之后,就要初始化SRP,并发送给A 设备,请求A 设备在VBus上提供电流支持,进而进行通信。OTG 中,DRD 可以作为A 设备,也可以作为B 设备,因此,DRD 必须支持初始化SRP 和响应SRP;POD 只能作B 设备,所以,只能初始化SRP。SRP 中,B 设备有两种方式可以向A 设备发送请求,要求建立SRP:一种是数据线脉冲(Data-Line Pulsing),一种是VBus 脉冲(VBus Pulsing)。具体的脉冲方法在OTG 2.0 中有详细的说明。任何一个A 设备只要求能响应一种SRP 方式,而B 设备必须能初始化两种SRP方式。这样,当B 设备先初始化一种SRP,而A 设备无法响应是,则B 设备就要用另一种SRP 方式。

3.3 主机交流协议(Host Negotiation Protocol,简写为HNP)

HNP 用于初始B 设备与初始A 设备之间切换Host 角色。

OTG DRD 具有Mini AB 型插座,因此,DRD 既可作为Host,也可以作为外设。而在某一个OTG 连接中,这个DRD 到底是作Host(即A 设备),还是作外设(即B 设备),则要根据接入的另一个OTG 设备来定。如果,接入的是OTG POD,那么,毫无疑问,这个DRD 肯定是作A 设备。但,如果接入的是另一个DRD,那么这两个DRD 之间,就可以HNP来随时切换Host 角色。

一次完整的HNP 流程是这样的:B 设备希望控制总线,成为Host;在A 设备发送了SetFeature 命令后,B 设备就可以来请求控制总线;A 设备挂起总线,通知B 设备可以控制总线;B 设备发送信号,断开与A 设备的连接;A 设备启动D+信号线上的上拉电阻,将D+置高;这样,A 设备就开始作为外设,放弃了总线的控制权,B 设备成为了Host;在B设备完成了对总线的控制,就需要上拉其上的D+电阻,放弃总线控制权。当然,这一系列的HNP 活动,不仅仅是通过信号线上的电平变化来实现的。电平变化只是一种标志,真正内部对总线的控制权的变化,则要通过软件来实现。

3.4 OTG 的软件结构

OTG 的软件结构包括3 部分:

i)OTG 系统硬件驱动:包括SRP 和HNP;

ii)OTG 系统外设软件:实现标准的USB 类,来实现特定的USB 外设功能;

iii)OTG 系统Host 软件:包括Host 驱动程序、操作系统支持软件、支持外设的类库。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • usb
    usb
    +关注

    关注

    59

    文章

    7432

    浏览量

    258104
  • 数据传输
    +关注

    关注

    9

    文章

    1526

    浏览量

    63562

原文标题:USB是如何从PC扩展到嵌入式的?USB OTG发展及协议标准

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    #硬声创作季 #嵌入式 #USB USB总线

    嵌入式USB总线
    学习电子知识
    发布于 :2022年11月02日 21:06:35

    嵌入式U盘读写模块USB118

    读写数据呢?答案是肯定的。USB118系列嵌入式U盘读写模块提供了通过串口或并口读写U盘的简单途径, 由此结合单片机的串口或数据总线就可以实现U盘的文件读写 。  USB118系列U盘
    发表于 07-24 14:46

    USB嵌入式产品中的应用

    的应用值得一提的是,在某些嵌入式产品上支持USB device模式的接口,可以允许用户在不使用网卡、HUB的情况下,直接通过USB 连接线嵌入式
    发表于 03-28 12:26

    嵌入式Linux下USB蓝牙设备驱动

    设备驱动,从而有助于蓝牙设备在嵌入式领域广泛应用。【关键词】:蓝牙驱动;;USB设备;;MP;;嵌入式Linux【DOI】:CNKI:SUN:GWDZ.0.2010-02-025【正文
    发表于 04-24 09:30

    基于嵌入式系统USB接口的虚拟示波器的开发与实现

    基于嵌入式系统USB接口的虚拟示波器的开发与实现
    发表于 08-06 12:59

    采用TTL串口的嵌入式USB主机系统设计

    数据输入输出标准接口,所以在USB数据存储方面一直得不到很好的普及。业界和用户的需求使得嵌入式USB主机的研究成为USB研究领域的一个新的方向。  本文介绍了一种基于TTL串口的USB主机系统,通过
    发表于 04-09 07:00

    怎么利用ARM7来实现嵌入式USB

    USB设备都只能与主机建立连接。不仅如此,软件复杂性以及较高的功率要求,使得人们对嵌入式设备中使用USB的兴趣与日俱增。嵌入式USB结合
    发表于 11-06 08:15

    如何利用嵌入式ARM9实现USB设计

    S3C2440A特点基于嵌入式ARM9的USB设计与实现
    发表于 02-26 06:37

    为什么要开发嵌入式USB主机?如何设计嵌入式USB主机?

    为什么要开发嵌入式USB主机?非PC应用领域?如何设计嵌入式USB主机嵌入式
    发表于 04-26 06:11

    嵌入式系统是怎样应用到企业中去的?

    请问嵌入式系统是怎样应用到企业中去的?
    发表于 04-27 06:18

    请问在嵌入式应用中怎样去实现USB

    嵌入式应用中USBOTG控制器的功能特性是什么?在嵌入式应用中怎样去实现USB
    发表于 04-27 06:25

    请问如何将Swift语言应用到MCU开发中?

    请问如何将Swift语言应用到MCU开发中?
    发表于 02-11 07:30

    基于TTL串口的嵌入式USB主机系统的设计和实现

    本文介绍了一种基于TTL 串口的嵌入式USB 主机系统。介绍了该系统的硬件实现,以及USB 主机的底层驱动软件的实现,并简要介绍其在数据采集
    发表于 08-15 08:23 29次下载

    嵌入式ARM9的USB设计与实现

    嵌入式ARM9的USB设计与实现 随着嵌入式系统的广泛应用,各种小型终端需要开发出与外界联系的USB接口。目前,常用的技术有两种。基于单片
    发表于 05-11 14:44 1442次阅读
    <b class='flag-5'>嵌入式</b>ARM9的<b class='flag-5'>USB</b>设计与<b class='flag-5'>实现</b>

    嵌入式USB MiniHost系统设计与实现

    设计并实现了一个嵌入式USB主机系统的硬件和软件,用于解决USB设备不能脱离PC主机的问题。并在设计的硬件和软件基础上利用嵌入式C语言编制了
    发表于 04-12 15:04 47次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>USB</b> MiniHost系统设计与<b class='flag-5'>实现</b>