NXP

IPU概述

2019-07-12 13:28发布

1. IPU概述

(一)框架
首先来看看imx6q整体系统框架图,看看IPU位于整个SOC系统中的位置:

可以看出来,整个IPU挂接在AXI与AHB总线上面,通过总线,它可以与ARM,VPU,GPU和RAM等模块通信。
另外,每个IPU有两个camera接口,如下所示:
通过LDB控制到LVDS屏,直接控制LCD屏,并且可以通过HDMI或者MIPI来显示。

对于IPU的作用,在下面的图表中解释了:
或者用下图来表示更清楚:

以上是IPU的整体框架部分,对于BSP来说,我们比较关心它的驱动层次框架,如下所示:

从这个框架中可以看出来,对于一般的V4L2子系统,会通过IPU来与硬件通信。 图中各个模块的作用:


(二)代码框架文件
内核版本:3.14.52
文件主要集中在:
.../drivers/mxc/ipu3/                          描述
    ipu_device.c                         IPU tasks的操作等(IPU core driver)
    ipu_common.c                         底层的核心函数
    ipu_capture.c                        为ipu_common.c提供函数操作
    ipu_disp.c                           IPU显示
    ipu_ic.c                             IC的操作函数
    ipu_param_mem.h                      CPMEM设置的头文件,操作函数
.../drivers/mxc/mipi/
    mxc_mipi_csi2.c                      mipi摄像头的操作函数
.../drivers/media/platform/mxc/
    capture/mxc_v4l2_capture.c           为应用程序提供open,ioctl等操作函数
    capture/v4l2-int-device.c            子系统模块注册等操作函数
    capture/ipu_prp_enc.c                Pre-processing encoder驱动函数
    capture/ipu_csi_enc.c                CSI设备驱动操作函数
    capture/ipu_still.c                  静态图片捕获函数
    capture/ipu_prp_vf_adc.c             Pre-processing view finder                                         (asynchronous)driver
    capture/ipu_prp_vf_sdc.c             Pre-processing view finder                                        (synchronous foreground) driver
    capture/ipu_fg_overlay_adc.c         前背景overlay异步驱动
    capture/ipu_bg_overlay_sdb.c         后背景overlay同步驱动
    capture/ov5640.c ov5640_mipi.c       ov5640.c子系统驱动

(三) 分析步骤
从以下几点分析这个驱动:
1. 概述
2. master和slave的匹配过程
3. mxc_v4l2_capture.c分析
    3.1 probe函数分析
    3.2 vidioc_int_* 类函数的调用过程
    3.3 应用程序中函数调用的底层执行流程
    3.4 mxc_v4l_open函数分析
    3.5 cam_data结构体详解
    3.6 mxc_v4l_ioctl函数分析
    3.7 ioctl函数中case的详细分析
    3.8 poll函数的详细分析
4. ipu_common.c的分析
    4.0 ipu_soc,ipu_channel_t ,ipu_channel_params_t结构体详解
    4.1 ipu_common.c分析---入口函数及probe函数分析
    4.2 ipu_common.c分析---ipu_init_channel函数的详细分析
    4.3 ipu_common.c分析---ipu_init_channel_buffer函数的详细分析
    4.4 ipu_param_mem.h头文件分析
    4.5 ipu_request_irq函数详细分析
    4.6 ipu_enable_channel函数详细分析
    4.7 ipu_capture.c分析
5. 举例说明,通过mxc_v4l2_capture.c应用程序中的调用过程来一步一步分析
    5.1 mxc_v4l2_capture.c应用程序追踪分析
    5.2 应用程序和驱动程序中buffer的传输流程
6. 子系统的分析
    6.1 ipu_prp_enc.c详细分析
    6.2 ipu_csi_enc.c详细分析
    6.3 ipu_still.c详细分析
    6.4 ipu_ic.c详细分析
7. ipu_device.c的分析
    7.1 ipu_device.c分析(一)---流程分析
    7.2 ipu_device.c分析(二)---具体函数分析
8. 各个模块的分析
    8.1 子模块分析之IDMAC
    8.2 子模块分析之CSI
    8.3 子模块分析之SMFC
    8.4 子模块分析之IC
    8.5 子模块分析之VDIC     8.6 子模块分析之CM
9. dts文件分析---以ov5640为例,修改dts文件使ov5640使用第二个IPU
10. 对ipu_init_channel的理解,为以后添加channel做准备
11. ov5640_mipi.c分析