恐怕答案并不那么简单。
根据链接的数据表和相关文档,TUSB3410 不是固定功能器件。它基本上是一侧的 USB 设备,另一侧的 UART,以及中间的 MCU 应用处理器。为了让该芯片做任何有用的事情,它必须加载一个固件应用程序来控制数据如何从一侧移动到另一侧。因此,您可以在固件中定义数据如何通过 USB 移动(中断传输、批量传输等),这将控制 Android 应用程序如何与其交互。
此外,该芯片似乎不支持烧录固件,它总是从 I2C EEPROM 或 USB 主机外部加载固件。如果您的设备设置上还没有 EEPROM,您可能会遇到困难,因为 Android USB API 并没有真正让您的应用程序在枚举过程中访问设备,这是固件需要的时候如果从主机下载,则发送。它还需要您检测您的设备两次(一次使用标准引导代码 VID/PID,一次在固件文件接管并且设备重新连接到总线后)。
如果您只是在寻找一个简单的嵌入式实现来将 UART、SPI 等数据输入到 Android 应用程序中,那么您最好使用 FTDI FT311 之类的东西,它实现了 Open Accessory 协议并附带库代码来帮助您从等式的两边开始:http: //www.ftdichip.com/Products/ICs/FT311D.html
编辑:根据您的评论
所以如果你的设备符合CDC USB Device Class,那么基本上有3个关注点:
- 每个设备都有一个用于配置的“端点 0”,并且可以在 Android API 中使用该
controlTransfer()
方法进行访问。CDC 设备使用此端点来更改波特率、停止位等项目。
- 像 VCP 这样的 CDC 设备有两个接口,一个用于通信,一个用于数据。数据接口(通常枚举为第二个)有两个批量端点(一进一出),通常在其中传输串行数据。
bulkTransfer()
您可以使用该方法或使用异步在这些端点上来回传输数据UsbRequest
。
作为起点,不妨看看这个开源项目的源代码,它使用主机 API 实现了 CDC 基础知识。您应该能够很好地了解如何从那里滚动您自己的驱动程序(特别是 CdcAcmSerialDriver):
http://code.google.com/p/usb-serial-for-android/