原文
https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/06_02_00_21/exports/docs/psdk_rtos_auto/docs/user_guide/developer_notes.html
正文
Imaging library是与 PSDKRA 打包在一起的示例算法和图像传感器驱动程序的集合,用于启用基于相机的应用程序。 它包括传感器驱动程序框架,这是一个模块化和可扩展的框架
- 轻松添加新的传感器驱动程序。
- 为应用程序和算法提供一致的接口。
该框架的目标是向应用程序添加零代码修改的新传感器。 任何使用图像传感器的应用程序都预计与底层硬件无关。 应用程序应使用 RPC 命令与驱动程序框架进行通信。 在运行时查询支持的传感器的详细信息和传感器功能。
与图像传感器(例如 AutoExposure)通信的类似算法需要在运行时发送 RPC 命令,而无需知道哪个传感器在运行。 驱动程序框架负责将相机 ID 映射到关联的物理图像传感器。
这种机制允许算法和应用程序代码在新传感器添加到框架时保持不变。
关键数据结构
1 、 IssSensor_CreateParams
为图像传感器创建时间参数,如宽度、高度、数据格式、I2C 地址。 更多详情请参考imaging/sensor_drv/include/iss_sensor.h
2、IssSensorFxns
传感器驱动程序要实现的所有例程的回调集。 更多详情请参考imaging/sensor_drv/include/iss_sensor.h
3、 IssSensorIntfParams
接口参数例如 CSI-2数据通道的数量、位置、极性等。更多细节请参考imaging/sensor_drv/include/iss_sensor.h
4、 I2c参数
包含寄存器地址、值和延迟(毫秒)的结构。 更多详情请参考imaging/sensor_drv/include/iss_sensor.h
5、 传感器配置
包含指向传感器和 SerDes 配置结构的指针的结构。
Serializer 和 Deserializer 配置脚本中的最后一个条目必须是 {0xFFFF, 0x00, 0x0}
6、 IssSensors_Handle
处理图像传感器驱动程序,包括有关传感器的所有信息有关更多详细信息,请参阅imaging/sensor_drv/include/iss_sensor.h
接口
RPC 命令
应用程序使用 RPC(远程过程调用)命令与传感器驱动程序通信 下面列出了当前定义的命令。
命令 | 说明 |
---|---|
IM_SENSOR_CMD_ENUMERATE | 由应用程序调用以获取支持的所有传感器的名称列表。 |
IM_SENSOR_CMD_QUERY | 由应用程序调用以按名称查询图像传感器的功能。 |
IM_SENSOR_CMD_PWRON | 由应用程序调用以打开传感器电源。 Sensor f/w 调用所选传感器的 powerOn 回调。此功能的具体实现留给特定的传感器驱动程序。 |
IM_SENSOR_CMD_PWROFF | 由应用程序调用以关闭传感器。 Sensor f/w 调用所选传感器的 powerOff 回调。此功能的具体实现留给特定的传感器驱动程序。 |
IM_SENSOR_CMD_STREAM_ON | 由应用程序调用以开始流式传输。传感器 f/w 调用所选传感器的 streamOn 回调。此功能的具体实现留给特定的传感器驱动程序。 |
IM_SENSOR_CMD_STREAM_OFF | 由应用程序调用以停止流式传输。传感器 f/w 调用所选传感器的 streamOff 回调。此功能的具体实现留给特定的传感器驱动程序。 |
IM_SENSOR_CMD_CTL | 由应用程序调用以发送运行时控制命令。下一节描述当前支持的运行时控件。 |
控制命令
IM_SENSOR_CMD_STREAM_CTL 命令可以有一个控制命令的参数。下面列出了当前定义的控制命令。
命令 | 说明 |
---|---|
IMAGE_SENSOR_CTRLCMD_GETEXPPRG | 通常由 AutoExposure 算法调用以了解传感器的曝光约束,然后可用于初始化 AutoExposure 算法。 |
IMAGE_SENSOR_CTRLCMD_SETEXPGAIN | 通常由 AutoExposure 算法调用以设置曝光时间和模拟/数字增益。传感器 f/w 调用所选传感器的 setAeParams 回调。此功能的具体实现留给特定的传感器驱动程序。 |
IMAGE_SENSOR_CTRLCMD_GETEXPGAIN | 保留以备将来使用。 |
IMAGE_SENSOR_CTRLCMD_SETWBGAIN | 保留以备将来使用。 |
IMAGE_SENSOR_CTRLCMD_GETWBGAIN | 保留以备将来使用。 |
IMAGE_SENSOR_CTRLCMD_DEBUG | 保留以备将来使用。 |
创建新传感器驱动程序的步骤
1 创建文件夹
在 image/sensor_drv/src/ 中创建一个新文件夹,例如 <新传感器123>
2 创建传感器驱动文件
创建一个新的源文件,实现关键数据结构中提到的所有结构和回调。
createParams
参数 | 用法 |
---|---|
姓名 | 选择任何不超过 32 个字符的唯一字符串 |
i2cInstId | 指定连接传感器的 I2C 通道。对于 Jacinto 7 EVM,默认值为 0x6 |
i2cAddrSensor | 传感器地址别名数组。最多支持 8 个实例。必须匹配 UB960 配置中指定的别名值。注意如果传感器直接连接,即没有 SerDes,请在此处提供传感器的物理 I2C 地址(7 位) |
i2cAddrSer | 序列化器地址别名数组。最多支持 8 个实例。必须匹配 UB960 配置中指定的别名值。 |
宽度 | 传感器输出中每行的像素数,不包括 H 消隐。 |
高度 | 传感器输出中每帧的行数,不包括 V 消隐或元数据。 |
num_exposures | 每帧曝光通道数。 |
line_interleaved | 保留以备将来使用。 |
像素容器 | 容器元素的宽度。 |
女士 | 有效数据的 MSB。必须设置为 bpp -1。例如。对于 12b RAW,MSB = 11。 |
功能 | 指定传感器功能的二进制掩码。 |
fps | 每秒帧率。目前没有使用。 |
numDataLanes | CSI-2 数据通道的数量。必须匹配传感器和解串器设置。 |
数据车道地图 | 传感器 CSI2 通道到 CSI2 Rx 的映射。必须匹配传感器和解串器设置。 |
dataLanesPolarity | 保留以备将来使用。 |
csi_ddr_clock | 保留以备将来使用。 |
num_channels | 支持的相机实例数。有效值:1-8。 |
dccId | 唯一的数字标识符。用于 ISP 调谐。 |
IssSensorFxns
API 名称 | 说明 |
---|---|
探针 | 检测传感器是否可访问,通常通过读取传感器芯片 ID。 |
配置 | 配置串行器和传感器。参数 sensor_features_requested 可用于根据应用程序请求加载不同的配置。例如 30fps 模式与 60fps 模式。 |
流 | 在传感器和解串器上启用流。 |
流关闭 | 禁用传感器和解串器上的流。 |
开机 | 硬件依赖。如果需要,拉上/拉下任何 GPIO。配置解串器,以便可以通过 FPD Link 反向通道访问传感器。 |
断电 | 硬件依赖。如果需要,拉上/拉下任何 GPIO。 |
getExpParams | 保留以备将来使用。必须作为返回 0 的虚拟函数实现。 |
设置AeParams | 将 AE 计算的曝光时间和模拟增益转换为传感器特定设置。用新值更新传感器寄存器。 |
getDccParams | 保留以备将来使用。必须作为返回 0 的虚拟函数实现。 |
initAewbConfig | 保留以备将来使用。必须实现为返回 void 的虚拟函数。 |
getIspConfig | 保留以备将来使用。必须实现为返回 void 的虚拟函数。 |
readWriteReg | 保留以备将来使用。必须作为返回 0 的虚拟函数实现。 |
getExpPrg | 由 AE 算法调用以获取传感器曝光约束。 |
去初始化 | 保留以备将来使用。必须实现为返回 void 的虚拟函数。 |
3. Update makefile
修改sensor_drv/src/concerto.mak,添加新添加的sensor文件。 例如
CSOURCES += newsensor123/iss_sensor_newsensor123.c
4. 用框架注册新的传感器
修改sensor_drv/src/iss_sensors.c文件中的IssSensor_Init函数,调用新传感器的init函数。 例如
状态 |= IssSensor_NewSensor123_Init();
5. Build and Run
- 做一个干净的镜像构建,然后是 sdk 构建。
- 执行时,应在枚举传感器列表中填充新传感器。
- 选择传感器并运行。 如果传感器和 SerDes 设置正确,则应在连接的显示器上显示预览。
- 在此阶段,传感器驱动程序正常运行。 但是,图像质量可能并不完美。
- 有关使用 TI ISP 获得良好图像质量的步骤,请参阅 DCC 调整工具文档。