我正在使用带有通过 MIPI/CSI-2 接收器连接到 ADV7282a-m 的 Dart-MX6(内核 4.9.88,fsl-image-gui)的定制板。这个想法是尝试显示彩条模式来测试视频,使用 IPU1 的 CSI1 将虚拟通道设置为 1。但我总是在尝试捕获视频时遇到错误 VIDIOC_DQBUF。
与 ADV7282a-m 的驱动程序和 i2c
通信似乎工作正常(我正在使用
root@var-som-mx6:~# i2cdetect -y -r 0
| 0
| 1个
| 2个
| 3个
| 4个
| 5个
| 6个
| 7
| 8个
| 9
| A
| b
| C
| d
| 电子
| F
|
00
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
|
10
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
|
20
| 单位
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
|
30
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
|
40
| --
| --
| 单位
| --
| 单位
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
|
50
| 单位
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
|
60
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
| --
|
70
| --
| --
| --
| --
| --
| --
| --
| --
| | | | | | | | |
系统显示探测到ADV7282的驱动(查看dmesg.txt文件)
所以我们在开始时设置“Color Bars 576i MIPI Out with free-run”配置:
adv7282_write_reg:write @0x0f=0x00 退出掉电模式
adv7282_write_reg:write @0x00=0x04 ADI 要求写入
adv7282_write_reg:write @0x0c=0x37 强制自由运行模式
adv7282_write_reg:write @0x02=0x84 强制标准为 PAL
adv7282_write_reg:write @0x14=0x11 将自由运行模式设置为彩条
adv7282_write_reg:write @0x03=0x4e ADI 要求写入
adv7282_write_reg:write @0x04=0x57 上电 INTRQ 引脚
adv7282_write_reg:write @0x13=0x00 使能 INTRQ 输出驱动
adv7282_write_reg:write @0x17=0x41 选择SH1
adv7282_write_reg:write @0x1d=0xc0 三态 LLC 输出驱动器
adv7282_write_reg:write @0x52=0xcd ADI 要求写入
adv7282_write_reg:write @0x80=0x51 ADI 要求写入
adv7282_write_reg:write @0x81=0x51 ADI 要求写入
adv7282_write_reg:write @0x82=0x68 ADI 要求写入
adv7282_write_reg:write @0x5d=0x1c 启用诊断引脚 1 - Level=1.125V
adv7282_write_reg:write @0x5e=0x1c 启用诊断引脚 2 - Level=1.125V
adv7282_write_reg:write @0xfd=0x84 设置VPP映射地址
adv7282_write_reg:write @0xfe=0x88 设置CSI映射地址
adv7282_csi_write:csi_write @0x0d=0x40 程序虚拟通道#1
adv7282_vpp_write:vpp_write @0xa3=0x00 ADI 要求写入
adv7282_vpp_write:vpp_write @0x5b=0x00 I2C_DEINT_ENABLE:启用高级时序
adv7282_vpp_write:vpp_write @0x55=0x80 ADV_tiMING_MODE_EN:启用 I2P/启用 I2P 去隔行器
adv7282_csi_write:csi_write @0xde=0x02 DPHY_PWDN_CTL:给 MIPI D-PHY 上电
adv7282_csi_write:csi_write @0xd2=0xf7 ADI 要求写入
adv7282_csi_write:csi_write @0xd8=0x65 ADI 要求写入
adv7282_csi_write:csi_write @0xe0=0x09 ADI 要求写入
adv7282_csi_write:csi_write @0x2c=0x00 ADI 要求写入
adv7282_csi_write:csi_write @0x00=0x00 启动 MIPI CSI-2
您可以查看设备树(检查 imx6qdl-var-dart .dtsi)
有关 video0 的信息在系统中定义:
root@var-som-mx6:~# v4l2-ctl --device /dev/video0 --all
驱动程序信息(不使用 libv4l2):
驱动名称:mxc_v4l2
卡的种类 :
巴士信息:
驱动版本:0.1.11
能力:0x05000005
视频截取
视频叠加
读/写
串流
视频输入:0(CSI IC MEM:正常)
视频输出:0(DISP3 BG)
视频标准 = 0x00ffffff
PAL-B/B1/G/H/I/D/D1/K/M/N/Nc/60
NTSC-M/M-JP/443/M-KR
SECAM-B/D/G/H/K/K1/L/Lc
格式化视频捕获:
宽度/高度:288/352
像素格式:'YU12'
字段:任何
每行字节数:432
尺寸图片 : 152064
色彩空间:默认
传递函数:默认
YCbCr/HSV 编码:默认
量化:默认
格式视频叠加:
左/上:0/0
宽度/高度:160/160
字段:任何
色度键:0x00000000
全球阿尔法:0x00
剪辑数:0
剪辑位图:否
帧缓冲区格式:
能力:外部覆盖
标志:覆盖匹配捕获/输出大小
宽度 : 0
高度 : 0
像素格式:''
作物能力视频捕捉:
边界:左 0,上 0,宽度 720,高度 625
默认值:左侧 0,顶部 0,宽度 720,高度 625
像素长宽比:0/0
裁剪:左侧 0,顶部 0,宽度 720,高度 576
流参数视频捕获:
每秒帧数:30.000 (30/1)
读取缓冲区:0
流媒体参数视频输出:
每秒帧数:无效 (0/0)
写缓冲区:0
我使用 gstreamer 捕获视频,但出现错误 VIDIOC_DQBUF:
root@var-som-mx6:~# GST_DEBUG=3 gst-launch-1.0 imxv4l2videosrc 输入=0!imxipu视频转换!队列 !imxg2dvideosink async=false sync=false
将管道设置为 PAUSED ...
0:00:01.948636667 831 0x14a0160 警告 imxv4l2videosrc v4l2src.c:124:gst_imx_v4l2src_is_tvin: VIDIOC_QUERYSTD 失败:参数无效
管道是实时的,不需要 PREROLL ...
将管道设置为 PLAYING ...
新时钟:GstSystemClock
0:00:14.441503668 831 0x1490c30 错误 imxv4l2bufferpool v4l2_buffer_pool.c:275:gst_imx_v4l2_buffer_pool_acquire_buffer: VIDIOC_DQBUF 失败:计时器过期
0:00:14.441826002 831 0x1490c30 WARN basesrc gstbasesrc.c:2939:gst_base_src_loop: 错误:内部数据流错误。
0:00:14.441987002 831 0x1490c30 WARN basesrc gstbasesrc.c:2939:gst_base_src_loop: 错误:流媒体停止,原因错误 (-5)
错误:来自元素 /GstPipeline:pipeline0/GstImxV4l2VideoSrc:imxv4l2videosrc0:内部数据流错误。
附加调试信息:
../../../../gstreamer-1.12.4/libs/gst/base/gstbasesrc.c(2939): gst_base_src_loop (): /GstPipeline:pipeline0/GstImxV4l2VideoSrc:imxv4l2videosrc0:
流媒体停止,原因错误 (-5)
执行在 0:00:10.954862668 之后结束
将管道设置为 PAUSED ...
将管道设置为 READY ...
将管道设置为 NULL ...
释放管道...
启动 gstreamer 时系统的输出可以在文件 dmesg_gstreamer.txt 中找到
在这里,您可以在播放 gstreaming 的管道时看到 iMX6 的一些寄存器:
内存映射名称
| 绝对地址
| 价值
|
IPU_CONF
| 0x02600000
| 0xA0000006
|
IPU_INT_CTRL_1
| 0x0260003C
| 0x00100000
|
IPU_INT_STAT_1
| 0x02600200
| 0x0
|
IPU1_CSI1_SENS_CONF
| 0x02638000
| 0x02000A00
|
IPU1_CSI1_SENS_FRM_SIZE
| 0x02638004
| 0x027002CF
|
IPU1_CSI1_ACT_FRM_SIZE
| 0x02638008
| 0x023F02CF
|
IPU1_CSI1_DI
| 0x02638020
| 0XFFFFFF1E
|
CSI2IPU
| 0x021DCF00
| 0x0
|
我也尝试使用 mxc_v4l2 测试,但得到了同样的错误:
root@var-som-mx6:~# /unit_tests/V4L2/mxc_v4l2_tvin.out -720 -ih 576 -ow 720 -oh 576 -fr 30 -m 1
---- 运行 < /unit_tests/V4L2/mxc_v4l2_tvin.out > 测试 ----
电视解码芯片是adv7282-m_decoder
驱动程序=mxc_vout,卡=DISP4 FG,总线=,版本=0x00040958,功能=0x84200002
fmt 16 位 RGB 5-6-5:fourcc = 0x50424752
fmt 24 位 BGR 8-8-8:fourcc = 0x33524742
fmt 24 位 RGB 8-8-8:fourcc = 0x33424752
fmt 32 位 A/XRGB 8-8-8-8:fourcc = 0x34424752
fmt 32 位 BGRA/X 8-8-8-8:fourcc = 0x34524742
fmt Y/CbCr 4:2:0: fourcc = 0x3231564e
fmt UYVY 4:2:2: fourcc = 0x59565955
fmt YUYV 4:2:2: fourcc = 0x56595559
fmt 平面 YUV 4:2:2: fourcc = 0x50323234
fmt 16 位 A/XYUV 4-4-4-4:fourcc = 0x34343459
fmt 平面 YUV 4:2:0: fourcc = 0x32315559
fmt 平面 YVU 4:2:0: fourcc = 0x32315659
fmt 平铺 NV12P:fourcc = 0x50564e54
fmt TILED NV12F:fourcc = 0x46564e54
fmt YUV444 平面:fourcc = 0x50343434
开始时间 = 1681476766 s, 327261 us
VIDIOC_DQBUF 失败。
---- 测试 < /unit_tests/V4L2/mxc_v4l2_tvin.out > 结束 ----
有人可以帮我找出我缺少的东西或我做错了什么吗?