IPL Earlyinit及TTFF/TTCL说明
1. 概述¶
相比于之前在RTOS阶段做Sensor Earlyinit,Iford、Souffle系列芯片会将Sensor Earlyinit的动作放在IPL阶段实现,主要目的是为了加快Sensor的出流,加快TTFF(第一帧出图的时间)。在IPL阶段完成Sensor Earlyinit后,Sensor开始出流,图像数据会先存放在固定的MMA Buffer里面。等到RTOS启动时在Preload APP创建完整的Pipeline,MI Pipe就可以接收Sensor Earlyinit的图像数据了。 该方案目前仅针对自带硬件AE功能的Sensor,IPL阶段预存的图像数据为Sensor Raw数据。
2. Sensor Earlyinit说明¶
2.1. Sensor Earlyinit流程¶
图1-1 简略启动流程图
- 注:CMDQ是Sstar的一个独立的硬件,可以不依赖CPU执行一些简单的操作。
1、IPL阶段会从Flash Load Earlyinit Bin,并且运行Earlyinit Bin。
2、Earlyinit Bin会初始化Sensor Interface相关的IO Padmux、MIPI CSI RX、VIF和WDMA,初始化完成后Sensor和VIF硬件就绪,VIF WDMA硬件支持缓存4帧数据。
3、Earlyinit Bin会从XXX_init_table.h取得操作命令表,然后将要操作的命令(例powerdown/reset/delay)和I2C初始化表转换为实际的寄存器操作指令。转换完毕后存放在CMDQ申请好的内存中。然后trig CMDQ。
4、Earlyinit Bin完成处理,返回IPL,继续Load IPL_CUST,此时CMDQ不依赖CPU,同时在下Sensor Earlyinit相关寄存器。
5、IPL_CUST阶段,CPU Core0先Load RTOS和MISC分区,Load完后唤醒CPU Core1,在CPU Core1上跑RTOS,同时CPU Core0继续Load Linux和Linux Ramdisk。
6、RTOS在跑到RTOS主要任务后会去串流,对应到rtos_preload.c,RtosAppMainEntry -> MI_PreloadTask -> MI_PreloadMiPipe ->Test_vif_vpe_venc。创建MI Pipeline时,Sensor和VIF Driver会检查Earlyinit是否完成,如果完成了就不会重复再下相关设定。APP设定VIF相关参数(宽高、fps、hdr mode等),需要与Earlyinit配置的一致。
7、创建Pipeline时注意VIF和ISP需要使用Framemode绑定,因为只有Framemode的场景下才能使用VIF的WDMA,而Earlyinit依赖WDMA缓存接收到的Sensor画面。
8、在VIF Driver初始化完成后,会检查WDMA状态,将所有在Earlyinit Done到VIF Driver初始化这段时间缓存的Buffer,直接传递到ISP去处理。
9、Earlyinit的操作是直接由CMDQ操作的,完成之后,就把操作Sensor的权限交回CPU->RTOS->I2C driver->Sensor。后续的例如AE/filp/mirror/fps就回到Driver的接口通过I2C设定给Sensor。
10、后续Sensor出流->Isp->Scl->Venc继续往后处理。
源码路径:
Earlyinit fw实现:
rtos/proj/sc/driver/sysdriver/earlyinit_fw/sensor/drv/src/earlyinit_drv_sensor.c
RTOS Preload APP实现:
rtos/proj/sc/application/pipeline_demo/dualos_camera/src/rtos_preload.c
2.2. Earlyinit使用的Buffer说明¶
VIF和ISP使用Framemode绑定,在Earlyinit阶段需要由MI SYS预先从MMA划分4块Buffer给到VIF使用。
图1-2 buffer使用图
在Earlyinit bin In IPL阶段,会根据Sensor的分辨率计算出对应的Bufsize,提前在MMA指定区域申请好4块buffer,等到Earlyinit完成后,Sensor开始出流了,VIF就可以将图像数据填充在Buffer里面。
在RTOS阶段,MI VIF初始化完成,会先获取到4张Earlyinit的Buffer,检查该Buffer是否已经写完。如果已经写完,SYS就会将Buffer给到ISP去处理。
2.3. Sensor Driver文件说明¶
Sensor Driver会有两部分,分为Earlyinit和通用的Driver,使用上与Purelinux基本无差异。
参考如下:
表1-1 Sensor Driver描述
文件 | 路径 | 描述 |
---|---|---|
drv_ss_cus_XXX_MIPI.c | sdk/driver/SensorDriver/drv/src | 通用的Driver文件,和Purelinux下用的完全一致。里面注册的函数会被MI_SNR/MI_VIF的接口调用到。 |
rtk_sensor_module_init.c | sdk/driver/SensorDriver/rtk | 在DualOS下Sensor Driver的Module Init文件,新增Driver在该文件下添加对应的Init Function |
drv_earlyinit_XXX.c earlyinit 文件 |
sdk/driver/SensorDriver/earlyinit/drv/src | xxxEarlyInitGetSensorInfo: 填写sensor信息,和drv_ss_cus_XXX_MIPI.c中要一致。 |
xxxEarlyInitShutterAndFps: 回调函数。函数传参的shutter、fps、经过此函数后返回的I2C寄存器值,应该要和drv_ss_cus_XXX_MIPI.c中的pCus_SetFPS、pCus_SetAEUSecs转换的一致。不然是异常的。 |
||
xxxEarlyInitGain: 回调函数。函数传参的gain、经过此函数后返回的I2C寄存器值,应该要和drv_ss_cus_XXX_MIPI.c中的pCus_setAEGain转换的一致。不然是异常的。 |
||
sensor_early_init.mak | sdk/driver/SensorDriver/earlyinit | 在DualOS下earlyinit的makefile文件,新增earlyinit在该文件下添加对应的.c文件 |
XXX_init_table.h | sdk/driver/SensorDriver/drv/inc | 可以看到,该文件只有一个Sensor_init_table,却包括了sensor从上电(powerdown/delay/reset)到I2C初始化到设定sensor寄存器表的所有操作。 后面lib中会将这个table转换为CMDQ可以操作的寄存器指令,交给CMDQ去操作。 其中的sensor初始化表的部分,应该要和drv_ss_cus_XXX_MIPI.c Sensor_init_table_Xlane的完全一致。 值得注意的是,其中的SNR_SHUTTER_FPS_2A1D和 SNR_GAIN_2A1D这两行打印一定要加上,用于占位,后面才会跑到drv_earlyinit_XXX.c中的回调函数。 |
从上表我们可以看到,其实drv_earlyinit_XXX.c和XXX_init_table.h 完全来自于drv_ss_cus_XXX_MIPI.c。所以当用户只要有调好的drv_ss_cus_XXX_MIPI.c,就可以自己整理Earlyinit的部分。
2.4. Earlyinit开发参考¶
ToDo
2.5. Earlyinit参数切换说明¶
ToDo:Earlyinit_fw 搭配uart使用,接收uart发送的参数,设定Earlyinit。
3. Preload APP影响¶
1、VIF和ISP需要使用Framemode绑定,APP建立绑定关系时需注意。
2、APP设定的Sensor和VIF相关设定需与Earlyinit中对应,包含Sensor的Resolution Index、Fps、Hdr mode、VIF的宽高、压缩模式、HDR mode等。(To Do: 从固定地址信息中,获取这些Earlyinit设定的参数,APP可参考参数设置,直接对齐)
4. TTFF说明¶
TTFF(Time To First Frame)是指开机到输出第一帧出图时间,与Sensor的上电时序有直接关系,不同Sensor的TTFF相应也会有差。目前第一帧出图时间暂时无法从软件上记录,在IPL阶段做完earlyinit后,Sensor就可以输出第一帧图像,此时没有相应的中断记录该信息,所以没有记录在timestamp中。目前通过示波器测量Sensor的data lane 接收讯号,来观察板子上电到Sensor接收到数据的时间。 以imx415为例 4K@30fps,用示波器量測,sensor自身初始化动作所需57.4ms,以下面的timestamp为例,RUNEIB-为19.9ms,所以TTFF可以估测为19.9+57.4 = 77.3ms。
TTFF以RUNEIB为时间依据,再自行加上Sensor启动后到VIF接收到第一帧frame start时间。
5. TTCL说明¶
TTCL(Time To Command Line)是指开机到命令行的时间,与所使用的Flash型号、RTOS Size、MISC分区Size、Kernel Size、Kernel ramdisk Size相关,如要确保快速开机进入命令行,首先需要做的就是裁剪Size。
Sigmastar公版使用WB - W25N01JW(ID:EF-BC-21)快启Flash的TTCL数据大约在208ms左右,
开机后可通过命令cat /sys/class/sstar/msys/booting_time
获取每一阶段时间,所获取的timestamp如下:
/ # cat /sys/class/sstar/msys/booting_time IPL (20 records) 000 time: 15447, diff: 0, I 001 time: 15612, diff: 165, IPL+ 002 time: 16053, diff: 441, MIU+ 003 time: 17383, diff: 1330, MIU- 004 time: 19303, diff: 1920, LDERRTK 005 time: 19760, diff: 457, LDEND 006 time: 19760, diff: 0, RUNEIB+ 007 time: 19900, diff: 140, RUNEIB- 008 time: 20168, diff: 268, LDCUST 009 time: 20874, diff: 706, LDEND 010 time: 20950, diff: 76, CUST+ 011 time: 21277, diff: 327, LDRTK 012 time: 42683, diff: 21406, LDEND 013 time: 42691, diff: 8, LDMISC 014 time: 59219, diff: 16528, LDEND 015 time: 59220, diff: 1, LDLINUX 016 time: 90361, diff: 31141, LDEND 017 time: 90362, diff: 1, LDRAMFS 018 time: 96219, diff: 5857, LDEND 019 time: 96226, diff: 7, CJMP+ Total cost: 80779(us) RTOS (11 records) 000 time: 61073, diff: 0, Rtos Premain Start 001 time: 67780, diff: 6707, DrvAlgoEntry 002 time: 78351, diff: 10571, Test_vif_vpe_venc Start 003 time: 105101, diff: 26750, PreloadFile Start 004 time: 135425, diff: 30324, Test_vif_vpe_venc Done 005 time: 136736, diff: 1311, PreloadFile end 006 time: 150102, diff: 13366, Ready to Linux 007 time: 215574, diff: 65472, VIF ch0 int 0 008 time: 226051, diff: 10477, MI_VENC_DRVCFG_MhalVencEncodeOn 009 time: 244317, diff: 18266, MI_VENC_DRVCFG_MhalVencEncodeOn 010 time: 248905, diff: 4588, VIF ch0 int 1 Total cost: 187832(us) LINUX (7 records) 000 time: 97484, diff: 0, start_kernel+, 853 001 time: 112808, diff: 15324, setup_arch-, 874 002 time: 148724, diff: 35916, kernel_init+, 1429 003 time: 150591, diff: 1867, do_basic_setup+, 1328 004 time: 151326, diff: 735, do_initcalls+, 1306 005 time: 208557, diff: 57231, do_basic_setup-, 1337 006 time: 208755, diff: 198, ramdisk_execute_command+, 1456 Total cost: 111271(us)
timestamp各段分析如图1-3 FastBoot流程所示:
图1-3 bootflow和timestamp分析
该图片在文档中会被压缩,建议右键图片在新标签页中打开图片查看原图