Skip to content

LV010-CCI

MIPI Alliance Specification for Camera Serial Interface 2 (CSI-2)——6 Camera Control Interface (CCI)

MIPI Alliance Specification for Camera Serial Interface 2 (CSI-2), Version 4.0.1——6 Camera Control Interface (CCI)

CCI 是一种二线制、双向、半双工、串行接口,兼容 I2C,可以支持 400KHz 的数据传输。其读写都遵循 I2C 协议。包括单数据读写以及连续数据读写。最大支持 16bit 寄存器寻址,能够支持 8bit,16bit,32bit,64bit 数据宽度。寄存器数据发送顺序是由高到低。

CSI-2 的接收器需要配置成一个 Master, 发送器配置为 Slave 在 CCI bus 上。CCI 能够处理总线上的多个从机,然而多主机机制 CCI 是不支持的,任何本节没有提到的 I2C command 都要被忽略,以防引起不必要的操作。 注意,当提到 CCI 时,术语“主”和“从”不应该与 D-PHY 操作中使用的类似术语相混淆; 他们没有关系。

一、数据传输协议(Data Transfer Protocol)

数据传输是按照 i2c 协议标准来传输的。START, RPEATED START 和 STOP 条件也是 I2C 协议标准的数据传输方式。

1. 消息类型(Message Type)

一个基本的 CCI 消息包括 START 条件、带有读写位的从设备地址、从设备的应答、指向从设备内部寄存器的子地址(索引)、从设备的应答信号、从设备的写操作数据字节、从设备的应答/反应答和 STOP 条件。在读取操作中,数据字节来自从机,应答/非应答来自主机。

image-20251111192430838

在 CCI 中, 从机地址位 7-bit 。读写位(R/W bit)为 1 表示读操作(主设备从从设备读取数据),为 0 表示写操作(主设备向从设备写入数据)。这是标准 I2C 通信中的约定。

CCI 支持 8 位数据的 8 位索引或 8 位数据的 16 位索引 。该从属设备定义了所使用的消息类型。

2. 读写操作(Read/Write Operations)

CCI 兼容设备能够支持四种不同的读操作和两种不同的写操作;随机位置单次读、随机位置顺序读、当前位置单次读、当前位置顺序读、随机位置单次写、从随机位置开始顺序写。读/写操作将在下面的章节中介绍。

从设备的索引必须在每次读写操作后自动递增。这也将在下面的部分中进行解释。

2.1 随机位置单次读

在单次从随机位置读取时,主服务器对所需要的索引做一个虚拟的写操作,发出一个重复的启动条件,然后再用读操作来定位从服务器。确认从机地址后,从机开始向 SDA 行输出数据。如图 4 所示。主处理器通过设置一个否定的确认和停止条件来终止读操作。

image-20251111192728669

2.2 当前位置单次读

通过对 slave 进行读操作,也可以从上次使用的索引中读取数据。通过设置数据从最后使用的索引到 SDA 行来响应。如图 5 所示。 主处理器通过设置一个非应答和停止条件来终止读操作 。

image-20251111192926174

2.3 随机位置连续读

如图 6,主机向索引地址发送虚拟写操作,收到从机应答之后主机发起 Repeat Start 条件,随后发送读地址读操作,等待从机应答后连续读取数据,当主机读取到最后一个字节数据后,发送非应答信号给从机,并发送停止条件。

image-20251111193136014

2.4 当前位置连续读

当前位置顺序读与随机位置顺序读类似,唯一区别是当前位置顺序读没有虚拟写操作,如图 7,主机通过发送非应答和停止位来终止读操作。

image-20251111193632653

2.5 随机位置单次写

如图 8,主机向从机发起一次写操作,随后发起索引地址和数据,当收到从机应答时候。写操作由主机发送 Stop 来终止。

image-20251111193743900

2.6 连续写

如图 9,表示连续写操作时序,每接收到一个字节数据后,从机自动增加索引地址。主机发送 Stop 来停止连续写操作。

image-20251111194003715

二、CCI 从机地址

对于只有原始拜耳输出(Raw Bayer)的摄像头模块,7 位从设备地址应为 011011Xb,其中 X = 0 或 1。对于所有其他摄像头模块,7 位从设备地址应为 011110Xb。

三、CCI Multi-Byte Registers

1. 概述

CSI-2 协议标准支持以下寄存器宽度:

  • 8-bit ——基本设置寄存器
  • 16-bit——像行长、帧长和曝光值这样的参数
  • 32-bit——高精度设置寄存器
  • 64-bit——用于未来传感器需求

通常,上文章节中描述的面向字节的访问协议提供了一种高效访问多字节寄存器的方法。但是,寄存器应位于面向字节的地址空间中,且多字节寄存器的地址应为其第一个字节的地址。因此,连续的多字节寄存器的地址将不是连续的。例如,一个 32 位寄存器,其第一个字节位于地址 0x8000,可以通过从随机地址 0x8000 开始顺序读取四个字节来读取。如果存在另一个 4 字节寄存器,其第一个字节位于 0x8004,则可以使用“从当前位置进行四字节顺序读取”协议来访问它。

假设有两个相邻的 4 字节寄存器:

  • 寄存器 A:起始地址 0x8000,占用 0x8000-0x8003。
  • 寄存器 B:起始地址 0x8004,占用 0x8004-0x8007。

访问流程:

(1)主设备先通过随机读取(Random Read)从地址 0x8000 开始顺序读取 4 字节,访问寄存器 A。读取完成后,从设备的地址指针自动指向 0x8004。

(2)接着,主设备使用“从当前位置顺序读取”协议(例如在 I2C 中发送一个重复起始条件后直接读数据),直接从地址指针当前位置(0x8004)读取 4 字节,即可访问寄存器 B。

多字节寄存器的 MS 字节应位于最低地址,LS 字节位于最高地址。

当访问多字节寄存器时,必须遵循以下重新计时规则:

  • 对于写操作,寄存器的更新应延迟到收到最后一个字节的最后一位时
  • 对于 Read 操作,Read 的值应该反映第一个字节的第一个位被读取时所有字节的状态如果不重新计时,数据可能会损坏,如下面的图 10 和图 11 所示。

2. 多字节寄存器值的传输字节顺序

CCI 消息在多字节寄存器中第一个字节总是 MSB, 最后一个字节为 LSB 低位。16 位寄存器写示例如图 12:

image-20251111195747342

32 位寄存器和 64 位寄存器写的情况类似。

3. 多字节寄存器 Protocol

每个设备都可以有单字节寄存器和多字节寄存器。在内部,设备必须理解哪些地址对应不同的寄存器宽度。

3.1 读取多字节寄存器

为保证从多字节寄存器中读取的数据值是一致的,即所有字节在时间上是一致的,当读取寄存器的 MS 字节时,设备内部将寄存器的内容转移到一个临时缓冲区。临时缓冲区的内容在 SDA 行上以字节序列的形式输出。

MIPI Alliance Specification for Camera Serial Interface 2 (CSI-2)——6.3.3.1 Reading Multi-byte Registers

3.2 写多字节寄存器

为了保证写数据的一致性,要被写入多字节寄存器的数据被暂存到一个 buffer 中,只有当最后一个 LS 字节被写入后才是整个 multi-byte 值被传输完成。只写入多字节寄存器的 LS 或 MS 字节的 CCI 消息是不允许的。单字节写入多字节寄存器地址可能会导致设备中的不正常行为。