eddy_em: (Default)
[personal profile] eddy_em
В отличие от шуточной реализации (без особого функционального применения) семи CDC на STM32F103, на сей раз я решил сделать уже полноценную реализацию на F303 (выбор МК объясняется просто моей ленью: в "вундервафле" для LQFP-48 торчал F303, и я решил не менять на F072 (а на F103 такое не реализовать, т.к. у него CAN и USB одновременно не работают).
Довольно-таки долго мучился с багами: почему-то если размер буферов EP0 сделать 8 байт, ничего не работает (в смысле — дескрипторы высылаются, рукопожатие происходит, но вот обмена нет). Потом я наткнулся на то, что ведь у STM32F303CBT6 де-факто всего лишь 192 байта под буферы (из-за адресации uint16_t как uint32_t). Сделал буферы EP1..EP7 по четыре байта — наткнулся на баг: если я отсылаю больше 4 байт за раз, то в МК вообще ничего не приходит (возможно, в модуле CDC минимальный размер буфера привязали жестко к 8Б)! Сделал 8 байт — ОК. Потом снизил буферы EP0 до 16 байт (так работает), а т.к. появилась дополнительная куча памяти, то для остальных конечнВ отличие от шуточной реализации (без особого функционального применения) семи CDC на STM32F103, на сей раз я решил сделать уже полноценную реализацию на F303 (выбор МК объясняется просто моей ленью: в "вундервафле" для LQFP-48 торчал F303, и я решил не менять на F072 (а на F103 такое не реализовать, т.к. у него CAN и USB одновременно не работают).
Довольно-таки долго мучился с багами: почему-то если размер буферов EP0 сделать 8 байт, ничего не работает (в смысле — дескрипторы высылаются, рукопожатие происходит, но вот обмена нет). Потом я наткнулся на то, что ведь у STM32F303CBT6 де-факто всего лишь 192 байта под буферы (из-за адресации uint16_t как uint32_t). Сделал буферы EP1..EP7 по четыре байта — наткнулся на баг: если я отсылаю больше 4 байт за раз, то в МК вообще ничего не приходит (возможно, в модуле CDC минимальный размер буфера привязали жестко к 8Б)! Сделал 8 байт — ОК. Потом снизил буферы EP0 до 16 байт (так работает), а т.к. появилась дополнительная куча памяти, то для остальных конечных точек сделал буфер передачи 8Б, а буфер приема — 14Б.
Всего у меня 7 устройств: 0 - управление всякими разными вещами (сюда же можно настройку проксирования между USART'ами воткнуть), 1 - интерфейс отладки (туда всякое разное может сыпаться в большом количестве), потом 3 USART'а, "заглушка" (т.к. USART4 у F303CB отсутствует) и CAN-USB.

Из крупных косяков осталась невозможность определения отключения терминала: если "эмулятор PL2303" при этом получал сигнал BREAK и я мог установить переменную usbON в нуль, то здесь BREAK не приходит (опять, похоже, недоработка линуксового модуля CDC). В общем, понять, что интерфейс уже отключился, невозможно. Я даже вопрос на SO задал (если кто знает — ответьте там, бонусы себе заработаете).ых точек сделал буфер передачи 8Б, а буфер приема — 14Б.
Всего у меня 7 устройств: 0 - управление всякими разными вещами (сюда же можно настройку проксирования между USART'ами воткнуть), 1 - интерфейс отладки (туда всякое разное может сыпаться в большом количестве), потом 3 USART'а, "заглушка" (т.к. USART4 у F303CB отсутствует) и CAN-USB.

Из крупных косяков осталась невозможность определения отключения терминала: если "эмулятор PL2303" при этом получал сигнал BREAK и я мог установить переменную usbON в нуль, то здесь BREAK не приходит (опять, похоже, недоработка линуксового модуля CDC). В общем, понять, что интерфейс уже отключился, невозможно. Я даже вопрос на SO задал (если кто знает — ответьте там, бонусы себе заработаете).
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

May 2025

S M T W T F S
    123
45678910
11121314151617
1819202122 2324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 25th, 2025 11:29 pm
Powered by Dreamwidth Studios