基于NXP S32V234 的 ISP 工程建立介绍

关键字 :ispS32V234NXP

1. 芯片性能概述

        S32V234 是 NXP 推出的一款汽车视觉微处理器,具有 4 个主频达 1GHz 的 A53 核以及 1个主频达 133MHz 的 M4 内核,具有强大的运算处理能力。 S32V 中包含的 APEX 和 ISP 核,可以轻松实现图像和视频的检测,识别,分类等应用。 S32V234 的框架图如下:


2. 功能介绍

      ISP 核是一个 S32V234 处理图像数据主要核心,通过其强大的图像数据转化能力,可以针对性地完成图像的格式转化、效果优化、数据处理等功能。

      NXP S32V234 简化了 ISP 处理繁琐的开发过程,通过提供 DS 工具来实现 ISP 工程的建立以及代码生成,方便开发者更好地使用工具来进行 ISP 开发。只需要通过绘制和配置数据处理的 Graph 图形,便可以生成 ISP 处理的核心代码。下面会分别介绍三种通过 NXP 提供的 DS 工具建立 ISP 工程的方式,分别是利用 DS 工具自带 Example 的 ISP 工程、利用已有的 VSDK_Graph 建立 ISP 工程、自主建立 ISP 工程等三种建立 ISP 工程的方式。

3. 功能实现

3.1 建立一个使用 Example 的 ISP 工程

① 点击 Create ISP Project ,出现以下选项,选择 S32DS Project from Example

         

② 选择 isp_sonyimx224_csi_dcu , Project name 可以顺便起名
    

③ 点击 Finish 之后,会在 Project Explorer 出现以下两个项目
    

④ 选择 isp_sonyimx224_csi_dcu_test3_graph,并双击 mipi_simple

        

⑤ 在右边图像框点击右键 ,选中 Emit As – > Emit Configurations,并在出现的界面下选择对应的工程,然后 Emit
        

⑥ 接下来选择上面的工程 isp_sonyimx224_csi_dcu_test3 ,对着这个工程点击右键 ,然后点击 Build Configurations -> Set Active -> 选择 A53

     

⑦ isp_sonyimx224_csi_dcu_test3 点击右键 ,选择 Build Project , 编译完成之后,会生成以下 s32ds_isp_sonyimx224_csi_dcu_test3.elf 可执行文件

     

⑧ 对着这个文件点击右键 -> Properties 可以看到 .elf 应用程序所在的路径

     

3.2 根据已存在的 VSDK_Graph 建立一个 ISP 工程

① 点击 Create ISP Project ,出现以下选项,选择 S32DS Application Project

     

② 选择 S32V234 Cortex-A53 APEX2/ISP Linux , Project name 可以随便起

     

③ 在下面选项中取消以下画出的红框中的 √

     

④ 新建一个 S32DS Project from Example

     

⑤ 选中 isp_generic ,然后点击 Finish

     

⑥ 选中 ISP_ISP_Genric_demo:A53 ,并在 Folder name 中为 Folder 起名

     
    

⑦ 在右边图像框点击右键 ,选中 Emit As – > Emit Configurations

     

⑧ 选项设置如下   
    

     

⑨ 复制 isp_sonyimx224_csi_dcu/A53_src/main.cpp 去覆盖 ISP_ISP_ Generic_demo/ A53_src / main.cpp ,并且修改文件如下:
    
    
    

⑩ 修改 ISP_ISP_Generic_demo/A53_inc/isp_user_define.h

     

⑪ 将 isp_process.cpp 从 A53 的路径中移除

     

⑫ ISP_ISP_Genric_demo:A53 点击右键 ,选择 Build Project , 编译完成之后,会生成以下  ISP_ISP_Genric_demo.elf 可执行文件

    

3.3 自主建立 ISP 工程

3.3.1 Make a Graph

① 建立 ISP DataFlow Project

     

② 建立 ISP DataFlow Project ,并且画出一下的 graph

     

③ 点击 graph 空白处,然后配置下面参数
    

    (注: KBytes Used: 一般情况下不超过 1M

             Kbytes Free:   表示图中未使用的 SRAM 的空间 ,这里写了 4M ,但是只有 1M 是为 ISP 优化的

             Kernel Root Directory: 包含 ISP 内核的文件夹)

④ 配置 MIPICSI0 以及输出口


    

    (注: Camera type:  Camera 类型

             Engine Type:    连接的 MIPI_CSI 接口

             Attached Camera: 与此 MIPI 口连接的 Camera 数

             Input Image Lines: MIPI 捕获到的行数)
    

    (注: Data Type:像素数据的数据类型,由于 Sony Camera 的是12 bits

              Index:对应 MIPI_CSI 的虚拟通道

              Pixel To Transfer Quantity:图像每行的像素数, Sony Camera 是 1288

              Pixel Offset:每一行中跳过的字节数 )

⑤ 配置 SRAMBuffer_0
    

    (注:   Stride:步幅必须等于或大于 XSize 。它是每一行的字节数。它也可以增加,以扩展线与一些黑色像素 ( 0x0 ) 像素数

                XSize:每行像素数

                YSize: 缓冲区的大小 ( 以行数为单位 ) ; 缓冲区的大小不需要非常大,特别是在这种情况下,只有一个 FDMA 通道将运行 )

⑥ 配置 IPU
    

    (注:

         Processing Steps Quantity: IPU要处理的行数

 

         { D_IPUS_SYN_HOST_INACFG_OFF, 0x00000300 },         => Enable InA[0] and InA[1] inputs
         { D_IPUS_SYN_HOST_XCFG_OFF, (1280 << 16) | 0x1 },   => 1280 pixels per lines, pixel processed one at a time (XPOS incremented by 1 with “pixel done” kernel instruction)
         { D_IPUS_SYN_HOST_OUTCFG_OFF, 0x00000100 },        => Enable OUT[0] output
         { D_IPUS_SYN_S_CH0_CFG_INA_OFF, 0x00058000 },      => InA[0] configuration: 16 bits, streamed pixel not repeated, every pixels of a lines is used, no added padding on the image border
         { D_IPUS_SYN_S_CH1_CFG_INA_OFF, 0x00058000 },      => InA[1] configuration: 16 bits, streamed pixel not repeated, every pixels of a lines is used, no added padding on the image border
         { D_IPUS_SYN_S_CH0_CFG_OUT_OFF, 0x10000000 },     => OUT[0] configuration: 8bits (the frame will be in RGB888: R, G and B will be outputted one per one)

    )

     

    (注: RGB888 传输的数据位为 8 bits

             Pixels to transfer quantity 是 3*1280 )

⑦ 配置 SRAMBuffer_1
    

    (    Stride:步幅必须等于或大于 XSize 。它是每一行的字节数。它也可以增加,以扩展线与一些黑色像素 ( 0x0 ) 像素数

         XSize:每行像素数

         YSize: 缓冲区的大小 ( 以行数为单位 ) ; 缓冲区的大小不需要非常大,特别是在这种情况下,只有一个FDMA通道将运行 )

⑧ 配置 DDR

     

⑨ 检查错误
    

3.3.2 Make a Linux application project without ISP graph

① 选择 S32V234 Cortex-A53 APEX2/ISP Linux ,Project name可以随便起

     

② 在下面选项中取消以下画出的红框中的 √
    

③ 在 Graph 空白处右击进入 Emit Configure , 选项配置如下:

     
    

④ 点击 Emit ,完成工程搭建

3.3.3 Application Code for ISP

① 修改A53_inc/isp_user_define.h
    

② 在 main.cpp 中增加 #include "isp_vgt_test_graph_c.h"

③ 对下面函数进行修改
    

3.3.4 Build Project

    正常执行后会生成 .elf 可执行文件

    如果报错如下图
    

    可以在 isp_vgt_test_graph_c.h 中添加下面两个头文件:

    #include "seq_graph.h"

    #include "seq_graph_meta.h"

3.4 总结

      上面列出了三种利用 NXP 提供的 DS 工具建立 ISP 工程的方式,其中比较主要的是第三种,自主建立 ISP 工程的方式,其他两种主要是做了解为主,以及更好地熟悉 DS 工具。后面,会开始介绍在设备节点的应用开发上,主要是对 UART1 的使用以及配置,敬请期待。

4. 参考资料

博文操作都是参考 NXP 的 DS 软件操作手册。

[1] 《 HOWTO_Create_An_ISP_Project_From_Example_in_S32DS_for_Vision 》操作手册

[2] 《 HOWTO_Create_An_ISP_Project_From_Existing_VSDK_Graph_in_S32DS_for_Vision 》操作手册

[3] 《 ISP_graph_tool_in_depth_tutorial 》操作手册

[4] 《 S32DS_Vision_User_Guide 》操作手册

 

 

技术文档

类型标题档案
操作手册User Guide

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论