完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在使用基于 i.MX8QM 处理器的 Variscite SPEAR-MX8 评估套件,并创建了一个自定义 MIPI CSI-2 分线板,该分线板通过 MIPI-CSI2 0 和 MIPI-CSI2 1 通道上的 4 个通道连接 IMX290,即我安装两个摄像头。
我已经从这里移植了 IMX290 的 I2C 驱动程序(我相信它工作正常): https://github.com/raspberrypi/linux/blob/rpi-5.15.y/drivers/media/i2c/imx290.c 与我的要求的主要区别在于,上述解决方案用于传输 V4L2_PIX_FMT_SGRBG10 格式图像,而我希望传输灰度而非彩色的 V4L2_PIX_FMT_Y10(甚至 V4L2_PIX_FMT_Y12)图像。 通过使用以下命令,我能够从相机捕获图像,但图像到达不正确,数据中仅包含 64 个唯一值(6 位深度???): v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat='Y10' --stream-mmap 2 --stream-count=1 --stream-to=test .raw --verbose 我的相关Device Tree设置如下: &i2c_mipi_csi0 { /delete-node/ov5640_mipi@3c; imx290_mipi0: imx290_mipi@1a { compatible = "sony,imx290-mono"; reg = <0x1a>; pinctrl-名称=“默认”; pinctrl-0 = <&pinctrl_mipi_csi0>; 时钟 = <&xtal24m>; 时钟名称=“xclk”; 时钟频率=<37125000>; csi_id = <0>; powerdown-gpios = <&lsio_gpio1 28 GPIO_ACTIVE_HIGH>; 重置-gpios = <&lsio_gpio1 27 GPIO_ACTIVE_LOW>; mclk = <24000000>; mclk_source = <0>; mipi_csi; 状态=“好的”; 端口 { imx290_mipi_0_ep: 端点 { 远程端点 = <&mipi_csi0_ep>; 数据通道 = <1 2 3 4>; 链路频率=/位/64 <148500000 222750000 297000000 445500000>; 时钟通道=<0>; }; }; }; }; &i2c_mipi_csi1 { /delete-node/ov5640_mipi@3c; imx290_mipi1: imx290_mipi@1a { compatible = "sony,imx290-mono"; reg = <0x1a>; pinctrl-名称=“默认”; pinctrl-0 = <&pinctrl_mipi_csi1>; 时钟 = <&xtal24m>; 时钟名称=“xclk”; 时钟频率=<37125000>; csi_id = <1>; powerdown-gpios = <&lsio_gpio1 31 GPIO_ACTIVE_HIGH>; 重置-gpios = <&lsio_gpio1 30 GPIO_ACTIVE_LOW>; mclk = <24000000>; mclk_source = <0>; mipi_csi; 状态=“好的”; 端口 { imx290_mipi_1_ep: 端点 { 远程端点 = <&mipi_csi1_ep>; 数据通道 = <1 2 3 4>; 链路频率=/位/64 <148500000 222750000 297000000 445500000>; 时钟通道=<0>; }; }; }; }; &isi_0 { 状态=“好的”; cap_device { status = "okay"; }; m2m_device { 状态=“禁用”; }; }; &isi_1 { status = "禁用"; }; &isi_2 { status = "禁用"; }; &isi_3 { status = "禁用"; }; &isi_4 { status = "okay"; cap_device { status = "okay"; }; m2m_device { 状态=“禁用”; }; }; &isi_5 { status = "禁用"; }; &isi_6 { status = "禁用"; }; &isi_7 { status = "禁用"; }; &mipi_csi_0 { /delete-node/port@0; /* 相机 0 MIPI CSI-2 (CSIS0) */ port@0 { reg = <0>; mipi_csi0_ep:端点{ 远程端点=<&imx290_mipi_0_ep>; 数据通道 = <1 2 3 4>; }; }; }; &mipi_csi_1 { /delete-node/port@1; /* 相机 1 MIPI CSI-2 (CSIS1) */ port@1 { reg = <1>; mipi_csi1_ep:端点{ 远程端点=<&imx290_mipi_1_ep>; 数据通道 = <1 2 3 4>; }; }; }; 我已经确定包括所涉及的各种元素和相关的c文件的配置如下: IMX290 -> mxc-mipi-csi2 -> mxc_isi -> mxc_isi.capture imx290.c -> imx8-parallel-csi.c -> imx8-isi-hw.c -> imx8-isi-cap.c imx290 5-001a -> mxc-mipi-csi2.0 -> mxc_isi.0 -> mxc_isi.0.capture /dev/v4l-subdev5 -> /dev/v4l-subdev2 -> /dev/v4l-subdev0 -> /开发/视频0 imx290 6-001a -> mxc-mipi-csi2.1 -> mxc_isi.4 -> mxc_isi.4.capture /dev/v4l-subdev4 -> /dev/v4l-subdev3 -> /dev/v4l-subdev1 -> /开发/视频1 一切似乎都在连接,这些是相关的 dmesg 条目: [1.104816]mxc-isi 58100000.isi:mxc_isi.0注册成功 [1.111512]mxc-isi 58140000.isi:mxc_isi.4注册成功 [1.135744]mxc-mipi-csi2 58227000.csi:车道:4,名称:mxc- mipi-csi2.0 [ 1.159759] mxc-mipi-csi2 58247000.csi: 车道: 4, 名称: mxc-mipi-csi2.1 [ 1.654458] 链接频率 0 值 148500000 [ 1.658916] 链接频率 1 值 222750033 [ 69.66633] ] 链接频率 2 值 297000000 [ 1.667814] 链接频率 3 值 445500000 [ 1.672298] imx290 5-001a: 5-001a 电源 vdda 未找到,使用虚拟调节器 [ 1.679570] imx290 5-001a: 5-001 nota 找到电源 vdd ,使用虚拟调节器 [1.686832]imx290 5-001a:5-001a supply vdddo not found,使用虚拟调节器 [1.730977]链接频率0值148500000 [1.735440]链接频率1值222750000 [1.739886]链接频率2值297000000 [1.74443333]链接链接3值3值4445500000 [1.74888888888888888888888888888888888888880A:发现,使用虚拟调节器 [1.756075] imx290 6-001a:6-001a 电源 vddd 未找到,使用虚拟调节器 [1.763333] imx290 6-001a:6-001a 电源 vdddo 未找到,使用虚拟调节器 [1.946591] mx8-img- md:将 mxc_isi.0.capture 注册为/dev/video0 [1.953157] mx8-img-md:将 mxc_isi.4.capture 注册为/dev/video1 [1.959593] mx8-img-md:注册传感器子设备:imx290 6-001a (1) [1.966135]mx8-img-md:注册传感器子设备:imx290 5-001a(2) [1.972674]mx8-img-md:创建链接[mxc_isi.0]=>[mxc_isi.0.capture] [1.979301]mx8-img-md:创建链接[mxc-mipi-csi2.0]=>[mxc_isi。 0] [ 1.985754] mx8-img-md: 创建链接 [mxc_isi.4] => [mxc_isi.4.capture] [ 1.992372] mx8-img-md: 创建链接 [mxc-mipi-csi2.1] => [ mxc_isi.4] [ 1.998821] mx8-img-md: 创建链接 [imx290 5-001a] => [mxc-mipi-csi2.0] [ 2.005615] mx8-img-md: 创建链接 [imx290 6-001a] = > [mxc-mipi-csi2.1] 我认为我被绊倒的地方是将 Y10_1X10 图像格式专门从相机传输到 isi 捕获设备(我想以 Y10_1X10 格式捕获图像)。 I2C 驱动程序 (imx290.c) 独立于实际传输图像数据,我相信它工作正常。 ISI 硬件 (imx8-isi-hw.c) 按照前面的示例补丁进行设置,以绕过数据传输过程中的任何图像处理: /* 设置 outbuf 格式 */ val |= dst_fmt->color << CHNL_IMG_CTRL_FORMAT_OFFSET; mxc_isi->cscen = 1; 如果(dst_fmt->fourcc == V4L2_PIX_FMT_Y10) { goto bypass_csc; } if(dst_fmt->fourcc == V4L2_PIX_FMT_Y12) { goto bypass_csc; } if (is_yuv(src_fmt->fourcc) && is_rgb(dst_fmt->fourcc)) { /* YUV2RGB */ csc = YUV2RGB; /* YCbCr 使能???*/ val |= (CHNL_IMG_CTRL_CSC_MODE_YCBCR2RGB << CHNL_IMG_CTRL_CSC_MODE_OFFSET); val |= (CHNL_IMG_CTRL_YCBCR_MODE_ENABLE << CHNL_IMG_CTRL_YCBCR_MODE_OFFSET); } else if (is_rgb(src_fmt->fourcc) && is_yuv(dst_fmt->fourcc)) { /* RGB2YUV */ csc = RGB2YUV; val |= (CHNL_IMG_CTRL_CSC_MODE_RGB2YCBCR << CHNL_IMG_CTRL_CSC_MODE_OFFSET); } else { /* 绕过 CSC */ bypass_csc: pr_info("绕过 cscn"); mxc_isi->cscen = 0; val |= CHNL_IMG_CTRL_CSC_BYPASS_ENABLE; } 剩下两个控制 c 文件 imx8-parallel-csi.c 和 imx8-isi-cap.c,它们从相机收集图像并将它们插入 ISI,然后为用户捕获图像。 我认为我在这两个文件中使用的设置不正确,因为我可用的唯一传输格式是彩色的,即不是 10(或 12)位灰度格式。 在imx8-parallel-csi.c中的函数: 静态无效 mxc_pcsi_csr_config(结构 mxc_parallel_csi_dev *pcsidev) 我努力了: /* 配置 PL 数据类型 */ if (mf->code == MEDIA_BUS_FMT_Y10_1X10) val = IF_CTRL_REG_DATA_TYPE(DATA_TYPE_OUT_RAW) | (1<<8); 否则如果(mf->code == MEDIA_BUS_FMT_Y12_1X12) val = IF_CTRL_REG_DATA_TYPE(DATA_TYPE_OUT_RAW)| (1<<8); 否则 val = IF_CTRL_REG_DATA_TYPE(DATA_TYPE_OUT_YUV444); writel(val, pcsidev->csr_regs + IF_CTRL_REG_SET); 和: /* 配置 CTRL REG */ val = readl(pcsidev->csr_regs + CSI_CTRL_REG); 如果 (mf->code==MEDIA_BUS_FMT_Y10_1X10) val |= (CSI_CTRL_REG_DATA_TYPE_IN(DATA_TYPE_IN_BAYER_10BITS)); else if (mf->code==MEDIA_BUS_FMT_Y12_1X12) val |= (CSI_CTRL_REG_DATA_TYPE_IN(DATA_TYPE_IN_BAYER_12BITS)); 否则 val |= ( CSI_CTRL_REG_DATA_TYPE_IN(DATA_TYPE_IN_UYVY_BT656_8BITS) | CSI_CTRL_REG_HSYNC_POL | CSI_CTRL_REG_MASK_VSYNC_COUNTER(3) | CSI_CTRL_REG_HSYNC_PULSE(2)); 但是没有任何选项可以将数据类型设置为单色: #define DATA_TYPE_OUT_NULL (0x00) #define DATA_TYPE_OUT_RGB (0x04) #define DATA_TYPE_OUT_YUV444 (0x08) #define DATA_TYPE_OUT_YYU420_ODD (0x10) #define DATA_TYPE_OUT_YYU420_EVEN (0x12) #define DATA_TYPE_OUT_YYY_ODD (0x18) #define DATA_TYPE_OUT_UYVY_EVEN (0x1A) #define DATA_TYPE_OUT_RAW (0x1C) #define DATA_TYPE_IN_UYVY_BT656_8BITS 0x0 #define DATA_TYPE_IN_UYVY_BT656_10BITS 0x1 #define DATA_TYPE_IN_RGB_8BITS 0x2 #define DATA_TYPE_IN_BGR_8BITS 0x3 #define DATA_TYPE_IN_RGB_24BITS 0x4 #define DATA_TYPE_IN_YVYU_8BITS 0x5 #define DATA_TYPE_IN_YUV_8BITS 0x6 #define DATA_TYPE_IN_YVYU_16BITS 0x7 #define DATA_TYPE_IN_YUV_24BITS 0x8 #define DATA_TYPE_IN_BAYER_8BITS 0x9 #define DATA_TYPE_IN_BAYER_10BITS 0xA #define DATA_TYPE_IN_BAYER_12BITS 0xB #define DATA_TYPE_IN_BAYER_16BITS 0xC 同样在 imx8-isi-cap.c 中,我添加了以下内容: 结构 mxc_isi_fmt mxc_isi_out_formats[] { .name = "BA10", .fourcc = V4L2_PIX_FMT_Y10, .depth = { 16 }, .color = MXC_ISI_OUT_FMT_RAW10, .memplanes = 1, .colplanes = 1, .mbus_code = MEDIA_BUS_FMT_Y10_1X10, }, { .name = "BA12", .fourcc = V4L2_PIX_FMT_Y12, .depth = { 16},. color = MXC_ISI_OUT_FMT_RAW12, .memplanes = 1, .colplanes = 1, .mbus_code = MEDIA_BUS_FMT_Y12_1X12, } 但仍然只有: /* * 像素链接输入格式 */ struct mxc_isi_fmt mxc_isi_src_formats[] = { { .name = "RGB32", .fourcc = V4L2_PIX_FMT_RGB32, .depth = { 32 }, .memplanes = 1, .colplanes = 1, }, { . name = "YUV32 (XYUV)", .fourcc = V4L2_PIX_FMT_YUV32, .depth = { 32 }, .memplanes = 1, .colplanes = 1, } }; 有谁知道使用什么设置来通过 mx8-parallel-csi.c 和 imx8-isi-cap.c(或其他文件,如果需要)正确传递 Y10_1X10 格式的图像,以便我可以正确捕获它? |
|
相关推荐
1个回答
|
|
为了解决这个问题,我们确实让它工作得很好,但需要对输出数据进行一些位移,如 joanxie 所述。
该解决方案使我们能够通过 IMX290 的 Y10_1X10 和 Y12_1X12 图像格式。 应用了我之前引用的案例中引用的补丁,但做了以下修改(请直接引用补丁文件): 对于文件:drivers/staging/media/imx/imx8-parallel-csi.c: /* 配置 PL 数据类型 */ if (mf->code == MEDIA_BUS_FMT_Y8_1X8) val = IF_CTRL_REG_DATA_TYPE(DATA_TYPE_OUT_RAW) | (1<<8); 否则如果(mf->code == MEDIA_BUS_FMT_Y10_1X10) val = IF_CTRL_REG_DATA_TYPE(DATA_TYPE_OUT_RAW)| (1<<8); 否则如果(mf->code == MEDIA_BUS_FMT_Y12_1X12) val = IF_CTRL_REG_DATA_TYPE(DATA_TYPE_OUT_RAW)| (1<<8); 否则 val = IF_CTRL_REG_DATA_TYPE(DATA_TYPE_OUT_YUV444); writel(val, pcsidev->csr_regs + IF_CTRL_REG_SET); ... /* 配置 CTRL REG */ val = readl(pcsidev->csr_regs + CSI_CTRL_REG); 如果 (mf->code==MEDIA_BUS_FMT_Y8_1X8) val |= (CSI_CTRL_REG_DATA_TYPE_IN(DATA_TYPE_IN_BAYER_16BITS)); else if (mf->code==MEDIA_BUS_FMT_Y10_1X10) val |= (CSI_CTRL_REG_DATA_TYPE_IN(DATA_TYPE_IN_BAYER_16BITS)); else if (mf->code==MEDIA_BUS_FMT_Y12_1X12) val |= (CSI_CTRL_REG_DATA_TYPE_IN(DATA_TYPE_IN_BAYER_16BITS)); 否则 val |= ( CSI_CTRL_REG_DATA_TYPE_IN(DATA_TYPE_IN_UYVY_BT656_8BITS) | CSI_CTRL_REG_HSYNC_POL | CSI_CTRL_REG_MASK_VSYNC_COUNTER(3) | CSI_CTRL_REG_HSYNC_PULSE(2)); 对于文件:drivers/staging/media/imx/imx8-isi-hw.c 绕过是根据补丁实现的: /* 设置 outbuf 格式 */ val |= dst_fmt->color << CHNL_IMG_CTRL_FORMAT_OFFSET; mxc_isi->cscen = 1; 如果(dst_fmt->fourcc == V4L2_PIX_FMT_GREY) { goto bypass_csc; } if(dst_fmt->fourcc == V4L2_PIX_FMT_Y10) { goto bypass_csc; } if(dst_fmt->fourcc == V4L2_PIX_FMT_Y12) { goto bypass_csc; } 对于文件:drivers/staging/media/imx/imx8-isi-cap.c 添加了以下输出格式: { .name = "BA08", .fourcc = V4L2_PIX_FMT_GREY, .depth = { 8 }, .color = MXC_ISI_OUT_FMT_RAW8, .memplanes = 1, .colplanes = 1, .mbus_code = MEDIA_BUS_FMT_Y8_1X8, }, { .name = "BA10", .fourcc = V4L2_PIX_FMT_Y10, .depth = { 16} ,.color = MXC_ISI_OUT_FMT_RAW16, .memplanes = 1, .colplanes = 1, .mbus_code = MEDIA_BUS_FMT_Y10_1X10, },{ .name =“BA12”,. depthfourcc = V4L2_12, FMT_Y = { 16 }, .color = MXC_ISI_OUT_FMT_RAW16, .memplanes = 1, .colplanes = 1, .mbus_code = MEDIA_BUS_FMT_Y12_1X12, } 此文件中的输入格式未更改(未测试 BA08 输出格式)。 综上所述,我们在 16 位缓冲区中接收到 Y10_1X10 数据,格式如下: XXDD DDDD DDDD XXXX(其中 D 是数据) 我们还在 16 位缓冲区中接收到 Y12_1X12 数据,格式如下: XXDD DDDD DDDD DDXX(其中 D 是数据) 我希望这对人们有好处! |
|
|
|
只有小组成员才能发言,加入小组>>
1931个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36414 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4782 浏览 1 评论
6099 浏览 1 评论
6807 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4243 浏览 0 评论
641浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
637浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
639浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
725浏览 2评论
833浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 16:05 , Processed in 1.075389 second(s), Total 49, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号