реклама на сайте
подробности

 
 
> stm32 передать в ком поток 49мБит, в какую сторону думать?
diwil
сообщение Nov 24 2017, 19:55
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 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МБит получится?

Я проискал посмотрел, но кроме общих слов ничего внятного не нашел...

Заранее благодарю.





Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
diwil
сообщение Nov 25 2017, 13:37
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 366
Регистрация: 5-09-06
Из: Санкт-Петербург
Пользователь №: 20 107



Цитата(jcxz @ Nov 25 2017, 15:37) *
Обработку IP до уровня UDP можно и самому написать, без сторонних костылей. Без DHCP.



можно. Но!
1. надо быстро.
2. надо еще заморочиться с драйвером физуровня.

на компе, винде, сырые сокеты простыми способами не поддерживаются.

Так кто-нибудь вообще пробовал?
Go to the top of the page
 
+Quote Post
Rst7
сообщение Nov 25 2017, 14:47
Сообщение #3


Йа моск ;)
******

Группа: Модераторы
Сообщений: 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% загрузки процессора там очень и очень далеко.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
ig_z
сообщение Nov 25 2017, 20:45
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 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% загрузки процессора там очень и очень далеко.

bb-offtopic.gif
А можно несколько вопросов о приборе? По ходу повествованиия:
1) 16 каналов обе стороны я полагаю аналоговые, что то типа 16 канального пульта? Как вы их сделали? На кристале только один I2S.
2) Используется TCP, на ум приходит только линуксовый ДЖЕК с возможностью работать по сети. С какой хостовой ос работает ваше устройство? Какой протокол используете?
3) Джиттер меньше 500 мкСек. Т.е. 1 мсек буферизация на передающей стороне, 1-2 мсек буферизация на приемной. В обе стороны латенси около 6 мсек? Вы измеряли реальное значение?
4) Хотелось бы узнать ситуацию со свитчами. Вы наверняка проверяли такую конфигурацию.
5) Как реализовали синхронизацию аудио кварцев? Я время от времени развлекаюсь со своим ЮСБ аудио и в качестве эксперимента делаю синхронный режим. По моим прикидкам время синхронизации с приличным подавлением джиттера ЮСБ СОФ получается около 1-2 сек. Что очень много.

Я пару лет работал на АВИД, пилили АВБ аудио платформу. Избыточное решениея для домашних поделок, к тому же работающее только под макосью, условно работающее под линукс и напрочь отсутствующее в мире виндовс. Механизм синхронизации был черезвычайно сложный, совершенно неподъемный для самоделок.

Заранее спасибо за ответы. Я вижу вы модератор, может вынесете мой пост в отдельную тему? Не хочется мешать топикстартеру.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Nov 25 2017, 21:11
Сообщение #5


Йа моск ;)
******

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



QUOTE (ig_z @ Nov 25 2017, 22:45) *
bb-offtopic.gif
А можно несколько вопросов о приборе? По ходу повествованиия:
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
Заранее спасибо за ответы. Я вижу вы модератор, может вынесете мой пост в отдельную тему? Не хочется мешать топикстартеру.


У меня нет полномочий именно в этом разделе. Надо попросить штатного модератора раздела, пусть разрежет ветку на две.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
ig_z
сообщение Nov 25 2017, 22:15
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 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 семпла так, чтобы не было недопереполнения. Т.е. нужна система синхронизации хоста и девайса. Например в юсб есть три приличных способа синхронизации: синхронный - когда хост ведущий, а девайс синхронизирует свою частоту по СОФам. Асинхронный, когда девайс яслется мастером, а хост подстраивает свой стрим под девайс, используя для синхронизации либо явный канал либо стрим от АЦП.
Собственно вопрос был как вы решили эту проблему
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 02:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.0151 секунд с 7
ELECTRONIX ©2004-2016