征程 6 环视快启 sample
01 功能概述
环视 4V 解串器直接接到 main 域,mcu 访问 main 域 i2c、gpio、lpwm,对 camera sensor、serdes 以及 lpwm 进行初始化,完成环视的快速出图。
mcu 启动后,会在 mcu task 中调用 Camera_Init 接口,完成 camera sensor、serdes 以及 lpwm 的配置,并使能数据流,数据会通过加串器 bypass 给 IVI。
Camera_Init 中会先检查 AonSram 中当前需要配置的 camera 通路是否 working,如果 working 状态,接口将直接退出,当检查 flag 为非 working 状态时,会将需要使能通路 flag 设置为 working,并开始初始化环视,并使能数据流 bypass 给 IVI。
1.1 mcu 编译
mcu camera bypass 参考方案相关实现在 mcu/Service/Camera 目录下。
由于 mcu 调试环境不适合 camera sensor & serdes 的调试工作,所以 camera sensor & serdes 的调试需要在 acore 侧进行,由 acore 完成 camera sensor & serdes 调试,调试完成后通过 libcam 提供的 setting dump 命令得到 setting 文件,如 camdump-hbn_camera_test-608660-639939578641.log.i2c。
在开发板执行如下命令,会在/log/camera 目录下得到 dump 的 setting 文件:
在得到 dump 的 setting 文件后,地平线提供工具 Camera_Setting_Tools 对 dump 的 setting 文件进行解析,进而得到 mcu 侧可用的 Camera_Setting.h 文件。
Camera_Setting.h 文件中包含 i2c bus、i2c 寄存器、gpio 操作、延时等,完全复用 acore 执行侧时序进行初始化。
Camera_Setting.h 中的结构:
lpwm 的配置在 camera_common_lpwm.c 文件中,根据需要配置 lpwm 参数,将参数填入 g_LpwmAttr 的初始化。
由于该参考方案需要 mcu 跨域访问 i2c & ioext,而默认 mcu 侧不一定配置了 main 域的 i2c & ioext,所以需要确认需要访问的 i2c bus 以及 gpio 是否需要额外配置,如果需要额外配置,需要对 i2c 以及 ioext 的 Config 进行修改,并在 Camera_PreInit.c 中增加适配,并在 mcu HorizonTask.c 中 I2c_Init()之前调用 Camera_PreInit.h 中提供的 Camera_PreInit()接口。
I2c 配置 matrix A 参考修改:
将 #define I2C_CONFIG_CHANNEL (4U)定义修改为 #define I2C_CONFIG_CHANNEL (10U)。
ioext 配置 matrix A 参考修改:
增加 acore tca9539 拓展 io i2c bus 定义
在生成完 Camera_Setting.h 并配置好 g_LpwmAttr 后以及适配完 i2c&ioext 后:
将 Camera_PreInit()函数放在 mcu 初始化任务中,注意要在 I2c_Init(NULL_PTR)之前。
将 Lpwm_Ops(0, 0)和 Camera_Init()放在 task 中只执行一次,就可以编译 mcu 镜像了。
注:
如果是解串器接到 switch 并分别接到 mcu 侧 i2c bus 和 acore i2c bus,需要将解析后的 Camera_Setting.h 文件中 bus 替换成 mcu 侧对应 bus,且不需要对 I2c_PBcfg 以及 IoExt_PBcfg 进行额外适配修改。
Camera_Setting_Tools 工具可在 mcu 工程 mcu/Tools/mcu_camsys_tools 目录找到。
1.2 soc 侧配置修改
soc 侧在环视 4V 快起时,需要在 hb_j6dev.json 中 deserial 的配置添加"flags":"0x20",表示打开环视 4V 快起功能。
打开该功能后,soc 在初始化时,会通过 i2c 读取 deserial 的 0x108 寄存器判断是否 mcu 已经开流。
如果 mcu 已经开流,soc 侧会跳过 deserial、sensor 的上电及初始化配置。
如果 mcu 未开流,soc 侧会对 deserial、sensor 进行正常的上电及初始化配置。
1.3 mcu 侧运行
mcu 启动后,通过 i2cdetect 确认检查 camera 设备被扫到。
确认是否出流可以通过加串器出流寄存查看:I2c_Read 3 0x27 16 8 0x108
1.4 PYM-Sample
soc 侧可通过以下命令打开环视 4V,进行测试验证。
deserial 判断 mcu 是否已经初始化:
sensor 判断 mcu 是否已经初始化:
soc 侧也可通过以下命令打开 3V,进行测试验证。
评论