Sensor适配
目标是把一颗新 Sensor 从“硬件能探测”推进到“线性/WDR 图像稳定、AE/AWB 可用、快起和 AOV 可验证”。
适配原则
1. 先测硬件,再改代码:确认供电、RESET、PWDN、MCLK、I2C、MIPI/DVP 后再排软件。
2. 先在线性模式完成:线性模式稳定后再增加 WDR。
3. 一次只改变一个配置:寄存器表、MIPI、曝光和 IQ 参数不要同时修改。
4. Kernel/ISP/Sensor 同版本:Sensor 驱动必须依赖匹配的 tx-isp-PRJ008.ko。
5. 保留基线:为每个分辨率、FPS、HDR 和启动模式保留可回退配置。
第1步:准备Sensor模板
• 以指南中的 IMX327 模板为起点。
• 将文件名、宏、函数名和结构体中的 template 替换为 Sensor 名。
• 同步 Makefile 中驱动名。
• 首次配置阶段启用 #define SENSOR_TEST,用于只验证探测和寄存器访问。
第2步:配置I2C寄存器位宽与ChipID
寄存器地址为 8 bit 时,不定义或注释:
// #define SENSOR_I2C_REG_8BIT
寄存器地址为 16 bit 时定义:
#define SENSOR_I2C_REG_8BIT
根据 Sensor 数据手册填写 Chip ID 高低字节,并实现两次寄存器读取:
#define SENSOR_CHIP_ID_H (0xXX) #define SENSOR_CHIP_ID_L (0xXX) static int <sensor>_detect(struct tx_isp_subdev *sd, unsigned int *ident) { /* read high byte, compare, read low byte, compare */ }
若 Chip ID 读取失败,不应继续调试图像。
第3步:填写Sensor属性
重点字段:
| 字段 | 配置 |
| name | Sensor 名称 |
| chip_id | 数据手册 Chip ID |
| cbus_type | I2C/SPI 控制总线 |
| cbus_mask | 采样位宽、地址位宽 |
| cbus_device | I2C 地址 |
| alloc_again | ISP gain 到 Sensor 寄存器 gain 的映射 |
| alloc_dgain | 数字增益;仅使用 again 时返回 0 |
| alloc_again_short | WDR 短帧增益 |
第4步:配置MCLK、初始化表和输出尺寸
需要从数据手册确认:
• SENSOR_MCLK。
• 线性模式初始化寄存器表。
• WDR 长帧/短帧初始化表。
• 主分辨率、预览分辨率。
• 输出 FPS 分子/分母。
• mbus_code 的 Bayer 和 RAW 位宽。
• colorspace。
win_sizes[] 的顺序应为:
[0] full_resolution [1] preview_resolution
第5步:配置MIPI
MIPI 结构必须与 Sensor 数据手册和板级连线一致:
• mode:普通 MIPI/WDR/VC 模式。
• clk:MIPI 时钟。
• lans:Lane 数。
• image_twidth、image_theight:Sensor 真实输出宽高。
• sensor_csi_fmt:RAW8/10/12/14 等。
• data_type_value:MIPI Data Type。
• sensor_frame_mode:普通或两帧 WDR。
• sensor_mode:普通/VC/非 VC 模式。
• mipi_crop_*、line_sync_mode:只有硬件确需裁剪或行同步时启用。
宽高错误时,先核对 image_twidth/image_theight 与 win_sizes.width/height 两组值。
第6步:配置曝光和增益
根据 Sensor 能力选择:
• 曝光与 Again 同时下发:打开 SENSOR_EXPO,实现 set_expo(value),其中 value=(again<<16)|it。
• 曝光与 Again 分开下发:保持宏关闭,分别实现 set_integration_time() 和 set_analog_gain()。
• 如果 Sensor 只需要 Again,alloc_dgain() 返回 0。
Again 有两种方式:
1. Gain 表方式:打开 SENSOR_AGAIN_TABLE,生成 *_again_lut。
2. 非 Gain 表方式:关闭宏,实现 alloc_again(),把 ISP gain 映射为 Sensor 寄存器值。
重点检查:
• again.value/max/min。
• integration_time.value/max/min。
• apply_delay。
• total_width、total_height。
• HCG 参数。
• WDR 短帧参数。
第7步:配置FPS、镜像和翻转
• set_fps() 形参为 (fps_num<<16)|fps_den。
• 多数 Sensor 通过修改 VTS 设置 FPS,但必须先确认数据手册支持。
• 定义 SENSOR_MIR_FLIP 后实现 set_vflip(enable)。
• enable[0] 是 mirror,enable[1] 是 flip。
• 镜像/翻转后需重新验证 OSD、人脸/目标坐标和 IRCUT 方向。
第8步:配置WDR
1. 修改 sensor_mode:
• TX_SENSOR_NOT_VC_MODE
• TX_SENSOR_VC_MODE
2. 修改 sensor_frame_mode=TX_SENSOR_WDR_2_FRAME_MODE。
3. 长帧曝光/增益复用线性函数。
4. 增加短帧函数:
• set_expo_short()
• set_integration_time_short()
• set_analog_gain_short()
• alloc_again_short()
5. 实现 set_wdr_stop():停流并切换配置。
6. 实现 set_wdr():复位 Sensor 并重新出流。
7. 检查 wdr_cache 与短帧行数。
8. 验证线性↔WDR、日夜切换和快起第一帧。
第9步:从测试模式切换到正常模式
确认 Chip ID、寄存器读写和初始化表正确后:
// #define SENSOR_TEST
重新编译并从线性模式开始出图。Sensor 驱动必须在 Kernel 和 ISP 驱动之后编译,加载顺序也必须先 ISP 后 Sensor。
Sensor适配Skill
要通过 T33 Sensor 适配,工程师至少应具备以下能力:
| Skill | 必须掌握的内容 | 验收证据 |
| 原理图阅读 | 供电域、RESET/PWDN、I2C、MCLK、MIPI、IRCUT/IRLED | 引脚对照表和上电时序 |
| I2C 调试 | 地址、寄存器位宽、读写时序、ACK | Chip ID 稳定读取 |
| MIPI 调试 | Lane、Data Type、时钟、宽高、VC、示波器波形 | MIPI 无 timeout/lost |
| ISP 数据流 | Sensor→VIC→ISP→FrameSource→IPU/Encoder | RAW/YUV/码流可取 |
| AE/增益映射 | 曝光行、Again、DGain、gain 表、apply_delay | 画面亮度连续、无跳变 |
| Sensor 模式管理 | FPS/VTS、mirror/flip、linear/WDR 切换 | 多模式稳定切换 |
| 图像效果 | IQ day/night bin、Bayer、LSC、WDR | 日夜效果一致 |
| 低功耗 | TAG、Sensor init、suspend/resume、首帧 | ZERATUL/Atlas 唤醒可出图 |
| 问题定位 | 日志、寄存器、波形、PCM/RAW/YUV 抓取 | 可复现并定位到具体层 |
| 版本管理 | Kernel、ISP、Sensor、IMP 和图效文件匹配 | 可追溯的版本清单 |
Sensor验收清单
• Chip ID 连续多次上电均可识别。
• 所有供电电压、RESET/PWDN 电平和上电延时符合数据手册。
• MCLK 频率和波形正确。
• 主/预览分辨率、帧率和 RAW 位宽一致。
• 线性模式稳定出图。
• 曝光、Again 全范围无花屏和跳变。
• Mirror/Flip/FPS 动态修改有效。
• WDR 长帧、短帧和切换稳定。
• Day/Night IQ bin 生效。
• ZERATUL 快起和 Atlas 唤醒首帧正常。
• 双摄/多摄时 I2C、同步、buffer 和中断无冲突。
常见故障定位
| 现象 | 优先检查 |
| timeout | GPIO function、I2C 上拉、总线状态 |
| NOACK | I2C 地址、RESET/PWDN、MCLK、供电时序 |
| LOST | I2C 干扰、布线和上下拉 |
| 边缘无关数据 | Sensor 有效窗口和裁剪配置 |
| 色彩异常 | mbus_code 的 Bayer 顺序 |
| 花屏 | MIPI 时序、Lane、RAW 位宽;可先关闭 LSC 验证 |
| MIPI 宽高错误 | image_twidth/image_theight |
| 宽高错误 | win_sizes.width/height 和 check 函数 |

图 37 Sensor 色彩/Bayer 异常。

图 38 Sensor 花屏。

图 39 MIPI 宽高错误。

图 40 图像宽高错误。

图 41 Sensor check 函数校验点。
Tx Sensor Supported List.xlsx 的 PRJ008 页是支持基线,记录分辨率、MIPI Lane、Bayer、RAW 位宽、WDR、FPS 和多摄能力。