Author Topic: Нужна помощь по CSI интерфейсу  (Read 7101 times)

mavrsmart

  • Guest
Нужна помощь по CSI интерфейсу
« on: March 27, 2014, 09:08:36 pm »
Плата CubieBoard2.
Есть источник видео, собран на FPGA. Передавать видео могу в формате RAW (D0-D7,HS,VS,PCLK) или в формате BT656 (D0-D7, PCLK). Нужно получить видео на кубик.
В fex файле указал (настраивал в режим BT656):

Quote
[csi1_para]
csi_used = 1
csi_mode = 0
csi_dev_qty = 1
csi_stby_mode = 0
csi_mname = "ov5640"
csi_if = 3
csi_iovdd = "axp20_pll"
csi_avdd = "axp20_pll"
csi_dvdd = ""
csi_vol_iovdd =
csi_vol_dvdd =
csi_vol_avdd =
csi_vflip = 0
csi_hflip = 0
csi_flash_pol = 1
csi_facing = 0
csi_twi_id = 1
csi_twi_addr = 0x78
csi_pck = port:PG00<3><default><default><default>
csi_d0 = port:PG04<3><default><default><default>
csi_d1 = port:PG05<3><default><default><default>
csi_d2 = port:PG06<3><default><default><default>
csi_d3 = port:PG07<3><default><default><default>
csi_d4 = port:PG08<3><default><default><default>
csi_d5 = port:PG09<3><default><default><default>
csi_d6 = port:PG10<3><default><default><default>
csi_d7 = port:PG11<3><default><default><default>

Из-за того, что FPGA не обменивается по шине i2c, мне пришлось отключить в драйвере субустройства (gc0308, ov5640 - пробовал разные) обмен по i2c. В функциях read и write поставил ret 0. Отключил проверку на правильное устройство.
Получил результат:

Quote
[   10.837278] [CSI]Welcome to CSI driver
[   10.838863] [CSI]csi_init
[   10.841872] [CSI_DEBUG]csi_probe
[   10.845660] [CSI_DEBUG]dev->ccm_cfg[0] = bf01de70
[   10.849750] [CSI_DEBUG]dev->ccm_cfg[0]->ccm = ov5640
[   10.853361] [CSI_DEBUG]dev->ccm_cfg[0]->twi_id = 1
[   10.857588] [CSI_DEBUG]dev->ccm_cfg[0]->i2c_addr = 78
[   10.861453] [CSI_DEBUG]dev->ccm_cfg[0]->interface = 3
[   10.866725] [CSI_DEBUG]dev->ccm_cfg[0]->vflip = 0
[   10.872545] [CSI_DEBUG]dev->ccm_cfg[0]->hflip = 0
[   10.891197] [CSI_DEBUG]dev->ccm_cfg[0]->iovdd_str = axp20_pll
[   10.899896] [CSI_DEBUG]dev->ccm_cfg[0]->avdd_str = axp20_pll
[   10.903641] [CSI_DEBUG]dev->ccm_cfg[0]->dvdd_str =
[   10.910761] [CSI_DEBUG]dev->ccm_cfg[0]->flash_pol = 1
[   10.933427] [CSI]registered sub device,input_num = 0
[   10.937921] axp20_ldo3: Failed to create debugfs directory
[   10.942725] axp20_ldo3: Failed to create debugfs directory
[   10.947311] [CSI_DEBUG]dev->ccm_cfg[0]->sd = ee277b00
[   10.953873] [CSI_DEBUG]dev->ccm_cfg[0]->ccm_info = bf01df0c
[   10.958084] [CSI_DEBUG]dev->ccm_cfg[0]->ccm_info.iocfg = 0
[   10.962448] [CSI_DEBUG]dev->ccm_cfg[0]->ccm_info.vref = 0
[   10.966551] [CSI_DEBUG]dev->ccm_cfg[0]->ccm_info.href = 1
[   10.970727] [CSI_DEBUG]dev->ccm_cfg[0]->ccm_info.clock = 1
[   10.975628] [CSI_DEBUG]dev->ccm_cfg[0]->ccm_info.mclk = 24000000
[   10.979634] [CSI_DEBUG]dev->ccm_cfg[0]->iovdd = eebf9240
[   10.983691] [CSI_DEBUG]dev->ccm_cfg[0]->avdd = eebf92c0
[   10.987621] [CSI_DEBUG]dev->ccm_cfg[0]->dvdd =   (null)
[   10.991790] [CSI]V4L2 device registered as video1
[   11.069808] [CSI_DEBUG]csi_open
[   11.073400] [ccu-err] clk_enable: invalid handle
[   11.550318] [CSI][OV5640]disalbe oe!

При подключении к камере получаю:
Quote
[   43.264328] [CSI_DEBUG]csi_open
[   43.267953] [ccu-err] clk_enable: invalid handle
[   43.740275] [CSI][OV5640]disalbe oe!
[   44.241832] [CSI]sensor initial success when csi open!
[   44.461124] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.464290] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.467435] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.470586] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.474394] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.477540] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.480680] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.484301] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.487455] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.490597] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.494194] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.497340] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.500481] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.505760] [CSI_ERR]v4l2 sub device queryctrl error!
[   44.535839] [CSI_ERR]input index invalid!
[   44.539347] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.543341] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.546530] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.549706] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.553445] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.556645] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.559815] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.563488] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.566663] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.569835] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.573486] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.576664] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.593414] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.596571] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.599712] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.603606] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.606773] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.609915] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.613217] [CSI_DEBUG]vidioc_reqbufs
[   44.615411] [CSI_DEBUG]buffer_setup
[   44.619502] [CSI_ERR]buffer count is invalid, set to 3
[   44.624294] [CSI]buffer_setup, buffer count=3, size=0
[   44.626849] [CSI_DEBUG]vidioc_reqbufs
[   44.646437] [CSI_ERR]v4l2 sub device queryctrl error!
[   44.650504] [CSI_ERR]v4l2 sub device queryctrl error!
[   44.655157] [CSI_ERR]v4l2 sub device queryctrl error!
[   44.804923] [CSI_ERR]v4l2 sub device g_ctrl error!
[   44.849953] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   44.855013] [CSI_ERR]v4l2 sub device queryctrl error!
[   49.371110] [CSI_DEBUG]vidioc_enum_fmt_vid_cap
[   49.388551] [CSI_DEBUG]vidioc_try_fmt_vid_cap
[   49.400238] [CSI_DEBUG]pix->width=640
[   49.402746] [CSI_DEBUG]pix->height=480
[   49.406715] [CSI_DEBUG]vidioc_try_fmt_vid_cap
[   49.409093] [CSI_DEBUG]pix->width=640
[   49.420283] [CSI_DEBUG]pix->height=480
[   49.423302] [CSI_DEBUG]vidioc_s_fmt_vid_cap
[   49.426358] [CSI_DEBUG]vidioc_try_fmt_vid_cap
[   49.428722] [CSI_DEBUG]pix->width=640
[   49.450246] [CSI_DEBUG]pix->height=480
Картинки нет. v4l2 судя по всему меня посылает по причине, отсутствия каких-то считываемых данных с камеры.

Мне кажется, что нужно в драйвере субустройства передавать в v4l2 данные о текущем формате.
Может есть у кого-то драйвер камеры с отвязанным i2c? Или подскажите, как правильно i2c отвязать.

Offline ua3prq

  • Moderator
  • Hero Member
  • *****
  • Posts: 660
  • Karma: +14/-1
    • View Profile
Re: Нужна помощь по CSI интерфейсу
« Reply #1 on: March 29, 2014, 01:27:57 pm »
Вот это специфика...
Попробуйте на EN с такими делами, вдруг коллегу найдете.

Offline Hve

  • Newbie
  • *
  • Posts: 39
  • Karma: +0/-0
    • View Profile
Re: Нужна помощь по CSI интерфейсу
« Reply #2 on: March 30, 2014, 05:36:24 am »
Вот это специфика...

Нормальная такая специфика :) Можно много чего для умного дома сделать (автоматическое открывание двери/ворот например)


Что за камера у вас? ov5640? Возможно проверку на правильность устройства отключать не стоило. V4L2 не знает чего это такое к нему подключили и работать с устройством естественно отказывается. [   44.505760] [CSI_ERR]v4l2 sub device queryctrl error!
[   44.535839] [CSI_ERR]input index invalid! Эти строчки могут и об этом говорить. А ещё что мне всегда непонятно было - так это что в порт при загрузке передавать. В fex'e строчки вида csi_pck = port:PG00<3><default><default><default> для меня тёмный лес. И это не только CSI касается. Вот здесь https://groups.google.com/forum/#!category-topic/cubieboard/SWzC9qvpVL8 тоже камеру похоже зацепить не удалось

Offline Hve

  • Newbie
  • *
  • Posts: 39
  • Karma: +0/-0
    • View Profile
Re: Нужна помощь по CSI интерфейсу
« Reply #3 on: March 30, 2014, 06:28:05 am »
Если http://linux-sunxi.org/Fex_Guide смотреть, то более менее понятно становится откуда "<<3>>" берётся. Хотя там вполне и 4 и 5 могут быть

mavrsmart

  • Guest
Re: Нужна помощь по CSI интерфейсу
« Reply #4 on: March 30, 2014, 06:46:00 am »
Проблема в том, что FPGA получает данные с камеры по LVDS (досталась в наследство производственная сверхчувствительная ч/б камера), преобразует видеопоток в нужный мне формат и разрешение, и выдает только видеопоток.
sun4i_csi1 может использовать только субустройства находящиеся в папке devices. Все камеры из этой папки управляемые по i2c. Вот и появилась нездоровая тема вырезать из какого нибудь драйвера камеры работу по i2c, что-бы csi модуль думал, что к нему подключена камера и начал принимать видеопоток.
Такое я когда-то проворачивал на давинчике DM8148. После отвязки i2c в модуле оцифровщика видео, картинка была получена.
В fexе я устанавливал 3 для включения приема видеопотока в формате BT656. Но судя по логам я затыкаюсь на драйвере камеры. Дальнейшее копание привело к тому, что v4l2 пытается выделить буффер для картинки, но  в конечном счете выделяет 0 байт и вылетает в исключение. Видимо в какой-то момент нужно передать формат картинки, но здесь я завис.

Offline Hve

  • Newbie
  • *
  • Posts: 39
  • Karma: +0/-0
    • View Profile
Re: Нужна помощь по CSI интерфейсу
« Reply #5 on: March 30, 2014, 07:21:27 am »
Между 3, 4 и 5 тоже разница есть. И все они для потока в формате BT656. Там в секции гляньте табличку 3 - bt656 1ch, 4 -bt656 2ch, 5 - bt656 4ch. Попробуйте камеру на CSI0 посадить. Там точно i2c нету железно. Драйверок наверняка нужно будет подбирать и допиливать. В этом я точно не смогу помочь

mavrsmart

  • Guest
Re: Нужна помощь по CSI интерфейсу
« Reply #6 on: March 30, 2014, 07:32:18 am »
На CSI0 нет PCLK линии. Покрайней мере я ее не нашел в схеме.
А через fex можно подключить к CSI0 ноги от CSI1?
« Last Edit: March 30, 2014, 07:39:46 am by mavrsmart »

Offline Hve

  • Newbie
  • *
  • Posts: 39
  • Karma: +0/-0
    • View Profile
Re: Нужна помощь по CSI интерфейсу
« Reply #7 on: March 30, 2014, 08:18:55 am »
Нее так точно не получится. Я вот тут о хардварном конверторе LVDS-CSI для камеры подумал. Благо их много всяких разных. Даже с обсуждением есть http://electronix.ru/forum/lofiversion/index.php/t111147.html Только нас CSI MIPI интересует
« Last Edit: March 30, 2014, 08:41:24 am by Hve »