Решил я значить забацать свой собственный vendor specific девайс на сабже. Раскурил RM аж дым из ушей повалил. Непонятки начались с VBUS. Устройство будет self-powered, а в RM пишут что для конф-ии:
3. Program the VBUSBSEN bit in the OTG_FS_GCCFG register to enable VBUS sensing
in “B” device mode and supply the 5 volts across the pull-up resistor on the DP line.
Вопрос: обязательно ли сие действие? На плате от starterkit VBUS выведен на отдельный пин проца, я смотрел по документации он используется для FSMC и EVENTOUT. Куда вобще этот VBUS заводится?
Пока завел 21м битом в GCCFG в режим NOVBUSSENS, т.е. внутри всегда +3.3В.
Как дальше быть-то?
Отвечаю сам себе - все правильно сделал, VBUS'ом можно не пользоваться если не надо. В моём случае нужно только 2 сигнальных линии + хардварная подтяжка DP для коннекта.
Еще одна непонятка с STM: их бит ENUMDNEM, сигнализирующий о конце энумерации.В RM почему-то пишут что он отвечает за конец состояния USB reset
4. Wait for the USBRST interrupt in OTG_FS_GINTSTS. It indicates that a reset has been
detected on the USB that lasts for about 10 ms on receiving this interrupt.
Wait for the ENUMDNE interrupt in OTG_FS_GINTSTS. This interrupt indicates the end of
reset on the USB. On receiving this interrupt, the application must read the OTG_FS_DSTS
По сбросу понятно - инициализирую КТ0, обнуляю адрес, сбрасываю буферы приёма/передачи и т.д, это легко. Я как-то думал что он (ENUMDNEM) должен высвечивать прерывание по окончанию энумерации когда выбрана конфигурация, а по RM по этому прерыванию нужно настроить КТ0. Или не так?