Toybrick

标题: imx415适配60帧 [打印本页]

作者: wudiking    时间: 2023-7-11 09:10
标题: imx415适配60帧
我看toybrick提供的imx415摄像头,仅支持30帧,如何提升到60帧,请指教

作者: jefferyzhang    时间: 2023-7-11 11:36
软件没有限制帧率。
作者: wudiking    时间: 2023-7-11 11:58
jefferyzhang 发表于 2023-7-11 11:36
软件没有限制帧率。

内核里控制最大帧率30帧每秒
static const struct imx415_mode supported_modes[] = {
    /*
     * frame rate = 1 / (Vtt * 1H) = 1 / (VMAX * 1H)
     * VMAX >= (PIX_VWIDTH / 2) + 46 = height + 46
     */
    {
        .bus_fmt = MEDIA_BUS_FMT_SGBRG10_1X10,
        .width = 3864,
        .height = 2192,
        .max_fps = {
            .numerator = 10000,
            .denominator = 300000,

        },
        .exp_def = 0x08ca - 0x08,
        .hts_def = 0x044c * IMX415_4LANES * 2,
        .vts_def = 0x08ca,
        .global_reg_list = imx415_global_10bit_3864x2192_regs,
        .reg_list = imx415_linear_10bit_3864x2192_891M_regs,
        .hdr_mode = NO_HDR,
        .mipi_freq_idx = 1,
        .bpp = 10,
        .vc[PAD0] = V4L2_MBUS_CSI2_CHANNEL_0,
    },  
......
作者: troy    时间: 2023-7-11 12:40
首先你要知道帧率是怎么来的,受到哪些因素的影响。
1. sensor本身支持的最大mipi传输速率,每秒传输的数据量是width * height * 10bit * fps,这个也是有上限,不能无限制提高。IMX415的DateSheet上写的就是支持3864x2192@30fps。
2. mipi传输链路的限制,lane的数量,和每个lane每秒能传输的最大数据量,这个一般不会到达上限。
3. cpu端的phy接收性能和isp处理速度的限制,就像有些CPU支持4K,有些支持8K,具体要看下你的板子是什么芯片,翻下芯片的TRM说明。你总不能要求51单片机处理8K 60fps吧。
4. 曝光时间的限制,你代码贴出来的30fps,是当前sensor的初始化序列下,sensor本身输出的是30fps的帧率图像,你总不能要求CPU能读到60fps的图像吧。在弱光条件下,帧率有可能会低于30fps,是因为曝光时间拉长了,当前曝光时间 + 图像数据的传输时间 > 33ms时,帧率就会被拉低。

提升帧率的措施:
据我所知imx415所能支持的帧率就是4K@30fps,要调整为60帧,只能是重新找模组厂商拿一组低分辨率的sensor配置,比如1080P@60fps,然后添加到supported_modes,设置max_fps为60fps,初始序列就是其中的global_reg_list和reg_list。这些寄存器配置会通过I2C设置到sensor中,控制sensor输出的fps。
作者: wudiking    时间: 2023-7-11 13:27
troy 发表于 2023-7-11 12:40
首先你要知道帧率是怎么来的,受到哪些因素的影响。
1. sensor本身支持的最大mipi传输速率,每秒传输的数据 ...

3588平台,使用imx415,摄像头支持1920*1080分辨率60fps,当前只能每秒读30帧,如何调整到60帧,哪里能知道初始化序列
作者: troy    时间: 2023-7-12 09:17
wudiking 发表于 2023-7-11 13:27
3588平台,使用imx415,摄像头支持1920*1080分辨率60fps,当前只能每秒读30帧,如何调整到60帧,哪里能知 ...

上面说了,只能找模组厂商拿低分辨率的配置。
或者自己对照imx415的芯片文档自己改,但是厂商提供的文档寄存器大部分都不全,自己基本不可能改好,还有计算各个参数,比如mipi速率之类的。
作者: wudiking    时间: 2023-7-12 09:25
troy 发表于 2023-7-12 09:17
上面说了,只能找模组厂商拿低分辨率的配置。
或者自己对照imx415的芯片文档自己改,但是厂商提供的文档 ...

那咱们toybrick官方这边能进行适配吗
作者: wudiking    时间: 2023-7-17 08:09
troy 发表于 2023-7-12 09:17
上面说了,只能找模组厂商拿低分辨率的配置。
或者自己对照imx415的芯片文档自己改,但是厂商提供的文档 ...

您好,我从sonyfae拿到了60帧的序列,但是他不分globa_reg和reg,我如何调整啊
作者: troy    时间: 2023-7-18 09:23
wudiking 发表于 2023-7-17 08:09
您好,我从sonyfae拿到了60帧的序列,但是他不分globa_reg和reg,我如何调整啊 ...

global_reg和reg是由多个初始序列拆出来,把多个初始序列相同部分放到global_reg,差异部分放到reg。你完全可以不管global_reg,把你的60fps序列都放到reg中,反正最终reg会覆盖global。
还有需要修改获取确认的
1. 你的lane数和现在硬件连接的lane数是否一致,现在是4lane的
2. supported_modes中新增一个60fps序列的结构体,或者把原来的结构体都删了,只留下60fps的结构体。
    a) 修改max_fps的denominator为60
    b)    根据你的序列修改width和height
    c)    修改hts_def和vts_def代码里面有计算公式,你可以先算一下原来的值,学会怎么算以后再改
    d)    global_reg_list和reg_list都改成你的序列,实际写两遍序列到sensor也没影响
    e)    mipi_freq_idx是用来表示使用link_freq_items中哪个的频率,你可以在link_freq_items新加一个60fps使用的mipi freq,这个很重要,如果mipi频率对应不上,会无法正确接收数据。
     f)    bpp是填写60pfs序列输出的是10bit还是12bit,如果是10bit,  bpp = 10, .bus_fmt = MEDIA_BUS_FMT_SGBRG10_1X10。如果是12bit,bpp = 12, bus_fmt = MEDIA_BUS_FMT_SGBRG12_1X12。


再次提醒: mipi freq是非常重要的参数,关系到mipi数据能不能正常接收,时钟对不上,mipi中断会一直报错。还有宽高如果设置错误,mipi中断也会不断报错。

需要更多支持,请贵公司联系申请redmine账号,会有工程师进行处理。
作者: wudiking    时间: 2023-7-19 06:40
本帖最后由 wudiking 于 2023-7-19 06:42 编辑
troy 发表于 2023-7-18 09:23
global_reg和reg是由多个初始序列拆出来,把多个初始序列相同部分放到global_reg,差异部分放到reg。你完 ...

多谢指教,已经适配成功,删除了之前的模式,发现60帧与当前的模式不能共存,不知道是不是哪里没有改好,所以将原有模式删掉了
作者: maijinsheng    时间: 2023-7-25 20:33
可否发一下 1920*1080分辨率60fps 的序列?我也想适配一下imx415
作者: hiCrystal    时间: 2023-8-31 16:27
troy 发表于 2023-7-11 12:40
首先你要知道帧率是怎么来的,受到哪些因素的影响。
1. sensor本身支持的最大mipi传输速率,每秒传输的数据 ...

mark, 感谢分享!
作者: dufanghua    时间: 2023-10-24 15:15
maijinsheng 发表于 2023-7-25 20:33
可否发一下 1920*1080分辨率60fps 的序列?我也想适配一下imx415

楼主要到了嘛?  
作者: xiexin    时间: 2024-4-30 15:55
wudiking 发表于 2023-7-17 08:09
您好,我从sonyfae拿到了60帧的序列,但是他不分globa_reg和reg,我如何调整啊 ...

你好,可以发我一份60帧的序列吗,十分感谢!
作者: she    时间: 2024-10-15 16:53
wudiking 发表于 2023-7-19 06:40
多谢指教,已经适配成功,删除了之前的模式,发现60帧与当前的模式不能共存,不知道是不是哪里没有改好, ...

你好,可以发一份60帧的序列吗,十分感谢
作者: jackwei    时间: 2024-12-12 09:35
楼主你好,看到你说最后适配成功了,能提供下最终的imx415.c的源文件,我这边 按照
static __maybe_unused const struct regval imx415_global_12bit_3864x2192_regs[] = {
        {0x3002, 0x00},
        {0x3008, 0x7F},
        {0x300A, 0x5B},
        {0x30C1, 0x00},
        {0x3031, 0x01},
        {0x3032, 0x01},
        {0x30D9, 0x06},
        {0x3116, 0x24},
        {0x3118, 0xC0},
        {0x311E, 0x24},
        {0x32D4, 0x21},
        {0x32EC, 0xA1},
        {0x3452, 0x7F},
        {0x3453, 0x03},
        {0x358A, 0x04},
        {0x35A1, 0x02},
        {0x36BC, 0x0C},
        {0x36CC, 0x53},
        {0x36CD, 0x00},
        {0x36CE, 0x3C},
        {0x36D0, 0x8C},
        {0x36D1, 0x00},
        {0x36D2, 0x71},
        {0x36D4, 0x3C},
        {0x36D6, 0x53},
        {0x36D7, 0x00},
        {0x36D8, 0x71},
        {0x36DA, 0x8C},
        {0x36DB, 0x00},
        {0x3701, 0x03},
        {0x3724, 0x02},
        {0x3726, 0x02},
        {0x3732, 0x02},
        {0x3734, 0x03},
        {0x3736, 0x03},
        {0x3742, 0x03},
        {0x3862, 0xE0},
        {0x38CC, 0x30},
        {0x38CD, 0x2F},
        {0x395C, 0x0C},
        {0x3A42, 0xD1},
        {0x3A4C, 0x77},
        {0x3AE0, 0x02},
        {0x3AEC, 0x0C},
        {0x3B00, 0x2E},
        {0x3B06, 0x29},
        {0x3B98, 0x25},
        {0x3B99, 0x21},
        {0x3B9B, 0x13},
        {0x3B9C, 0x13},
        {0x3B9D, 0x13},
        {0x3B9E, 0x13},
        {0x3BA1, 0x00},
        {0x3BA2, 0x06},
        {0x3BA3, 0x0B},
        {0x3BA4, 0x10},
        {0x3BA5, 0x14},
        {0x3BA6, 0x18},
        {0x3BA7, 0x1A},
        {0x3BA8, 0x1A},
        {0x3BA9, 0x1A},
        {0x3BAC, 0xED},
        {0x3BAD, 0x01},
        {0x3BAE, 0xF6},
        {0x3BAF, 0x02},
        {0x3BB0, 0xA2},
        {0x3BB1, 0x03},
        {0x3BB2, 0xE0},
        {0x3BB3, 0x03},
        {0x3BB4, 0xE0},
        {0x3BB5, 0x03},
        {0x3BB6, 0xE0},
        {0x3BB7, 0x03},
        {0x3BB8, 0xE0},
        {0x3BBA, 0xE0},
        {0x3BBC, 0xDA},
        {0x3BBE, 0x88},
        {0x3BC0, 0x44},
        {0x3BC2, 0x7B},
        {0x3BC4, 0xA2},
        {0x3BC8, 0xBD},
        {0x3BCA, 0xBD},
        {0x4004, 0x48},
        {0x4005, 0x09},
        {REG_NULL, 0x00},
};
static __maybe_unused const struct regval imx415_linear_12bit_1932x1096_594M_regs[] = {
        {0x3020, 0x01},
        {0x3021, 0x01},
        {0x3022, 0x01},
        {0x3024, 0x2E}, //0x5D
        {0x3025, 0x06}, //0x0C
        {0x3028, 0x0E},
        {0x3029, 0x03},
        {0x302C, 0x00},
        {0x302D, 0x00},
        {0x3031, 0x00},
        {0x3033, 0x07},
        {0x3050, 0x08},
        {0x3051, 0x00},
        {0x3054, 0x19},
        {0x3058, 0x3E},
        {0x3060, 0x25},
        {0x3064, 0x4A},
        {0x30CF, 0x00},
        {0x30D9, 0x02},
        {0x30DA, 0x01},
        {0x3118, 0x80},
        {0x3260, 0x01},
        {0x3701, 0x00},
        {0x400C, 0x00},
        {0x4018, 0x67},
        {0x401A, 0x27},
        {0x401C, 0x27},
        {0x401E, 0xB7},
        {0x401F, 0x00},
        {0x4020, 0x2F},
        {0x4022, 0x4F},
        {0x4024, 0x2F},
        {0x4026, 0x47},
        {0x4028, 0x27},
        {0x4074, 0x01},
        {REG_NULL, 0x00},
};
imx415_linear_12bit_1932x1096_594M_regs  寄存器配置里面   
        {
                .bus_fmt = MEDIA_BUS_FMT_SGBRG12_1X12,
                .width = 1944,
                .height = 1097,
                .max_fps = {
                        .numerator = 10000,
                        .denominator = 600000,
                },
                .exp_def = 0x062e- 0x08,
                .hts_def = 0x030e * 3,
                .vts_def = 0x062e,  //  0x0c5d / 2 = 0x062e
                .global_reg_list = imx415_global_12bit_3864x2192_regs,
                .reg_list = imx415_linear_12bit_1932x1096_594M_regs,
                .hdr_mode = NO_HDR,
                .mipi_freq_idx = 0,
                .bpp = 12,
                .vc[PAD0] = V4L2_MBUS_CSI2_CHANNEL_0,
        },
static const s64 link_freq_items[] = {
        MIPI_FREQ_297M,
        MIPI_FREQ_446M,
        MIPI_FREQ_743M,
        MIPI_FREQ_891M,
};

只写这一种模式 使用gstream 能正常运行摄像头 用 fpsdisplaysink插件看帧率也是 30帧

作者: jackwei    时间: 2024-12-12 10:45
wudiking 发表于 2023-7-19 06:40
多谢指教,已经适配成功,删除了之前的模式,发现60帧与当前的模式不能共存,不知道是不是哪里没有改好, ...

可以发一份你最终生效的代码吗? 171808966@qq,com
作者: 暗号9    时间: 2024-12-13 09:09
wudiking 发表于 2023-7-19 06:40
多谢指教,已经适配成功,删除了之前的模式,发现60帧与当前的模式不能共存,不知道是不是哪里没有改好, ...

大佬,请问能发下60帧的寄存器序列吗?1003960822@qq.com感谢了
作者: 暗号9    时间: 2024-12-13 09:11
dufanghua 发表于 2023-10-24 15:15
楼主要到了嘛?

楼主要到了吗
作者: 暗号9    时间: 2024-12-13 09:11
jackwei 发表于 2024-12-12 10:45
可以发一份你最终生效的代码吗? 171808966@qq,com

楼主要到了吗
作者: troy    时间: 2025-1-17 11:22
暗号9 发表于 2024-12-13 09:11
楼主要到了吗

看这个链接https://t.rock-chips.com/forum.p ... tid=4827&extra=
作者: troy    时间: 2025-1-17 11:27
https://t.rock-chips.com/forum.p ... &extra=page%3D1
作者: troy    时间: 2025-1-17 11:27
maijinsheng 发表于 2023-7-25 20:33
可否发一下 1920*1080分辨率60fps 的序列?我也想适配一下imx415

看这个链接https://t.rock-chips.com/forum.p ... &extra=page%3D1
作者: troy    时间: 2025-1-17 11:28
xiexin 发表于 2024-4-30 15:55
你好,可以发我一份60帧的序列吗,十分感谢!

看这个链接https://t.rock-chips.com/forum.p ... &extra=page%3D1




欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3