|
stm32 передать в ком поток 49мБит, в какую сторону думать? |
|
|
|
Nov 24 2017, 19:55
|
Местный
  
Группа: Свой
Сообщений: 366
Регистрация: 5-09-06
Из: Санкт-Петербург
Пользователь №: 20 107

|
Уважаемые,
до этого меня устраивала скорость около 4 мбит на f405 через usb fs. сейчас возникла необходимость передавать в комп примерно 50-60 мбит.
Я накапливаю эти данные в проц через 2 SPI и система работает следующим образом: * ОСи нет. * каждые 16мс по одному SPI накапливается 8*8*16*2 = 4кБайт * по второму 3*2*960*16 = 92160 байт. оба SPI синхронизированы, поэтому я знаю когда мне надо данные вычитывать и передавать. И вот по этому событию (прерыванию от дма) я хочу передавать данные в комп.
Принимать от компа данные... ну может байт 60 раз в секунду.
Поток, который надо (92160 + 4096)*8*62.5 = 48.128 мегабит (теоретически) + еще чуть-чуть.
Необходимо выбрать транспорт. * USB FS отпадает. Хотя и хорошо работает вплоть (я пробовал) до 4мБит. * Поскольку мне необходимо использовать двойной буфер + буфер для отправки данных, то мне нужно минимум 300к памяти. * А это только Н7. * поскольку у меня места мало, то могу использовать только 100 или (хуже) 144 -х ногие корпуса. А в них нет USB HS. * Внешний PHY для USB HS у меня плохо влезает, конфликтует с другими девайсами и сильно по корпусу раскидан. За сим: * Я думаю в сторону изернета. * из доступных примеров я нашел только реализацию на LAN1820/1842. Там тоже все ноги по корпусу раскиданы, но его я смог его развести. * но я не нашел внятных примеров как оно работает.
Поскольку у Н7 косяк - нет физики HS, то, похоже, хоть и с внешним MII, ETH выигрывает.
За сим вопросы: 1. LwIP без оси работает? Надеюсь, что да. 2. Если да, то операция записи в сокет сколько за раз данных проглотит? (в BSD машинах оно может втянуть в ядро сразу все за один вызов write() или send() а потом само передавать) 3. Если оно в таком виде работает, то можно ли в LwIP, открыть сразу 2 сокета (разные порты) и типа слушать их чем-то типа select() ? 4. И вообще, 50МБит получится?
Я проискал посмотрел, но кроме общих слов ничего внятного не нашел...
Заранее благодарю.
|
|
|
|
|
 |
Ответов
|
Nov 25 2017, 13:37
|
Местный
  
Группа: Свой
Сообщений: 366
Регистрация: 5-09-06
Из: Санкт-Петербург
Пользователь №: 20 107

|
Цитата(jcxz @ Nov 25 2017, 15:37)  Обработку IP до уровня UDP можно и самому написать, без сторонних костылей. Без DHCP. можно. Но! 1. надо быстро. 2. надо еще заморочиться с драйвером физуровня. на компе, винде, сырые сокеты простыми способами не поддерживаются. Так кто-нибудь вообще пробовал?
|
|
|
|
|
Nov 25 2017, 14:47
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
QUOTE (diwil @ Nov 25 2017, 15:37)  можно. Но! 1. надо быстро. 2. надо еще заморочиться с драйвером физуровня.
на компе, винде, сырые сокеты простыми способами не поддерживаются.
Так кто-нибудь вообще пробовал? Я просто оставлю это здесь.
Bootcore.zip ( 13.33 килобайт )
Кол-во скачиваний: 50На самом деле это tftp-бутлоадер для LPC1768. В нем есть ARP, ICMP (на пинг отвечает) и UDP (ибо сам tftp по UDP бегает). Переделываете под свои нужды всякие InitEMAC()/ETH_Out() и отпиливаете все, что в ветке switch(udp.tftp_rq.opcode), ибо это уже TFTP. Крайне сложная цепочка функций SendUDP -> SendIP -> ETH_Out - вот это Ваше все будет. Для красоты не забудьте выбросить там лишнее копирование. Ну а по поводу настоящего прибора - у меня тут многоканальный аудиоинтерфейс живет на Ethernet'е (проц LPC1768/100МГц), 16 каналов на вход, 16 на выход, 48кГц, 32 бита. Т.е. 25Мбит/с в каждую сторону. По TCP живет, шлет данные в обе стороны один раз в миллисекунду, с полноценной реализацией Fast Retransmit в обе стороны, так что джиттер в случае потери пакета не превышает 500мкс. И до 100% загрузки процессора там очень и очень далеко.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Nov 25 2017, 20:45
|
Местный
  
Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551

|
QUOTE (Rst7 @ Nov 25 2017, 16:47)  Ну а по поводу настоящего прибора - у меня тут многоканальный аудиоинтерфейс живет на Ethernet'е (проц LPC1768/100МГц), 16 каналов на вход, 16 на выход, 48кГц, 32 бита. Т.е. 25Мбит/с в каждую сторону. По TCP живет, шлет данные в обе стороны один раз в миллисекунду, с полноценной реализацией Fast Retransmit в обе стороны, так что джиттер в случае потери пакета не превышает 500мкс. И до 100% загрузки процессора там очень и очень далеко. А можно несколько вопросов о приборе? По ходу повествованиия: 1) 16 каналов обе стороны я полагаю аналоговые, что то типа 16 канального пульта? Как вы их сделали? На кристале только один I2S. 2) Используется TCP, на ум приходит только линуксовый ДЖЕК с возможностью работать по сети. С какой хостовой ос работает ваше устройство? Какой протокол используете? 3) Джиттер меньше 500 мкСек. Т.е. 1 мсек буферизация на передающей стороне, 1-2 мсек буферизация на приемной. В обе стороны латенси около 6 мсек? Вы измеряли реальное значение? 4) Хотелось бы узнать ситуацию со свитчами. Вы наверняка проверяли такую конфигурацию. 5) Как реализовали синхронизацию аудио кварцев? Я время от времени развлекаюсь со своим ЮСБ аудио и в качестве эксперимента делаю синхронный режим. По моим прикидкам время синхронизации с приличным подавлением джиттера ЮСБ СОФ получается около 1-2 сек. Что очень много. Я пару лет работал на АВИД, пилили АВБ аудио платформу. Избыточное решениея для домашних поделок, к тому же работающее только под макосью, условно работающее под линукс и напрочь отсутствующее в мире виндовс. Механизм синхронизации был черезвычайно сложный, совершенно неподъемный для самоделок. Заранее спасибо за ответы. Я вижу вы модератор, может вынесете мой пост в отдельную тему? Не хочется мешать топикстартеру.
|
|
|
|
|
Nov 25 2017, 21:11
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
QUOTE (ig_z @ Nov 25 2017, 22:45)  А можно несколько вопросов о приборе? По ходу повествованиия: 1) 16 каналов обе стороны я полагаю аналоговые, что то типа 16 канального пульта? Как вы их сделали? На кристале только один I2S. Да, там 8 двухканальных АЦП и 8 двухканальных ЦАПов. 8 штук I2S прекрасно изготавливаются при помощи DMA-пересылки с GPIO (просто 8 бит порта рядом) в ОЗУ с последующим довольно хитрым алгоритмом транспонирования битовой матрицы (не в лоб). QUOTE 2) Используется TCP, на ум приходит только линуксовый ДЖЕК с возможностью работать по сети. С какой хостовой ос работает ваше устройство? Какой протокол используете? ASIO-драйвер я написал, так что любой Windows-хост с любой DAW. Причем, т.к. транспорт там TCP, все катается в user-space без всяких драйверов в ядре. Два сокета открывается и без лишних обрамлений в каждом льются данные в нужную сторону. Хотел сначала один сделать, но оказалось, что в винде Fast Retransmit правильно работает только если данные идут только в одну сторону. Потому два сокета. QUOTE 3) Джиттер меньше 500 мкСек. Т.е. 1 мсек буферизация на передающей стороне, 1-2 мсек буферизация на приемной. В обе стороны латенси около 6 мсек? Вы измеряли реальное значение? Именно так и есть. 1(вход)+1(обработка в DAW)+2(вывод)=4мс чистая цифровая задержка плюс задержки в фильтрах АЦП/ЦАП, набегает еще почти миллисекунда в сумме. Задержка измерена и рапортуется в DAW для точного позиционирования треков при записи через LoopBack-кабель. QUOTE 4) Хотелось бы узнать ситуацию со свитчами. Вы наверняка проверяли такую конфигурацию. Главное в этом деле - применять самые тупые свичи. Тогда задержка в нем всего лишь на время передачи пакета в сети. В моей инфраструктуре сейчас так - комп гигабитом в свич, а в него - два таких устройства, одно - 16in/16out, второе - просто 8out, сами устройства, понятное дело, 100М. Что гигабитная карта, что гигабитный свич - обычная дешевка, купленная в первом попавшемся компьютерном магазине. QUOTE 5) Как реализовали синхронизацию аудио кварцев? Я время от времени развлекаюсь со своим ЮСБ аудио и в качестве эксперимента делаю синхронный режим. По моим прикидкам время синхронизации с приличным подавлением джиттера ЮСБ СОФ получается около 1-2 сек. Что очень много.
Я пару лет работал на АВИД, пилили АВБ аудио платформу. Избыточное решениея для домашних поделок, к тому же работающее только под макосью, условно работающее под линукс и напрочь отсутствующее в мире виндовс. Механизм синхронизации был черезвычайно сложный, совершенно неподъемный для самоделок. Я не очень понимаю, о каких аудио-кварцах Вы говорите. В конкретно моем устройстве, которое 16/16, АЦП и ЦАПы тактируются одним и тем же MCLK/BICK/LRCK. В другом устройстве (которое чисто вывод) - просто цифровая PLL, причем с довольно малой постоянной времени в фильтре. Если никому не говорить, то никто из окружающих меня на студии золотоухих дьяволов не слышит никакого джиттера. QUOTE Заранее спасибо за ответы. Я вижу вы модератор, может вынесете мой пост в отдельную тему? Не хочется мешать топикстартеру. У меня нет полномочий именно в этом разделе. Надо попросить штатного модератора раздела, пусть разрежет ветку на две.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Nov 25 2017, 22:15
|
Местный
  
Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551

|
QUOTE (Rst7 @ Nov 25 2017, 23:11)  Да, там 8 двухканальных АЦП и 8 двухканальных ЦАПов. 8 штук I2S прекрасно изготавливаются при помощи DMA-пересылки с GPIO (просто 8 бит порта рядом) в ОЗУ с последующим довольно хитрым алгоритмом транспонирования битовой матрицы (не в лоб). То есть частота периферии кратна 48к. Красивое решение. QUOTE (Rst7 @ Nov 25 2017, 23:11)  ASIO-драйвер я написал, так что любой Windows-хост с любой DAW. Причем, т.к. транспорт там TCP, все катается в user-space без всяких драйверов в ядре. Два сокета открывается и без лишних обрамлений в каждом льются данные в нужную сторону. Хотел сначала один сделать, но оказалось, что в винде Fast Retransmit правильно работает только если данные идут только в одну сторону. Потому два сокета. А как ведет себя система, если нагрузить юзер спейс, к примеру тяжелыми дисковыми операциями? Можно пару слов о вашей аппаратной конфигурации? Я припоминаю, что сетевой товарищ Никков делал юсб асио драйвер в юзерспейсе и вроде проект размещен на гитхабе. А ваш драйвер доступен для использования? QUOTE (Rst7 @ Nov 25 2017, 23:11)  Именно так и есть. 1(вход)+1(обработка в DAW)+2(вывод)=4мс чистая цифровая задержка плюс задержки в фильтрах АЦП/ЦАП, набегает еще почти миллисекунда в сумме.
Я не очень понимаю, о каких аудио-кварцах Вы говорите. В конкретно моем устройстве, которое 16/16, АЦП и ЦАПы тактируются одним и тем же MCLK/BICK/LRCK. Я имею ввиду, что на устройстве есть аудио кварц -> 48к умноженное на что то. Это определяет MCLK и скорость выборки буфера для ЦАП. Очевидно, что сетевая подсистема должна поставлять данные в выходной буфер размером 48*2 семпла так, чтобы не было недопереполнения. Т.е. нужна система синхронизации хоста и девайса. Например в юсб есть три приличных способа синхронизации: синхронный - когда хост ведущий, а девайс синхронизирует свою частоту по СОФам. Асинхронный, когда девайс яслется мастером, а хост подстраивает свой стрим под девайс, используя для синхронизации либо явный канал либо стрим от АЦП. Собственно вопрос был как вы решили эту проблему
|
|
|
|
Сообщений в этой теме
diwil stm32 передать в ком поток 49мБит Nov 24 2017, 19:55 Студент заборстроительного Обсуждалось уже много раз. Поиском что ли не умеет... Nov 24 2017, 20:02 diwil Цитата(Студент заборстроительного @ Nov 24 20... Nov 24 2017, 20:29 esaulenka У меня в закладках есть вот эта тема: https://elec... Nov 24 2017, 20:13 mantech Цитата(diwil @ Nov 24 2017, 22:55) За сим... Nov 24 2017, 21:23 diwil Цитата(mantech @ Nov 25 2017, 00:23) Каки... Nov 24 2017, 21:34  Огурцов через spi пролезет, через ethernet и lwip - вряд л... Nov 24 2017, 21:59  jcxz Цитата(diwil @ Nov 24 2017, 23:34) а каки... Nov 24 2017, 22:03 Огурцов Цитата(diwil @ Nov 24 2017, 19:55) поскол... Nov 24 2017, 22:06 _pv а FT2232H не справится ли с задачей забирания данн... Nov 24 2017, 23:09 jcxz Цитата(_pv @ Nov 25 2017, 01:09) и вместо... Nov 24 2017, 23:14  _pv Цитата(jcxz @ Nov 25 2017, 06:14) А в чём... Nov 24 2017, 23:44   jcxz Цитата(_pv @ Nov 25 2017, 01:44) драйвера... Nov 25 2017, 12:37    _pv Цитата(jcxz @ Nov 25 2017, 19:37) Диаграм... Nov 25 2017, 13:14 diwil Цитата(diwil @ Nov 24 2017, 22:55) 2. Есл... Nov 25 2017, 10:35 AVR Цитата(diwil @ Nov 25 2017, 13:35) или ес... Nov 25 2017, 11:12  Огурцов Цитата(AVR @ Nov 25 2017, 12:12) UDP прот... Nov 25 2017, 18:28 _pv Цитата(diwil @ Nov 25 2017, 20:37) Так кт... Nov 25 2017, 13:55 jcxz Цитата(diwil @ Nov 25 2017, 15:37) Так кт... Nov 25 2017, 14:20  diwil Цитата(Rst7 @ Nov 25 2017, 17:47) Я прост... Nov 25 2017, 15:17 Rst7 QUOTE о! то что нужно.
примного благодарен
Н... Nov 25 2017, 20:39 Rst7 QUOTE То есть частота периферии кратна 48к. Красив... Nov 25 2017, 23:15
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|