当前位置: 首页 > news >正文

RK3588随笔:MIPI协议——D-PHY 物理层的自定义和校验

1.简单了解点概念

MIPI接口:它是一条专门用来高速传输摄像头数据的物理线路。

D-PHY 物理层:它规定了电压应该是多少、信号怎么传输、速度能跑多快。

**linux-orangepi/drivers/phy/phy-core-mipi-dphy.c**代码:定义和检查这个“物理标准”

CSI-2 协议层:它规定了图像数据如何打包、如何加帧头帧尾、如何进行校验,确保收到的数据是完整且干净的

摄像头数据通过 MIPI 这根“水管” 传输。这根水管的物理规格D-PHY 定义,水在里面流动的规则CSI-2 定义。两者合作,才能把图像数据正确地从摄像头送到RK3588。


2.重头戏:kernel/drivers/phy/phy-core-mipi-dphy.c解析

kernel/drivers/phy/phy-core-mipi-dphy.c 的代码

它只提供最权威、最通用的**计算公式**和**安全标准**

整个代码分为两个函数:

1.phy_mipi_dphy_get_default_config

1)这个函数是一个计算器,它将高层的摄像头参数(像素时钟、数据位宽、通道数)转换成底层的、精确到皮秒的物理层电信号时序参数,为后续的硬件配置提供了一套标准化的数据

2)函数的输入参数(它需要知道什么)

  • unsigned long pixel_clock: 像素时钟频率 (Hz)

    • 来源: 这个值由图像传感器(OV13855)的驱动程序根据当前的工作模式(例如 1920x1080@30fps)来确定和提供。

    • 意义: 它代表了传感器每秒输出多少个像素。这是计算总数据量的基础。

  • unsigned int bpp: 每像素位数 (Bits Per Pixel)

    • 来源: 同样由传感器驱动提供,取决于图像格式(如 RAW8, RAW10, RAW12)。

    • 意义: 它定义了每个像素包含多少位(bit)的数据。

  • unsigned int lanes: 数据通道数量

    • 来源: 由硬件连接决定,并在设备树(DTS)中配置。你的OV13855模组可能使用了1、2或4个数据通道。

    • 意义: 总数据流将被平均分配到这些并行的通道上传输。

3)内部计算过程:略

4) 函数的输出(它最终提供了什么)

  • struct phy_configure_opts_mipi_dphy *cfg : 这是一个指向配置结构体的指针,作为输出参数

  • 意义: 函数执行完毕后,这个 cfg 结构体会被完全填充。它包含了一套完整、有效、符合MIPI官方规范的D-PHY时序参数。

  • 这个被填充好的结构体,之后会被特定平台的PHY驱动(例如Rockchip的D-PHY驱动)所使用,最终将这些时间值写入到RK3588芯片的硬件寄存器中从而完成对MIPI物理接口的配置

2.函数 phy_mipi_dphy_config_validate

1)验证一个给定的 phy_configure_opts_mipi_dphy 结构体中所包含的D-PHY时序参数,是否完全符合 MIPI Alliance 制定的 D-PHY 物理层规范中对各个时序参数的取值范围要求

它的存在是为了确保,无论这些配置参数来源于何处(无论是通过 phy_mipi_dphy_get_default_config 自动生成,还是由开发者在设备树中手动指定),最终要写入硬件寄存器的值都是安全和有效的,不会违反MIPI规范

2)函数的输入参数(它需要知道什么)

struct phy_configure_opts_mipi_dphy *cfg: 一个指向包含了待验证时序参数的结构体指针。

  • 来源: 这个结构体通常已经被填充了时序值。
    • 这些值可能来自 phy_mipi_dphy_get_default_config 的计算结果
    • 也可能是在此基础上被平台特定代码(Platform-specific driver)或设备树(Device Tree)中的配置所覆盖修改后的结果。

3)函数的内部执行过程

函数的内部逻辑非常直接,就是一系列基于MIPI D-PHY规范的 if 条件判断语句。

步骤 A: 计算基础时间单位 ui

  • 它首先需要计算出 ui(Unit Interval)

    • 全称为 Unit Interval(单位间隔) 它的物理意义是:在高速模式(High-Speed, HS)下,传输一位(1 bit)数据所需要的时间。

    • ui = 1 / Data_Rate

步骤 B: 逐条验证时序参数

  • 接下来,函数对 cfg 结构体中的每一个重要时序成员进行检查,确保其值落在MIPI规范定义的最小/最大值范围内。

  • 函数会依次对 clk_settle, clk_trail, hs_exit, hs_trail, lpx 等所有关键时序参数执行类似的检查

4) 函数的输出(它最终提供了什么)

int (整型返回值):

  • 0 (零): 如果 cfg 结构体中的所有时序参数都通过了检查,均符合MIPI D-PHY规范,函数返回 0,代表验证成功
  • -EINVAL (负数错误码): 如果任何一个时序参数未能通过检查,函数会立即停止后续检查并返回 -EINVAL,代表验证失败,配置无效
http://www.dtcms.com/a/346327.html

相关文章:

  • codeforces round 1043(div3) 补题
  • Finite State Machine(FSM) for the Development Mode
  • NVM-Windows 命令大全
  • YOLO --- YOLOv5模型以及项目详解
  • Tiger任务管理系统-13
  • MiniOB环境部署开发(使用Docker)
  • FPC设计技巧
  • 解释实现哈希值作为唯一的ID以及后面的hexdigest是什么意思
  • 剑指数组相关
  • CSS自定义属性(CSS变量)
  • 全面解析 `strncasecmp` 字符串比较函数
  • ES6变量与解构:let、const与模板字符串全解析
  • 53 C++ 现代C++编程艺术2-枚举和枚举类
  • 大麦盒子DM4036亲测刷包实践笔记
  • AI领域的语义空间是什么?
  • 波士顿房价线性回归预测讲解
  • 基于SpringBoot的家教信息预约管理系统【2026最新】
  • Spring IOC 原理与高级特性剖析
  • Redis---事务
  • 企业如何建立有效备份,防范病毒并快速恢复数据
  • UVM一些不常用的功能
  • 2公里级、高分辨率:新一代OCI重新定义光纤精准定位
  • huggingface离线下载模型使用方法
  • PiscCode使用 MediaPipe 检测人脸关键点多样展示
  • 域名地址是什么?
  • Python 异步框架 (Async/Aiohttp) 调用淘宝 API:实现万级商品数据异步采集
  • 透射TEM新手入门:衍射斑点标定 1
  • Java面试-== 和 equals() 方法的区别与实现原理
  • 结构-活性关系SAR中scaffold识别
  • MAPGIS6.7地质编录