Ник:
Пароль:

Контакты

Cтатус Skype: starterkit.ru
тел.: (+7 3412) 478-448
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
E-mail: info@starterkit.ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:1
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:5
Форум » starterkit.ru » Embedded Linux
IMX6 Видео
korigo
Добавлено 10.01.2017 12:10 Редактировалось 12.11.2018 16:45
0
Сообщение: 1
korigo
0

Пункты: 1331
Регистрация: 23.11.2016
1. подцепил ADV7181 на CSI1. Работает при изменении в соответствующих секциях DTS номера CSI. А как сделать одновременно два устройства с разными CSI. Пытался в DTS сделать по две секции типа
v4l2_cap_0 {
compatible = "fsl,imx6q-v4l2-capture";
ipu_id = <0>;
csi_id = <0>;
...
};
v4l2_cap_1 {
compatible = "fsl,imx6q-v4l2-capture";
ipu_id = <0>;
csi_id = <1>;
...
};

и
adv7180: adv7180@21 {
compatible = "adv,adv7180";
reg = <0x21>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ipu1_csi_sodimm>;
clocks = <&clks 201>;
clock-names = "csi_mclk";
csi_id = <0>;
mclk = <24000000>;
mclk_source = <0>;

};
adv7180_1: adv7180@21 {
compatible = "adv,adv7180";
reg = <0x21>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ipu1_csi_sodimm>;
clocks = <&clks 201>;
clock-names = "csi_mclk";
csi_id = <1>;
mclk = <24000000>;
mclk_source = <0>;
};

В /dev устройство video1 появляется, но при запуске видеоввода работает только на нем, при работе с video0 пишет не найден slave. Как правильно описать второй канал ?


2. Как повысить уровень вывода отладочной информации , в частности получить вывод от функции pr_debug ?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 10.01.2017 12:37 Редактировалось 10.01.2017 13:09 Сообщение: 2
sasamy
4.77

Пункты: 64519
Регистрация: 14.08.2009
1.
reg = <0x21>;
у вас на разных интерфейчах I2C они подключены - по куску DTS непонятно ? если на одной шине то надо на разные адреса садить и естественно не только програмно но и аппартно - смотреть в даташите как сконфигурировать

pinctrl-0 = <&pinctrl_ipu1_csi_sodimm>;
про это я предуждал ранее - надо дописывать инит пинов для второго CSI и указывать соотвественно для каждого CSI свою группу - не могут они на одних и тех же пинах жить.

locks = <&clks 201>;
clock-names = "csi_mclk";

тут наверно можно одинаковые оставить - я не видел в коде adv7180.c чтобы информация о клоке из DTS использовалась.

2.
https://www.kernel.org/doc/local/pr_debug.txt
Спуститься к концу Подняться к началу
Персональная информация
korigo
Добавлено 10.01.2017 17:49 Сообщение: 3
korigo
0

Пункты: 1331
Регистрация: 23.11.2016
Пины конечно прописаны.
pinctrl-0 = <&pinctrl_ipu1_csi_sodimm>; тут ошибка в посте была, на самом деле для второго канала pinctrl-0 = <&pinctrl_ipu1_csi1_sodimm>;

Ацп подключен один , выход распараллелен на два CSI
по отдельности оба канала работают если прописать соответствующий <csi_id> и группу пинов.

Сделал такую конструкцию (

&i2c3 {
clock-frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c3_sodimm>;
status = "okay";

/* adv7180_1: adv7180@21 {
compatible = "adv,adv7180";
reg = <0x21>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ipu1_csi1_sodimm>;
clocks = <&clks 201>;
clock-names = "csi_mclk";
csi_id = <1>;
mclk = <24000000>;
mclk_source = <0>;
cvbs = <1>;

};

*/

};

&i2c4 {
clock-frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c4_sodimm>;
status = "okay";

adv7180: adv7180@21 {
compatible = "adv,adv7180";
reg = <0x21>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ipu1_csi_sodimm>;
clocks = <&clks 201>;
clock-names = "csi_mclk";
csi_id = <0>;
mclk = <24000000>;
mclk_source = <0>;
cvbs = <1>;

};

};

ipu1 {
pinctrl_ipu1_csi_sodimm: ipu1-csi-sodimm {
fsl,pins = <


MX6QDL_PAD_CSI0_DAT12__IPU1_CSI0_DATA12 0x80000000
MX6QDL_PAD_CSI0_DAT13__IPU1_CSI0_DATA13 0x80000000
MX6QDL_PAD_CSI0_DAT14__IPU1_CSI0_DATA14 0x80000000
MX6QDL_PAD_CSI0_DAT15__IPU1_CSI0_DATA15 0x80000000
MX6QDL_PAD_CSI0_DAT16__IPU1_CSI0_DATA16 0x80000000
MX6QDL_PAD_CSI0_DAT17__IPU1_CSI0_DATA17 0x80000000
MX6QDL_PAD_CSI0_DAT18__IPU1_CSI0_DATA18 0x80000000
MX6QDL_PAD_CSI0_DAT19__IPU1_CSI0_DATA19 0x80000000
MX6QDL_PAD_CSI0_MCLK__IPU1_CSI0_HSYNC 0x80000000
MX6QDL_PAD_CSI0_VSYNC__IPU1_CSI0_VSYNC 0x80000000
MX6QDL_PAD_CSI0_PIXCLK__IPU1_CSI0_PIXCLK 0x80000000
>;
};

pinctrl_ipu1_csi1_sodimm: ipu1-csi1-sodimm {
fsl,pins = <

MX6QDL_PAD_EIM_EB0__IPU1_CSI1_DATA11 0x80000000
MX6QDL_PAD_EIM_EB1__IPU1_CSI1_DATA10 0x80000000
MX6QDL_PAD_EIM_DA0__IPU1_CSI1_DATA09 0x80000000
MX6QDL_PAD_EIM_DA1__IPU1_CSI1_DATA08 0x80000000
MX6QDL_PAD_EIM_DA2__IPU1_CSI1_DATA07 0x80000000
MX6QDL_PAD_EIM_DA3__IPU1_CSI1_DATA06 0x80000000
MX6QDL_PAD_EIM_DA4__IPU1_CSI1_DATA05 0x80000000
MX6QDL_PAD_EIM_DA5__IPU1_CSI1_DATA04 0x80000000
MX6QDL_PAD_EIM_DA6__IPU1_CSI1_DATA03 0x80000000
MX6QDL_PAD_EIM_DA7__IPU1_CSI1_DATA02 0x80000000
MX6QDL_PAD_EIM_DA8__IPU1_CSI1_DATA01 0x80000000
MX6QDL_PAD_EIM_DA9__IPU1_CSI1_DATA00 0x80000000

MX6QDL_PAD_EIM_DA11__IPU1_CSI1_HSYNC 0x80000000
MX6QDL_PAD_EIM_DA12__IPU1_CSI1_VSYNC 0x80000000
MX6QDL_PAD_EIM_D17__IPU1_CSI1_PIXCLK 0x80000000
MX6QDL_PAD_EIM_EB2__IPU1_CSI1_DATA19 0x80000000
MX6QDL_PAD_EIM_D16__IPU1_CSI1_DATA18 0x80000000
MX6QDL_PAD_EIM_D18__IPU1_CSI1_DATA17 0x80000000
MX6QDL_PAD_EIM_D19__IPU1_CSI1_DATA16 0x80000000
MX6QDL_PAD_EIM_D20__IPU1_CSI1_DATA15 0x80000000
MX6QDL_PAD_EIM_D26__IPU1_CSI1_DATA14 0x80000000
MX6QDL_PAD_EIM_D27__IPU1_CSI1_DATA13 0x80000000
MX6QDL_PAD_EIM_D28__IPU1_CSI1_DATA12 0x80000000


>;
};
}

работает для /dev/video0


Но если раскомментарить секцию adv7180_1

то при загрузке имеем
# udevd[168]: worker [173] /devices/soc0/soc/2100000.aips-bus/21a8000.i2c/i2c-2/2-0021 is taking a long time
udevd[168]: worker [170] /devices/soc0/soc/2100000.aips-bus/21f8000.i2c/i2c-3/3-0021 is taking a long time
udevd[168]: worker [177] /devices/soc0/v4l2_cap_0 is taking a long time
udevd[168]: worker [179] /devices/soc0/v4l2_cap_1 is taking a long time


# udevd[168]: worker [173] /devices/soc0/soc/2100000.aips-bus/21a8000.i2c/i2c-2/2-0021 timeout; kill it
udevd[168]: seq 1284 '/devices/soc0/soc/2100000.aips-bus/21a8000.i2c/i2c-2/2-0021' killed
udevd[168]: worker [170] /devices/soc0/soc/2100000.aips-bus/21f8000.i2c/i2c-3/3-0021 timeout; kill it
udevd[168]: seq 1296 '/devices/soc0/soc/2100000.aips-bus/21f8000.i2c/i2c-3/3-0021' killed
udevd[168]: worker [177] /devices/soc0/v4l2_cap_0 timeout; kill it
udevd[168]: seq 1319 '/devices/soc0/v4l2_cap_0' killed
udevd[168]: worker [179] /devices/soc0/v4l2_cap_1 timeout; kill it
udevd[168]: seq 1320 '/devices/soc0/v4l2_cap_1' killed
udevd[168]: worker [170] terminated by signal 9 (Killed)
udevd[168]: worker [170] failed while handling '/devices/soc0/soc/2100000.aips-bus/21f8000.i2c/i2c-3/3-0021'
udevd[168]: worker [177] terminated by signal 9 (Killed)
udevd[168]: worker [177] failed while handling '/devices/soc0/v4l2_cap_0'

и /dev/video0 и 1 не создается.
Обмен по шине I2c в обоих случаях аппаратно (проводником ) отключен АЦП при этом работает при настройках по умолчанию. В первом случае ошибок не возникает.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 11.01.2017 00:03 Редактировалось 11.01.2017 00:09 Сообщение: 4
sasamy
4.77

Пункты: 64519
Регистрация: 14.08.2009
Надо драйвер adv7180 сильно править - там не предусмотрено больше одного устройства - структура с данными сенсора создается статически

http://git.freescale.com/git/cgit.cgi/imx/linux-imx.git/tree/drivers/media/platform/mxc/capture/adv7180.c?h=imx_4.1.15_1.0.0_ga#n71

и при регистрации второго устройства все данные первого затираются

http://git.freescale.com/git/cgit.cgi/imx/linux-imx.git/tree/drivers/media/platform/mxc/capture/adv7180.c?h=imx_4.1.15_1.0.0_ga#n1203

http://git.freescale.com/git/cgit.cgi/imx/linux-imx.git/tree/drivers/media/platform/mxc/capture/adv7180.c?h=imx_4.1.15_1.0.0_ga#n1232

Цитата

usb 1-1: device no response, device descriptor read/64, error -71
usb 1-1: new full-speed USB device number 4 using ci_hdrc
DBG sensor data is at 7f012168
DBG sensor data is at 7f012168
usb 1-1: device not accepting address 4, error -71
usb 1-1: new full-speed USB device number 5 using ci_hdrc
ERROR: v4l2 capture: slave not found!


надо переписать с выделением памяти динамически и в коде еще много надо править - во многих местах эта структура напрямую используется и это надо переписывать всё

http://git.freescale.com/git/cgit.cgi/imx/linux-imx.git/tree/drivers/media/platform/mxc/capture/adv7180.c?h=imx_4.1.15_1.0.0_ga#n275
Спуститься к концу Подняться к началу
Персональная информация
korigo
Добавлено 11.01.2017 10:18 Сообщение: 5
korigo
0

Пункты: 1331
Регистрация: 23.11.2016
А если тупо сделать второй драйвер с другим названием на базе adv7180. При этом mxc_v4l2_capture будет работать?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 11.01.2017 22:41 Редактировалось 11.01.2017 22:51 Сообщение: 6
sasamy
4.77

Пункты: 64519
Регистрация: 14.08.2009
Подправил драйвер - замените в исходниках ядра

drivers/media/platform/mxc/capture/adv7180.c

этим

https://yadi.sk/d/KQViXtzs38VCt8

На всякий случай патч для ядра

https://yadi.sk/d/tj6Q_xqR38VKER
Спуститься к концу Подняться к началу
Персональная информация
korigo
Добавлено 12.01.2017 11:09 Сообщение: 7
korigo
0

Пункты: 1331
Регистрация: 23.11.2016
Спасибо!
попробую.
Спуститься к концу Подняться к началу
Персональная информация
korigo
Добавлено 08.06.2017 17:15 Сообщение: 8
korigo
0

Пункты: 1331
Регистрация: 23.11.2016
Здравствуйте! После долгой паузы и сборки кастомной платы с двумя csi вернулся таки к вопросу.
ad7180 по отдельности описанные в dts работают на обоих csi, Если описать сразу два, то второй не работает
Возможно я неправильно dts пишу для второго

v4l2_cap_0 {
compatible = "fsl,imx6q-v4l2-capture";
ipu_id = <0>;
csi_id = <0>;
mclk_source = <0>;
status = "okay";
};

v4l2_cap_1 {
compatible = "fsl,imx6q-v4l2-capture";
ipu_id = <0>;
csi_id = <1>;
mclk_source = <0>;
status = "okay";
};

&i2c2 {
clock-frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c2_sodimm>;
status = "okay";

adv7180: adv7180@21 {
compatible = "adv,adv7180";
reg = <0x21>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ipu1_csi0_sodimm>;
clocks = <&clks 201>;
clock-names = "csi_mclk";
DOVDD-supply = <&reg_3p3v>;
AVDD-supply = <&reg_3p3v>;
DVDD-supply = <&reg_3p3v>;
PVDD-supply = <&reg_3p3v>;
csi_id = <0>;
mclk = <24000000>;
mclk_source = <0>;
cvbs = <1>;
};


adv7180_1: adv7180@41 {
compatible = "adv,adv7180";
reg = <0x41>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ipu1_csi1_sodimm>;
clocks = <&clks 201>;
clock-names = "csi_mclk";
DOVDD-supply = <&reg_3p3v>;
AVDD-supply = <&reg_3p3v>;
DVDD-supply = <&reg_3p3v>;
PVDD-supply = <&reg_3p3v>;
csi_id = <1>;
mclk = <24000000>;
mclk_source = <0>;
cvbs = <1>;
};

при загрузке драйвер ставится

DBG sensor data is at 8853f810
DBG sensor data is at 8853fc10


первый канал запускается
При запуске второго канала ругается

# ./v1.sh 9
Setting pipeline to PAUSED ...
ERROR: v4l2 capture: slave not found!
ERROR: Pipeline doesn't want to pause.
ERROR: from element /GstPipeline:pipeline0/GstImxV4l2VideoSrc:imxv4l2videosrc0: GStreamer error: state change failed and some element failed to post a proper error message with the reason for the failure.
Additional debug info:
gstbasesrc.c(3354): gst_base_src_start (): /GstPipeline:pipeline0/GstImxV4l2VideoSrc:imxv4l2videosrc0:
Failed to start
Setting pipeline to NULL ...
Freeing pipeline ...
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 08.06.2017 18:30 Сообщение: 9
sasamy
4.77

Пункты: 64519
Регистрация: 14.08.2009
Аппаратно adv7180 сконфигурированы для работы на разных адресах i2c ?

http://www.analog.com/media/en/technical-documentation/data-sheets/ADV7180.pdf

Rev. J | Page 16 of 114

Цитата

52 ALSB I This pin selects the I 2 C address for the ADV7180. For ALSB set to Logic 0, the address selected for a write is Address 0x40; for ALSB set to Logic 1, the address selected is Address 0x42.


Цитата

adv7180: adv7180@21 {
compatible = "adv,adv7180";
reg = <0x21>;
....
adv7180_1: adv7180@41 {
compatible = "adv,adv7180";
reg = <0x41>;


тут я так понимаю должно быть 0x21 и 0x20
Спуститься к концу Подняться к началу
Персональная информация
korigo
Добавлено 08.06.2017 18:39 Сообщение: 10
korigo
0

Пункты: 1331
Регистрация: 23.11.2016
В данном случае это роли не играет поскольку драйвер инициализируется и при отключенном физически I2C что и сделано сейчас на обоих каналах
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux