Мне не понравилась стандартная библиотека для USB под MSP430, поэтому я решил запилить свою (мне не нравится, что там в одну кучу слеплена низкоуровневая поддержка USB и реализация классов вроде CDC или HID, а поддержки Vendor Class и вовсе нет, я бы хотел сделать библиотеку, которая бы чисто реализовывала работу с модулем USB, а уже на её базе чтобы реализовывать всякие классы). Делаю это в рамках своего проекта по созданию USB-брелка на NRF24L01. Тестирую на MSP430F5529 Launchpad (потом, конечно же, соберу на МК послабее и подешевле, благо интерфейс USB у всех MSP430Fx5xx одинаковый).
Моя библиотека уже вполне хорошо работает с нулевой конечной точкой USB и обрабатывает всякие стандартные запросы. Таким образом хост может успешно получить все дескрипторы и определить девайс.
Проблемы начались, когда я начал реализовывать с помощью своей библиотеки USB CDC. Мне нужно работать с другими конечными точками, а они работать не хотят. Не приходит ни одного прерывания от них, хотя ту же INTERRUPT IN хост должен непрерывно опрашивать с частотой из дескриптора конечной точки.
Дескриптор позаимствовал из другого проекта, так что должен быть правильным.
Не нашёл ничего лучше чем выложить код на гит-хаб, ибо там много файлов. Ошибка может быть не обязательно в работе с MSP430, может быть и с самим протоколом USB, так что в тему приглашаются и те, кто не знает эти микроконтроллеры, код вроде постарался сделать достаточно простым и понятным.
https://github.com/KivApple/nrf24l01_dongle
P.S.: При подключении моего девайса в dmesg не появляется никаких ошибок (раньше было «failed to set dts/rts», когда я криво обрабатывал один setup-пакет).
UPD: Разобрался и теперь моя библиотека для работы с USB вполне юзабельна, как и реализация USB CDC. Можете использовать в своих проектах :-)