USB Host Mode на XOOM — проблемы со связью с устройством порта CP2102 Virtual Com

Я пытаюсь написать приложение для Android, используя режим хоста USB на Motorola Xoom с Android версии 3.1 (сборка HMJ37), используя новые API-интерфейсы USB хоста Android для связи через USB с устройством, которое использует интерфейс виртуального COM-порта Silicon Labs CP2102 ( USB-последовательный мост). В качестве руководства я использовал пример приложения AdbTest с сайта разработчика Android.

У меня возникли проблемы с чтением символов, отправленных на стороне UART CP2102. Однобайтовые массовые передачи работают нормально, но не в том случае, если я запрашиваю более 1 байта данных. Я знаю, что данные там, потому что я могу отправить команду GET_COMM_STATUS с помощью USBDeviceConnection.controlTransfer() и увидеть, что в буфере InQueue на CP2102 есть символы. Однако, когда я запрашиваю более одного байта из конечной точки входа с помощью функций USBRequest.queue() (асинхронная) или SBDeviceConnection.bulkTransfer() (синхронная), возвращаемый буфер содержит недопустимые символы.

Вот что работает:

  1. намерение срабатывает при вставке и удалении USB-устройства
  2. приложение запускается, находит USB-устройство, соединения, интерфейсы, конечные точки и утверждает интерфейс
  3. можно настроить CP2102, отправив команды USBDeviceConnection.controlTransfer()
  4. Символы успешно передаются со стороны UART CP2102 путем отправки данных в конечную точку вывода с помощью USBRequest.queue().
  5. Отдельные символы (разделенные временными задержками), поступающие на сторону UART CP2102, успешно считываются из массовой передачи в конечной точке с использованием синхронных или асинхронных команд.

Проблемы возникают, когда я пытаюсь отправить символы подряд. Однако я отправляю данные только со скоростью 9600 бод на стороне UART и не отправляю так много символов, чтобы заполнить буфер на CP2102.

Я использую Xoom в качестве источника питания для устройства. Я получаю одинаковое поведение на двух разных XOOM. Я использую комплект подключения камеры Motorola для MOTOROLA XOOM в качестве хост-кабеля USB.

Может ли кто-нибудь дать мне рекомендации о том, как сделать эту работу? Или API-интерфейс USB-хоста Honeycomb 3.1 на XOOM еще не очень стабилен?


person LS Rhodes    schedule 20.06.2011    source источник


Ответы (1)


убедитесь, что вы проверяете количество возвращенных байтов, поэтому вы не будете потреблять больше данных из буфера, чем фактически возвращенные данные. также проверьте, не обращаются ли к буферу более одного потока, что может привести к повреждению возвращаемых данных, если доступ к буферу не синхронизирован должным образом.

person Mustafa Naser    schedule 26.02.2013