Перейти к содержанию
    

как организовать взаимодействие двух ARM-ов под Linux?

Доброго дня всем! Надеюсь я верно выбрал раздел для вопроса, если нет, прошу простить и переместить.

В рамках одного довольно большого устройства планируется использовать 2 процессора:

1. Zynq для сбора данных, ЦОС и пр. Скорее всего под управлением embedded Linux

2. Недорогой ARM типа iMX6Solo для интерфейсов: дисплей, LAN, USB и т.д. Под Linux.

Причина такого разделения в том что Zynq вынужден обрабатывать задачи практически реального времени (я понимаю что Linux не для этого, но все же), а второй процессор реализует UI, где много всякой рутины и нет риал тайма. В общем, решили использовать именно 2 процессора.

Между процессорами нужно организовать обмен данными: картинки по ~1МБ десять раз в секунду, команды управления (единицы байт) и пр. Не имея опыта в этом вопросе я могу предположить некоторые варианты:

1. Dual port RAM

2. Обычная память, например DDR, из которой внутри ПЛИС Zynq "слеплена" dual port memory

3. непосредственная связь от проца к процу через например UART, с использованием метода "запрос готовности" - ACK - "передача данных" и т.д.

4. То же самое но с использованием FIFO или DMA.

Собственно, вопрос, какой из вариантов наиболее жизненный? Как это будет выглядеть с точки зрения Linux? (писать драйвер? использовать готовое?)

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Dunduk

Так у Zynq два ARM-ядра, зачем второй процессор?

Скорость у Вас ~1МБ десять раз в секунду, а это уже 80 Мбит.

Поэтому, IMGO, на PL надо сделать автомат FIFO c доступом по DMA в DDR.

Доступ из Linux к области памяти (Shared Region) сделать через отображаемую память (mmap), факт получения сообщения - через прерывания (irq) в отдельных потоках (thread) или Notify.

P.S. Это так межпроцессорное взаимодействие в продуктах TI сделано. Достаточно просто и понятно расписано.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так у Zynq два ARM-ядра, зачем второй процессор?

в несимметричном режиме там наблюдается нестабильная работа, мы делали эксперименты. Конечно надо дальше разбираться но первое впечателние было плохим. Кроме того, там уже производительности не хватает. Ну и нет графического контроллера в Цинке. То что разворачивается в PL отбирает много производительности, скорость досупа к DDR. Поэтому решили разделять на 2 физическим процессора.

 

Доступ из Linux к области памяти (Shared Region) сделать через отображаемую память (mmap), факт получения сообщения - через прерывания (irq) в отдельных потоках (thread) или Notify.

P.S. Это так межпроцессорное взаимодействие в продуктах TI сделано. Достаточно просто и понятно расписано.

Большое вам спасибо за наводку! Буду изучать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В зависимости от того, какой степени должна быть "реальность времени", можно посмотреть в сторону Xenomai.

https://www.osadl.org/fileadmin/dam/rtlws/12/Brown.pdf

Изменено пользователем BaN

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я бы начал с соединения по TCP/IP. Достаточно быстрое соединение можно получить и все на нижнем уровне уже сделано и работает через ПДП. Да и из хардвера надо только сетевой провод.

 

Если вам надо передавать видео поток, то может воспользоваться gstreamer? Не знаю как Zynq, а imx6 прекрасно обработает многие виды компрессии данных своим DSP. Видео высокого разрешения будет работать без сучка и задоринки. поставьте на оба конца imx6 и легко пересылайте по RTP(UDP) до 30 кадров 1080х1920 в секунду.

Меньшие форматы и частоты кадров будет обрабатывать еще легче. Пересылка будет осуществляться с использованием того вида компрессии, который вы укажете.

 

Прикол в том, что такое решение не сильно нагрузит процессор.

Изменено пользователем Tarbal

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В зависимости от того, какой степени должна быть "реальность времени", можно посмотреть в сторону Xenomai.

https://www.osadl.org/fileadmin/dam/rtlws/12/Brown.pdf

спасибо, изучаю.

 

Я бы начал с соединения по TCP/IP.

т.е. с обоих сторон ставить Phy и разъем-трансформатор?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

т.е. с обоих сторон ставить Phy и разъем-трансформатор?

 

Если в разных корпусах, то да. Если на одной плате, то наверное и не обязательно, но не владею вопросом достаточно, чтобы предложить решение как не ставить. Вам видео надо передавать?

 

Попробуйте на готовых платах (evaluation boards) сначала, что все прокатит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Dunduk

Не надо с обоих сторон ставить Phy и разъем-трансформатор :)

Достаточно только подправить сетевой драйвер в Linux, то есть вместо записи/чтения в MAC сделать обмен через свой специальный интерфейс (на PL).

На пользовательском уровне работать как с обычными сокетами - сетевая подсистема сама всё протолкнём.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Dunduk

Не надо с обоих сторон ставить Phy и разъем-трансформатор :)

Достаточно только подправить сетевой драйвер в Linux, то есть вместо записи/чтения в MAC сделать обмен через свой специальный интерфейс (на PL).

На пользовательском уровне работать как с обычными сокетами - сетевая подсистема сама всё протолкнём.

 

Кстати да. Я вспомнил, что что-то подобное было описано в Техас Инструментс руководстве для AM3715 (документ на 3000 с лишним страниц). Не уверен на 100%, что оно, но похоже что так.

Изменено пользователем Tarbal

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сеть - это естественное решение в данном случае. Можно поставить свитч с двумя внутренними интерфейсами (что-нибудь типа KSZ8864), тогда будет еще внешний интерфейс, доступный обоим кристаллам, плюс возможность снаружи обмен засниффить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вам видео надо передавать?

нет, видео не надо, только картинки.

 

 

сделать обмен через свой специальный интерфейс (на PL).

не могли бы вы чуть подробнее описать что это за спец интерфейс? И PL у меня есть со стороны Zynq, а со стороны iMX6 его нет.

 

 

Сеть - это естественное решение в данном случае. Можно поставить свитч с двумя внутренними интерфейсами (что-нибудь типа KSZ8864), тогда будет еще внешний интерфейс, доступный обоим кристаллам, плюс возможность снаружи обмен засниффить.

большое спасибо за совет.

Несколько смущает наличие свича и (как я понял) все же Phy и разъем-трансформаторов. Это по себестоимости ударит и в плане разводки, кабелей не так здорово. Но все же идея интересная - можно использовать много чего готового.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

большое спасибо за совет.

Несколько смущает наличие свича и (как я понял) все же Phy и разъем-трансформаторов. Это по себестоимости ударит и в плане разводки, кабелей не так здорово. Но все же идея интересная - можно использовать много чего готового.

Для внутреннего обмена никаких PHY и трансформаторов не нужно, у свитча есть на то раздельные интерфейсы MII/RMII. Трансформатор с разъемом потребуется только для внешнего интерфейса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для внутреннего обмена никаких PHY и трансформаторов не нужно, у свитча есть на то раздельные интерфейсы MII/RMII. Трансформатор с разъемом потребуется только для внешнего интерфейса.

О! это вообще отличная новость. Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не могли бы вы чуть подробнее описать что это за спец интерфейс? И PL у меня есть со стороны Zynq, а со стороны iMX6 его нет.

 

Это вы сами должны его придумать и описать. "Спец" потому, что специально под вашу задачу создается. Можно получить хорошую эффективность, но в стороне от главных дорог развития цивилизации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

нет, видео не надо, только картинки.

 

Если это картинки, которые можно представить как видео (которое тоже серия картинок), то многое упростится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...