Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

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

User Info


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

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

Ник:
Пароль:

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

ОбновитьПодробнееВсегоВсего:6
Форум » starterkit.ru » Отладочные платы » SK-iMX6Q
SK-IMX6Q и OV2640
702
Добавлено 03.02.2014 17:29
0
Сообщение: 1
702
0

Пункты: 289
Регистрация: 27.10.2011
Здравствуйте.

Пытаюсь подцепить камеру OV2640 к SK-IMX6Q
Камеру подсоединил к разъему X3, согласно схемы.
В качестве тактового питания запрограммировал PWM4.

Камера i2cdetect'ом сканируется.

Ядро 3.0.35

В дереве 2 ветки с драйвером OV2640:

/drivers/media/video
и
/drivers/media/video/mxc/capture

Первый говорит при загрузке, что мол:
"Missing platform data for driver"

и вываливается. Второй, фрискейловский, грузится.

При пинках в /dev/video0 осциллоскопом видно, что по I2C
идет обмен.

Но
gst-launch v4l2src device=/dev/video0 ! 'video/x-raw-yuv,width=800,
height=600,framerate=15' ! xvimagesink
выдает
ERROR: pipeline could not be constructed: no element "v4l2src".

V4L вместе с захватом и всем сопутствующим (кроме драйвера камеры)
вкомпилены в ядро.

modprobe mxc_v4l2_capture говорит, что
module mxc_v4l2_capture not found in modules.dep. И ведь не врет!


Попытка сделать mxc_v4l2_capture модулем приводит во время
сборки к ошибке:
ERROR: "csi_regbase" [drivers/media/video/mxc/capture/csi_v4l2_capture.ko] undefined!

Куда копать?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 04.02.2014 09:28 Сообщение: 2
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Соберите лучше этот буилдрут

http://www.starterkit.ru/html/index.php?name=forum&op=view&id=21289&num=2#21653

в штатном не знаю - есть ли фрискейловские плагины. Примеры работы с gstreamer из командной строки есть тут

https://community.freescale.com/docs/DOC-94588

для камеры на IPU надо использовать плагин mfw_v4lsrc

чтобы правильно работало - надо в ядре в бордфайле вместо adv7180 прописать вашу камеру, в ядре есть пример для ov564x

http://git.freescale.com/git/cgit.cgi/imx/linux-2.6-imx.git/tree/arch/arm/mach-mx6/board-mx6q_sabrelite.c?h=imx_3.0.35_4.1.0#n594
Спуститься к концу Подняться к началу
Персональная информация
702
Добавлено 04.02.2014 15:37 Сообщение: 3
702
0

Пункты: 289
Регистрация: 27.10.2011
Благодарю, буду пробовать.
По результатам отпишусь.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 05.02.2014 08:37 Редактировалось 05.02.2014 08:43 Сообщение: 4
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Забыл еще сказать - по умолчанию ядро соберется без поддержки OV2640, чтобы включить в ядре - лучше сделать это в самом буилдруте после того как все соберется (рекомендую начать с make imx6sk_gstreamer_defconfig чтобы ждать мньше)

make linux-menuconfig

Device Drivers --->
Multimedia support --->
Video capture adapters --->
MXC Camera/V4L2 PRP Features support --->
<M> OmniVision ov2640 camera support

выход из конфигуратора

make

исходники ядра будут после сборки в каталоге
buildroot-2013.11-sk/output/build/linux-custom

готовые имиджи ядра и корневой ФС в
buildroot-2013.11-sk/output/images

в буилдруте собирать удобней тем что у вас модули всегда корректно окажутся в образе ФС.
Спуститься к концу Подняться к началу
Персональная информация
702
Добавлено 06.02.2014 20:56 Сообщение: 5
702
0

Пункты: 289
Регистрация: 27.10.2011
Скачал билдрут, пропатчил в соответствии с Вашими рекомендациями board файл.
Собрал, загрузил на плату. Ух, и долго rootfs_update_tftp архив грузит!
Чисто диалап. Я уж думал, зависло, нет, смотрю, светодиод на сети мыргает.
mxc_v4l2_capture модулем грузится. Разобрался, кстати, с чем в старом ядре
конфликтовал.
Но...

# modprobe mxc_v4l2_capture
# ERROR: v4l2 capture: slave not found!

И

gst-launch mfw_v4lsrc ! mfw_v4lsink

MFW_GST_V4LSRC_PLUGIN 3.0.9 build on Feb 1 2014 17:08:08.
write reg error: reg=d, val=87
ERROR: v4l2 capture: slave not found!
MFW_GST_V4LSINK_PLUGIN 3.0.9 build on Feb 1 2014 17:08:05.
Setting pipeline to PAUSED ...
write reg error: reg=43, val=11
ERROR: Pipeline doesn't want to pause.
Setting pipeline to NULL ...
Total rendered:0
Freeing pipeline ...
[--->FINALIZE v4l_sink

Драйвер инициализирует в камере несколько десятков регистров,
и на каких-то наступает сбой на i2c.
Причем, каждый раз на других. Закономерности нет.

При этом если драйвер камеры выгрузить, то i2cdump'ом
стабильно считываются без сбоев все 256 регистров.
В чем дело, непонятно.

Я вот смотрю в исходник драйвера камеры. Там перепрограммируется выход clko2
на 24 Мгц для тактирования камеры. На разъем X3 этот clko2 не выведен
(поэтому я использую PWM4, что не совсем правильно, но не суть). Зато clko2
подведен к аудиокодеку, который висит на той же i2c, но работает на 12 Мгц.
Может, на 24 МГц у аудиокодека крышу срывает, и он неправильно декодирует
адрес и лезет на шину невпопад?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 06.02.2014 22:56 Редактировалось 06.02.2014 23:12 Сообщение: 6
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Цитата

# modprobe mxc_v4l2_capture
# ERROR: v4l2 capture: slave not found!


Ничего страшного - одного из слейвов просто не находит - его нет :)

Цитата

Я вот смотрю в исходник драйвера камеры. Там перепрограммируется выход clko2
на 24 Мгц для тактирования камеры.


С чего бы это ? Вы похоже перемудрили в board-файле сильно и лишнего навписывали - выложите куда-нибуть его напосмотреть (board-mx6q_sabrelite.c который у вас получился, можно на http://pastebin.com/). Во первых там clko прописан, а во вторых вы сами и указываете надо ли быть мастер клоком для камеры. Там надо было 5 строчек добавить если сброс по питания для камеры не делать.
Спуститься к концу Подняться к началу
Персональная информация
702
Добавлено 07.02.2014 15:29 Сообщение: 7
702
0

Пункты: 289
Регистрация: 27.10.2011
Положил.
http://pastebin.com/rBWC4Gt7

Кажись, разобрался.
Подключение к плате у меня через мультиплексор на 3 камеры.
Плюнул, припаял напрямую. Ошибки записи в регистр прошли.
Так что проблема все-таки в железе.

Самое интересное, что когда вернул на мультиплексор,
сбои проявились, но стали о-очень редкие. Надо малость мультиплексор
подправить. У меня SDATA коммутируется, а SCK насквозь.
Правильнее наоборот.

Но все равно:

gst-launch mfw_v4lsrc ! mfw_v4lsink

MFW_GST_V4LSRC_PLUGIN 3.0.9 build on Feb 1 2014 17:08:08.
ERROR: v4l2 capture: slave not found!
MFW_GST_V4LSINK_PLUGIN 3.0.9 build on Feb 1 2014 17:08:05.
Setting pipeline to PAUSED ...
ERROR: Pipeline doesn't want to pause.
Setting pipeline to NULL ...
Total rendered:0
Freeing pipeline ...
[--->FINALIZE v4l_sink

--gst-debug *:3 не говорит ничего интересного, кроме:

---x-----
mfw_v4lsrc mfw_gst_v4lsrc.c:480:mfw_gst_v4lsrc_capture_setup: VIDIOC_DBG_G_CHIP_IDENT failed.
0:00:00.293932737  328 0x20e00 ERROR   mfw_v4lsrc

mfw_gst_v4lsrc.c:504:mfw_gst_v4lsrc_capture_setup: enum framesizes failed for capture mode 0
0:00:00.294017403  328 0x20e00 ERROR   mfw_v4lsrc

mfw_gst_v4lsrc.c:1027:mfw_gst_v4lsrc_start: v4lsrc:error in opening the device

---x-------

Какой следующий шаг?
Спуститься к концу Подняться к началу
Персональная информация
702
Добавлено 07.02.2014 16:52 Сообщение: 8
702
0

Пункты: 289
Регистрация: 27.10.2011
Нашел вот такое обсуждение:
https://lists.yoctoproject.org/pipermail/meta-freescale/2013-May/002773.html
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 07.02.2014 20:41 Редактировалось 07.02.2014 20:45 Сообщение: 9
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Цитата

Нашел вот такое обсуждение:


Похоже для imx6 официально не поддерживается ov2640 и у boundary devices в git не патченый драйвер

https://github.com/boundarydevices/linux-imx6/tree/boundary-imx_3.0.35_4.1.0

похоже обиделся там парень и не стал высылать патч :)
Кстати вы правы - clko2 захардкоден и если не закоментировать вызов set_mclk_rate в драйвере сенсора то он испортит звук, я кстати это уже видел раньше только забыл

} else if (cpu_is_mx6q() || cpu_is_mx6dl()) {
if (csi == 0) {
if (machine_is_mx6q_sabrelite())
mclk = "clko2_clk";
else
mclk = "clko_clk";

Посмотрел - в драйвере ov2640 надо совсем немного дописать - думаю и сами справитесь по примеру ov5640.c например сделать. В бордфайле на pastebin.com у вас вроде все верно исправлено. Если хотите - я могу дописать и выложить, но у вас железо есть а у меня нет да и вам самому наверно интересней :) Там три или четыре ioctl не написаны если сравнить с драйвером ov5640
/*!
* This structure defines all the ioctls for this module and links them to the
* enumeration.
*/
static struct v4l2_int_ioctl_desc ov2640_ioctl_desc[] = {
Спуститься к концу Подняться к началу
Персональная информация
702
Добавлено 07.02.2014 23:18 Сообщение: 10
702
0

Пункты: 289
Регистрация: 27.10.2011
Действительно.
Привел драйвер в соответствие,- заработало!
Правда, цвета все перепутаны, похоже камера rgb выдает,
а рисуется из yuv. Но это - дело техники, разберусь.

Большое спасибо за помощь! Без Ваших подсказок намного
дольше провозился бы.

Но возникла другая проблема. Подключил монитор HDMI,
примерно после от 2 до 10 минут работы гаснет, а в консоли
с периодом в секунду-две генерятся сообщения "Some EDID Some EDID"
Помогает только перезагрузка.
Со старым ядром это не проявлялось.
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Отладочные платы » SK-iMX6Q