|
178 / 33 / 17
Регистрация: 02.02.2014
Сообщений: 373
|
|
Передача 2,5 Мбит/с с ПК на STM3215.01.2022, 11:45. Показов 5712. Ответов 57
Метки нет (Все метки)
Привет всем! Мне нужно организовать передачу потока данных в 2,5 мбит/с с компа под Windows на STM32 F072B Disccovery с минимальной задержкой - т.е. где-то близко к 1 мс.
STM32 должен принимать данные с ПК и управлять пинами (по сути просто тупо последовательно пихать полученные данные в GPIO, без обработки, но с очень точными интервалами порядка 400 нс). Всё работает примерно так: 23 мс на получение данных, потом 7 мс на выдачу через GPIO, потом снова 23 мс на получение данных, 7 мс на выдачу и т.п. - и так около 30 раз в секунду. Исхожу из того, что процессор у нас одноядерный, а во время сеанса управления пинами в 7 мс мы должны соблюдать жесткий тайминг. Поэтому мы не можем использовать прерывания во время этих 7 мс, и должны весь прием успевать делать во время пауз в 23 мс. Итого у нас есть 23 мс для того, чтобы принять около 83 кбит данных. Т.е. этот поток в 2,5 мбит/с не является равномерным, на самом деле это поток в 3,6 мбит/с, который должен прерываться на 7 мс 30 раз в секунду, чтобы дать контроллеру слить информацию в пины. Во-первых, самое главное: способна ли вообще данная плата такой поток принять на вход? Хватит ли ей производительности? Хранить долго ничего не надо, памяти вроде хватает, а вот процессор и шины - я не уверен. Если не хватит, то какую мне следует взять для решения этой задачи? Во-вторых, я пока вижу несколько вариантов решения задачи: 1) Написать вручную USB драйвер под Windows и по USB же принимать данные на STM32. Мне тут порекомендовали хороший фреймворк для работы с USB на STM32. 2) Передавать данные по UDP, прикрутив каким-нибудь образом Ethernet на STM32, либо как-то организовав сетевое соединение через USB (так вообще можно?), или передавать на малину (у неё есть Ethernet), а с неё уже на STM32, распараллеливая информацию по нескольким пинам, если одного мало. 3) Использовать вторую STM32 (есть) для параллельного приема данных, и через пины перекидывать на первую STM32. Опять же, как именно закидывать данные в STM32? В случае второго контроллера у нас уже будет не 23 мс на получение данных, а 30 мс, но нам всё равно надо как-то их туда забросить. 3) Использовать какой-нибудь известный, классический подход, про который я не знаю, но который все используют в таких ситуациях (он есть?) Подскажите, пожалуйста, как оптимальнее решить задачу.
0
|
|
| 15.01.2022, 11:45 | |
|
Ответы с готовыми решениями:
57
Разгон CAN быстрее 1 Мбит/с ? (bxCAN STM32, CAN FD чипы) Ноутбук асер аспире v 5 531, при заявленной скорости 500 мбит,выдаёт 180-240 мбит скачать 180-350 мбит загрузить Беспроводная передача на 1900 метров, больше 5 мбит |
|
Нарушитель
|
|||
| 16.01.2022, 17:45 | |||
|
Не нужно кормить российских барыг!!!!111 Добавлено через 3 минуты А, можно, конечно, генерить это ногодрыгом через DMA (в BSRR или даже ODR), но скорость будет еще ниже. И оперативки больше понадобится.
1
|
|||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
||
| 16.01.2022, 18:56 | ||
|
1
|
||
|
Нарушитель
|
|
| 16.01.2022, 19:07 | |
|
Ну, в принципе, если взять 144-ногий МК, то можно будет, наверное, пару полных свободных портов найти. А то и вообще там FSMC будет.
Только ТС говорил, что ему не важна скорость - там будет тупая подсветка, т.е. можно и вообще хоть 1000 светодиодов на один канал таймера повесить, все равно глаз не заметит смены, а если каждый светодиод больше 1 секунды будет непрерывно гореть, проблем вообще не будет.
1
|
|
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
||
| 16.01.2022, 19:25 | ||
1
|
||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
| 17.01.2022, 09:36 | |
|
... присоединюсь к вышесказанному, по поводу буферизации в памяти и работы через несколько каналов DMA - все это "круто" только, на первый взгляд. А по факту - типовая работа МК. В вашем случае код во время работы буферов вообще ничем занят не будет - разве что копированием данных, которое тоже можно реализовать на DMA.
Есть сомнения, что USB CDC эффективно будет и стабильно будет работать на 2,5 мбита. У меня на STM32F103 удавалось получить в районе 1,5МБит/с, но МК еще что-то там делал с другими интерфейсами (CAN'ами). А в Вашем случае МК по-проще, все-таки. В альтернативу этому можно предложить внешний USB CDC на базе МК FTDI. Они на столе стабильно работали и на 4,8 МБит/с, но я не уверен, что такие режимы эффективно будут работать со всеми озвученными ОСями. Есть разница. И ... просто в альтернативу предложу многоцелевые МК для USB: https://ru.mouser.com/datashee... 541393.pdf Такие штуки широко получили известность в виде Saleae Logic анализатора, на котором, как я понял, решение о направлении потока данных решается на уровне драйвера. В тандеме с EEPROM (куда заливается конфигурация драйвера) они просто идеально ложатся под задачу ТС. PS: а почему не рассматривается задача на базе RPi? Ведь у нее на борту в принципе все есть для запуска - и управление можно организовать, и все что необходимо...
1
|
|
|
Нарушитель
|
||
| 17.01.2022, 09:52 | ||
|
Но честные 12Мбит на 103 получить можно. А т.к. он помощней 0x2, то и напрягать его во время передачи данных можно активней. Как я уже говорил, при двойной буферизации единственное требование — чтобы МК успевал заполнять второй буфер. А скорость отправки коротких буферов всегда будет максимальной. А если у вас аппаратный USB работает медленней, чем внешний через USART, то вы явно что-то неправильно делаете! У вас точно ничего лишнего в обработке прерываний USB нет? Или вообще поллинг?
1
|
||
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,088
|
||
| 17.01.2022, 11:06 | ||
|
1
|
||
|
|
|||
| 17.01.2022, 12:48 | |||
|
1
|
|||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
||||
| 17.01.2022, 13:53 | ||||
даже с двумя канами (на F105) можно (хотя, я давно не перепроверял. Там же были прерывания на одном векторе для USB и CAN1/2... То есть это надо смотреть. Ноги ремапятся, если в этом возникает подозрение)PS: для USB CDC и другого, на F103 и F105 стоят внешне похожие но внутри и со стороны API немного разные блоки. И оба их я использовал USB FS, может быть если на HS с внешним интерфейсом - было бы быстрее. В моем случае я сканил два CAN и пихал пакеты в VCP (в тексте). В итоге иногда их скорости (по CAN) были выше возможностей FIFO, хотя FIFO очень хорошо мог поддерживать пиковые нагрузки. Ах да, совсем забыл - я для более высокой скорости на F105 еще выносил функции по парсингу и отправке в RAM, потому что latency FLASH сильно тормозила на этом коде. А 64кб рама в F105 было достаточно и для этого тоже
1
|
||||
|
178 / 33 / 17
Регистрация: 02.02.2014
Сообщений: 373
|
||||||||||
| 18.01.2022, 07:07 [ТС] | ||||||||||
|
Если мне хватит ОЗУ, то я правильно понял, что мне достаточно взять буфер с данными, и, условно говоря, скормить указатель на него в какой-то регистр, то эта штука автоматически по таймеру выполнит все переключения GPIO с равными интервалами? Вот протокол: https://duino.ru/svetodiodnaya... l-ws2812b/ Если что - я в контроллерах новичок, поэтому могу не совсем правильно понимать суть некоторых вещей.
0
|
||||||||||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
||
| 18.01.2022, 08:01 | ||
|
начнем с предыстории вопроса: Откуда взялось 30 Гц? От американского телевидения 30 кадров в секунду, или 60 полукадров, частота там сети 60 Гц. в Европе, в России частности, соответственно 25 и 50 Гц а в кино использовался 24 кадра в секунду звуковое и 16 кадров в секунду "немое" все это сделано для того чтобы предать плавность движения в кадре, типа поднял руку, ударил мяч,... нужна такая частота? движения в ленте 30 светодиодов за 1 секунду глаз просто не заметит
1
|
||
|
178 / 33 / 17
Регистрация: 02.02.2014
Сообщений: 373
|
||
| 18.01.2022, 08:26 [ТС] | ||
|
https://www.google.com/url?sa=... egUIARCJAg только в более суровом виде. То, что показывает лента, должно быть синхронизировано с тем, что показывает дисплей. Если они будут показывать что-то разное, глаз это увидит. В моей ситуации OLEDы обновляются 120 к/с. Ленты физически на это не способны, они даже 60 не выведут. Поэтому идея в том, что мы анализируем каждый 4 кадр из тех, что идет на OLEDы, и потом подгоняем ленты под этот кадр. Дополнительное веселье состоит в том, что подсветку видит периферическое зрение, а оно гораздо чувствительнее к движению, чем желтое пятно на сетчатке.
0
|
||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
||||
| 18.01.2022, 08:37 | ||||
|
периферийное это палочки - шустрые они , но они черно-белое а цветное это колбочки, но они тормознутые так что попробуй: смени желтый цвет на синий, по яркости они примерно одинаковые, и смотри прямо на ленту а потом мимо(включится периферийное зрение) и найди частоту когда переключение заметно не будет
1
|
||||
|
178 / 33 / 17
Регистрация: 02.02.2014
Сообщений: 373
|
||||
| 18.01.2022, 09:01 [ТС] | ||||
|
https://www.youtube.com/watch?v=cognkytrQZQ Слепое пятно Добавлено через 2 минуты А что насчёт Ethernet/UDP на STM32? Насколько это хуже/лучше/сложнее/легче?
0
|
||||
|
Нарушитель
|
|||
| 18.01.2022, 09:50 | |||
|
Такого гигантского количества светодиодов для ambilight не нужно. Хватит одного на пять сантиметров. В общем, нет нужды делить все на секции: светодиодов будет немного, скорость небольшая, все можно посадить на один таймер. Ну, можно располовинить на два. И не придется замедлять скорость передачи данных, дрыгая ногами через DMA! Кстати, если там в протоколе не манчестерский код, а как у WS2815, то с ногодрыгом по DMA еще и извратиться придется: ведь для передачи 1 бита нужен будет не один такт таймера и один uint16_t, а три такта таймера, соответственно, и три uint16_t. Правда, если вешать параллельно 16 лент, то это таки даст экономию. Добавлено через 2 минуты Кстати, ТС, а как ты собираешься получать исходные данные для твоего ambilight? Самый простой способ — перехватывать данные, которые идут к монитору/телевизору по HDMI. Но там такая адова скорость, что придется отдельный МК заводить!
1
|
|||
|
178 / 33 / 17
Регистрация: 02.02.2014
Сообщений: 373
|
||||
| 18.01.2022, 10:26 [ТС] | ||||
это не совсем стандартный ambilight, светодиоды, в том числе, в разные стороны светить должны. По идее напрашивается мысль распределить ленты между 2-3 контроллерами.Есть довольно хороший способ через API DirectX 11 - прямо в видеопамяти можно получать текстурку, на которой виден весь рабочий стол. Поскольку экраны объединены средствами видеокарты в один виртуальный, с ним можно работать, как с единым целым. Добавлено через 1 минуту
0
|
||||
| 18.01.2022, 10:26 | |
|
Сетевая карта 1000 мбит, работает как 100 мбит Что лучше 10 Мбит Ростелекома(телефон) или 100 мбит кампусной сети(оптика) 10 Мбит/с вместо 100 Мбит/с Mikrotik RB751U-2HnD Упала скорость по Wi-Fi со 100 мбит до 10 мбит Передача цифр по USART stm32 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|