MI MIPITX API


REVISION HISTORY

Revision No.
Description
Date
2.00
  • Initial release
  • 12/16/2019
    2.01
  • Added new API: MI_MipiTx_InitDev and MI_ MipiTx_DeInitDev
  • 05/08/2020

    1. 概述


    1.1. 模块说明

    将Dram数据通过MIPI接口协议发送出去。


    1.2. 流程框图


    2. API 参考


    2.1. 功能模块API

    API名 功能
    MI_MipiTx_CreateChannel 创建一个MipiTx channel
    MI_MipiTx_DestroyChannel 销毁一个MipiTx channel
    MI_MipiTx_GetChannelAttr 获取MipiTx channel属性
    MI_MipiTx_StartChannel 启用MipiTx channel
    MI_MipiTx_StopChannel 禁用MipiTx channel
    MI_MipiTx_SetTimingConfig 设置MipiTx 通道时序参数
    MI_MipiTx_GetTimingConfig 获取MipiTx 通道时序参数
    MI_MipiTx_InitDev 初始化MipiTx设备
    MI_MipiTx_DeInitDev 反初始化MipiTx设备

    2.2. MI_MipiTx_CreateChannel

    • 描述

      创建一个MipiTx channel。

    • 语法

      MI_S32 MI_MipiTx_CreateChannel(MI_U32 u32ChannelId, MI_MipiTx_ChannelAttr_t *pstMipiTxChAttr);
      
    • 参数

      参数名称 描述 输入/输出
      u32ChannelId MipiTx channel号。 输入
      pstMipiTxChAttr MipiTx channel属性指针。 输入
    • 返回值

      • 0:成功。

      • 非0:失败,参照错误码

    • 需求

      • 头文件:mi_mipitx.h、mi_mipitx_datatype.h

      • 库文件:libmi_mipitx.a / libmi_mipitx.so

    • 注意

      • 不支持重复创建
    • 举例

      mipi tx 功能设置如下

      MI_U32 u32ChnId = 0;
      MI_MipiTx_ChannelAttr_t stMipiChnAttr;
      memset(&stMipiChnAttr, 0x0, sizeof(MI_MipiTx_ChannelAttr_t));
      
      stMipiChnAttr.eLaneNum = E_MI_MIPITX_LANE_NUM_4;
      stMipiChnAttr.ePixFormat = E_MI_SYS_PIXEL_FRAME_YUV422_YUYV;
      stMipiChnAttr.u32Dclk = 445500;
      stMipiChnAttr.u8DCLKDelay = 0;
      stMipiChnAttr.u32Width = 1920;
      stMipiChnAttr.u32Height = 1080;
      stMipiChnAttr.peChSwapType = NULL;
      
      MI_MipiTx_CreateChannel(u32ChnId, &stMipiChnAttr);
      
      MI_MipiTx_TimingConfig_t stTimingCfg;
      memset(&stTimingCfg, 0x0, sizeof(MI_MipiTx_TimingConfig_t));
      
      stTimingCfg.u8Lpx  = 0x07;
      stTimingCfg.u8ClkHsPrpr = 0x08;
      stTimingCfg.u8ClkZero = 0x20;
      stTimingCfg.u8ClkHsPre = 0x01;
      stTimingCfg.u8ClkHsPost = 0x10;
      stTimingCfg.u8ClkTrail = 0x0a;
      stTimingCfg.u8HsPrpr = 0x01;
      stTimingCfg.u8HsZero = 0x0F;
      stTimingCfg.u8HsTrail = 0X0A;
      
      MI_MipiTx_SetTimingConfig(u32ChnId, &stTimingCfg);
      
      MI_MipiTx_StartChannel(u32ChnId);
      
      /****exit****/
      MI_MipiTx_StopChannel(u32ChnId);
      MI_MipiTx_DestroyChannel(u32ChnId);
      

      注:

      Dclk参数设置参考MI_MipiTx_ChannelAttr_t 中的注意;

      Timing参数设置参考MI_MipiTx_TimingConfig_t中的注意。

    • 相关主题

      MI_MipiTx_DestroyChannel


    2.3. MI_MipiTx_DestroyChannel

    • 描述

      销毁一个MipiTx channel。

    • 语法

      MI_S32 MI_MipiTx_DestroyChannel(MI_U32 u32ChannelId);
      
    • 参数

      参数名称 描述 输入/输出
      u32ChannelId MipiTx channel号。 输入
    • 返回值

      • 0:成功。

      • 非0:失败,参照错误码

    • 需求

      • 头文件:mi_mipitx.h、mi_mipitx_datatype.h

      • 库文件:libmi_mipitx.a / libmi_mipitx.so

    • 举例

      请参见MI_MipiTx_CreateChannel

    • 相关主题

      MI_MipiTx_CreateChannel


    2.4. MI_MipiTx_GetChannelAttr

    • 描述

      获取一个MipiTx channel属性.

    • 语法

      MI_S32 MI_MipiTx_GetChannelAttr(MI_U32 u32ChannelId, MI_MipiTx_ChannelAttr_t *pstMipiTxChAttr);
      
    • 参数

      参数名称 描述 输入/输出
      u32ChannelId MipiTx channel号。 输入
      pstMipiTxChAttr MipiTx channel属性指针。 输出
    • 返回值

      • 0:成功。

      • 非0:失败,参照错误码

    • 需求

      • 头文件:mi_mipitx.h、mi_mipitx_datatype.h

      • 库文件:libmi_mipitx.a / libmi_mipitx.so

    • 举例

      请参见MI_MipiTx_CreateChannel

    • 相关主题

      MI_MipiTx_CreateChannel


    2.5. MI_MipiTx_StartChannel

    • 描述

      启用MipiTx channel.

    • 语法

      MI_S32 MI_MipiTx_StartChannel(MI_U32 u32ChannelId);
      
    • 参数

      参数名称 描述 输入/输出
      u32ChannelId MipiTx channel号。 输入
    • 返回值

      • 0:成功。

      • 非0:失败,参照错误码

    • 需求

      • 头文件:mi_mipitx.h、mi_mipitx_datatype.h

      • 库文件:libmi_mipitx.a / libmi_mipitx.so

    • 举例

      请参见MI_MipiTx_CreateChannel

    • 相关主题

      MI_MipiTx_StopChannel


    2.6. MI_MipiTx_StopChannel

    • 描述

      禁用MipiTx channel.

    • 语法

      MI_S32 MI_MipiTx_StopChannel(MI_U32 u32ChannelId);
      
    • 参数

      参数名称 描述 输入/输出
      u32ChannelId u32ChannelId号。 输入
    • 返回值

      • 0:成功。

      • 非0:失败,参照错误码

    • 需求

      • 头文件:mi_mipitx.h、mi_mipitx_datatype.h

      • 库文件:libmi_mipitx.a / libmi_mipitx.so

    • 举例

      请参见MI_MipiTx_CreateChannel

    • 相关主题

      MI_MipiTx_StartChannel


    2.7. MI_MipiTx_SetTimingConfig

    • 描述

      设置MipiTx 通道时序参数。

    • 语法

      MI_S32 MI_MipiTx_SetTimingConfig(MI_U32 u32ChannelId, MI_MipiTx_TimingConfig_t *pstMipiTimingCfg);
      
    • 参数

      参数名称 描述 输入/输出
      u32ChannelId MipiTx channel号。 输入
      pstMipiTimingCfg MipiTx 时序参数。 输入
    • 返回值

      • 0:成功。

      • 非0:失败,参照错误码

    • 需求

      • 头文件:mi_mipitx.h、mi_mipitx_datatype.h

      • 库文件:libmi_mipitx.a / libmi_mipitx.so

    • 举例

      请参见MI_MipiTx_CreateChannel

    • 相关主题

      MI_MipiTx_GetTimingConfig


    2.8. MI_MipiTx_GetTimingConfig

    • 描述

      获取MipiTx 通道时序参数。

    • 语法

      MI_S32 MI_MipiTx_GetTimingConfig(MI_U32 u32ChannelId, MI_MipiTx_TimingConfig_t *pstMipiTimingCfg);
      
    • 参数

      参数名称 描述 输入/输出
      u32ChannelId MipiTx channel号。 输入
      pstMipiTimingCfg MipiTx 时序参数 输出
    • 返回值

      • 0:成功。

      • 非0:失败,参照错误码

    • 需求

      • 头文件:mi_mipitx.h、mi_mipitx_datatype.h

      • 库文件:libmi_mipitx.a / libmi_mipitx.so

    • 举例

      请参见MI_MipiTx_CreateChannel

    • 相关主题

      MI_MipiTx_SetTimingConfig


    2.9. MI_MipiTx_InitDev

    • 描述

      初始化MipiTx设备

    • 语法

      MI_S32 MI_MipiTx_InitDev(MI_MipiTx_InitParam_t *pstInitParam);
      
    • 参数

      参数名称 描述 输入/输出
      pstInitParam 设备初始化参数。 输入
    • 返回值

      • 0:成功。

      • 非0:失败,参照错误码

    • 需求

      • 头文件:mi_mipitx.h、mi_mipitx_datatype.h

      • 库文件:libmi_mipitx.a / libmi_mipitx.so

    • 注意

      本接口必须和MI_MipiTx_DeInitDev成对使用,不可单独重复调用,否则返回失败。


    2.10. MI_MipiTx_DeInitDev

    • 描述

      反初始化MipiTx设备

    • 语法

      MI_S32 MI_MipiTx_DeInitDev(void);
      
    • 返回值

      • 0:成功。

      • 非0:失败,参照错误码

    • 需求

      • 头文件:mi_mipitx.h、mi_mipitx_datatype.h

      • 库文件:libmi_mipitx.a / libmi_mipitx.so

    • 注意

      此函数必须在初始化设备后调用,否则返回失败。

      本接口必须和MI_MipiTx_InitDev成对使用,不可单独重复调用,否则返回失败。


    3. Mipitx 数据类型


    3.1. 数据类型定义

    数据类型 定义
    MI_MipiTx_TimingConfig_t 定义MipiTx Timing 参数类型
    MI_MipiTx_LaneNum_e 定义MipiTx Lane num 的类型
    MI_MipiTx_ChannelSwapType_e 定义Lane Id 顺序
    MI_MipiTx_ChannelAttr_t 定义MipiTx Channel 通道属性
    MI_MipiTx_InitParam_t 定义MipiTx设备初始化参数

    3.2. MI_MipiTx_TimingConfig_t

    • 说明

      定义MipiTx Timing 参数类型。

    • 定义

      typedef struct MI_MipiTx_TimingConfig_s
      
      {
      
          MI_U8 u8Lpx;
      
          MI_U8 u8ClkHsPrpr;
      
          MI_U8 u8ClkZero;
      
          MI_U8 u8ClkHsPre;
      
          MI_U8 u8ClkHsPost;
      
          MI_U8 u8ClkTrail;
      
          MI_U8 u8HsPrpr;
      
          MI_U8 u8HsZero;
      
          MI_U8 u8HsTrail;
      
      } MI_MipiTx_TimingConfig_t;
      
    • 成员

      成员名称 描述
      u8ClkHsPost 所有data lane进入低功耗模式后,Clock lane保持高速时钟状态时间, 如图3-2中TCLK-POST
      u8ClkTrail 进入低功耗模式前Clock lane维持HS-0 时间,如图3-2 TCLK-TRAIL
      u8Lpx 低功耗模式Clock lane维持LP-01时间,如图3-2 TLPX
      u8ClkHsPrpr 低功耗模式Clock lane维持LP-00时间,如图3-2 TCLK-PREPARE
      u8ClkZero 进入高速模式前Clock lane维持HS-0时间,如图3-2 TCLK-ZERO
      u8ClkHsPre Data传输之前Clock lane维持高速时钟时间,如图3-2 TCLK-PRE
      u8HsPrpr Data 传输之前Data Lane维持LP-00时间, 如图3-1 THS-PREPARE
      u8HsZero Data 传输之前Data Lane维持HS-0时间, 如图3-1 THS-ZERO
      u8HsTrail Data 传输结束后Data Lane维持HS-0或HS-1,如图3-1 THS-TRAIL

      图3-1 由低功耗模式(LP)进入高速模式(HS)时序图

      图3-2 由高速模式进入低功耗模式时序

    • 注意事项

      配置Timing可以参考上表,计算公式为Time=(R+1)*TB,其中Time对应上表Default列,R为所求项(对应结构体的值)。例如计算u8Lpx,已知Time=8,算得R=7,所以u8Lpx=7。

    • 相关数据类型及接口

      MI_MipiTx_SetTimingConfig

      MI_MipiTx_GetTimingConfig


    3.3. MI_MipiTx_LaneNum_e

    • 说明

      定义MipiTx Lane num 的类型。

    • 定义

      typedef enum
      
      {
      
          E_MI_MIPITX_LANE_NUM_NONE = 0,
      
          E_MI_MIPITX_LANE_NUM_1    = 1,
      
          E_MI_MIPITX_LANE_NUM_2    = 2,
      
          E_MI_MIPITX_LANE_NUM_3    = 3,
      
          E_MI_MIPITX_LANE_NUM_4    = 4,
      
      } MI_MipiTx_LaneNum_e;
      
    • 注意事项

      MipiTx 和RX 的 Lane Num 数量一定相等。

    • 相关数据类型及接口

      MI_MipiTx_ChannelAttr_t


    3.4. MI_MipiTx_ChannelSwapType_e

    • 说明

      定义Lane Id 顺序。

    • 定义

      typedef enum
      
      {
      
          E_MI_MIPITX_CH_SWAP_0,
      
          E_MI_MIPITX_CH_SWAP_1,
      
          E_MI_MIPITX_CH_SWAP_2,
      
          E_MI_MIPITX_CH_SWAP_3,
      
          E_MI_MIPITX_CH_SWAP_4,
      
      } MI_MipiTx_ChannelSwapType_e;
      
    • 注意事项

      默认情况下lane0 CH0, lane1 CH1, lane2 CH2, lane3 CH3, Clk CH4对应。

    • 相关数据类型及接口

      MI_MipiTx_ChannelAttr_t


    3.5. MI_MipiTx_ChannelAttr_t

    • 说明

      定义MipiTx Channel 通道属性。

    • 定义

      typedef struct
      {
          MI_U32                          u32Width;
          MI_U32                          u32Height;
          MI_SYS_PixelFormat_e             ePixFormat;
          MI_MipiTx_LaneNum_e             eLaneNum;
      
          MI_U8                          u8DCLKDelay; ///<  DCLK Delay
          MI_U32                         u32Dclk;     ///<  DCLK ( Htt * Vtt * Fps)
      
          MI_MipiTx_ChannelSwapType_e    *peChSwapType;  ///< all lane order swap
      }MI_MipiTx_ChannelAttr_t;
      
    • 成员

      成员名称 描述
      u32Width 传输数据水平大小
      u32Height 传输数据垂直大小
      ePixFormat 传输数据像素格式
      enLaneNum 传输数据通道数量
      u8DCLKDelay 传输数据时钟偏移
      u32Dclk 传输数据时钟
      peChSwapType Lane id 排列顺序
    • 注意事项

      • ePixFormat当前只支持YUV422和RAW8格式。

      • u32Dclk = width*1.2*height*1.2*Fps*bit/LaneNum,单位HZ。Dclk 有4个档位:100M~200M, 200M~400M, 400M~800M, 800M~1500M。

      • u8DCLKDelay默认为0,不需要设置, 预防以后调整时钟偏移

      • 当peChSwapType == NULL时,chn 0~4和lane 0~4默认依次对应。否则,peChSwapType需要指定对应于每个CHN的lane Id。

    • 相关数据类型及接口

      MI_MipiTx_CreateChannel


    3.6. MI_MipiTx_InitParam_t

    • 说明

      MipiTx设备初始化参数。

    • 定义

      typedef struct MI_MipiTx_InitParam_s
      
      {
      
          MI_U32 u32DevId;
      
          MI_U8 *u8Data;
      
      } MI_MipiTx_InitParam_t;
      
    • 成员

      成员名称 描述
      u32DevId 设备ID
      u8Data 数据buffer指针
    • 相关数据类型及接口

      MI_MipiTx_InitDev


    4. 错误码

    错误代码 宏定义 描述
    0xA01E1016 MI_ERR_MIPITX_CHN_HAVECREATE 通道已经创建
    0xA01E1002 MI_ERR_MIPITX_CHNID_INVALID Channel Id非法
    0xA01E1014 MI_ERR_MIPITX_CHN_NOTSTOP 通道没有停止
    0xA01E1003 MI_ERR_MIPITX_ILLEGAL_PARAM 非法参数
    0xA01E2004 MI_ERR_MIPITX_RUNFAIL 功能执行失败
    0xA01E2006 MI_ERR_MIPITX_NULL_PTR 输入参数空指针错误