MIPI CSI-2简介

1 概述

 如上图:

  • CSI-2包括若干单向Data lane,用于传输图像数据
  • clock lane是必须的,data lane 1-4个
  • CCI,camera control interface,用于配置
  • 物理层详见D-PHY,lane配置为:LP也需要,进出HS模式需要LP control mode若干操作
The minimum D-PHY physical layer requirement for a CSI-2 transmitter is
• Data Lane Module: Unidirectional master, HS-TX, LP-TX and a CIL-MFEN function
• Clock Lane Module: Unidirectional master, HS-TX, LP-TX and a CIL-MCNN function
The minimum D-PHY physical layer requirement for a CSI-2 receiver is
• Data Lane Module: Unidirectional slave, HS-RX, LP-RX, and a CIL-SFEN function
• Clock Lane Module: Unidirectional slave, HS-RX, LP-RX, and a CIL-SCNN function

2 CCI

  • CCI,camera control interface,是I2C协议的子集,与I2C基本一致
  • 支持多种位宽的寄存器, 由于I2C是字节流读写,多Bytes寄存器的原子操作要由硬件实现来保证。例如32bit reg, write时,写完最后一个Byte,才会真正写入寄存器;read时,4Bytes的值是读第一个Byte时的值
  • MS Byte at lowest address
8-bit – generic setup registers
16-bit – parameters like line-length, frame-length and exposure values
32-bit – high precision setup values
64-bit – for needs of future sensors

3 CSI-2协议层总览

 CSI-2的Protocol layer分为三层:

  • Pixel/Byte Packing/Unpacking Layer, 理解APP层不同Data formats,即不同格式的图像信息,例如YUV、RGB、RAW等
  • Low Level Protocol, LLP,组织串行数据
  • Lane Distribution/Lane Merging, TX时串行数据分发到多个lane, RX从多个lane获取数据并merge成串行数据

4 Lane Distribution/Lane Merging

  • dispatch和merge时,以Bytes为单位,不是bit

  • 不同lane传输长度可以不同,因为Bytes数不一定是lane数的整数倍

5 Low Level Protocol

6 Pixel/Byte Packing/Unpacking Layer

主要描述YUV/RGB/RAW等格式的存储,详见specification.

7 参考

Specification for CSI-2, V1.3

### CSI 技术概述 容器存储接口 (Container Storage Interface, CSI) 是一种标准接口,旨在让存储供应商开发一次插件即可兼容多个编排系统。它通过定义一组标准化 API 来实现容器平台与存储系统的交互[^1]。 #### CSI 的核心组件 CSI 主要由以下几个部分组成: 1. **CSI Driver**: 这是一个实现了 CSI 接口的具体驱动程序,负责处理来自编排器的请求并将其转换为底层存储操作。通常包括三个主要服务:`Identity`, `Controller`, 和 `Node`[^3]。 2. **Sidecar 容器**: Sidecar 是辅助容器,帮助管理 CSI 驱动的行为。常见的 sidecar 包括: - **csi-provisioner**: 负责动态创建和删除卷的操作[^2]。 - **csi-attacher**: 处理挂载和卸载逻辑。 - **csi-resizer**: 支持卷扩展功能。 - **csi-snapshotter**: 提供快照能力。 3. **Kubernetes 对象**: - **CSINode**: 记录节点上已安装的所有 CSI 驱动及其相关信息,例如拓扑键 (`topologyKeys`) 用于调度决策。 - **CSIStorageCapacity**: 描述特定拓扑区域内的可用存储容量,前提是 CSI 驱动支持 `storageCapacity` 功能。 #### 实现细节 以下是 CSI 驱动的关键实现步骤和技术要点: 1. **注册服务**: 在 CSI 驱动中,需要注册三种服务来提供完整的功能集。这些服务分别是身份验证、控制器管理和节点管理: ```go csi.RegisterIdentityServer(srv, identity) csi.RegisterControllerServer(srv, controller) csi.RegisterNodeServer(srv, node) ``` 2. **客户端通信**: 使用 gRPC 协议作为通信机制,CSI 驱动通过调用 `csi-client` 方法与 Kubernetes 或其他编排工具进行交互。 3. **动态配置**: 如果希望增强数据库访问层的功能,可以考虑替换 Hibernate 中的 `getCurrentSession()` 方法为 `openSession()`,从而更好地控制会话生命周期[^4]。 #### 示例代码片段 下面展示了一个简单的 Go 语言示例,演示如何初始化一个基本的 CSI 驱动框架: ```go package main import ( "net" "log" "os" "github.com/container-storage-interface/spec/lib/go/csi" "google.golang.org/grpc" ) func main() { s := grpc.NewServer() csiDriver := &driver{} // 注册 Identity Server csi.RegisterIdentityServer(s, csiDriver.identityService()) // 注册 Controller Server csi.RegisterControllerServer(s, csiDriver.controllerService()) // 注册 Node Server csi.RegisterNodeServer(s, csiDriver.nodeService()) lis, err := net.Listen("tcp", fmt.Sprintf(":%s", os.Getenv("CSI_ENDPOINT"))) if err != nil { log.Fatalf("failed to listen: %v", err) } if err := s.Serve(lis); err != nil { log.Fatalf("failed to serve: %v", err) } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值