LINUX.ORG.RU

Драйвер для Linux for Tegra Jetson Nano MIPI CSI Xilinix

 , , , ,


0

2

Есть самодельная плата-носитель для Jetson Nano. Плата-носитель с Xilinx. Предполагается, что на эту плату будет заведена камера, а Xilinx будет отсылать картинку через MIPI CSI на Jetson Nano. Пытаюсь сделать минимальный драйвер для приёма данных. Картинка генерируется шириной 1920, длиной 1080, формат RAW, 8 бит. Не предполагается никакого взаимодействия через I2C. Картинка генерируется сразу после включения. Я взял реализацию драйвера для IMX219 и убрал оттуда I2C. Исходник здесь. Всё это благополучно собирается и подгружается как модуль ядра. Но при попытке получить что-либо через v4l-ctl --stream-mmap ничего не выходит, а в dmesg такие ругательства:

[ 507.791721] video4linux video0: frame start syncpt timeout!0
[ 507.797999] video4linux video0: TEGRA_VI_CSI_ERROR_STATUS 0x00000000
[ 507.798020] vi 54080000.vi: TEGRA_CSI_PIXEL_PARSER_STATUS 0x00000000
[ 507.798033] vi 54080000.vi: TEGRA_CSI_CIL_STATUS 0x00000010
[ 507.798046] vi 54080000.vi: TEGRA_CSI_CILX_STATUS 0x00040041
[ 507.798171] vi 54080000.vi: cil_settingtime was autocalculated
[ 507.798186] vi 54080000.vi: csi clock settle time: 13, cil settle time: 10

Прошу подсказок в каком направлении копать.


Путём долгого ковыряния выяснилось, что затык происходит в каких-то Syncpoint-ах. Что это и для чего нужно — не знаю. Если логически рассуждать — то это нужно для какойто синхронизации? В функции nvhost_syncpt_is_expired происходит ожидание когда текущее значение переменной current_val не станет равным future_val. В заводской плате-ките это дело отрабатывает так: исходно есть

 # nvhost_syncpt.c : nvhost_syncpt_is_expired : current_val = 4, future_val = 5, has_future_val = false

Далее как-то вызывается nvhost_syncpt_update_min из nvhost_syncpt.c и значение current_val становится равным пяти и процесс идёт дальше. В случае с разрабатываемой платой nvhost_syncpt_update_min не вызывается и всё дело завершается с ошибкой по таймауту.

Удалось выяснить, что nvhost_syncpt_update_min вызывается из nvhost_syncpt_thresh_fn.

czan
() автор топика
Последнее исправление: czan (всего исправлений: 2)
22 марта 2023 г.

Собственно, у меня оказалось всё в порядке. Проблема, как выяснилось, была на стороне инженера, что программировал FPGA. После того как этот инженер методом проб и ошибок написал свою прошивку, v4l2-ctl заработало! Благодарю всех отписавшихся!

czan
() автор топика
Последнее исправление: czan (всего исправлений: 1)