"02-26 05:15:26.244 0 0 I [ C0] CAM_ERR: CAM-CCI: cam_cci_irq: 336 Base:0000000000000000, cci: 0, M1_Q1 NACK ERROR: 0x40000000 02-26 05:15:26.244 731 731 I CAM_ERR : CAM-CCI: cam_cci_read: 1450 CCI0_I2C_M1_Q1 ERROR with Slave 0x80 02-26 05:15:26.244 731 731 I CAM_ERR : CAM-CCI: cam_cci_read_bytes: 1803 CCI0_I2C_M1 Failed to read rc:-22 02-26 05:15:26.244 731 731 I CAM_ERR : CAM-SENSOR: cam_cci_i2c_read: 35 rc = -22 02-26 05:15:26.254 731 731 I cam_req_mgr soc: qcom,cam-req-mgr: bound ac15000.qcom,cci0:qcom,eeprom3 (ops cam_eeprom_component_ops [camera]) 02-26 05:15:26.274 0 0 I [ C0] CAM_ERR: CAM-CCI: cam_cci_irq: 336 Base:0000000000000000, cci: 0, M1_Q1 NACK ERROR: 0x40000000 02-26 05:15:26.274 731 731 I CAM_ERR : CAM-CCI: cam_cci_read: 1450 CCI0_I2C_M1_Q1 ERROR with Slave 0x86 02-26 05:15:26.274 731 731 I CAM_ERR : CAM-CCI: cam_cci_read_bytes: 1803 CCI0_I2C_M1 Failed to read rc:-22 02-26 05:15:26.274 731 731 I CAM_ERR : CAM-SENSOR: cam_cci_i2c_read: 35 rc = -22"
时间: 2025-09-12 18:41:51 AIGC 浏览: 14
### **深度分析:相机串行控制接口(CCI)I2C通信故障**
#### **1. 核心问题诊断**
- **故障模块**:
- `CAM-CCI`(相机控制接口)
- `CAM-SENSOR`(相机传感器驱动)
- **关键错误**:
- I2C NACK错误(`NACK ERROR: 0x40000000`)
- 从设备地址0x80/0x86读取失败(`rc:-22`,EINVAL无效参数)
- 重复性硬件中断触发
#### **2. 故障链分析**
```mermaid
graph LR
A[CCI中断触发] --> B{I2C总线状态检查}
B -->|NACK标志| C[从设备无响应]
C --> D[EEPROM/传感器读取失败]
D --> E[相机初始化中止]
```
#### **3. 错误模式解码**
| 寄存器值 | 含义 | 对应硬件 |
|---------|------|---------|
| 0x40000000 | Master1 Queue1 NACK | CCI控制器 |
| Slave 0x80 | 典型EEPROM地址 | 配置存储器 |
| Slave 0x86 | 常见传感器地址 | 图像传感器 |
#### **4. 解决方案矩阵**
##### **4.1 紧急恢复措施**
```bash
# 重置CCI控制器(需root)
adb shell "echo 1 > /sys/devices/platform/ac15000.qcom,cci0/reset"
# 强制重新加载传感器驱动
adb shell "rmmod cam_sensor_dev && modprobe cam_sensor_dev"
```
##### **4.2 硬件级修复方案**
**设备树时序调整**:
```diff
// arch/arm64/boot/dts/qcom/xxx-camera.dtsi
&cci0 {
+ qcom,i2c-fast-mode = <1>; // 启用快速模式(400kHz)
+ qcom,wait-cycles = <50>; // 增加等待周期
};
```
**驱动层补丁**:
```c
// drivers/media/platform/msm/cci/msm_cci.c
if (irq_status & CCI_IRQ_STATUS_1_I2C_M1_NACK) {
+ msleep(10); // 增加NACK后延迟
cci_dev->cci_master_info[master].status = -EIO;
}
```
#### **5. 影响评估**
| 硬件模块 | 正常功能 | 当前状态 |
|---------|---------|---------|
| CCI控制器 | I2C总线管理 | Master1队列异常 |
| EEPROM | 参数存储 | 配置读取失败 |
| 图像传感器 | 数据采集 | 初始化受阻 |
#### **6. 高级调试技巧**
**实时I2C监控**:
```bash
adb shell "echo 1 > /sys/kernel/debug/cci0/debug_enable"
adb logcat -b kernel | grep CCI
```
**从设备状态检测**:
```bash
# 扫描I2C总线(需i2c-tools)
adb shell i2cdetect -y 0 # 根据实际总线号调整
```
**寄存器级诊断**:
```bash
adb shell "io -4 0xac15000 0x30" # 读取CCI_IRQ_STATUS_1
```
阅读全文
相关推荐















