【发布时间】:2014-12-09 03:22:58
【问题描述】:
我正在尝试使用 ioctl 和 USBDEVFS_BULK(在 Android 上为原生)读取 USB。我正在使用的 USB 电缆包含一个 FTDI 芯片,并从一个 Arduino UNO 发送数据,它写入串行。
Android 上的写入似乎总是成功,但读取要么总是失败,要么成功完成几个条目,然后不断失败,并出现“值对于定义的数据类型而言太大”(75)。我正在使用这个设置进行简单的 ping 测试:在 Android 上写入一个字节,一个序列号; Arduino 读取字节并以相同的序列号回复。
我不完全确定这个错误在说什么。我理解它的方式是设备发送的数据多于我传递给 ioctl 的缓冲区可以容纳的数据。我确保我的 Arduino 只发回 1 个字节,我希望 FTDI 还能看到 2 个字节,总共 3 个字节。即使增加缓冲区大小似乎也不能解决问题。
char mReadData[3];
struct usbdevfs_bulktransfer bulkTransferRead = {
mReadEndpoint, // Endpoint
3, // Length in bytes
0, // Timeout (ms)
mReadData, // Data
};
ret = ioctl(mFd, USBDEVFS_BULK, &bulkTransferRead);
这是我在本地使用的代码。如果我尝试使用 Android/Java 代码进行读写(使用 bulkTransfer()),我会看到与读取相同的间歇性问题。在 Android 上的 Java 中,我确保在任何写入/读取之前执行以下操作:
1) 复位引脚 2) 设置波特率 3) 8N1
谁能帮我描述一下我对 FTDI/USB 的误解,或者解释一下这个关于“值对于定义的数据类型来说太大”的错误吗?
【问题讨论】:
标签: android serial-port usb ioctl ftdi