记录一下datasheet的分析,之前看了忘完了。
1、image data output format
Packet Header决定了该行后面的数据类型。
Raw10/12由寄存器319Dh MDBIT[0]决定,
每一帧的第二行就会是Embedded data line,该行的作用是将摄像头/图像传感器的配置数据的寄存器地址和地址对应数据传输给系统,让操作者可以在系统中配置对应参数。
具体的行数据排列格式实在看不懂,后续再说吧,下面是datasheet给出的例子,也看不东。
2、imx335分辨率模式
All-pixel scan mode
默认模式,最大分辨率为2592*1944。
输出帧图像数据时序图,黄色部分为有效图像数据,粉色部分为帧头帧尾
具体寄存器配置见datasheet。
在全图扫描模式中AD conversion和output bit width匹配,也就是ADBIT和Raw格式位数匹配。
Horizontal/Vertical 2/2-line binning scan mode
四分之一画幅,分辨率1296*972.
在2/2模式中AD conversion和output bit width不匹配,也就是ADBIT和Raw格式位数相差2。
自定义窗口模式
Window Cropping Mode是一种图像窗口裁剪模式,该模式允许在图像传感器信号中任意位置剪裁和读取图像。裁剪的位置是根据有效像素的起始位置(在全像素扫描模式下为(48, 176))来设置的。这个窗口裁剪功能仅适用于全像素扫描模式,并且垂直和水平周期以及帧率被固定为该模式的数值。
在窗口裁剪模式下,通过水平和垂直裁剪设置可以裁剪图像,从而实现只输出指定位置的图像部分。裁剪的像素会在水平方向上左对齐,并扩展水平消隐期。这样可以保持图像的完整性,并且裁剪区域以外的部分将被忽略,从而产生一个新的裁剪后的图像。
需要注意的是,Window Cropping Mode仅支持全像素扫描模式,这意味着在其他扫描模式下无法使用窗口裁剪功能。此外,窗口裁剪模式下垂直和水平周期以及帧率是固定的,无法在此模式下进行调整。(搞不懂,这边说窗口裁剪模式的垂直水平周期以及帧率固定,但是在下面的1080p例子中,帧率为118,VMAX和HMAX也改变了??? 可能是这边说的垂直水平周期及帧率固定可能是相机内部
- 传感器信号可以在任意位置被裁剪出来读取。裁剪位置是相对于全像素扫描模式下的有效像素起始位置(48,176)来设置的。
- 裁剪功能只在全像素扫描模式下可用,且垂直、水平周期和帧速率会固定在该模式下的数值。
- 通过水平裁剪设置裁剪掉的像素会以左对齐的方式输出,这会延长水平消隐期。
- 窗口裁剪后的图像如图所示。这个功能只支持全像素扫描模式。
以上是关于窗口裁剪模式的一些限制条件和寄存器设置要求:
- 设置WINMODE为4h,表示选择窗口裁剪模式。
- 48 ≦ HTRIMMING_START + HNUM ≦ 2664:水平裁剪起始位置加水平裁剪宽度的范围应在48至2664之间。
- HTRIMMING_START = 48 + N×12:水平裁剪起始位置需要满足48加上12的倍数。
- 312 ≦ HNUM:水平裁剪宽度HNUM需要大于等于312。
- 将HNUM设置为24的倍数:水平裁剪宽度HNUM需要是24的倍数。
- AREA3_ST_ADR_1 = 176 + M×4:垂直裁剪起始位置需要满足176加上4的倍数。
- 372 × 2 ≦ AREA3_WIDTH_1 ≦ 1964 × 2:垂直裁剪宽度AREA3_WIDTH_1需要在372×2至1964×2之间。
- 将AREA3_WIDTH_1设置为行数的两倍:垂直裁剪宽度AREA3_WIDTH_1需要是行数的两倍。
- 将AREA3_WIDTH_1设置为4的倍数:垂直裁剪宽度AREA3_WIDTH_1需要是4的倍数。
- UNREAD_ED_ADR = AREA3_ST_ADR_1 + AREA3_WIDTH_1 + 208:未读取区域的地址UNREAD_ED_ADR应该是垂直裁剪起始位置、垂直裁剪宽度和208的和。
- 如果UNREAD_ED_ADR > 4172,则设置UNREAD_ED_ADR = 4172:如果未读取区域的地址超过4172,则将其设置为4172。
- VTTL (1帧的行长度或VMAX) ≧ AREA3_WIDTH_1 + 96:VTTL(一帧的行长度或VMAX)需要大于等于垂直裁剪宽度AREA3_WIDTH_1加上96。
- 当176 ≦ AREA3_ST_ADR_1 < 276 时,设置UNRD_LINE_MAX = 0和BLACK_OFFSET_ADR = 0。
- 当AREA3_ST_ADR_1 ≥ 276 时,设置UNRD_LINE_MAX = 100和BLACK_OFFSET_ADR = 18。
- 窗口裁剪模式下的帧率计算:
-
VTTL (1帧的行长度或VMAX)
-
1H period(单位:[μs]):在进行裁剪之前,根据"Operating Mode"和"List of Operation Modes and Output Rates"表中的"Number of INCK in 1H"的值固定1H的时间。
1H period(单位:[μs]):在进行裁剪之前,根据"Operating Mode"和"List of Operation Modes and Output Rates"表中的"Number of INCK in 1H"的值固定1H的时间。
"Operating Mode"和"List of Operation Modes and Output Rates"这个datasheet中没找到,可能是下面这个表格:
Example——window cropping
1920*1080
窗口裁剪设置示例如下所示。帧速率是每种图像格式的最大设置。
要调整帧速率,请延长 VMAX 或每帧的行数。
WINMODE:分辨率模式选择
VMAX:帧图像最大行数,包括blanking等区域/
HMAX:每行时钟数。
HTRIMMING_START:有效图案(包括Effective margin for color processing后面简称emcp)起始地点(水平),范围要求在前一节写了。
HNUM:在窗口裁剪模式下裁剪尺寸指定(水平方向),0798h = 1944 = 1920+12+12
AREA3_ST_ADR_1:有效图案起始地点(垂直)
AREA3_WIDTH_1:在窗口裁剪模式下裁剪尺寸指定(垂直方向),0890h = 2192 = 1080*2+32,注意AREA3_WIDTH_1是垂直裁剪像素的两倍,不知道为什么是2倍。然后垂直方向也有emcp,但是例子的图中没有显示,除了emcp还可能会有Ignored area of effective pixel(后续称iaep),可以在默认模式的图中看到。emcp和iacp的值是设置的还是自动生成的暂时不知道。
BLACK_OFSET_ADR:在前面提到的关于窗口裁剪模式的限制条件和寄存器设置要求中的一个参数。它表示在特定情况下,未读取区域的偏移地址。
未读取区域是指图像帧中未被读取的部分,通常包括图像的上、下、左、右边缘区域。在窗口裁剪模式中,由于进行了裁剪,未读取区域可能会出现在裁剪区域的边缘。通过设置BLACK_OFSET_ADR来指定未读取区域在图像帧中的偏移位置,以便正确处理图像数据并避免数据的错误解析。
UNRD_LINE_MAX:在前面提到的关于窗口裁剪模式的限制条件和寄存器设置要求中的一个参数。通过设置UNRD_LINE_MAX来限制未读取区域的最大行数,可以确保只有裁剪区域内的数据被读取,从而避免不必要的图像数据传输和处理,提高系统效率和性能。
UNREAD_ED_ADR:它表示在特定情况下,未读取区域的结束地址。
3、其他功能
待机模式
当然,你提供的信息描述了一个传感器的“待机模式”。在待机模式下,传感器减少了其功耗。以下是一些关键点:
备注和注意事项:
- **待机状态时**:传感器停止其正常运作以节省电力。
- **上电或重置后**:传感器也会进入待机模式。
- **串行通信**:即使传感器处于待机模式,其串行通信块也继续工作。因此,你可以通过将 `STANDBY` 寄存器设置为 `0` 来退出待机模式。
- **内部电路稳定**:退出待机模式后,需要一些时间来稳定内部电路。内部电压稳定器稳定后(需要 18 毫秒或更多时间),传感器将输出正常图像。
实用意义:
1. **电源管理**:待机模式有助于在传感器不需要运行时节省电力。
2. **远程控制**:由于串行通信块仍处于活动状态,您可以远程将传感器从待机模式切换到正常运行模式。
Slave Mode and Master Mode
传感器可以在从模式和主模式之间切换。切换由 XMASTER 引脚完成。在取消系统复位之前建立XMASTER引脚状态。 (操作过程中请勿切换该引脚状态。)
从模式传感器接收系统传来的垂直同步信号到XVS和水平同步信号到XHS,对于同步信号间隔,输入数据线以输出垂直同步信号和在每个操作模式中指定的水平同步信号的1H周期。
主模式传感器通过通过VMAX[19:0]寄存器设置垂直方向同步信号的计数,通过HMAX[15:0]寄存器设置水平方向的时钟数,控制系统的接收时序。本实验应用主模式。
Gain Adjustment Function
增益调节功能
增益设置后会在下一帧生效。
Black Level Adjustment Function
通过增加或减少一个偏移值来改变图像中最暗部分的亮度水平。
Normal Operation and Inverted Operation
传感器读出方向。
Shutter and Integration Time Settings
快门和积分时间设置:Integration time = 1 frame period - SHR0 × (1H period)
- SHR0是一个寄存器的值,用于在每帧开始设置快门释放延迟。它通过提前读出来减少整合时间。
正常曝光模式
长曝光模式
Signal Output CSI-2 output
Number of Internal A/D Conversion Bits Setting
INCK Setting
INCK Setting The available operation mode varies according to INCK frequency. Input either 6-27 MHz ,37.125 MHz or 74.25 MHz for INCK frequency.
上下电顺序
略
4、使用串行通信设置寄存器
从机地址,I2C可以一主多从,但在这个系统中只用到一个IMX335
IMX335相机的pin脚地址。
Register Communication Timing (I2C)
在进入blankline后的12XHS period进行串口通信,在13-21XHS period读出数据。
Communication Protocol
数据以 8 位为单位串行传输,MSB 在前。每个数据字节传输后,将传输 A(确认)/A(否定确认)。数据(SDA)以时钟(SDL)周期传输。 SDA 仅当 SCL 为低电平时才能改变,因此当 SCL 为高电平时必须保持 SDA 值。启动条件由 SCL 为高时 SDA 从高变为低定义。当在前一通信阶段未生成停止条件并且生成下一个通信的启动条件时,该启动条件被识别为重复启动条件。
标准的I2C通信协议。
- 在传输每个数据字节后,主机或传感器会发送一个Acknowledge(ACK)或者Negative Acknowledge(NACK)信号。
- 发送ACK表示数据已被成功接收,传输可以继续。发送NACK表示数据接收失败,需要终止传输。
- 发送ACK/NACK后,发送方(主机或传感器)会释放SDA总线,不驱动SDA。
- 当接收到NACK时,主机必须立即生成Stop Condition,终止通信。
- 所以NACK信号表示通信错误,主机需要停止传输结束本次I2C通信。
- ACK/NACK机制用于流控制,确保数据传输的可靠性。
读写模式整理
Single Read from Random Location
-
主设备通过写请求指定传感器从设备地址,并将索引值设置为M。
-
主设备继续发送地址M,并产生启动条件(Start Condition)。启动条件生成时,不会产生停止条件(Stop Condition),因此成为Repeated Start Condition。
-
接下来,主设备通过读请求发送从设备地址,传感器立即在SDA上输出一个确认信号(Acknowledge),然后紧接着输出索引地址数据。
-
主设备接收到数据后,产生负确认信号(Negative Acknowledge),然后发送停止条件(Stop Condition),以结束通信。
Single Read from Current Location 
直接读就会继续上一次读地址的下一个地址索引读。