【问题标题】:USB Host Mode on XOOM - problems with communicating with a CP2102 Virtual Com port deviceXOOM 上的 USB 主机模式 - 与 CP2102 虚拟 COM 端口设备通信时出现问题
【发布时间】:2011-09-18 20:21:22
【问题描述】:

我正在尝试使用带有 Android 版本 3.1(构建 HMJ37)的摩托罗拉 Xoom 上的 USB 主机模式编写一个 Android 应用程序,使用新的 Android 主机 USB API 通过 USB 与使用 Silicon Labs CP2102 虚拟 COM 的设备进行通信端口接口(USB 到串行桥接器)。我一直使用 Android 开发者网站上的 AdbTest 应用程序示例作为指导。

我在读取 CP2102 UART 端发送的字符时遇到问题。单字节批量传输工作正常,但如果我要求超过 1 个字节的数据则不行。我知道数据在那里,因为我可以使用 USBDeviceConnection.controlTransfer() 发送 GET_COMM_STATUS 命令,并查看 CP2102 上的 InQueue 缓冲区中有字符。但是,当我使用 USBRequest.queue()(异步)或 SBDeviceConnection.bulkTransfer()(同步)函数从 In Endpoint 请求多个字节时,返回的缓冲区包含无效字符。

以下是有效的:

  1. intent 在插入和删除 USB 设备时触发
  2. 应用程序启动,查找 USB 设备、连接、接口、端点和声明接口
  3. 可以通过发送USBDeviceConnection.controlTransfer()来配置CP2102 命令
  4. 通过使用 USBRequest.queue() 将数据发送到 Out Endpoint,字符成功地从 CP2102 的 UART 端发送出去。
  5. 使用同步或异步命令从批量传输 In Endpoint 成功读取 CP2102 UART 端传入的单个字符(由时间延迟分隔)。

当我尝试连续发送字符时出现问题。但是,我只在 UART 端以 9600 波特率发送数据,并没有发送太多字符,以至于我填满了 CP2102 上的缓冲区。

我使用 Xoom 作为设备的电源。我得到相同的行为 两种不同的 XOOM。我正在使用用于 MOTOROLA XOOM 的摩托罗拉相机连接套件作为我的 USB 主机电缆。

谁能给我指导如何完成这项工作?还是 XOOM 上的 Honeycomb 3.1 USB 主机 API 还没有真正稳定?

【问题讨论】:

    标签: android usb android-3.0-honeycomb


    【解决方案1】:

    确保检查返回的字节数,这样您从缓冲区中消耗的数据不会超过实际返回的数据。 还要检查是否有多个线程正在访问缓冲区,如果对缓冲区的访问未正确同步,则可能会损坏返回的数据。

    【讨论】:

      猜你喜欢
      • 2012-01-30
      • 2013-11-02
      • 2013-02-17
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      相关资源
      最近更新 更多