Nvidia Jetson Orin:GMSL2 IMX490/OX08B/ISX031 开发笔记

Autra.tech Apache-2.0 持续更新,有问题欢迎 issue 讨论
Autra.tech orin_core_bsp

GMSL 数据链路

Nvidia Jetson Orin:GMSL2 IMX490/OX08B/ISX031 开发笔记_第1张图片

  • 一般涉及到五个角色
    • SOC(MPU)如:Orin
    • 解串器,如:MAX9296MAX96712
    • 串行器,如:MAX9295MAX96717
    • ISP,如:GW5300
    • 传感器,如:IMX490IMX390

关于GMSL相机驱动的软件设计

  • 传感器驱动 xxx.ko 方式,如:gmsl2_sensor.ko,不负责通过I2C配置传感器、解串器、串行器,只负责正确生成 /dev/videox
  • DTS overlay 方式,参考:关于custom-overlay.dts
  • user space 通过 脚本(shell + i2c-tools)或 代码(c/c++ 调动 标准Linux I2C 操作)配置串行器、解串器,目前看YUV格式下传感器和ISP不需要用户配置
  • DTS 里通过多个 modex 来支持多种分辨率相机
  • xxx.ko 里通过 static const struct camera_common_frmfmt gmsl2_sensor_frmfmt[] 来支持多种分辨率相机

调试步骤

  • S1:解串器I2C可以通(MAX96712
  • S2:串行器I2C可以通(MAX9295
  • S3:user space 通过 i2c-tools 配置解串器和串行器
  • S4:v4l2-ctl 测试帧率

调试技巧

  • 供电 pwdn (解串器I2C能通这个供电就没问题)如果是 Jeston AGX Orin 一般情况扩展板的供电都是 PH.06,参考:Autra.tech setup.sh
  • 给相机12V供电(串行器I2C能通供电就没问题)
  • serdes_pix_clk_hz 计算方式
serdes_pix_clk_hz = (deserializer output data rate in hertz) * (number of CSI lanes) / (bits per pixel)
mipi 1.5GHz
mipi 4 lines
bits per pixel 16bit(YUV422)
serdes_pix_clk_hz = 1500000000 * 4 / 16 = 375000000
  • pix_clk_hz 貌似在 serdes_pix_clk_hz 非0的情况下无效,实测也无效,计算方式
Sensor output size = 2200 × 1125
(actual output size 1920 × 1080)
Frame rate = 30 frames/second
pixel_clk_hz = 2200 × 1125 × 30 = 74250000
  • line_length 需要 ≥ active_w 相等就行了
  • 一个xxx.ko/gmsl2_sensors.ko适配多个相机分辨率需要配置 use_sensor_mode_id = false ,具体去搜索这个关键字它等于false v4l2系统就会按照你输入的分辨率自动去找modex

你可能感兴趣的:(笔记,linux,ORIN)