跳转至

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。如果你没有找到文件或有自己修改程序的需求,可参考如下步骤。

  1. 如果没有找到prog_sensor2spipanel,可以查看\sdk\verify\sample_code\source\iford\disp\sensor2spipanel\sensor2spipanel.mk内是否包含APP_REL_PREFIX:= bin,如果没有,可以在sensor2spipanel.mk补上,这样就会在编译project时一同打包到image中;

  2. 在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:$PATH

    export CROSS_COMPILE=arm-linux-gnueabihf-

    export ARCH=arm

    make ipc_iford.emmc.glibc-11.1.0-ext4fs.ssc029d.256.bga8_lpddr4x_d2_full_defconfig

    make clean && make image -j8

  3. 如有修改程序的需求,可以cd进到sdk/verify/sample_code目录执行make clean && make source/iford/disp/sensor2spipanel进行编译;

  4. sample_code/out/arm/app/prog_sensor2spipanel获取可执行文件;

  5. 将可执行文件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屏幕模块

SPI LCD 硬件连接示例

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功能,默认不加载

执行示例

  1. 运行单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
    
  2. 开启调试模式运行:

    ./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。

    Demo出流示意图

    程序会打印以下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同步信号线的屏幕。