XOOM上的USB主机模式 - 与CP2102虚拟通信端口设备通信时出现问题

时间:2011-06-20 16:14:46

标签: android usb android-3.0-honeycomb

我正在尝试使用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. 意图在插入和删除USB设备时触发
  2. 应用程序启动,查找USB设备,连接,接口,端点和声明接口
  3. 可以通过发送USBDeviceConnection.controlTransfer()来配置CP2102 命令
  4. 通过使用USBRequest.queue()将数据发送到Out Endpoint,字符成功传输到CP2102的UART端。
  5. 使用同步或异步命令从群发传输端点成功读取CP2102的UART侧的单个字符(由时间延迟分隔)。
  6. 当我尝试在连胜中发送字符时出现问题。但是,我只是在UART端以9600波特率发送数据,并且没有发送这么多字符,我填满了CP2102上的缓冲区。

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

    任何人都可以给我指导如何使这项工作?或者XOOM上的Honeycomb 3.1 USB主机API还不是很稳定吗?

1 个答案:

答案 0 :(得分:0)

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