Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: как организовать взаимодействие двух ARM-ов под Linux?
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
Dunduk
Доброго дня всем! Надеюсь я верно выбрал раздел для вопроса, если нет, прошу простить и переместить.
В рамках одного довольно большого устройства планируется использовать 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? (писать драйвер? использовать готовое?)
Спасибо!
ASN
Dunduk
Так у Zynq два ARM-ядра, зачем второй процессор?
Скорость у Вас ~1МБ десять раз в секунду, а это уже 80 Мбит.
Поэтому, IMGO, на PL надо сделать автомат FIFO c доступом по DMA в DDR.
Доступ из Linux к области памяти (Shared Region) сделать через отображаемую память (mmap), факт получения сообщения - через прерывания (irq) в отдельных потоках (thread) или Notify.
P.S. Это так межпроцессорное взаимодействие в продуктах TI сделано. Достаточно просто и понятно расписано.
Dunduk
Цитата(ASN @ Oct 19 2015, 13:32) *
Так у Zynq два ARM-ядра, зачем второй процессор?

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

Цитата(ASN @ Oct 19 2015, 13:32) *
Доступ из Linux к области памяти (Shared Region) сделать через отображаемую память (mmap), факт получения сообщения - через прерывания (irq) в отдельных потоках (thread) или Notify.
P.S. Это так межпроцессорное взаимодействие в продуктах TI сделано. Достаточно просто и понятно расписано.

Большое вам спасибо за наводку! Буду изучать.
BaN
В зависимости от того, какой степени должна быть "реальность времени", можно посмотреть в сторону Xenomai.
https://www.osadl.org/fileadmin/dam/rtlws/12/Brown.pdf
Tarbal
Я бы начал с соединения по TCP/IP. Достаточно быстрое соединение можно получить и все на нижнем уровне уже сделано и работает через ПДП. Да и из хардвера надо только сетевой провод.

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

Прикол в том, что такое решение не сильно нагрузит процессор.
Dunduk
Цитата(BaN @ Oct 20 2015, 13:31) *
В зависимости от того, какой степени должна быть "реальность времени", можно посмотреть в сторону Xenomai.
https://www.osadl.org/fileadmin/dam/rtlws/12/Brown.pdf

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

Цитата(Tarbal @ Oct 20 2015, 14:50) *
Я бы начал с соединения по TCP/IP.

т.е. с обоих сторон ставить Phy и разъем-трансформатор?
Tarbal
Цитата(Dunduk @ Oct 20 2015, 18:49) *
т.е. с обоих сторон ставить Phy и разъем-трансформатор?


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

Попробуйте на готовых платах (evaluation boards) сначала, что все прокатит.
ASN
Dunduk
Не надо с обоих сторон ставить Phy и разъем-трансформатор sm.gif
Достаточно только подправить сетевой драйвер в Linux, то есть вместо записи/чтения в MAC сделать обмен через свой специальный интерфейс (на PL).
На пользовательском уровне работать как с обычными сокетами - сетевая подсистема сама всё протолкнём.
Tarbal
Цитата(ASN @ Oct 20 2015, 22:02) *
Dunduk
Не надо с обоих сторон ставить Phy и разъем-трансформатор sm.gif
Достаточно только подправить сетевой драйвер в Linux, то есть вместо записи/чтения в MAC сделать обмен через свой специальный интерфейс (на PL).
На пользовательском уровне работать как с обычными сокетами - сетевая подсистема сама всё протолкнём.


Кстати да. Я вспомнил, что что-то подобное было описано в Техас Инструментс руководстве для AM3715 (документ на 3000 с лишним страниц). Не уверен на 100%, что оно, но похоже что так.
aaarrr
Сеть - это естественное решение в данном случае. Можно поставить свитч с двумя внутренними интерфейсами (что-нибудь типа KSZ8864), тогда будет еще внешний интерфейс, доступный обоим кристаллам, плюс возможность снаружи обмен засниффить.
Dunduk
Цитата(Tarbal @ Oct 20 2015, 17:55) *
Вам видео надо передавать?

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


Цитата(ASN @ Oct 20 2015, 21:02) *
сделать обмен через свой специальный интерфейс (на PL).

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


Цитата(aaarrr @ Oct 21 2015, 01:52) *
Сеть - это естественное решение в данном случае. Можно поставить свитч с двумя внутренними интерфейсами (что-нибудь типа KSZ8864), тогда будет еще внешний интерфейс, доступный обоим кристаллам, плюс возможность снаружи обмен засниффить.

большое спасибо за совет.
Несколько смущает наличие свича и (как я понял) все же Phy и разъем-трансформаторов. Это по себестоимости ударит и в плане разводки, кабелей не так здорово. Но все же идея интересная - можно использовать много чего готового.
aaarrr
Цитата(Dunduk @ Oct 21 2015, 10:38) *
большое спасибо за совет.
Несколько смущает наличие свича и (как я понял) все же Phy и разъем-трансформаторов. Это по себестоимости ударит и в плане разводки, кабелей не так здорово. Но все же идея интересная - можно использовать много чего готового.

Для внутреннего обмена никаких PHY и трансформаторов не нужно, у свитча есть на то раздельные интерфейсы MII/RMII. Трансформатор с разъемом потребуется только для внешнего интерфейса.
Dunduk
Цитата(aaarrr @ Oct 21 2015, 10:46) *
Для внутреннего обмена никаких PHY и трансформаторов не нужно, у свитча есть на то раздельные интерфейсы MII/RMII. Трансформатор с разъемом потребуется только для внешнего интерфейса.

О! это вообще отличная новость. Спасибо.
Tarbal
Цитата(Dunduk @ Oct 21 2015, 11:38) *
не могли бы вы чуть подробнее описать что это за спец интерфейс? И PL у меня есть со стороны Zynq, а со стороны iMX6 его нет.


Это вы сами должны его придумать и описать. "Спец" потому, что специально под вашу задачу создается. Можно получить хорошую эффективность, но в стороне от главных дорог развития цивилизации.
Tarbal
Цитата(Dunduk @ Oct 21 2015, 11:38) *
нет, видео не надо, только картинки.


Если это картинки, которые можно представить как видео (которое тоже серия картинок), то многое упростится.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.