Jump to content

    

как организовать взаимодействие двух 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? (писать драйвер? использовать готовое?)

Спасибо!

Share this post


Link to post
Share on other sites

Dunduk

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

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

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

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

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

Share this post


Link to post
Share on other sites
Так у Zynq два ARM-ядра, зачем второй процессор?

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

 

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

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

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

Share this post


Link to post
Share on other sites

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

 

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

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

 

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

Edited by Tarbal

Share this post


Link to post
Share on other sites
В зависимости от того, какой степени должна быть "реальность времени", можно посмотреть в сторону Xenomai.

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

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

 

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

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

 

Share this post


Link to post
Share on other sites
т.е. с обоих сторон ставить Phy и разъем-трансформатор?

 

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

 

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

Share this post


Link to post
Share on other sites

Dunduk

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

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

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

 

Share this post


Link to post
Share on other sites
Dunduk

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

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

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

 

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

Edited by Tarbal

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Вам видео надо передавать?

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

 

 

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

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

 

 

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

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

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

 

Share this post


Link to post
Share on other sites
большое спасибо за совет.

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

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

Share this post


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

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

Share this post


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

 

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

Share this post


Link to post
Share on other sites
нет, видео не надо, только картинки.

 

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now