USB系统概述

  • 格式:docx
  • 大小:41.02 KB
  • 文档页数:7

下载文档原格式

  / 7
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2. 1 主机是主控者 主机是唯一的主控者,这是最基本的 USB 概念。在 USB 系统中仅有一个支配者,那就是主 机。 USB 设备将会等待主机的请求而加以响应。因此, USB 是无法在其间相互进行信息传 递的, USB 并不支持点对点的拓扑结构。 然而,存在一种情况似得 USB 设备无需主机介入即可发出开始信号,那就是有主机将设备 置入低功耗带起模式之后, 设备可发出远程唤醒信号, 这是唯一的一种设备可以开始发送信 号情况。除此情况外,除非主机发送设备请求,然后设备才会加以响应。 利用这种以主机为中心的模式, USB 实际工程师应当特别留心产品的成本,可以设计尽量 低成本的外围设备, 而将复杂的部分尽量放置在 pc 主机一侧。 当然,如果将 USB 结构设计 为点对点的方式, 则每个 USB 设备可能需要性能更好, 相对来说设计产品的成本也将更高。 2.2USB 方向 由于主机总是总线的主控者, 这样就很容易记得 USB 的方向: out 是指从主机到设备, 而 in 是指设备到主机。 Fx2 的术语采用这个约定。例如,一个端点发送数据到主机,则定义为 in 端点。刚刚开始接触,可能会不太理解,为什么 fx2 发送数据到主机反而定义为 in 呢?其 实 in 和 out 主要是从哪个方向看的问题。相应地, fx2 通过从主机 out 端点接收数据。

2.3 令牌和 pid 码 USB 数据交换中,包含了特殊程序代码所定义的数据包,即所谓的信息包 id 或 pid 。Pid 表 示何种信息包正在传送信息。表 2, 2 列出了四种 pid 类型 图 2.1 所示为 USB 传输示意图。信息包 1 为 out 令牌,用来指示 outpid 。Out 令牌表示数据 从主机传动到总线。信息包 2 包含了数据,用来指示 data1pid 。信息包 3 为握手包,在此, 设备会送出 ackpid 给主机,以表示正确无误的接受主机所传送的数据。 同样,在图 2.1 中,用户可以看到第二个数据交换是由另一个 out 令牌 4 开始的,而后在跟 随更多的数据 5.在这一时刻用户使用了另一个 data0pid 。最后,设备再一次以握手包 6ackpid 来说明已经成功的传送来数据。 当工作在全速方式时,每一个 out 传输都发送 out 数据(即使此时设备因为忙而无法接收数 据)。当工作在高速方式时,通过采用新的 pingpid 来补偿 USB 带宽的微小的闲置。主机向 out 端点首次发送短 ping 令牌,询问外围设备是否有空间接受 out 数据,只有当 ping 令牌得 到 ack 的回答,主机才发送 out 令牌和数据。 USB 设计者采取非常周密的错误检测,这也就是为什么会采用两个 datapid ( data0 和 data1) 的原因。正如前面提到的一样, ack 握手是用来指示主机和外围设备已经无错误的接收了数 据(包最后的 crc 字段是用来检测错误的) 。但是,如果握手包本身在传输过程中就已经扭 曲或损坏又当如何呢?

为了检测这个错误,可在每一侧(主机和外围设备 )维护 datatoggle 位,用于在每个包传输时

加以 togle 位的状态,将会与到达伴随数据的pid 相比较,如 data0 或 data1。当送出

数据时,

主机和外围设备交替发送data0pid 和 data1pid,通过内部 toggle

位的状态与

datapid 相比

的方式,主机和外围设备就能检测到错误

或损坏的握手包Setup 令牌仅供控制传输使用,其中放了 8 字节的前导数据,用于主机的设备请求进行译码。

在全速的方式下,sof( start of frame )令牌每 1ms 产生一次,用来表示USB 帧的到达;而在高速的方式下,每一个USB 帧中包含8 额 sof 令牌。

有 4 种握手 pid 用来表示USB 传输的状态:

Ack ( acknowledge)表示一个令牌或数据包接成功。

Nak(negative acknowledge )表示接收机当前太忙或没有资源来处理令牌或数据

包。他表示

的是“忙,再试一次” ,不要误解为nak 表示的是错误。它不是表示发生了错误,

会通过无响应来表示发生了错误。外围设备可对除了setup 令牌以外的任何事物处理USB 通常

nak 握

手。

Stall (停滞)表示发生了一些无法预料的错误(可能是通信错误导致,也可能是主机与外围

设备软件之间无法配合的原因) 。设备发送 stall 握手包用来表示不了解这个设备的请求,这

可能是在外围设备端发生了错误, 或者是主机试图尝试存取一些不存在的资源这个状态有点

儿像“停止( halt )”,但是情况要好些,因为此时 USB 会提供从 stall 恢复( recover )的方

法。

Nyet ( not yet )表示的意思与 ack 相同,即数据接收无误,但是,它表示端点还没有准备好接受“另外的” out 传输。 Nyet pid 仅在高速方式时有效。 此外,

pre ( preamble ——前导) pid 置于低速( 1.5mb/s ) USB 传输之前,而 EZ-USB FX2

只支持全速( 12mb/s )和高速( 40mb/s )的 USB 传输方式,它将忽略 pre 包以及其后跟随 的低速传输。 1. 从主机接受数据

为了发送数据到 USB 外围设备,主机会在数据之后发出 out 令牌包。如果外围设备还有容 量空间,并能无错误的接受数据,就会回复 ack ,让主机知道。如果处在忙状态,则以 na k 来取代传输。假如发现了一个错误, 则不传输任何消息。 对于后两种情况, 主机会在稍后传 输数据。 2. 发送数据到主机 USB 设备不会“自然的”将数据传输到主机上,为了传输, EZ-USB FX2-USBfx2 的固件或 外部逻辑任何时刻都能装载数据到 fx2 端点缓冲区 “保持 (arm )”。然而,直到主机向 fx2 端 点发出 in 请求,这些数据才不被传输。如果主机一直不发 in 令牌,则这些数据是否还保存 在 fx2 的端点缓冲区就不一定了。 2.4USB 帧 对于所有 USB 设备, USB 主机通过每 1ms 传输一个 sof (帧起始)包来作为时间基准。 So f 包包含对每一帧进行累加记数的 11 位计数值。 当前的帧计数值 [0— 207] 可在任何时刻从 fx 2 内部寄存器中读到。 在高速( 480m/s )方式下,每 1ms 帧被分为 8 个 125us “微帧”,每一个微帧都由 sof 包作为 前导,而帧计数值。为了保持当前的微帧计数值 [0-7],fx2 提供了一个可读的微帧计数器。 只要 fx2 接收到一个 sof ,他它就生成一次中断请求(全速方式时,每 1ms 一次;高速方式 时,每 125us 一次)。这个 sof 中断非常有用,例如可以用于同步端点数据传输等。

2.5USB 传输类型