eddy_em: (Default)
eddy_em ([personal profile] eddy_em) wrote2024-09-02 07:57 pm

USB-сниппет для STM32 F0/F1/F3

Собрал в одну кучу для разных линеек, чтобы можно было, не парясь особо (разве что для F2/F3 чуть руками надо будет подправить, т.к. там внутри одной линейки черт-те что творится), быстренько CDC поднимать — сниппет. А началось с того, что неделю назад, ковыряясь с multistepper, наткнулся на косяк с выводом справки (а там она жутко длинная). Оказалось — проблема гонки: пока из суперлупа в буфер пишут, внезапно может возникнуть прерывание и попытаться этот буфер прочитать. Ввел блокировки — получилось. Правда, как я уже писал, пришлось таки использовать поллинг.
Скорость — почти 6Мбит/с. Выше — только если использовать двойную буферизацию. Но сел я эти три странички даташита читать, и понял, что нафиг оно мне не нужно. Разве что если вдруг когда-нибудь упрусь в то, что 6Мбод не хватает… А то ведь получается, что памяти надо в 2 раза больше выделять!
Кстати, насчет памяти: чуть застрял на своем сниппете, когда пытался на F103 запустить. Там дескрипторы отдавались, а вот только начнешь туда что-то писать, ошибка. Отладчик показал, что точки EP2/EP3 не инициализировались. И тут-то до меня дошло: ведь раньше я явно размер в байтах проверял, а сейчас этот размер указан для буфера, а потом он делится на 1 или 2 (в зависимости от того, выравнивание на 16 или на 32 бита используется). И несчастные 512 байт у F103 еще и надвое поделились, так что места элементарно не хватило. Очень уж кривой USB у STM32. Да и буфер какой-то дико мелкий: в том же Seven_CDCs (7 CDC устройств в одном микроконтроллере) используются все 8 конечных точек. И по-хорошему, даже с эмуляцией interrupt-EP на 7 CDC нужно минимум 640 байт. При том, что зачастую 256 байт буфера обобщены с CAN. И зачастую выравнивание идет на 32 бита, т.е. даже буфер 1кБ без использования CAN превращается в несчастные 512 байт. Ну и какая ж тут двойная буферизация еще?..

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org