Разбираюсь с реализациями USB в различных контроллерах ch32v. Как ни странно, наиболее вменяемой оказалась самая "сложная", USB-HS в ch32v307.
А вот с USB-OTG (это которое в v103 - v307 с точками фиксированного размера по 64 байта, оно же иногда называется в документации USB-FS) до конца разобраться не получается до сих пор. Вопросы вызывает работа с изохронными точками, реализация микрофон + колонка.
Отдельно OUT точка вроде бы работает: возникают прерывания, передаются данные, все в порядке.
Отдельно IN точка работает, но криво: прерывания не возникают, но если привязаться к SOF или просто отсчитывать время, передавать данные можно. Это первый вопрос: возможно ли получать прерывания от изохронной IN-точки? В принципе, не критично, всегда можно воткнуть костыль.
А вот если попытаться задействовать одновременно IN и OUT точки, даже с разными номерами, все ломается. Перестают приходить OUT прерывания. Причем если не запущено программ, работающих с микрофоном, то есть не генерируются IN запросы, то OUT снова начинают работать. В смысле без перепрошивки, отключил запись звука, пошло воспроизведение. И наоборот, если сначала запустить воспроизведение, то перестает реагировать на UEPx_TX_LEN: что один раз было записано в DMA, то и передается. А иногда вместо данных отправляется какой-то мусор. То ли точки друг на друга влияют, то ли сам модуль USB сходит с ума. По памяти пересекаться не могут: там отдельные буферы по 2кБ каждый, адрес DMA после инициализации не меняю. По регистрам тоже: я разные номера точек тестировал. Да и с не-изохронными вроде не конфликтуют. И это основной вопрос: как заставить работать Isochronous-OUT + Isochronous-IN вместе?
Остальные режимы вроде бы работают нормально: энумерация проходит, дескрипторы передаются, MSD и CDC ведут себя как надо. Аудиодескрипторы тоже правильные - на USB-DEV и USB-HS проверял. Со стороны компа wireshark тоже ничего вразумительного не говорит. Существующие примеры вроде вот этого тоже смотрел. Но там либо IN, либо OUT, а по отдельности-то они и у меня работают.
-
- Смех смехом, но на такие вопросы, вполне себе, отвечает жэлезный болван. Лучше, китайцкий, ессно. - mse homjak(Сегодня, 10:26)