【问题标题】:Do x86 processors transmit/receive data in little endian format over USB?x86 处理器是否通过 USB 以小端格式传输/接收数据?
【发布时间】:2013-02-18 16:34:37
【问题描述】:

我正在为 Xilinx FPGA 编写异步通信控制器,我想省去弄清楚 x86 处理器发送数据的顺序的麻烦。

在主机端,我使用的 C 程序使用以下教程:http://slackware.osuosl.org/slackware-3.3/docs/mini/Serial-Port-Programming

另外,发送数据时是否可以在大端和小端之间切换格式?

【问题讨论】:

  • USB 是串行总线,帧中每个字段的最低有效位首先发送。您赋予数据字段中(最多)8192 位的含义完全取决于您。
  • @HansPassant 我已经有一个一次读取一个字节的模块。我想我真正要问的是,如果我发送一个整数,读取字节的顺序是什么?
  • 在 CPU 级别,没有位顺序之类的东西。字节是并行传输的,这意味着将同时有效地读取一个字节的所有位。 CPU 和设备之间需要有一些东西来将位组装成字节,反之亦然。
  • 不是由主机或架构决定的。数据包/有效负载的某些部分由协议确定,它们是什么,字节序无关紧要。除此之外,如果有一个有效载荷,那么它就是你选择放在那里的任何东西。如果您已经完成了系统工程,那么它也是非字节序的,有效负载布局已定义并且双方都简单地符合该有效负载。

标签: x86 embedded serial-port usb


【解决方案1】:

USB 是小端序。

但是,如果您正在谈论通过 USB 串行端口发送字节,那么它完全取决于程序发送它们的顺序。

在英特尔系统上,除非最初打算与大端系统通信,否则我希望(但想验证)它们首先发送最低有效字节。

【讨论】:

    【解决方案2】:

    如果您谈论的是异步通信(串行端口),那么字节顺序取决于您在该串行端口上运行的协议。 x86 是 little-endian,因此发送整数字节的程序会先发送 LSB。

    由于您通常会使用某种协议来发送数据,因此您需要使用该协议的字节顺序。

    因此,您的答案取决于向您发送数据的 x86 程序实际将使用什么。

    【讨论】:

      【解决方案3】:

      对于串行通信协议,字节顺序由协议定义,而不是由处理器定义。 USB 是小端序。请参阅 USB 3.0 规范here 的第 7.1 节。

      您拥有 x86 的事实是无关紧要的。可以编写在 x86 上运行的串行通信驱动程序以符合小端或大端协议。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-18
        • 2010-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-08
        相关资源
        最近更新 更多