LINUX.ORG.RU

Декодировать изображени в YUV(?) или определить, что с ним не так

 , , , ,


0

4

Подключаю камеру по 8-битному параллельному интерфейсу. Картинку получаю, размер нужный, 16 бит информации на пиксель, вижу в ней знакомые очертания и формы, то есть камера работает. Проблема только в том, что я не могу разобрать формат данных.

Например, вот изображение настроечной таблицы: скачать. Разрешение VGA (600KB). Вот, как она должна выглядеть: изображение. Камера сконфигурирована в режиме YUYV (56595559), но это не похоже на правду. Я попробовал кучу возможных конфигураций на RAW Pixels, но так и не подобрал ничего похожего, хотя явно видно, что полоски все на своих местах, проблема только в цвете.

Куда копать? Где может повреждаться изображение? Проблема в самом интерфейсе или в DMA? Или с драйвером что-то не так? Может, кто-то видел что-то подобное и сразу узнает?

★★★★★

Как я борюсь с такими проблемами: а можешь вывести чисто синий чисто красный и чисто зеленый экран? Вот тогда то всё встанет на место, потому что цвета таблицы могут иметь не чистые оттенки

Раз YUYV, если построить чернобелое изображение по яркостным компонентам, всё будет как надо? Попробуй вывести другие картинки, посмотри что в чернобелой форме они корректны, т.е. как минимум поймешь что нет «повреждения dma»

А цвет это следующий шаг и желательно по монохроматичным экранам

I-Love-Microsoft ★★★★★ ()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)

Разрешение VGA (600KB)

640x480?

хотя явно видно, что полоски все на своих местах, проблема только в цвете.

Где может повреждаться изображение?

У меня такое предположение, если судить по дампу, что в картинке напрочь отсутствует Y. Всегда 0.

Zubok ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

а можешь вывести чисто синий чисто красный и чисто зеленый экран?

К сожалению, таких режимов я не нашёл. Попробовал составить таблицу цветов, воспользовавшись просто HEX-редактором, ничего особо полезного я не получил. Я пробовал переключить камеру в режимы RGB и JPEG, но получил просто много мусора, который разобрать не смог.

Попробуй вывести другие картинки, посмотри что в чернобелой форме они корректны

Выводил шахматную доску: получил хорошие ровные клетки из 0x0000 и 0x000F.

CYB3R ★★★★★ ()
Ответ на: комментарий от CYB3R

хорошие ровные клетки из 0x0000 и 0x000F

Что же в них хорошего, если как тебе другой товарищ подсказал, что яркостная Y компонента у тебя прибита в ноль? :)

Для черного это ожидаемо, для белого цвета или даже серого, 000F это не то что я бы назвал правильным

I-Love-Microsoft ★★★★★ ()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от CYB3R

Это какой бит?

Не бит, а биты. Меня смущает, что у каждого байта в дампе (открой в HEX) всегда старшая тетрада нулевая. Будто затерта. Во всем файле так.

Zubok ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Что же в них хорошего

Геометрически хорошие. А с цветами проблема, да.

CYB3R ★★★★★ ()
Ответ на: комментарий от Zubok

Да совершенно верно. Взял реальное изображение с камеры и нашёл в нём только эти байты: 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F.

CYB3R ★★★★★ ()
Ответ на: комментарий от imb

у меня было такое когда была плохая пайка некторых ножек матрицы

Ага. Тоже предполагаю проблему в железе. Непропай (отпай) разъемов, шлейф данных.

Zubok ★★★★★ ()
Ответ на: комментарий от Zubok

Да, пробовал два разных, результат всегда одинаковый (камеры тоже разные пробовал). Имеет смысл логический анализатор подключать?

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

А куда это все вообще подключено? К микроконтроллеру? В общем-то, это с самого начала надо было бы понять. Непосредственно читаемые данные с порта можно посмотреть?

Zubok ★★★★★ ()
Ответ на: комментарий от Zubok

Камера с параллельным 8-битным интерфейсом подключена к imx6sx. Читаю код драйвера, не особо понимаю, как посмотреть непосредственно данные с порта, возможно, есть какой-то специальный режим отладки videobuf2.

CYB3R ★★★★★ ()
Ответ на: комментарий от CYB3R

не особо понимаю, как посмотреть непосредственно данные с порта,

mx6s_csi_read, наверное. А формат отдачи данных камерой известен? Может, у них твоя моя не понимай?

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

Нет, судя по всему, эта функция не вызывается вообще при передаче данных.

Вот как получает данные yavta:

Video format set: YUYV (56595559) 640x480 (stride 1280) field none buffer size 614400
Video format: YUYV (56595559) 640x480 (stride 0) field none buffer size 614400
8 buffers requested.
length: 614400 offset: 0 timestamp type/source: mono/EoF
Buffer 0/0 mapped at address 0x76d98000.
length: 614400 offset: 614400 timestamp type/source: mono/EoF
Buffer 1/0 mapped at address 0x76d02000.
length: 614400 offset: 1228800 timestamp type/source: mono/EoF
Buffer 2/0 mapped at address 0x76c6c000.
length: 614400 offset: 1843200 timestamp type/source: mono/EoF
Buffer 3/0 mapped at address 0x76bd6000.
length: 614400 offset: 2457600 timestamp type/source: mono/EoF
Buffer 4/0 mapped at address 0x76b40000.
length: 614400 offset: 3072000 timestamp type/source: mono/EoF
Buffer 5/0 mapped at address 0x76aaa000.
length: 614400 offset: 3686400 timestamp type/source: mono/EoF
Buffer 6/0 mapped at address 0x76a14000.
length: 614400 offset: 4300800 timestamp type/source: mono/EoF
Buffer 7/0 mapped at address 0x7697e000.
0 (0) [-] any 2 614400 B 635.552554 635.560404 -128.090 fps ts mono/EoF
Captured 1 frames in 0.000043 seconds (23255.813953 fps, 14288372093.023256 B/s).
8 buffers released.

Вот что при этом происходит в ядре:

[  635.452581] mx6s-csi 2214000.csi: set to pixelformat 'YUYV-16'
[  635.452715] mx6s-csi 2214000.csi: count=8, size=0,614400
[  635.454485] videobuf2_common: __setup_offsets: buffer 0, plane 0 offset 0x00000000
[  635.456186] videobuf2_common: __setup_offsets: buffer 1, plane 0 offset 0x00096000
[  635.458295] videobuf2_common: __setup_offsets: buffer 2, plane 0 offset 0x0012c000
[  635.460044] videobuf2_common: __setup_offsets: buffer 3, plane 0 offset 0x001c2000
[  635.461945] videobuf2_common: __setup_offsets: buffer 4, plane 0 offset 0x00258000
[  635.474286] videobuf2_common: __setup_offsets: buffer 5, plane 0 offset 0x002ee000
[  635.476320] videobuf2_common: __setup_offsets: buffer 6, plane 0 offset 0x00384000
[  635.478798] videobuf2_common: __setup_offsets: buffer 7, plane 0 offset 0x0041a000
[  635.478809] videobuf2_common: __vb2_queue_alloc: allocated 8 buffers, 1 plane(s) each
[  635.479258] videobuf2_common: vb2_mmap: buffer 0, plane 0 successfully mapped
[  635.479334] videobuf2_common: vb2_mmap: buffer 1, plane 0 successfully mapped
[  635.479398] videobuf2_common: vb2_mmap: buffer 2, plane 0 successfully mapped
[  635.479465] videobuf2_common: vb2_mmap: buffer 3, plane 0 successfully mapped
[  635.479527] videobuf2_common: vb2_mmap: buffer 4, plane 0 successfully mapped
[  635.479589] videobuf2_common: vb2_mmap: buffer 5, plane 0 successfully mapped
[  635.479649] videobuf2_common: vb2_mmap: buffer 6, plane 0 successfully mapped
[  635.479715] videobuf2_common: vb2_mmap: buffer 7, plane 0 successfully mapped
[  635.479768] mx6s-csi 2214000.csi: mx6s_videobuf_prepare (vb=0x26aff2a5) 0xb791f6ca 0
[  635.479776] videobuf2_common: vb2_core_qbuf: qbuf of buffer 0 succeeded
[  635.479797] mx6s-csi 2214000.csi: mx6s_videobuf_prepare (vb=0xc0d521a3) 0x6d8265f4 0
[  635.479803] videobuf2_common: vb2_core_qbuf: qbuf of buffer 1 succeeded
[  635.479822] mx6s-csi 2214000.csi: mx6s_videobuf_prepare (vb=0xff6fbe9c) 0x7ba8b0ee 0
[  635.479827] videobuf2_common: vb2_core_qbuf: qbuf of buffer 2 succeeded
[  635.479845] mx6s-csi 2214000.csi: mx6s_videobuf_prepare (vb=0xe0ab4e64) 0x34c38f76 0
[  635.479851] videobuf2_common: vb2_core_qbuf: qbuf of buffer 3 succeeded
[  635.479868] mx6s-csi 2214000.csi: mx6s_videobuf_prepare (vb=0xc55bf95c) 0x468560df 0
[  635.479873] videobuf2_common: vb2_core_qbuf: qbuf of buffer 4 succeeded
[  635.479889] mx6s-csi 2214000.csi: mx6s_videobuf_prepare (vb=0xcf06a571) 0xbe600326 0
[  635.479895] videobuf2_common: vb2_core_qbuf: qbuf of buffer 5 succeeded
[  635.479913] mx6s-csi 2214000.csi: mx6s_videobuf_prepare (vb=0x3f0e1121) 0xb6274b61 0
[  635.479918] videobuf2_common: vb2_core_qbuf: qbuf of buffer 6 succeeded
[  635.479935] mx6s-csi 2214000.csi: mx6s_videobuf_prepare (vb=0x44429c7a) 0x2dca6400 0
[  635.479940] videobuf2_common: vb2_core_qbuf: qbuf of buffer 7 succeeded
[  635.479962] mx6s-csi 2214000.csi: mx6s_videobuf_queue (vb=0x26aff2a5) 0xb791f6ca 614400
[  635.479972] mx6s-csi 2214000.csi: mx6s_videobuf_queue (vb=0xc0d521a3) 0x6d8265f4 614400
[  635.479983] mx6s-csi 2214000.csi: mx6s_videobuf_queue (vb=0xff6fbe9c) 0x7ba8b0ee 614400
[  635.479993] mx6s-csi 2214000.csi: mx6s_videobuf_queue (vb=0xe0ab4e64) 0x34c38f76 614400
[  635.480003] mx6s-csi 2214000.csi: mx6s_videobuf_queue (vb=0xc55bf95c) 0x468560df 614400
[  635.480013] mx6s-csi 2214000.csi: mx6s_videobuf_queue (vb=0xcf06a571) 0xbe600326 614400
[  635.480022] mx6s-csi 2214000.csi: mx6s_videobuf_queue (vb=0x3f0e1121) 0xb6274b61 614400
[  635.480033] mx6s-csi 2214000.csi: mx6s_videobuf_queue (vb=0x44429c7a) 0x2dca6400 614400
[  635.521629] videobuf2_common: vb2_core_streamon: successful
[  635.554760] mx6s-csi 2214000.csi: mx6s_csi_frame_done (vb=0x26aff2a5) 0xb791f6ca 614400
[  635.554768] videobuf2_common: vb2_buffer_done: done processing on buffer 0, state: 5
[  635.562599] videobuf2_common: vb2_core_dqbuf: returning done buffer
[  635.562608] videobuf2_common: vb2_core_dqbuf: dqbuf of buffer 0, with state 0
[  635.566484] mx6s-csi 2214000.csi: mx6s_videobuf_prepare (vb=0x26aff2a5) 0xb791f6ca 0
[  635.566498] mx6s-csi 2214000.csi: mx6s_videobuf_queue (vb=0x26aff2a5) 0xb791f6ca 614400
[  635.566506] videobuf2_common: vb2_core_qbuf: qbuf of buffer 0 succeeded
[  635.566545] videobuf2_common: vb2_buffer_done: done processing on buffer 1, state: 6
[  635.566552] videobuf2_common: vb2_buffer_done: done processing on buffer 2, state: 6
[  635.566556] videobuf2_common: vb2_buffer_done: done processing on buffer 3, state: 6
[  635.566561] videobuf2_common: vb2_buffer_done: done processing on buffer 4, state: 6
[  635.566565] videobuf2_common: vb2_buffer_done: done processing on buffer 5, state: 6
[  635.566569] videobuf2_common: vb2_buffer_done: done processing on buffer 6, state: 6
[  635.566574] videobuf2_common: vb2_buffer_done: done processing on buffer 7, state: 6
[  635.566578] videobuf2_common: vb2_buffer_done: done processing on buffer 0, state: 6
[  635.566652] videobuf2_common: vb2_core_streamoff: successful
[  635.574039] videobuf2_common: __vb2_buf_mem_free: freed plane 0 of buffer 0
[  635.574145] videobuf2_common: __vb2_buf_mem_free: freed plane 0 of buffer 1
[  635.574247] videobuf2_common: __vb2_buf_mem_free: freed plane 0 of buffer 2
[  635.574346] videobuf2_common: __vb2_buf_mem_free: freed plane 0 of buffer 3
[  635.574446] videobuf2_common: __vb2_buf_mem_free: freed plane 0 of buffer 4
[  635.574537] videobuf2_common: __vb2_buf_mem_free: freed plane 0 of buffer 5
[  635.574637] videobuf2_common: __vb2_buf_mem_free: freed plane 0 of buffer 6
[  635.574739] videobuf2_common: __vb2_buf_mem_free: freed plane 0 of buffer 7
CYB3R ★★★★★ ()
Ответ на: комментарий от CYB3R

Нет, судя по всему, эта функция не вызывается вообще при передаче данных.

Это не чтение из порта непосредственно. Эта функция, насколько я понимаю, будет вызываться, если ты будешь читать из устройства /dev/video0 (или какое там?) как из файла.

static struct v4l2_file_operations mx6s_csi_fops = {
	.owner		= THIS_MODULE,
	.open		= mx6s_csi_open,
	.release	= mx6s_csi_close,
	.read		= mx6s_csi_read,
	.poll		= vb2_fop_poll,
	.unlocked_ioctl	= video_ioctl2, /* V4L2 ioctl handler */
	.mmap		= vb2_fop_mmap,
};
Zubok ★★★★★ ()
Ответ на: комментарий от Zubok

Ну вот как раз когда я вызываю yavta /dev/videoX, вызывается сначала mx6s_csi_open, а в конце mx6s_csi_close. Функция mx6s_csi_read ни разу не выполняется.

CYB3R ★★★★★ ()
Ответ на: комментарий от Zubok

Функция mx6s_csi_read вызывается, если сделать cat /dev/videoX, но для получения изображения это явно не то, что нужно, всё делается через ioctl.

CYB3R ★★★★★ ()
Ответ на: комментарий от Harald

Значения регистров камеры для выставления режима YUYV-16 640x480, судя по всему, прямо из даташита и скопированы. Что конкретно ты хочешь узнать?

CYB3R ★★★★★ ()
Ответ на: комментарий от CYB3R

Ну вот как раз когда я вызываю yavta /dev/videoX, вызывается сначала mx6s_csi_open, а в конце mx6s_csi_close. Функция mx6s_csi_read ни разу не выполняется.

Потому что программа не читает через read, а mmap-ит устройство. Впрочем, и там и там одни и те же данные должны быть. Вот эта yavta не может корежить? Я сомневаюсь, что DMA что-то там перекодировать будет.

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от Harald

Да вроде бы подключал идентично референсам от производителя. Где можно изменить порядок подключения, чтобы проверить, что изменится? Device tree?

CYB3R ★★★★★ ()
Ответ на: комментарий от CYB3R

С gstreamer идентичный результат.

Значит, надо спускаться на уровень драйвера и ниже. Заодно посмотреть, что камера должна выдавать по спецификации.

С другой стороны можно еще посмотреть, не могут ли данные читаться откуда-то не оттуда, то есть часть данных с нужных ног порта, а часть из какого-то смежного порта где ничего нет. Соответствует ли драйвер реальному подключению, то есть к какому порту (ножкам) камера подцеплена?

Zubok ★★★★★ ()
Ответ на: комментарий от Zubok

Вот это я сейчас и пытаюсь выяснить. Я так и не понял, где конкретно в драйвере объявляется, откуда данные читаются. И просто вывести состояние шины в лог в шестнадцатеричном виде я тоже не могу, вижу только адреса в памяти, куда DMA копирует данные.

CYB3R ★★★★★ ()
Ответ на: комментарий от CYB3R

Посмотри DTS-файл. arch/arm/boot/dts/imx6sx.dtsi . Там есть секции, связанные с csi. UPS: Ну или тот DTS, который у тебя на плате, то есть актуальный.

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 2)
Ответ на: комментарий от Zubok

Самое похожее на мой случай определение в imx6sx-sdb.dtsi:

pinctrl_csi_0: csigrp-0 {
	fsl,pins = <
		MX6SX_PAD_LCD1_DATA07__CSI1_MCLK	0x110b0
		MX6SX_PAD_LCD1_DATA06__CSI1_PIXCLK	0x110b0
		MX6SX_PAD_LCD1_DATA04__CSI1_VSYNC	0x110b0
		MX6SX_PAD_LCD1_DATA05__CSI1_HSYNC	0x110b0
		MX6SX_PAD_LCD1_DATA17__CSI1_DATA_0	0x110b0
		MX6SX_PAD_LCD1_DATA16__CSI1_DATA_1	0x110b0
		MX6SX_PAD_LCD1_DATA15__CSI1_DATA_2	0x110b0
		MX6SX_PAD_LCD1_DATA14__CSI1_DATA_3	0x110b0
		MX6SX_PAD_LCD1_DATA13__CSI1_DATA_4	0x110b0
		MX6SX_PAD_LCD1_DATA12__CSI1_DATA_5	0x110b0
		MX6SX_PAD_LCD1_DATA11__CSI1_DATA_6	0x110b0
		MX6SX_PAD_LCD1_DATA10__CSI1_DATA_7	0x110b0
		MX6SX_PAD_LCD1_DATA09__CSI1_DATA_8	0x110b0
		MX6SX_PAD_LCD1_DATA08__CSI1_DATA_9	0x110b0
		MX6SX_PAD_LCD1_RESET__GPIO3_IO_27	0x80000000
		MX6SX_PAD_LCD1_VSYNC__GPIO3_IO_28	0x80000000
	>;
};

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

CYB3R ★★★★★ ()
Ответ на: комментарий от CYB3R

А там еще есть секции. Ты посмотри на тот файл, который у тебя на плате. По умолчанию csi выключен, как я понимаю. «disabled». На твоей плате включен? Если включен, то какой. Тут их два.

csi2: csi@221c000 {
					reg = <0x0221c000 0x4000>;
					interrupts = <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>;
					clocks = <&clks IMX6SX_CLK_DISPLAY_AXI>,
						 <&clks IMX6SX_CLK_CSI>,
						 <&clks IMX6SX_CLK_DCIC2>;
					clock-names = "disp-axi", "csi_mclk", "dcic";
					status = "disabled";
				};
Zubok ★★★★★ ()
Ответ на: комментарий от CYB3R

Может, его конфигурация не такая какая нужна? Что там вообще в его секции на плате вписано?

Zubok ★★★★★ ()
Ответ на: комментарий от CYB3R

У меня csi1, он включён.

И это его ноги, к которым подключена камера? А то мало ли как занумеровано в файле. Можно попробовать включить и второй, если там ничего к тем ногам не подкючено.

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от CYB3R

Ну вот надо попробовать оба попробовать. Еще, кстати, там же i2c интерфейс нужен, чтобы с камерой говорить. У тебя камера общается по i2c? У тебя задействован? Сконфигурирован?

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от CYB3R
pinctrl_csi_0: csigrp-0 {
	fsl,pins = <
		MX6SX_PAD_LCD1_DATA07__CSI1_MCLK	0x110b0
		MX6SX_PAD_LCD1_DATA06__CSI1_PIXCLK	0x110b0
		MX6SX_PAD_LCD1_DATA04__CSI1_VSYNC	0x110b0
		MX6SX_PAD_LCD1_DATA05__CSI1_HSYNC	0x110b0
		MX6SX_PAD_LCD1_DATA17__CSI1_DATA_0	0x110b0
		MX6SX_PAD_LCD1_DATA16__CSI1_DATA_1	0x110b0
		MX6SX_PAD_LCD1_DATA15__CSI1_DATA_2	0x110b0
		MX6SX_PAD_LCD1_DATA14__CSI1_DATA_3	0x110b0
		MX6SX_PAD_LCD1_DATA13__CSI1_DATA_4	0x110b0
		MX6SX_PAD_LCD1_DATA12__CSI1_DATA_5	0x110b0
		MX6SX_PAD_LCD1_DATA11__CSI1_DATA_6	0x110b0
		MX6SX_PAD_LCD1_DATA10__CSI1_DATA_7	0x110b0
		MX6SX_PAD_LCD1_DATA09__CSI1_DATA_8	0x110b0
		MX6SX_PAD_LCD1_DATA08__CSI1_DATA_9	0x110b0
		MX6SX_PAD_LCD1_RESET__GPIO3_IO_27	0x80000000
		MX6SX_PAD_LCD1_VSYNC__GPIO3_IO_28	0x80000000
	>;
};

Надо выяснить, что это значит. Как понять, что линий данных 10 штук тут. Может, надо конфигурировать точно по используемым без лишних. Это сейчас та специфика, что надо погрузиться в особенности.

UPD: Их тут до 20-ти можно сконфигурировать вроде:

Each of the camera ports includes the following features:
• Parallel interface
• Up to 20-bit input data bus
• A single value in each cycle
• Programmable polarity
Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от CYB3R

Ну вот да. Сейчас, получается, порт настроен на прием 10-битных данных, настроены сигналы clock, sync, какие-то два GPIO. Причем к каким-то из этих входов подключена камера. Читаются, скорее всего, 10-битные данные. В результате у тебя на выходе хрень какая-то. Надо попробовать точно настроить именно те входы, куда физически подключена камера. Если что-то получится, то расскажи - может, кому-то полезно будет.

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от CYB3R

Самое похожее на мой случай определение в imx6sx-sdb.dtsi

тут описан 10 битный интерфейс, у тебя 8 бит

Порядок определений, насколько я понимаю, здесь никакой роли не играет, а маска просто устанавливает режим работы

порядок описания не играет, а на какие биты из 10 подключать 8 битный интерфейс ? обычно используются старшие разряды

		MX6SX_PAD_LCD1_DATA15__CSI1_DATA_2	0x110b0
		MX6SX_PAD_LCD1_DATA14__CSI1_DATA_3	0x110b0
		MX6SX_PAD_LCD1_DATA13__CSI1_DATA_4	0x110b0
		MX6SX_PAD_LCD1_DATA12__CSI1_DATA_5	0x110b0
		MX6SX_PAD_LCD1_DATA11__CSI1_DATA_6	0x110b0
		MX6SX_PAD_LCD1_DATA10__CSI1_DATA_7	0x110b0
		MX6SX_PAD_LCD1_DATA09__CSI1_DATA_8	0x110b0
		MX6SX_PAD_LCD1_DATA08__CSI1_DATA_9	0x110b0

главный вопрос - какая камера, есть ли для неё драйвер от NXP или он самописный или из майнстримного ядра ?

anonymous ()
Ответ на: комментарий от anonymous

i.MX 6SoloX Applications Processor Reference Manual, Rev. 4, 05/2020

page 899

20.4 Principles of Operation

To connect with one 8-bit sensor, the sensor data interface should connect to CSI_DATA[9:2].

anonymous ()
Ответ на: комментарий от Zubok

Сейчас, получается, порт настроен на прием 10-битных данных, настроены сигналы clock, sync, какие-то два GPIO. Причем к каким-то из этих входов подключена камера. Читаются, скорее всего, 10-битные данные.

порт определяет формат данных не так, а через драйвер - договаривается с камерой какой формат данных использовать, например на референсе камера ov5640 поддерживает

static const struct ov5640_datafmt ov5640_colour_fmts[] = {
	{MEDIA_BUS_FMT_YUYV8_2X8, V4L2_COLORSPACE_JPEG},
};

https://source.codeaurora.org/external/imx/linux-imx/tree/drivers/media/platf...

MEDIA_BUS_FMT_YUYV8_2X8 - ширина 8 бит, два байта на пиксель

anonymous ()
Ответ на: комментарий от anonymous

Если так, то, да, тогда пофиг, что там в DTS. Тогда надо следовать правилам подключения шины 8-bit к определенным входам, узнать, в каком формате камера выдает данные и удостовериться, что в такой формат данных умеет драйвер. Может, повезет.

Zubok ★★★★★ ()
Ответ на: комментарий от Zubok

Спасибо! Я теперь уверен, что проблема в подключении. Сегодня закажу новые коннекторы и платы, буду тыкать каждый контакт в шине руками (благо, клок там всего 24МГц), может быть, подключу логический анализатор.

CYB3R ★★★★★ ()
Ответ на: комментарий от Zubok

Большое спасибо! Сейчас переразвёл адаптер всё работает, как надо!

CYB3R ★★★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.