MI Sensor 到 SPI Panel 显示程序说明¶
1. 功能介绍¶
该demo主要展示了如何将sensor采集的图像数据通过VIF、ISP、SCL模块处理后,实时显示在SPI屏幕上。
+--------+ +--------+ +--------+ +------------+
| VIF | ---> | ISP | ---> | SCL | ---> | SPI Panel |
+--------+ +--------+ +--------+ +------------+
- 实现了从sensor到SPI屏幕的完整pipeline,VIF接收sensor数据,ISP进行图像处理,SCL进行缩放处理,最终在SPI屏幕上显示
- 支持单sensor实时显示场景,VIF接sensor pad0,ISP/SCL使用dev0 chn0
- 绑定模式:VIF->ISP->SCL为realtime模式,SCL输出到SPI panel显示
- 显示规格:SPI屏幕分辨率240x320,帧率20fps
- 支持3DNR功能,可通过参数开启
- 支持调试模式,可保存原始数据文件和详细日志
- 当键入字符"q"时,进程退出
2. 编译环境说明¶
Note
一般默认板端已经打包好了相应程序,因此sample_code程序编译并非必须。你可以直接在板端/customer/sample_code/bin文件夹中找到prog_sensor2spipanel。如果你没有找到文件或有自己修改程序的需求,可参考如下步骤。
-
如果没有找到
prog_sensor2spipanel,可以查看\sdk\verify\sample_code\source\iford\disp\sensor2spipanel\sensor2spipanel.mk内是否包含APP_REL_PREFIX:= bin,如果没有,可以在sensor2spipanel.mk补上,这样就会在编译project时一同打包到image中; -
在project路径下根据板子(nand/nor,ddr型号等)选择defconfig进行整包编译
例如Comake PI D2型号板子,使用emmc的配置,使用以下defconfig,其他板子型号详细参考用户手册
ipc_iford.emmc.glibc-11.1.0-ext4fs.ssc029d.256.bga8_lpddr4x_d2_full_defconfig在project目录执行以下命令进行编译;
export PATH=/tools/toolchain/gcc-sigmastar-9.1.0-2019.11-x86_64_arm-eabi/bin:/tools/toolchain/gcc-11.1.0-20210608-sigmastar-glibc-x86_64_arm-linux-gnueabihf/bin:$PATHexport CROSS_COMPILE=arm-linux-gnueabihf-export ARCH=armmake ipc_iford.emmc.glibc-11.1.0-ext4fs.ssc029d.256.bga8_lpddr4x_d2_full_defconfigmake clean && make image -j8 -
如有修改程序的需求,可以cd进到
sdk/verify/sample_code目录执行make clean && make source/iford/disp/sensor2spipanel进行编译; -
到
sample_code/out/arm/app/prog_sensor2spipanel获取可执行文件; -
将可执行文件
prog_sensor2spipanel放到板子/customer/sample_code/bin路径上,修改权限777。
3. 运行环境说明¶
此处运行环境配置与点sensor程序完全一致,详情参考 点sensor程序说明 中3.1 单sensor运行环境说明的说明
硬件配置要求:
- Comake-D2型号板子上使用
- 单Sensor有两种接法,一种是默认SJ5 IMX681 SENSOR,另外一种是SJ6接IMX681 SENSOR,使用SJ6/SJ1需要改动硬件
- 同时需要在JP26连接SPI屏幕模块

DTS配置:
- Comake-D2型号板子使用,使用场景1对应的defconfig的情况下,默认dts已配好,无需修改
- SPI屏幕相关的dts配置默认已配好,无需修改
4. 资源文件说明¶
- IQ文件位置:
/config/iqfile/目录 - 默认加载:如不指定iqbin参数,默认加载
/config/iqfile/{sensorname}_api.bin文件 - 可选文件:部分sensor的iq bin文件可在
/project/board/iford/iqfile路径下获取 - 校准数据:如需开启3DNR功能,可通过calidata参数指定校准数据路径
5. 运行说明¶
cd到板端/customer/sample_code/bin路径,运行prog_sensor2spipanel
参数解释如下:
prog_sensor2spipanel [index] [iqbin] [3dnr] [debug] [calidata]
| 参数 | 功能 | 说明 |
|---|---|---|
| index | 选择sensor的分辨率 | 不输入该参数,程序会自动输出目前所有分辨率进行选择 |
| iqbin | 加载iqbin的路径 | 可选参数,默认加载/config/iqfile/{sensorname}_api.bin |
| 3dnr | 是否开启3dnr | 0:关闭(默认),1:开启 |
| debug | 是否开启调试模式 | 0:关闭(默认),1:开启(保存原始数据文件和详细日志) |
| calidata | 加载calidata路径 | 需要开启3dnr功能,默认不加载 |
执行示例
-
运行单sensor实时1080P pipeline + SPI屏幕显示:
./prog_disp_sensor2spipanel index 3 iqbin /config/iqfile/imx681_3m_comake_1201_30fps.bin运行demo后,如果prog_sensor2spipanel不带index参数,会打印sensor可选择输入的res,输入你想选择preview的res(sensor resolution),例如imx415sensor,会打印以下log:
index 0, Crop(0,0,3840,2160), outputsize(3860,2250), maxfps 20, minfps 3, ResDesc 3840x2160@20fps index 1, Crop(0,0,3072,2048), outputsize(3096,2190), maxfps 30, minfps 3, ResDesc 3072x2048@30fps index 2, Crop(0,0,3072,1728), outputsize(3096,1758), maxfps 30, minfps 3, ResDesc 3072x1728@30fps index 3, Crop(0,0,2592,1944), outputsize(2616,1974), maxfps 30, minfps 3, ResDesc 2592x1944@30fps index 4, Crop(0,0,2944,1656), outputsize(2976,1686), maxfps 30, minfps 3, ResDesc 2944x1656@30fps index 5, Crop(0,0,2560,1440), outputsize(2592,1470), maxfps 30, minfps 3, ResDesc 2560x1440@30fps index 6, Crop(0,0,1920,1080), outputsize(1920,1080), maxfps 60, minfps 3, ResDesc 1920x1080@60fps index 7, Crop(12,16,3840,2160), outputsize(3864,2192), maxfps 30, minfps 3, ResDesc 3840x2160@30fps index 8, Crop(12,16,3840,2160), outputsize(3864,2192), maxfps 60, minfps 3, ResDesc 3840x2160@60fps choice which resolution use, cnt 9 0 You select 0 res Res 0 -
开启调试模式运行:
./prog_disp_sensor2spipanel index 3 iqbin /config/iqfile/imx681_3m_comake_1201_30fps.bin debug 1开启debug模式后,程序会: - 打印详细的调试日志 - 保存原始YUV420数据到/customer/sample_code/bin/sensor_scl_output目录 - 保存转换后的RGB565数据到/customer/sample_code/bin/sensor_convert_rgb565目录 - 每30帧打印一次统计信息
6. 运行结果说明¶
-
效果查看
正常出流后,sensor采集的画面会实时显示在SPI屏幕上,显示规格为240x320分辨率,帧率20fps。

程序会打印以下log:
Opening framebuffer device: /dev/fb0 Framebuffer device opened successfully (fd=3) Screen resolution: 240x320, 16 bpp Using double buffer mode: screenSize=153600, smem_len=307200, yres=320, yres_virtual=640 Framebuffer mapped successfully at address 0xXXXXXXXX SPI Panel initialized successfully SPI Panel display thread started, reading from SCL Dev0 Chn0 Port0 SPI Panel display started. Press Ctrl+C to exit... -
退出命令
按
q键即可退出demo,程序会清空屏幕并正常退出
7. 附加说明¶
注意,由于所选SPI Panel不带TE同步信号线,对运动画面可能存在撕裂锯齿现象。如做产品建议选择有TE同步信号线的屏幕。