Android - 与FTDI芯片和d2xx驱动程序的USB通信

时间:2014-06-27 17:19:24

标签: android usb ftdi

我正在开发一个android(Android 4.2)项目,其中我从通过usb连接的设备读取数据。在连接的传感器板上,我有一个FTDI芯片组,所以我正在使用他们的d2xx驱动程序。

开始时一切正常:我能够通过USB连接获取数据并进行处理。我在运行于AsyncTask的循环中执行此操作,其中我向传感器板写入采集命令以告知其采集数据。收到所有数据后,将对其进行处理。然后将采集命令再次写入传感器板,并获取并处理新数据。

但是过了一段时间(它似乎不是一个固定的时间),设备无法从传感器板读取任何其他数据。请注意,此处传感器板没有故障,因为我已经能够使用执行相同处理但在笔记本电脑上运行的程序对其进行彻底测试。

如果我去检查DDMS日志,我总是会发现,当我的应用程序无法接收数据时,会发出以下调试消息:

Tag: extractReadData::
Text: written != totalData, written= 16384 totalData=196

(文本中的数字并不总是相同)。 和

Tag: ProcessBulkIn::
Text Buffer is full, waiting for read....

在这些消息之后,除了看到几个处理线程结束之外,我得到的唯一Log(反复直到我停止应用程序):

Tag: UsbRequestJNI
Text: init

在正常操作期间,我从应用程序的不同部分(采集,数据处理等)接收日志消息,但是一旦我收到我报告的消息,这些消息就不再出现了。

我知道当我通过USB连接进行通信时,正常操作期间会显示标记为UsbRequestJNI的日志消息,特别是当我执行写入命令时(向传感器板发送获取和发送一些数据的命令)。因此,在收到这两条消息之后,我的应用程序似乎被卡住了,试图写入传感器板。

我不知道其他两条消息来自哪里。我最好的猜测是它们来自d2xx FTDI驱动程序或来自某些底层USB主机库。

任何人都可以帮助我理解:

  • 这两条消息的来源
  • 出现
  • 的原因
  • 如何解决导致他们的问题

非常感谢任何可以投入的人。

最佳, 利玛

1 个答案:

答案 0 :(得分:2)

我后来发现(通过与FTDI的支持团队讨论这个问题)我遇到的问题是由Android的FTDI驱动程序中的错误引起的。关于锁定线程的事情。
截至今天(2014年10月22日),这些漏洞尚未解决。此外,类似的错误会影响Windows CE7 ARM版本的驱动程序。