You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Здравствуйте. Спасибо за прошивку с кастомным USB стеком. Докачал частично STM32CubeF1 для CMSIS/Core/Include и Device/ST и собрал бинарник в 20 КиБ, который шьётся и работает на bluepill с загрузчиком BMPBootloader (смещение 0x08002000).
Максимальная скорость передачи данных обусловлена ограничениями APB1 36MHz, на которой висят USART2, USART3, и 36M/16=2250000 бод. Однако есть же ещё и APB2 72MHz с USART1 (и SPI1), так что 72M/16=4500000 бод.
У меня вопрос, почему для первого самого быстрого порта в проекте изначально заложен маленький буфер пакетной памяти?
Когда я гоняю loopback тесты через cbrake/linux-serial-test, да или даже rx-only, tx-only, то по осциллографу на USB FS D+/D- (и USART Tx/Rx) видно, что прошивка справляется без пропусков. При этом, как только открываю второй порт на прослушивание тишины (да и третий тоже), хост начинает опрашивать несколько эндпоинтов, и по Nak вставляет паузу в 20 микросекунд. Это снижает скорость передачи данных с 450000 Байт/с чуть ли не в два раза. 12MHz/8*0.000020s=30 байт (без учёта служебных бит формата пакетов Bulk).
Окей, поменял размеры местами, с 32-64-64 на 64-64-32, пересобрал и залил через dfu-util, стало работать без заиканий даже с занятым USART1 и прослушиваемыми USART2,3. Также потом проверил external loopback с перемычкой между контактами USART2_RX <=>USART3_TX, гоняет данные на 2250000 нормально. Все три порта на максимальной частоте одновременно, конечно, не работают.
Прошу пересмотреть выделенные размеры wMaxPacketSize и bEndpointSize. Я заметил по прошлым Issue, что USB FSDEV PMA пакетная память практически вся уже занята, но я не предлагаю 64-64-64. Также я не предлагаю делать несимметричные буферы, как это сделано в других проектах, то есть USART Rx (DMA) 64 для непрерывного приёма, но USART Tx 32 или даже 16 (без DMA?) для медленного интерактивного ввода с клавиатуры -- пускай пока работает как есть.
Вопрос вдогонку, а что если прошить это на GD32F103CB, которая может работать на 108 96 MHz с делителем USB48 DIV2, предварительно подкрутив настройки PLL? Будет ли max baudrate APB2 96M/16=6000000 baud? Мой случай применения примерно такой, что мне нужны нескольно медленных UART портов (два) в одном флаконе, но ещё я веду захват трассировки TraceSWO NRZ-encoded, и этот проект отлично подходит.
The text was updated successfully, but these errors were encountered:
Здравствуйте. Спасибо за прошивку с кастомным USB стеком. Докачал частично STM32CubeF1 для CMSIS/Core/Include и Device/ST и собрал бинарник в 20 КиБ, который шьётся и работает на bluepill с загрузчиком BMPBootloader (смещение 0x08002000).
Максимальная скорость передачи данных обусловлена ограничениями APB1 36MHz, на которой висят USART2, USART3, и 36M/16=2250000 бод. Однако есть же ещё и APB2 72MHz с USART1 (и SPI1), так что 72M/16=4500000 бод.
У меня вопрос, почему для первого самого быстрого порта в проекте изначально заложен маленький буфер пакетной памяти?
bluepill-serial-monster/usb_descriptors.c
Lines 14 to 19 in 7ca8ddb
Когда я гоняю loopback тесты через cbrake/linux-serial-test, да или даже rx-only, tx-only, то по осциллографу на USB FS D+/D- (и USART Tx/Rx) видно, что прошивка справляется без пропусков. При этом, как только открываю второй порт на прослушивание тишины (да и третий тоже), хост начинает опрашивать несколько эндпоинтов, и по Nak вставляет паузу в 20 микросекунд. Это снижает скорость передачи данных с 450000 Байт/с чуть ли не в два раза. 12MHz/8*0.000020s=30 байт (без учёта служебных бит формата пакетов Bulk).
Окей, поменял размеры местами, с 32-64-64 на 64-64-32, пересобрал и залил через dfu-util, стало работать без заиканий даже с занятым USART1 и прослушиваемыми USART2,3. Также потом проверил external loopback с перемычкой между контактами USART2_RX <=>USART3_TX, гоняет данные на 2250000 нормально. Все три порта на максимальной частоте одновременно, конечно, не работают.
Прошу пересмотреть выделенные размеры wMaxPacketSize и bEndpointSize. Я заметил по прошлым Issue, что USB FSDEV PMA пакетная память практически вся уже занята, но я не предлагаю 64-64-64. Также я не предлагаю делать несимметричные буферы, как это сделано в других проектах, то есть USART Rx (DMA) 64 для непрерывного приёма, но USART Tx 32 или даже 16 (без DMA?) для медленного интерактивного ввода с клавиатуры -- пускай пока работает как есть.
Вопрос вдогонку, а что если прошить это на GD32F103CB, которая может работать на
10896 MHz с делителем USB48 DIV2, предварительно подкрутив настройки PLL? Будет ли max baudrate APB2 96M/16=6000000 baud? Мой случай применения примерно такой, что мне нужны нескольно медленных UART портов (два) в одном флаконе, но ещё я веду захват трассировки TraceSWO NRZ-encoded, и этот проект отлично подходит.The text was updated successfully, but these errors were encountered: