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 工作异常。

相关推荐
一个平凡而乐于分享的小比特9 天前
TPA620 芯片功能详解
iic·adc·tpa620
大熊背10 天前
APEX系统中为什么 不用与EV0的差值计算曝光参数调整量
人工智能·算法·apex·自动曝光
大熊背11 天前
场景亮度到APEX测光系统全链接通路解析(一)
数码相机·apex·自动曝光
大熊背11 天前
场景亮度到APEX测光系统全链接通路解析(二)
数码相机·apex·自动曝光·isppipeline
一个平凡而乐于分享的小比特11 天前
SMBus(System Management Bus,系统管理总线)
iic·smbus
大熊背14 天前
APEX自动曝光调整逻辑
apex·自动曝光·isp pipeline
小渔村的拉线工1 个月前
20.IIC通信上拉电阻的计算
嵌入式硬件·iic·硬件知识·上拉电阻
大熊背1 个月前
多核架构中,RTOS小核跑sensor 的normal模式,大核linux核跑WDR模式,将小核的曝光时间映射到WDR模式中的曝光时间的方法
linux·自动曝光·wdr
GUET_一路向前2 个月前
STM32_I2C Timing参数计算方法(I2C speed:120k/240k/400k)
stm32·单片机·嵌入式硬件·iic