Konst 0 December 1 Posted December 1 · Report post Добрый день уважаемые форумчане! Есть желание реализовать mipi-мультиплексор для подключения нескольких цифровых камер к какому-нибудь SoC. В качестве пробного SoC взял плату Luckfox Pico Max на Rockchip RV1106 с родным для нее сенсором SC3336. Звезд с неба эта парочка не хватает, но вроде покрывает нужды. Приятность заключается в том, что проц в корпусе QFN и поэтому можно сделать свою плату без лишних усложнений, а так же RAM уже на борту в составе самого SoC. Buildroot для платы есть в доступе и, что интересно, даже собирается и работает. Выглядит все так, что вполне реально допилить под свои нужды. Сенсор передает данные в формате RAW10 по 3 линиям (1 клок и 2 данных) со скоростью где-то от 500 до 600МБ/с. Штатно это все работает более или менее терпимо (по временному лагу), картинку по rtsp выводит. В качестве же мультиплексора присмотрел Crosslink от Lattice. Есть плата Crosslink LIF-MD600 Master Link Board с переходниками под камеры Raspberry. Конечно же шлейф SC3336 не подходит от слова совсем, поэтому был изготовлен соответствующий переходник. Переходник рабочий, проверено на SoC. И... И на этом мои успехи заканчиваются - софтовое ядро мне запустить так и не удалось. Предыстория есть, теперь технические подробности: - система: Ubuntu 24.04 LTS - IDE: Lattice Diamond 3.14 - FPGA: LIF-MD6000-CSFBGA81 - Плата: Crosslink LIF-MD6000 Master Link Board rev.B Теперь о том, что не получилось. Если в вкратце, то получилось только поморгать светодиодом, затактированным через PLL😅 При этом я пытался завести штатный пример 1 to N MIPI CSI-2/DSI Duplicator. Не получилось. Впечатления такие, будто ядро молчит - сигналы вроде приходят на линии, выглядят нормально, но байтового клока и сигнала готовности данных из ядра нет. То же самое при попытке сделать дизайн с нуля - пробовал и mipi rx, который уже с парсером, и mipi dphy, который просто десериализует данные - результат такой же, будто сигнал и вовсе никуда не приходит и никуда не попадает. Так же мне не удалось запустить симуляцию ядра. После настройки ядра создается пачка файлов, в т.ч. обертки и тестбенчи. Так вот, родная Questa отказывается их запускать. Ошибка при валидации теста тривиальная - сигналы в тесте используются раньше, чем они объявлены в файле. Ну хорошо, это странно, но легко исправляется (но, как можно догадаться, после каждой перегенерации сбрасывается). Но и это еще не все. После этого Questa не находит другие компоненты, например PUR, MIPI и т.д., хотя они вроде присутствуют в библиотеке (во всяком случае строки с их названиями точно есть) и все равно отказывается запускать тест. С Reveal Inserter меня так же ожидал отлуп. Оказалось, что crosslink не имеет встроенного jtag и все, что можно, это синтезировать его из ресурсов самой ПЛИС. Ну хорошо, пускай так. После синтеза отладочного ядра в пространство пользователя выбрасываются 4 сигнала - JTAG_TMS, TCK, TDO, TDI. И... И я не могу назначить по крайней мере 2 из 4 сигналов ни на какие свободные ножки - IDE отказывается их роутить. А почему? А потому. Не могу, говорит, и все. Ни в банк 1, хотя он пустой и никакие другие ножки из него я не использую, ни в банк 0 на свободные выводы. Ну а теперь, собственно, вопрос. Кто-то имел дело с этим замечательным семейством и сталкивался ли с подобными проблемами? Был ли опыт использования именно софтовой реализации ip-ядер для получения сигнала MIPI? Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 317 December 2 Posted December 2 · Report post Могу сказать лишь одно: я разрабатывал плату, которая один CSI раздваивала в два на этом LIF-MD, и это работало. Софтово, насколько я знаю, никто там MIPI не реализовывал, т.к. в этом не было нужды - MIPI там IP-блоками, из него, вроде как, тупо параллельная шина внутри, дальше обрабатывай как хочешь. Quote Share this post Link to post Share on other sites More sharing options...
Konst 0 December 2 Posted December 2 · Report post 1 час назад, Arlleex сказал: Могу сказать лишь одно: я разрабатывал плату, которая один CSI раздваивала в два на этом LIF-MD, и это работало. Софтово, насколько я знаю, никто там MIPI не реализовывал, т.к. в этом не было нужды - MIPI там IP-блоками, из него, вроде как, тупо параллельная шина внутри, дальше обрабатывай как хочешь. Да, я и имею ввиду реализацию MIPI через родные IP-блоки. Под софтовой реализацией я имею ввиду вариант использования родного IP-блока в варианте Soft DPHY, когда большая часть ядра реализуется через обычную логику. В любом случае, если Вы раздваивали один вход на 2 выхода, то как минимум одно из 3х ядер должно было быть реализовано в варианте Soft DPHY, т.к. аппаратных блоков у схемы всего 2. И у Вас все работало без проблем. Сейчас интереса ради попробовал загнать поток в ядро с опцией Hard DPHY. Правильность поток проверить нечем, т.к. jtag так и не победил, а второй платы-переходника RPi AP Link Biard под рукой нет, чтобы вывести сигнал на приемный SoC, но во всяком случае есть rx_clk и rx_capture_en, сигнализирующий о готовности десериализованных данных, чего я не смог добиться в софтовом варианте. При этом проект тот же самый, сигналы все те же, за исключением сигнала сброса, который есть только в реализации Hard, различие только в галочке Soft/Hard в настройках ядра. Ну и распиновка, понятно. В случае с Hard задана производителем, в случае Soft я сам указываю пары. Quote Share this post Link to post Share on other sites More sharing options...
Konst 0 December 2 Posted December 2 · Report post Так. После успешного запуска hard-версии решил еще раз зайти на soft-версию. И получилось. А дело было в том, что, по каким-то неведомым мне причинам, тактовый генератор на плате запитан от напряжения VCCIO2 (оно же идет на BANK2). Сам же генератор питает вход в BANK0, который намертво прибит к 3.3, ибо там флеш и SPI-программатор. Я как раз использовал коннектор RX1, который подключен к банку 2. На плате имеются перемычки для установки уровней питания для банков 1 и 2. И варианта, когда ты удовлетворяешь и уровням MIPI, и используешь бортовой генератор нет. В общем я перекинул вход камеры на коннектор RX2, который подключен к банку 1, банку 1 дал 1.2В, банку 2 3.3В и все заработало. Хотел уже поругаться на инженеров Lattice, но заглянул на всякий случай в документы на плату последней ревизии. Там один из бортовых генераторов отвязали от VCCIO2 и перевели напрямую на 3.3В. Исправили. И на том спасибо. Quote Share this post Link to post Share on other sites More sharing options...
alxkon 0 December 2 Posted December 2 · Report post JTAG у меня работал в Bank 1, питание банка было 2.5в. ПЛИС - LIF-MD6000-6JMG80I. Делал мост subLVDS -> MIPI CSI-2. BLOCK JTAGPATHS ; LOCATE COMP "JTAG_TCK" SITE "E1" ; LOCATE COMP "JTAG_TDO" SITE "F1" ; LOCATE COMP "JTAG_TDI" SITE "F2" ; LOCATE COMP "JTAG_TMS" SITE "E2" ; Так было в .LPF Quote Share this post Link to post Share on other sites More sharing options...
Konst 0 December 3 Posted December 3 · Report post В 02.12.2025 в 16:02, alxkon сказал: JTAG у меня работал в Bank 1, питание банка было 2.5в. ПЛИС - LIF-MD6000-6JMG80I. Делал мост subLVDS -> MIPI CSI-2. BLOCK JTAGPATHS ; LOCATE COMP "JTAG_TCK" SITE "E1" ; LOCATE COMP "JTAG_TDO" SITE "F1" ; LOCATE COMP "JTAG_TDI" SITE "F2" ; LOCATE COMP "JTAG_TMS" SITE "E2" ; Так было в .LPF А вот мне не дает размещать JTAG, если в проекте где-то есть Soft-MIPI. JTAG требует 2.5В-3.3В, а MIPI 1.2, причем на оба банка даже если используется под MIPI только один. Получается, что отлаживать MIPI можно только если используются Hard-блоки. Моргание светодиодиками и дрыганье ножками это, конечно, хорошо, но хотелось бы видеть весь протокол, вместе с данными. Quote Share this post Link to post Share on other sites More sharing options...