STM32F411 Мне нужно отправить много данных по USB с высокой скоростью

Я использую STM32F411 с библиотекой USB CDC, и максимальная скорость для этой библиотеки составляет ~ 1 Мбит / с. Я создаю проект, в котором у меня есть 8 микрофонов, подключенных к линии АЦП (эта часть работает нормально), мне нужен 16-битный сигнал, поэтому я повышаю точность, добавляя первые 16 сигналов из одной линии (АЦП дает только 12-битный сигнал). битовый сигнал). В моем проекте мне нужно 96 тыс. 16-битных семплов для одной строки, то есть 0,768 млн сигналов для всех 8 строк. Для этого сигнала требуется 12000 КБ, но STM32 имеет только 128 КБ SRAM, поэтому я решил отправить около 120 с данными по 100 КБ за одну секунду.

Вывод: мне нужно ~11,72 Мбит/с, чтобы отправить это.

Проблема в том, что я не могу этого сделать, потому что CDC USB ограничил меня до ~ 1 Мбит / с.

Вопрос как увеличить скорость USB до 12Mb/s для STM32F4. Мне нужна подсказка или библиотека.

Или, может быть, мне следует настроить «аудиоустройство» в CubeMX?


person B. Pieta    schedule 08.10.2018    source источник
comment
Для аудиоустройства было бы гораздо разумнее использовать изохронную передачу и спецификацию аудио USB.   -  person Colin    schedule 08.10.2018
comment
Что такое Мб? Бит или байт?   -  person 0___________    schedule 08.10.2018
comment
@P__J__ Я имею в виду бит, бит всегда с нижней буквой. Мб = мегабит; МБ = мегабайт. Так что в этой задаче мне нужно 12 мегабит в секунду или 1,5 мегабайта в секунду   -  person B. Pieta    schedule 08.10.2018
comment
bit is always with lower letter. Mb = mega bit; MB = mega bajt. Но вы не используете это соглашение: This signal needs 12000Kb space, but STM32 have only 128Kb SRAM. Вы непоследовательны и, пожалуйста, не учите меня.   -  person 0___________    schedule 08.10.2018
comment
@P__J__ извините, вы правы. Я здесь не для того, чтобы кого-то обидеть, так что расслабьтесь :). STM32 имеет 128 КБ SRAM. Итак с начала: одна строка - 96к 16-битных сэмплов, 8 строк - 1500Кб; 15 пакетов по 100 КБ каждый для отправки в секунду (это неправда, т.к. по линии АЦП я получаю только 12-битные отсчеты и надо повышать точность, но это не главная проблема). Так можно ли отправлять со скоростью 1,46484375 МБ/с по USB в STM32? Если нет, то у меня другой вопрос, если я изменю количество семплов с 96к на 48к, можно ли будет отправлять со скоростью 0,732421875МБ/с? И еще раз извините, если обиделись :).   -  person B. Pieta    schedule 08.10.2018
comment
Вы можете отправлять около 0,8 МБ/с, используя стандартный класс CDC FS STM32. Я делаю это на своем осциллографе.   -  person 0___________    schedule 08.10.2018


Ответы (1)


Если маленький b означает байт в вашем вопросе, ответ: это невозможно, так как ваш микро имеет FS USB, максимальная скорость которого составляет 12 Мбит в секунду.

Если это означает биты, ваше предположение о скорости 1 Мбит (бит) неверно. Но вы не доберетесь до 12-мегабитной передачи полезной нагрузки.

Вы можете попробовать написать (только если b означает бит) свой собственный класс, но я боюсь, что вы не найдете готовой библиотеки. Вам также нужно будет написать драйвер устройства на хост-компьютере.

person 0___________    schedule 08.10.2018
comment
Я имею в виду немного. поэтому мне нужно 12 МБ/с или 1,5 МБ/с - person B. Pieta; 08.10.2018
comment
@B.Pieta Ваше предположение CDC о 1 Мб на 100% неверно. Но вы все равно не получите 100% пропускной способности полезной нагрузки - person 0___________; 08.10.2018