【TDA4系列】向 PSDKRA 添加新的图像传感器
时间:2023-12-08 06:37:01
原文
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-数据通道的数量、位置、极性等。请参考更多细节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 调整工具文档。