mipi协议:Camera Control Interface(CCI (I2C))

Camera Control Interface(CCI)

CCI 是一种用于控制发射器的双线、双向、半双工串行接口。CCI 兼容 I2C 快速模式(Fm)或快速模式增强型(Fm+)[NXP01] 变体,以及 I3C [MIPI03] 接口的单数据速率(SDR)或双数据速率(DDR)协议。CCI 应支持高达 400kbps 的(Fm)操作和 7 位从机地址。此外,CCI 可以选择性地支持高达 1Mbps(Fm+)、12.5Mbps(SDR)或 25Mbps(DDR)的操作。

本节使用了以下术语:

  • 1、CCI (I2C) 意指支持 I2C 的 CCI

  • 2、CCI (I3C) 意指支持 I3C 的 CCI

  • 3、CCI (I3C SDR) 意指支持 I3C SDR 的 CCI

  • 4、CCI (I3C DDR) 意指支持 I3C DDR 的 CCI

  • 5单独使用 CCI(不带括号)则表示既包括 CCI (I2C) 也包括 CCI (I3C)

CCI 可以与或不与基于 C/D-PHY 的 CSI-2 一起使用。当 CCI 作为 CSI-2 总线的一部分使用时,CSI-2 接收器应配置为主设备,CSI-2 发射器应配置为从设备。当 CCI 在没有基于 C/D-PHY 的 CSI-2 的情况下使用时,主机应作为主设备。CCI 能够处理总线上的多个从设备。

在 CCI (I2C) 中,不支持多主模式。任何本节未描述的 I2C 命令应被忽略,并且不应导致设备发生意外操作。

在 CCI (I3C) 中,所有 I3C 的强制功能和“必需”的 CCC 命令都必须支持,而 I3C 的可选功能和命令可以选择性地支持(例如,多主模式、带内中断、热插拔)。

注意:不要将 CCI 中的主设备和从设备术语与 C-PHY 或 D-PHY 规范中的类似术语混淆;它们没有关系。

通常,发射器和接收器之间有一个专用的 CCI 接口。CCI 是 I2C 或 I3C 协议的一个子集,包含了 I2C 或 I3C 规范中为从设备规定的最低组合的强制性特性。因此,符合 CCI 规范的发射器也可以连接到系统的 I2C 或 I3C 总线上。然而,需要注意的是,I2C 或 I3C 主设备不能尝试使用 CCI 主设备或从设备不支持的 I2C 或 I3C 功能。CCI 发射器可能具有支持 I2C 或 I3C 的附加功能,但这取决于具体实现。有关详细信息,可以参考特定设备的数据手册。本规范并未尝试定义由 CCI 主设备发送的控制消息的内容。因此,实施者有责任定义一组控制消息及其相应的帧时序,以及在向 CCI 从设备发送此类控制消息时,CCI 主设备必须满足的任何 I2C 或 I3C 延迟要求。CCI 在 I2C 或 I3C 之上定义了一个额外的数据协议层,如以下部分所述.

CCI(I2C) Data Transfer Protoco:

CCI(I2C)数据传输协议遵循I2C规范。启动、重复启动和停止条件以及数据传输协议都在[NXP01]中规定 .

CCI(I2C)Message Type:

一个基本的CCI(I2C)消息由以下部分组成:

  • 1、启动或重复启动条件

  • 2、带有读/写位的从设备地址

  • 3、从设备的应答信号

  • 4、用于指向从设备内部寄存器的子地址(索引)(在从当前地址的单次读取中不使用)

  • 5、 从设备的应答信号(在从当前地址的单次读取中不使用)

然后其它 对于写操作:

  • 1、来自主设备的数据字节

  • 2、从设备的应答信号/否定应答信号

  • 3、停止或重复启动条件”

或者对于读操作:

  • 1、重复启动条件(在从当前地址的单次读取中不使用)

  • 2、 带有读位的从设备地址(在从当前地址的单次读取中不使用)

  • 3、 从设备的应答信号(在从当前地址的单次读取中不使用)

  • 4、 来自从设备的数据字节

  • 5、 来自主设备的应答或否定应答信号

  • 6、 停止或重复启动条件

CCI从设备可以通过在CCI消息之间使用重复启动条件来支持连续消息,而不是使用启动和/或停止条件,如本节所示。在CCI(I2C)中,从设备地址长度为7位。CCI(I2C)支持8位索引与8位数据,或16位索引与8位数据。具体使用哪种消息类型由从设备定义。

CCI(I2C)Read/Write Operations:

符合CCI(I2C)规范的设备应支持表1中所示的四种读操作和两种写操作,具体细节在以下子章节中详述:

140547d2acccf200e0617a9b3d843b59.png

从设备中的索引必须在每次读/写操作后自动递增。这一点也在以下章节中进行了说明。

CCI (I2C) Single Read from Random Location(CCI(I2C)从随机位置的单次读取):

在从随机位置进行单次读取时(见图4),主设备首先对所需的索引执行一次伪写操作,发出重复启动条件,然后再次通过读操作寻址从设备。在确认从设备地址后,从设备开始在SDA线上输出数据。主设备通过设置否定应答信号和停止或重复启动条件来终止读取操作:

984b2bd08c5e24678c3164e136dea3b5.png

CCI(I2C)带有8位索引和8位数据(7位地址)的随机位置单次读取:

  • 初始状态:主设备上一次操作后的索引值为K。

  • 步骤1:主设备首先发送启动条件(S),然后发送从设备地址,并附带读/写位为0(表示写操作)。从设备在收到地址后发出应答信号(A)。

  • 步骤2:主设备发送子地址(也就是寄存器的索引值)M,从设备再次应答(A)。

  • 步骤3:主设备发出重复启动条件(Sr),然后再次发送从设备地址,但这次读/写位为1(表示读操作)。从设备应答信号后,开始从索引M的位置读取数据并发送到数据线上。

  • 步骤4:主设备在收到数据后,可以发出否定应答信号(A̅),表示读取操作结束。随后,主设备发出停止条件(P)或重复启动条件(Sr),结束此次通信。

  • 最终状态:索引值递增为M+1。

CCI(I2C)带有16位索引和8位数据(7位地址)的随机位置单次读取:

  • 初始状态:主设备上一次操作后的索引值为K。

  • 步骤1:主设备发送启动条件(S),然后发送从设备地址,并附带读/写位为0(表示写操作)。从设备应答(A)。

  • 步骤2:主设备发送子地址的高字节(索引值的高8位),从设备应答(A)。随后,主设备发送子地址的低字节(索引值的低8位),从设备再次应答(A)。

  • 步骤3:主设备发出重复启动条件(Sr),然后发送从设备地址,并附带读/写位为1(表示读操作)。从设备应答后,开始从索引M的位置读取数据并发送到数据线上。

  • 步骤4:主设备在收到数据后,可以发出否定应答信号(A̅),表示读取操作结束。随后,主设备发出停止条件(P)或重复启动条件(Sr),结束此次通信。

  • 最终状态:索引值递增为M+1。

CCI(I2C) Single Read from Current Location(CCI(I2C)从当前地址的单次读取):

也可以通过使用读操作对从设备寻址,从上次使用的索引读取数据(见图5)。从设备将从上次使用的索引中读取的数据发送到SDA线上。主设备通过设置否定应答信号并发出停止或重复启动条件来终止读取操作 :

5e44b1f028901aa2d288880f45bc0e68.png

索引值 K:这是从设备在上一次操作后停留的索引值,也就是从设备内部当前的寄存器地址

第一步:主设备发起读操作:

  • 启动条件(S/Sr):主设备首先发送一个启动条件(S),或在之前的操作基础上发送一个重复启动条件(Sr),表示即将开始新的数据传输。

  • 从设备地址和读操作位(Slave Address + 1):接着,主设备发送从设备地址,并将读/写位设置为1,表示这是一个读操作。

  • 应答信号(A):从设备在收到主设备的读请求后,发送应答信号(A),表示准备好提供数据。

第二步:数据传输:

  • 数据传输(DATA):从设备开始将存储在索引K位置的数据传输到SDA线上,供主设备读取。

  • 否定应答信号(A̅):当主设备读取到数据后,可以发送一个否定应答信号(A̅),表示不再需要进一步的数据传输,这也表明当前读取操作结束。

第三步:结束操作:

  • 停止条件(P)或重复启动条件(Sr):最后,主设备通过发送停止条件(P)来结束当前通信,或通过发送重复启动条件(Sr)准备开始下一次通信。

  • 索引值递增(K+1, K+2):在每次读操作完成后,从设备的索引值会自动递增到下一个寄存器地址,以便下一次读取操作可以直接从新位置读取数据。

CCI(I2C)Sequential Read Starting from Random Location(CCI(I2C)从随机位置开始的顺序读取):

从随机位置开始的顺序读取操作如图6所示。主设备首先对目标索引执行一次伪写操作,在从设备发出应答信号后,主设备发出重复启动条件,然后再次以读操作的方式寻址从设备。如果主设备在接收数据后发出应答信号,这将作为一个信号,指示从设备继续从下一个索引处读取数据。当主设备读取最后一个数据字节时,它将发出否定应答信号,并发出停止或重复启动条件:

f44fc4bf5223dd3b648a3f001328e48a.png
  1. 上一次操作后的初始状态

● 索引值 K:这是从设备在上一次操作后停留的索引值,也就是从设备内部当前的寄存器地址。

  1. 顺序读取操作流程

第一步:伪写操作

● 启动条件(S/Sr):主设备首先发送一个启动条件(S),或在之前的操作基础上发送一个重复启动条件(Sr),表示即将开始新的数据传输。

● 从设备地址和写操作位(Slave Address + 0):接着,主设备发送从设备地址,并将读/写位设置为0,表示这是一个写操作。

● 应答信号(A):从设备在收到主设备的写请求后,发送应答信号(A),表示已经准备好接收数据。

● 发送子地址(索引值M):主设备发送子地址(即索引值M),指明要读取的寄存器地址。从设备再次应答(A),表示已成功接收索引值。

第二步:发出重复启动条件

● 重复启动条件(Sr):在完成伪写操作后,主设备发出重复启动条件(Sr),重新发起通信。

第三步:顺序读取数据

● 从设备地址和读操作位(Slave Address + 1):主设备再次发送从设备地址,这次将读/写位设置为1,表示这是一个读操作。

● 应答信号(A):从设备在收到读请求后,发送应答信号(A),表示准备开始传输数据。

● 数据传输(DATA):从设备开始从索引M的位置传输数据,并在每次成功传输一个字节后等待主设备的应答信号。

● 继续读取(A):如果主设备希望继续读取下一个字节的数据,它会发送应答信号(A),从设备则从索引M+1的位置继续传输数据。这个过程会持续进行,直到主设备读取到所有所需的数据。

第四步:结束读取操作

● 否定应答信号(A̅):当主设备读取到最后一个数据字节时,发送否定应答信号(A̅),表示读取操作结束。

● 停止条件(P)或重复启动条件(Sr):最后,主设备通过发送停止条件(P)结束当前通信,或者通过发送重复启动条件(Sr)准备开始下一次通信。

  1. 数据读取的最终状态

● 索引值自动递增:在每次成功读取一个数据字节后,从设备的索引值会自动递增。因此,在读取完成后,索引值会从初始的M增加到M+L(其中L是读取的字节数)。

CCI(I2C)Sequential Read Starting from Current Location( CCI(I2C)从当前地址开始的顺序读取  ):

从当前地址开始的顺序读取(见图7)与从随机位置的顺序读取类似。唯一的区别是没有伪写操作。主设备通过发出否定应答信号以及停止或重复启动条件来终止读取操作:

7fbab4ec915139db8c169ecd5ef0e411.png

CCI(I2C)Single Write to Random Location(CCI(I2C)向随机位置的单次写入):

向随机位置的写入操作如图8所示。主设备向从设备发起写操作,然后在从设备确认写操作后发送索引和数据。写入操作由主设备通过发送停止条件或重复启动条件来终止:

09587384bd871e3555ec3ea4acd2b744.png

1.初始状态

● 索引值 K:这是从设备在上一次操作后停留的索引值,也就是当前寄存器地址。

  1. 单次写入操作的具体步骤

步骤1:主设备发起写操作

● 启动条件(S/Sr):主设备首先发送一个启动条件(S),或在之前的操作基础上发送一个重复启动条件(Sr),表示开始新的数据传输。

● 从设备地址和写操作位(Slave Address + 0):接下来,主设备发送从设备地址,并且将读/写位设置为0,表示这是一个写操作。

● 应答信号(A):从设备在收到地址和写操作请求后,会发送一个应答信号(A),表示已经准备好接收数据。

步骤2:发送子地址(索引值 M)

● 对于8位索引:主设备发送子地址M(索引值),这个值用于指定从设备内部的具体寄存器地址。从设备接收到这个子地址后,发送一个应答信号(A),表示成功接收了该索引值。

● 对于16位索引:如果使用16位索引,主设备会先发送子地址的高8位(索引值的高字节),从设备应答(A)后,再发送子地址的低8位(索引值的低字节),从设备再次应答(A)。

步骤3:发送数据

● 发送数据字节(DATA):主设备接着发送需要写入的数据字节。从设备接收到数据后会发出应答信号(A),确认成功接收到数据。

步骤4:终止写操作

● 停止条件(P)或重复启动条件(Sr):写入操作完成后,主设备可以通过发送停止条件(P)来结束当前的写入操作,或者通过发送重复启动条件(Sr)来准备进行下一次操作。

  1. 数据写入后的状态

● 索引值递增:写入操作完成后,从设备内部的索引值会自动递增(M+1),为下次的操作做好准备。

CCI(I2C) Sequential Write Starting from Random Location(CCI(I2C)从随机位置开始的顺序写入):

从随机位置开始的顺序写入操作如图9所示。从设备在接收到每个数据字节后会自动递增索引。从随机位置开始的顺序写入操作由主设备通过发送停止条件或重复启动条件来终止:

836e602650258195453fbb2be8e4a965.png

1.初始状态

● 索引值 K:这是从设备在上一次操作后停留的索引值。

  1. 顺序写入操作的具体步骤

步骤1:主设备发起写操作

● 启动条件(S/Sr):主设备首先发送一个启动条件(S),或在之前的操作基础上发送一个重复启动条件(Sr),表示开始新的数据传输。

● 从设备地址和写操作位(Slave Address + 0):接下来,主设备发送从设备地址,并且将读/写位设置为0,表示这是一个写操作。

● 应答信号(A):从设备在收到地址和写操作请求后,会发送一个应答信号(A),表示已经准备好接收数据。步骤2:发送子地址(索引值 M)

● 对于8位索引:主设备发送子地址M(索引值),这个值用于指定从设备内部的具体寄存器地址。从设备接收到这个子地址后,发送一个应答信号(A),表示成功接收了该索引值。

● 对于16位索引:如果使用16位索引,主设备会先发送子地址的高8位(索引值的高字节),从设备应答(A)后,再发送子地址的低8位(索引值的低字节),从设备再次应答(A)。

步骤3:发送数据

● 发送数据字节(DATA):主设备接着发送需要写入的数据字节。从设备接收到数据后会发出应答信号(A),确认成功接收到数据。

● 数据自动写入:在写入一个数据字节后,从设备会自动将索引值M递增,这样下一个数据字节会写入到索引值M+1的位置。这一过程将持续进行,直到所有数据字节都被写入。

步骤4:终止写操作

● 停止条件(P)或重复启动条件(Sr):写入操作完成后,主设备可以通过发送停止条件(P)来结束当前的写入操作,或者通过发送重复启动条件(Sr)来准备进行下一次操作。

  1. 数据写入后的状态

● 索引值递增:在每次成功写入一个数据字节后,从设备内部的索引值会自动递增。因此,在写入操作结束时,索引值从M递增到M+L(L为写入的数据字节数

  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值