STM32 F4 композитное USB-устройство с 2-мя оптовыми интерфейсами, правильная конфигурация FIFO

Я использовал STM32CubeMX версии 4.22 для генерации USB-устройства MSC и изменил его, чтобы иметь 2 пользовательских массовых интерфейса. Интерфейс 0 имеет 2 БОЛЬШИХ конечных точки IN и OUT. Интерфейс 1 имеет две альтернативные настройки. Alt Setting 0 имеет 0 конечных точек, а Alt Setting 1 имеет 2 BULK конечных точки IN и OUT.

Конечные точки определяются как:

определить INTERFACE0_IN_EP 0x81

определить INTERFACE0_OUT_EP 0x01

определить INTERFACE1_IN_EP 0x82

определить INTERFACE1_OUT_EP 0x02

Мое устройство перечисляет нормально, и интерфейс 0 работает, как ожидалось. Хост отправляет запрос Set Interface 1, Alt Setting 1, затем я активирую конечные точки Interface 1 (0x82 и 0x02).

Интерфейс 1 не работает должным образом, я уверен, что он как-то связан с моими настройками FIFO. Я получаю dataOut Call для INTERFACE1_OUT_EP, но когда я пытаюсь записать INTERFACE1_IN_EP, хост получает только 3 байта назад, в то время как я пишу 24 байта. Сразу после этой транзакции я получаю запрос CLEAR FEATURE для конечных точек интерфейса 1.

Вот мои текущие настройки FIFO: HAL_PCDEx_SetRxFiFo (& hpcd_USB_OTG_FS, 0xC0); // 80 HAL_PCDEx_SetTxFiFo (& hpcd_USB_OTG_FS, 0, 0x40); // EP0 HAL_PCDEx_SetTxFiFo (& hpcd_USB_OTG_FS, 1, 0x80); // EP1

HAL_PCDEx_SetTxFiFo (& hpcd_USB_OTG_FS, 2, 0x40); //<- Если я не добавлю эту строку, Хост не может получить ничего обратно, После добавления этой строки хост получает только 3 байта на INTERFACE1_IN_EP.

Пожалуйста, помогите мне правильно настроить эти параметры FIFO, чтобы второй интерфейс мог работать должным образом.

1 ответ

В STM32 доступно только 0x140 x 4(=1280 байт) для USB FIFO. Но вы использовали 0x180(=c0 + 40 + 80) x 4(=1536 байт).

Другие вопросы по тегам