Camera Development Guide
本篇主要介绍 Spacemit K1 平台 Camera 模块的快速上手开发。
K1 仅支持 MIPI 类型接口,使用 Spacemit camera 驱动框架。
Camera 快速点亮导览
- 点亮一款已支持的摄像头,只需两步:
- 确定摄像头是接在开发板的哪个MIPI CSI接口上,假如是接在了MIPI CSI1硬件接口,则运行以下命令(假如是接在了MIPI CSI1硬件接口则使用csi1_camera_auto.json)
cam-test /usr/share/camera_json/csi1_camera_detect.json
运行结果如下,cam-test将会自动探测mipi csi1上已支持的摄像头id,如果成功探测到将生成可用的json文件到/usr/share/camera_json/目录。如果没有探测到,说明没有支持此摄像头,或者硬件有问题,此情况下建议请求进迭工程师提供支持。
......
I: ./sensors/cam_sensors_module.c(235): "detect ov16a10_spm sensors in csi1: success, set 3840x2160 to 1920x1080"
I: auto_detect_camera(1401): "auto detect sensor ===================== finish "
I: update_json_file(672): "save json to /usr/share/camera_json/csi1_camera_auto.json success"
从上述运行log还可以得出,ov16a10 sensor生成的json默认使用模式0,sensor输出分辨率为3840x2160,isp输出分辨率为1920x1080。json配置文件的更多描述,请参阅下文的JSON 参数说明。
- 运行下列命令,启动摄像头出图500帧,并保存第250帧。正常运行的输出log请参阅 正常运行单路在线测试 log章节。如果运行失败,建议请求进迭工程师提供支持。
cam-test /usr/share/camera_json/csi1_camera_auto.json
- 如果摄像头需要实现屏幕预览,可以参考gstreamer_user_guide文档里的摄像头应用章节里的MIPI摄像头说明。
- 点亮一款新的摄像头,通常仅需要调整 cam-test 应用层的代码即可快速支持上,所有camera相关的内核配置,dts不用修改。
因为点亮 sensor 所依赖的上下电 GPIO,MCLK 时钟,MIPI lane 配置等硬件功能配置,在方案对外发布前就已经由内部工程师提前开发验证完毕,极少数情况下需要修改配置 dts 和驱动。比如:由于外部不可抗拒原因,必须要对主板的 MIPI CSI 接口电路进行更改,上电 GPIOA 更改为 GPIOB,MCLKA 更改为 MCLKB 等,此情况下建议请求进迭工程师提供支持。
如果不考虑特殊情况,点亮一款新摄像头,建议按照以下步骤展开:
- 根据当前摄像头型号,复用列表中已支持的相近型号的应用代码(主要是复用摄像头应用的代码结构排布,减少开发工作量),修改函数名称,结构体名称等为当前摄像头型号,详情参阅 4.4 bring up 章节内容。
- 阅读摄像头的数据手册,确定摄像头的寄存器位数,I2C 地址,上电流程,ID 寄存器以及 ID 值,并修改 sensor 应用代码,其中,上电流程可以参阅 3.4 sensor 驱动章节内容.
- 配置摄像头的 setting tab 寄存器数组,并根据原厂提供的信息,或计算出来的数值,确定配置所使用的 lane 数/HTS/VTS/MCLK/FPS/PCLK/分辨率/data Lane 等信息,并完善函数内容(主要关注 xxx_spm_get_sensor_capbility 和 xxx_spm_get_sensor_work_info 函数)。
- 调整 xxx_sensor.c 源文件中使用到的曝光增益等寄存器地址。
- 尝试上电读 ID 测试,如果读 ID 失败,请重新检查步骤 1。
- 尝试出图测试,出图测试可以选用 single online test,详情参阅 5.3 场景介绍章节内容。如果出图失败,可以使用 only viisp case 再测试。如果仍旧失败,请认真检查步骤 3,步骤 4,或寻求工程师协助分析。
- Single online test 正常出图的 log,可以参阅 6.2 章节内容。
备注:关于测试应用以及各个 test 的介绍,可以参阅第 5 章节内容。
另外: 关于camera模块的规格特性,请参考进迭时空开发者社区的 芯片规格说明书:https://developer.spacemit.com/documentation?token=BWbGwbx7liGW21kq9lucSA6Vnpb#part779
关于camera模块的ISP效果调试,请参考进迭时空开发者社区的 ISP PQ工具用户指南:https://bianbu-linux.spacemit.com/development_guide/isp_pq_tools_user_guide
关于camera模块的ISP API开发,请参考进迭时空开发者社区的 ISP API开发指导手册:https://bianbu-linux.spacemit.com/development_guide/isp_api_development_guide
Camera 子系统硬件框图
Figure - camera 硬件子系统示意图
各个模块的功能如下:
- SENSOR: 将从镜头传导过来的光线转换为电信号,再通过内部的 AD 转换为数字信号,最终输出 mipi raw 数据。
- CCIC: cmos camera image controller 的简称,解析接收 sensor 发送的 mipi 数据。
- IDI: ISP 硬件内部模块,接收 ccic 发送的数据或者从 ddr 读取数据,发送到 ISP Pipeline;同时可以将 ccic 发送的数据 dump 到 DDR。
- ISP-PIPE: ISP 硬件内部 pipeline,进行一系列图像相关算法的处理。
- ISP-FORMAT: ISP 硬件内部模块,控制输出的图像格式。
- ISP-DMA: ISP 硬件内部模块,将图像输出到 DDR 中。
- CPP: 图像降噪处理和边缘增强。

