Как лучше решить ошибку идентификации камер IMX378/IMX477 на Raspberry Pi?
По вводным: к Raspberry Pi5 (ОС Linux 6.12.62+rpt-rpi-2712) подключены две камеры IMX378-79 (родом из Китая). На платах камер чётко указана маркировка IMX378, однако система частично идентифицирует их как IMX477, что приводит к следующим симптомам:
- В логах
dmesgПо вводным: наблюдается противоречие: DT объявляет устройства какimx477@1aПо вводным:, но драйвер при чтении регистра идентификатора определяет их какimx378; - По вводным: система переключается на универсальный драйвер
rp1‑cfeПо вводным:, после чего камеры обнаруживаются (rpicam‑helloПо вводным: показывает режимы), но выводят картинку с одной и той же камеры (по отдельности каждая камера работает исправно); - В
v4l2‑ctl --list‑devicesПоявляются устройстваrp1‑cfe, а неimx378‑0/imx378‑1
Что уже сделано
- По вводным: проверена физическая маркировка сенсоров — точно IMX378;
- Менял камеры местами
- В
config.txtПо вводным: удалены все упоминания imx477 и rp1‑cfe; - По вводным: добавлены оверлеи для IMX378:
camera_auto_detect=0 dtoverlay=imx378,cam0,i2c_bus=10,address=0x1a,sensor_model=imx378 dtoverlay=imx378,cam1,i2c_bus=11,address=0x1a,sensor_model=imx378 - Прописывал руками в
config.txtimx477Вместоimx378Сейчас ситуация такая: - камеры не определяются совсем
Актуальные логи
1.dmesg | grep imx
[ 0.032973] /axi/pcie@1000120000/rp1/i2c@80000/imx477@1a: Fixed dependency cycle(s) with /axi/pcie@1000120000/rp1/csi@128000 [ 3.020907] imx477 11-001a: Device found is imx378 [ 3.372901] imx477 10-001a: Device found is imx378 [ 3.374378] rp1-cfe 1f00110000.csi: Using sensor imx477 10-001a for capture
2.v4l2-ctl --list-devices
rp1-cfe (platform:1f00110000.csi): /dev/video8 /dev/video9 ... /dev/media1 rp1-cfe (platform:1f00128000.csi): /dev/video0 /dev/video1 ... /dev/media4
3.rpicam-hello --list-cameras
0 : imx477 [4056x3040 12-bit RGGB] (/base/axi/pcie@1000120000/rp1/i2c@88000/imx477@1a) Modes: 'SRGGB10_CSI2P' : 1332x990 [120.50 fps - (696, 528)/2664x1980 crop] ... 1 : imx477 [4056x3040 12-bit RGGB] (/base/axi/pcie@1000120000/rp1/i2c@80000/imx477@1a) Modes: 'SRGGB10_CSI2P' : 1332x990 [120.50 fps - (696, 528)/2664x1980 crop] ...
4.i2cdetect-y 10 иi2cdetect -y 11
0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
Нужно понять: в результате вопрос: можно ли что-то сделать с камерой или настройками DT, чтобы камеры стали адекватно восприниматься?
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
В вашем случае конфликт выглядит как несовпадение Device Tree overlay и реального сенсора/драйвера. DT объявляет
imx477@1a, драйвер читает ID как IMX378, затем всё уходит черезrp1-cfe, и две камеры начинают вести себя как одна. На Raspberry Pi 5 это особенно чувствительно, потому что камера идёт через новую подсистему RP1/CFE и overlays должны точно соответствовать портам.Сначала проверьте, какие overlays реально применились после загрузки:
sudo vcdbg log msg 2>&1 | grep -i -E "imx|camera|overlay" dmesg | grep -i -E "imx|cfe|camera|i2c"
Затем проверьте I2C-шины и адреса:
i2cdetect -y 10 i2cdetect -y 11
Если обе камеры отвечают на одинаковом адресе, это нормально для разных шин. Но если overlay фактически вешает обе на один bus или один endpoint, получите одинаковую картинку.
Для Pi 5 убедитесь, что используете overlays, поддерживаемые именно вашей версией Raspberry Pi OS/kernel. Китайские модули IMX378 могут иметь нестандартный EEPROM или вообще быть совместимыми только с кастомным overlay. Маркировка на плате важна, но драйверу нужны корректные DT endpoints, clock, link-frequency, rotation/orientation и port mapping.
Я бы временно упростил конфиг: подключить одну камеру к cam0, добиться стабильного определения как IMX378; затем одну к cam1; только после этого включать две одновременно. Если по одной каждая работает, а вместе дублируется изображение, причина почти точно в overlay/endpoint mapping.
Итог: проверяйте не только строку
dtoverlay, а фактически применённое дерево и dmesg. Для двух IMX378 на Pi 5 может понадобиться корректный кастомный overlay от производителя камеры или правка existing overlay, иначе система будет fallback-ить в rp1-cfe и путать источники.