sensor IIC有误时,写入曝光参数异常出现的常见问题

目录

问题:

分析:

解决方法:

[1. 曝光参数写入失败(参数不生效)](#1. 曝光参数写入失败(参数不生效))

[2. 曝光参数写入错误(数据被篡改)](#2. 曝光参数写入错误(数据被篡改))

[3. 寄存器地址写入偏移(写错地方)](#3. 寄存器地址写入偏移(写错地方))

[4. 帧率下降或卡死(阻塞式等待)](#4. 帧率下降或卡死(阻塞式等待))

[5. 曝光与增益联动异常(AE 算法混乱)](#5. 曝光与增益联动异常(AE 算法混乱))

[6. 长曝光模式下的特殊问题](#6. 长曝光模式下的特殊问题)

排查与定位建议


问题:

双目设备,同样的镜头同样的CIS对着同样的场景,两个CIS的模拟增益相差16倍左右,但是图像的平均亮度基本相差不大。

cpp 复制代码
Sensor0:
0260109_202145[    VPSS][1970-01-01 00:00:34 441] [ak_vpss_wait_exp_stable:1295] 0 current_exp_time:2022, exp_time_max:2250, exp_step:337, cur gain:8192, 256, 434!
20260109_202146[    VPSS][1970-01-01 00:00:34 441] [ak_vpss_wait_exp_stable:1344] 1 current_exp_time:2022, exp_time_max:2250, exp_step:337, cur gain:8192, 256, 434!
20260109_202146[    VPSS][1970-01-01 00:00:34 480] [ak_vpss_wait_exp_stable:1344] 1 current_exp_time:2022, exp_time_max:2250, exp_step:337, cur gain:8192, 256, 434!
20260109_202146[    VPSS][1970-01-01 00:00:34 520] [ak_vpss_wait_exp_stable:1380] 1 exp is not stable!
20260109_202146[    VPSS][1970-01-01 00:00:34 560] [ak_vpss_wait_exp_stable:1275] is_stable!
20260109_202146[    VPSS][1970-01-01 00:00:34 561] [ak_vpss_get_soft_ps_level:2046] wait_exp_stable is over!
20260109_202146[    VPSS][1970-01-01 00:00:34 561] [ak_vpss_get_ev:2215] EV : 28081536, avg_lumi : 35, target_lumi : 38!
20260109_202146[    VPSS][1970-01-01 00:00:34 561] [day_mode_check:1433] EV : 28081536!
20260109_202146[    VPSS][1970-01-01 00:00:34 601] [ak_vpss_get_ev:2215] EV : 28081536, avg_lumi : 35, target_lumi : 38!
20260109_202146[    VPSS][1970-01-01 00:00:34 601] [day_mode_check:1433] EV : 28081536!



Sensor1;
20260109_202906[    VPSS][1970-01-01 00:00:29 768] [ak_vpss_wait_exp_stable:1344] 1 current_exp_time:2022, exp_time_max:2250, exp_step:337, cur gain:516, 256, 256!
20260109_202906[    VPSS][1970-01-01 00:00:29 839] [ak_vpss_wait_exp_stable:1380] 1 exp is not stable!
20260109_202906[    VPSS][1970-01-01 00:00:29 911] [ak_vpss_wait_exp_stable:1295] 0 current_exp_time:2022, exp_time_max:2250, exp_step:337, cur gain:532, 256, 256!
20260109_202906[    VPSS][1970-01-01 00:00:29 911] [ak_vpss_wait_exp_stable:1344] 1 current_exp_time:2022, exp_time_max:2250, exp_step:337, cur gain:532, 256, 256!
20260109_202906[    VPSS][1970-01-01 00:00:29 978] [ak_vpss_wait_exp_stable:1344] 1 current_exp_time:2022, exp_time_max:2250, exp_step:337, cur gain:540, 256, 256!
20260109_202906[    VPSS][1970-01-01 00:00:30 051] [ak_vpss_wait_exp_stable:1380] 1 exp is not stable!
20260109_202906[    VPSS][1970-01-01 00:00:30 121] [ak_vpss_wait_exp_stable:1275] is_stable!
20260109_202906[    VPSS][1970-01-01 00:00:30 121] [ak_vpss_get_soft_ps_level:2046] wait_exp_stable is over!
20260109_202906[    VPSS][1970-01-01 00:00:30 122] [ak_vpss_get_ev:2215] EV : 1108056, avg_lumi : 39, target_lumi : 42!
20260109_202906[    VPSS][1970-01-01 00:00:30 122] [day_mode_check:1433] EV : 1108056!
20260109_202906[    VPSS][1970-01-01 00:00:30 189] [ak_vpss_get_ev:2215] EV : 1108056, avg_lumi : 40, target_lumi : 42!
20260109_202906[    VPSS][1970-01-01 00:00:30 189] [day_mode_check:1433] EV : 1108056!

分析:

ISP端两个CIS读取的增益相差16倍。通过IIC回读CIS相关的曝光和增益寄存器数值。发现回读出来的数据都是0xffffff91。且在串口dmesg命令后出现大量NACK的打印。显然IIC出现了异常了。

解决方法:

参考如下描述分析解决IIC异常问题。

在 ISP(图像信号处理器)调试或摄像头驱动开发中,Sensor I2C 通信错误导致写入曝光参数(Exposure)异常是非常常见的问题。由于曝光时间直接决定画面亮度,这类错误通常表现为画面过亮、过暗、闪烁或卡死。

以下是 I2C 有误时,写入曝光参数异常的常见问题及其具体表现和原因分析:

1. 曝光参数写入失败(参数不生效)

这是最直接的表现。CPU 认为数据已经发出去了,但 Sensor 并没有收到,或者收到了但因为通信错误丢弃了。

现象

  1. 画面亮度固定不变,无论怎么调节曝光时间。
  2. 画面保持在 Sensor 上电默认的曝光值(通常是最大或固定值)。

I2C 层面原因

  1. NACK(非应答):Sensor 没有响应 I2C 写请求(硬件连接松动、Sensor 未上电、地址错误)。
  2. Busy Timeout:I2C 总线被锁死(Arbitration Lost),驱动层一直等待 ACK 超时,导致后续的曝光写入请求被阻塞或丢弃。

2. 曝光参数写入错误(数据被篡改)

I2C 是串行通信,如果 SDA 线上有干扰,可能导致传输的比特位翻转,Sensor 收到了错误的数值。

现象

  1. 画面忽明忽暗:曝光时间被错误地写成了极小值(画面全黑)或极大值(画面全白),下一次正常写入时又恢复。
  2. 条纹或滚动快门异常:如果曝光时间被写成了一个非预期的奇怪数值,可能导致行曝光时间与帧周期不匹配,出现滚动条纹。

I2C 层面原因

  1. SDA/SCL 电平干扰:信号线上有毛刺,导致数据位(Data Bit)传输错误。
  2. Slave Address 冲突:总线上有其他设备响应了地址,导致数据发错对象(虽然这种情况较少见导致随机错误,更多是固定错误)。

3. 寄存器地址写入偏移(写错地方)

曝光参数通常分布在多个寄存器(如高 8 位、低 8 位)。如果 I2C 写入的字节数不对,或者起始地址偏移,会导致数据写入到错误的寄存器中。

现象

  1. 曝光调节完全失控,或者调节曝光时,画面出现奇怪的颜色失真(因为数据覆盖了相邻的增益或颜色校正寄存器)。
  2. 系统报寄存器读写校验错误(Checksum Error)。

I2C 层面原因

  1. Restart 条件丢失:在连续写入多字节数据时,没有正确发送 Repeated Start 信号,导致 Sensor 指针没有正确递增。
  2. 字节序(Endianness)错误:虽然这通常是软件逻辑问题,但在 I2C 传输层如果没有正确拼接高低字节,会导致 Sensor 解析的曝光时间错误(例如把 0x1000 写成了 0x0010)。

4. 帧率下降或卡死(阻塞式等待)

当 I2C 出现错误时,驱动程序通常会进行重试(Retry Mechanism)。频繁的 I2C 错误会导致 CPU 在等待 Sensor 响应上花费大量时间。

  1. 现象

  2. 摄像头预览帧率大幅下降(例如从 30fps 掉到 5fps)。

  3. 系统日志中充斥着 i2c transfer failed 或 timeout 报错。

  4. I2C 层面原因

  5. 重试机制:每次曝光写入失败后,软件尝试重发 3 次或更多,这占用了大量的 CPU 时间片,导致来不及处理下一个帧的曝光更新。

  6. 中断丢失:I2C 控制器中断未触发,导致软件一直 Polling 等待。

5. 曝光与增益联动异常(AE 算法混乱)

自动曝光(AE)算法通常是一个闭环:读取画面亮度 -> 计算曝光 / 增益 -> 写入 Sensor。如果写入 Sensor 时 I2C 报错,AE 算法可能会误判。

  1. 现象
  2. 画面闪烁(Flicker):AE 算法发现写入曝光后画面没变化,于是在下一帧加倍曝光值,当 I2C 突然恢复正常时,画面瞬间过曝,AE 又迅速拉低,形成震荡。
  3. 曝光锁定失败:AE 算法试图锁定曝光,但底层写入失败,导致画面继续变化。

6. 长曝光模式下的特殊问题

在某些高分辨率或低光场景下,曝光时间很长,Sensor 可能处于 "Busy" 状态,此时 I2C 写入可能会被忽略。

现象

  1. 切换到长曝光模式时,偶尔无法切换成功。

I2C 层面原因

  1. Timing Violation:在 Sensor 正在进行曝光积分时,SCL 时钟频率过快,Sensor 无法在积分间隙响应 I2C 命令。

排查与定位建议

  1. 查看 Kernel Log

  2. 搜索关键词 i2c、timeout、nack、error。

  3. 例如:i2c transfer error: 0x10 (Address NACK)。

  4. Scope / 逻辑分析仪抓波形

  5. 这是最直接的方法。观察 SDA 和 SCL 线上是否有毛刺。

  6. 检查在写入曝光寄存器的时间段内,是否有 Stretching(时钟拉伸) 现象,即 Sensor 拉低 SCL 不让 CPU 发送数据。

  7. 检查硬件连接

  8. 确认 I2C 上拉电阻(Pull-up Resistor)是否合适(通常 2.2k-4.7k)。

  9. 检查 Sensor 供电(AVDD, DVDD, IOVDD)是否稳定,电压跌落会导致 Sensor 无法响应 I2C。

  10. 软件层面增加校验

  11. 在写入曝光参数后,立即进行一次 Read Back(回读)。如果读出的值与写入的值不一致,说明 I2C 通信有问题或 Sensor 工作异常。

相关推荐
GUET_一路向前1 个月前
STM32_I2C Timing参数计算方法(I2C speed:120k/240k/400k)
stm32·单片机·嵌入式硬件·iic
喜喜安1 个月前
串口、IIC、SPI通信协议
uart·iic·spi
时光の尘1 个月前
嵌入式面试八股文(十九)·裸机开发与RTOS开发的区别
linux·stm32·单片机·iic·rtos·spi
小曹要微笑1 个月前
I2C总线技术解析(纯文字版)
单片机·嵌入式硬件·esp32·iic
一个平凡而乐于分享的小比特2 个月前
24LC16芯片介绍
iic·eeprom·24lc16
时光の尘3 个月前
STM32外设面试速通:UART、I2C、SPI、DMA、RAM/FLASH与ADC/DAC
stm32·dma·iic·adc·flash·spi·ram
然后,是第八天4 个月前
[模块教学]VK16K33_8×16LED矩阵屏的驱动以及技术文档,矩阵屏, 详细配置说明
stm32·单片机·iic·8×16点阵屏
大熊背4 个月前
怎样利用AE统计数据优化安防芯片ISP的图像质量?
人工智能·自动曝光
Meraki.Zhang6 个月前
【STM32实践篇】:I2C驱动编写
stm32·单片机·iic·驱动·i2c