我们有一个USB附件,它使用Open accessory Protocol将USB数据包发送到Android智能手机上运行的应用程序。当Android设备运行Jelly Bean (JB)或Ice Cream Sandwich (ICS)时,这非常有效,但在运行Kitkat的设备上会出现以下错误:
1) App接收不到附件发送的数据包。由于某些原因,设备上的低级USB接口不会向应用程序提供这些数据包。2)发送到App的数据包有时是损坏的或不完整的,例如,我们看到损坏的数据包或部分发送的数据包。
我们现在已经修改了我们的附件软件,以确保每个USB数据包都以64字节的倍数传输。这在JB或ICS上不是必需的,但对Kitkat接口做了一些改进。但我们仍然遗漏了大部分数据包。
有没有人有过通过AOAP接口到Kitkat的经验?有没有人在与Kitkat的USB数据通信方面遇到了问题,而这些问题并没有出现在Jelly Bean或Ice Cream三明治中?
发布于 2014-11-17 22:22:42
我猜你是在全速配置下运行的。如果是这样的话,你的bMaxPacketSize将是64字节。在发送bMaxPacketSize倍数的数据包后,USB批量传输需要零长度数据包(ZLP)才能结束通信。Check out this link。此解决方案可能适用于问题1。
你也在使用USB音频类吗?将等时终结点的bMaxPacketSize与为此终结点的管道分配的空间的for进行比较。看看它是否与批量传输出的Endpoint管道重叠。一些安卓手机的音频类bMaxPacketSize被定义为364字节,这足以达到44.1 than的采样频率。理想情况下,只需要大约192个字节就可以做到这一点。一些主机USB驱动程序可能只保留了256个字节,并且它们在枚举管道时可能没有查看bMaxPacketSize。所以一定要注意这一点。我曾经面对过这个问题。Nexus的bMaxPacketSize为364字节。也许这就是数据损坏的原因。
https://stackoverflow.com/questions/26511281
复制相似问题