高通平台,MSM8937/MSM8953 RF配置流程

需要的资料:

      1、各个器件的datasheet

      2、原理图

      3、逻辑表(内容包含支持哪些制式、band,各个band用到哪些器件,需要哪些GPIO,GPIO配高还是配低等)

上述由RF同事提供


下面从几个方面介绍RF驱动modem部分的配置工作:

       1、物理,逻辑列表的配置

       2、PA ASM 文件的添加

       3、各制式下的RX TX 配置

       4、GPIO开关控制

一、物理,逻辑列表的配置

在配置物理逻辑列表前,首先需要确定几个问题。

rf_card的选择:和RF工程师一起确定选用那个RF_card,这需要根据是否支持CA,支持哪些band来做初步确定,当问题无法确定时,可以提case到高通请求协助确定。

相关器件的功能确定:有些器件的作用是即可作为PA又能作为ASM的,这时需要RF工程师提供相关器件的datasheet以便确定这些问题。

确定过上述问题后就可以配置物理逻辑列表了,下面以MSM8937平台为例,具体展示配置过程:

首先根据RF工程师和相关资料确定使用的rf_card为rfc_wtr2965_qrd_non_ca_4373_1,明显是不支持CA的,打开common\src\rfc_wtr2965_qrd_non_ca_4373_1_cmn_ag.cpp文件开始配置物理逻辑列表:

rfc_phy_device_info_type rfc_wtr2965_qrd_non_ca_4373_1_phy_devices_list[]=
{
  { /*Device: WTR2965 */ 
    WTR2965, /* PHY_DEVICE_NAME */ 
    0, /* PHY_DEVICE_INSTANCES */ 
    RFC_NO_ALTERNATE_PART, /* PHY_DEVICE_ALT_PART_NUM_OF_INSTANCE */ 
    RFDEVICE_COMM_PROTO_RFFE, /* PHY_DEVICE_COMM_PROTOCOL */ 
    {    4,0 /* 0 not specified */,}, /* PHY_DEVICE_COMM_BUS */ 
    0x217, /* PHY_DEVICE_MANUFACTURER_ID */ 
    0xCA, /* PHY_DEVICE_PRODUCT_ID */ 
    0, /* PHY_DEVICE_PRODUCT_REV */  
    0x01, /* DEFAULT USID RANGE START */ 
    0x01, /* DEFAULT USID RANGE END */ 
    0x01, /* PHY_DEVICE_ASSIGNED_USID */  
    0 /*Warning: Not specified*/, /* RFFE_GROUP_ID */ 
    FALSE, /* INIT */ 
    RFC_TX_MODEM_CHAIN_0, /* ASSOCIATED_DAC */                 
  }, /* END - Device: WTR2965 */ 


  { /*Device: QFE2101 */ 
    QFE2101, /* PHY_DEVICE_NAME */ 
    1, /* PHY_DEVICE_INSTANCES */ 
    RFC_NO_ALTERNATE_PART, /* PHY_DEVICE_ALT_PART_NUM_OF_INSTANCE */ 
    RFDEVICE_COMM_PROTO_RFFE, /* PHY_DEVICE_COMM_PROTOCOL */ 
    {    0,0 /* 0 not specified */,}, /* PHY_DEVICE_COMM_BUS */ 
    0x217, /* PHY_DEVICE_MANUFACTURER_ID */ 
    0x31, /* PHY_DEVICE_PRODUCT_ID */ 
    0, /* PHY_DEVICE_PRODUCT_REV */  
    0x4, /* DEFAULT USID RANGE START */ 
    0x4, /* DEFAULT USID RANGE END */ 
    0x4, /* PHY_DEVICE_ASSIGNED_USID */  
    0 /*Warning: Not specified*/, /* RFFE_GROUP_ID */ 
    TRUE, /* INIT */ 
    RFC_INVALID_PARAM, /* ASSOCIATED_DAC */   
  }, /* END - Device: QFE2101 */ 


 { /*Device: AP6716M for PA and ASM */
    GEN_DEVICE , /* PHY_DEVICE_NAME */
    2, /* PHY_DEVICE_INSTANCES */ 
    RFC_NO_ALTERNATE_PART, /* PHY_DEVICE_ALT_PART_NUM_OF_INSTANCE */ 
    RFDEVICE_COMM_PROTO_RFFE, /* PHY_DEVICE_COMM_PROTOCOL */ 
    {    0,0 /* 0 not specified */,}, /* PHY_DEVICE_COMM_BUS */ 
    0x349, /* MANUFACTURER_ID */
    0x2F, /* PRODUCT_ID */
    0, /* PRODUCT_REV */
    0xE, /* DEFAULT USID RANGE START */
    0xE, /* DEFAULT USID RANGE END */
    0xC, /* ASSIGNED_USID */
    0 /*Warning: Not specified*/, /* RFFE_GROUP_ID */ 
    FALSE, /* INIT */ 
    RFC_INVALID_PARAM, /* ASSOCIATED_DAC */   
  }, /* END - Device: AP6716M */

 如上;是截取了物理列表的部分器件信息:

1,WTR2965 和 QFE2101是原本就存在的,需要注意的是wtr2965的总线确定{    4,0 /* 0 not specified */,}, /* PHY_DEVICE_COMM_BUS */ 

方法是:根据RF工程师提供的逻辑表中的信息确定或是根据原理图确定,找到RFFE5_DATA/CLK或类似RFFE数字_DATA/CLK,用数字减去1就是总线,如上配置的4,其他的一般不需要修改

2,配置新增的器件信息:这里以AP6716为例,如上配置,根据datasheet知道这个器件是即做PA有做ASM的,注释中最好写明,下面配置相关参数

      2, /* PHY_DEVICE_INSTANCES */ 这里的2是指物理逻辑的器件排序,

      {    0,0 /* 0 not specified */,}, /* PHY_DEVICE_COMM_BUS */ 总线的确定和wtr2965一样。

      0x349, /* MANUFACTURER_ID */MID根据datasheet计算

     0x2F, /* PRODUCT_ID */  PID也是根据datasheet确定



    高通平台,MSM8937/MSM8953 RF配置流程_第1张图片


如上,截取datasheet中的,可以看到PID是0x2F,MID是01001001和11相组合后转化为十六进制得到的,如上:二进制为1101001001转为十六进制得0x349.

USID一样计算,1110转化为十六进制为0xE。0xC, /* ASSIGNED_USID */这个自定义就可以,注意不要和其他器件一样。

其他器件也是如上这样添加就可。

逻辑列表相对就简单多了,

rfc_logical_device_info_type rfc_wtr2965_qrd_non_ca_4373_1_logical_devices_list[] = 
{
  { /*Device: WTR2965 */ 
    RFDEVICE_TRANSCEIVER, /* DEVICE_MODULE_TYPE */ 
    WTR2965, /* DEVICE_MODULE_NAME */ 
    0, /* DEVICE_MODULE_TYPE_INSTANCE */ 
    0, /* ASSOCIATED_PHY_DEVICE_INSTANCE */ 
  }, /* END - Device: WTR2965 */ 


  { /*Device: QFE2101 */ 
    RFDEVICE_PAPM, /* DEVICE_MODULE_TYPE */ 
    QFE2101, /* DEVICE_MODULE_NAME */ 
    0, /* DEVICE_MODULE_TYPE_INSTANCE */ 
    1, /* ASSOCIATED_PHY_DEVICE_INSTANCE */ 
   }, /* END - Device: QFE2101 */ 
  
    { /*Device: AP6716M for ASM*/ 
    RFDEVICE_ASM, /* DEVICE_MODULE_TYPE */ 
    GEN_ASM, /* DEVICE_MODULE_NAME */ 
    0, /* DEVICE_MODULE_TYPE_INSTANCE */ 
    2, /* ASSOCIATED_PHY_DEVICE_INSTANCE */ 
  }, /* END - Device: AP6716M */
  
    { /*Device: AP7219M for ASM*/ 
    RFDEVICE_ASM, /* DEVICE_MODULE_TYPE */ 
    GEN_ASM, /* DEVICE_MODULE_NAME */ 
    1, /* DEVICE_MODULE_TYPE_INSTANCE */ 
    3, /* ASSOCIATED_PHY_DEVICE_INSTANCE */ 
  }, /* END - Device: AP7219M */ 
  
 { /*Device: AP6716M for PA*/ 
    RFDEVICE_PA, /* DEVICE_MODULE_TYPE */ 
    GEN_PA, /* DEVICE_MODULE_NAME */ 
    0, /* DEVICE_MODULE_TYPE_INSTANCE */ 
    2, /* ASSOCIATED_PHY_DEVICE_INSTANCE */ 
  }, /* END - Device: AP6716M */

逻辑列表中器件作为PA和ASM 需要分开配,只要配两个参数就可

 { /*Device: AP6716M for ASM*/ 
    RFDEVICE_ASM, /* DEVICE_MODULE_TYPE */ 
    GEN_ASM, /* DEVICE_MODULE_NAME */ 
    0, /* DEVICE_MODULE_TYPE_INSTANCE */ 
    2, /* ASSOCIATED_PHY_DEVICE_INSTANCE */ 

  }, /* END - Device: AP6716M */

第一个是作为ASM的器件在逻辑列表中的排序,第二个是对应物理列表中的PHY_DEVICE_INSTANCES。

列表这样就配好了,

另外,当前文件中需要注意的地方,

{ /* device_support */ 
    { /* Logical Device 0 */ 
      /* bands_supported */ 
      {
        {

 /* Bit mask element 0 */ 
        ( ( (uint64)1 << (SYS_BAND_GSM_850 - 0) ) | ( (uint64)1 << (SYS_BAND_GSM_EGSM_900 - 0) ) | ( (uint64)1 << (SYS_BAND_GSM_DCS_1800 - 0) ) | ( (uint64)1 << (SYS_BAND_GSM_PCS_1900 - 0) ) | ( (uint64)1 << (SYS_BAND_BC0 - 0) ) 
        ),
          /* Bit mask element 1 */ 
        ( ( (uint64)1 << (SYS_BAND_WCDMA_I_IMT_2000 - 64) ) | ( (uint64)1 << (SYS_BAND_WCDMA_II_PCS_1900 - 64) ) | ( (uint64)1 << (SYS_BAND_WCDMA_V_850 - 64) ) | ( (uint64)1 << (SYS_BAND_WCDMA_VIII_900 - 64) ) | ( (uint64)1 << (SYS_BAND_LTE_EUTRAN_BAND1 - 64) ) | ( (uint64)1 << (SYS_BAND_LTE_EUTRAN_BAND3 - 64) ) | ( (uint64)1 << (SYS_BAND_LTE_EUTRAN_BAND7 - 64) ) | ( (uint64)1 << (SYS_BAND_LTE_EUTRAN_BAND5 - 64) ) | ( (uint64)1 << (SYS_BAND_LTE_EUTRAN_BAND8 - 64) ) 
        ),
          /* Bit mask element 2 */ 
        ( ( (uint64)1 << (SYS_BAND_LTE_EUTRAN_BAND20 - 128) ) | ( (uint64)1 << (SYS_BAND_LTE_EUTRAN_BAND26 - 128) ) | ( (uint64)1 << (SYS_BAND_LTE_EUTRAN_BAND38 - 128) ) | ( (uint64)1 << (SYS_BAND_LTE_EUTRAN_BAND39 - 128) ) | ( (uint64)1 << (SYS_BAND_LTE_EUTRAN_BAND40 - 128) ) | ( (uint64)1 << (SYS_BAND_LTE_EUTRAN_BAND41 - 128) ) | ( (uint64)1 << (SYS_BAND_TDS_BANDA - 128) ) | ( (uint64)1 << (SYS_BAND_TDS_BANDF - 128) ) 
        ),

这里的内容要包含所有支持的band,包括没有贴出来的Device 1 ,Device 2等都要配置,不然注网会有问题。

二、PA ASM 文件的添加

1、在rfdevice_asm或rfdevice_pa 中添加相关文件,找类似的文件复制一份,修改文件名,修改内容即可,

需要注意的是

文件最下方需要修改为该器件的相关参数

 else
  {
    asm_info->mfg_id = 0x349;
    asm_info->prd_id = 0x2F;

    asm_info->prd_rev = 0;
    asm_info->num_ports = RFDEVICE_ASM_AP6716M_NUM_PORTS;
    ret_val = TRUE;
  }
  return ret_val;

}

asm_on_data的内容按照datasheet配置,也可和FAE确定。其他按默认就可。

2、添加过 .cpp 和 .h 文件后,不要忘了在rfdevice_asm_factory_ag.cpp和rfdevice_pa_factory_ag.cpp中加入#include "rfdevice_asm_ap6716m_data_ag.h"和

  else if ( mfg_id ==  0x349 && prd_id == 0x2F  && prd_rev == 0)
  {
    asm_data = rfdevice_asm_ap6716m_data_ag::get_instance();
  }

注意MID和PID需要配置正确。

三,各制式下的RX TX 配置

配置Rx和TX时,

rfc_device_info_type rf_card_wtr2965_qrd_non_ca_4373_1_tx0_lte_b1_device_info = 
{
  RFC_ENCODED_REVISION, 
  RFC_TX_MODEM_CHAIN_0,   /* Modem Chain */
  0,   /* NV Container */
  0,   /* Antenna */
  5,  /* NUM_DEVICES_TO_CONFIGURE */---------》器件总数量
  {
    {
      RFDEVICE_TRANSCEIVER,
      WTR2965,  /* NAME */
      0,  /* DEVICE_MODULE_TYPE_INSTANCE */
      0,  /* PHY_PATH_NUM */
      {
        0 /*Warning: Not specified*/,  /* INTF_REV */
        (int)WTR2965_LTEFDD_TX_BAND1_THMLB4,  /* PORT */---------》port口
        ( RFDEVICE_PA_LUT_MAPPING_VALID | WTR2965_LP_LUT_TYPE << RFDEVICE_PA_STATE_0_BSHFT | WTR2965_HP_LUT_TYPE << RFDEVICE_PA_STATE_1_BSHFT | WTR2965_HP_LUT_TYPE << RFDEVICE_PA_STATE_2_BSHFT | WTR2965_HP_LUT_TYPE << RFDEVICE_PA_STATE_3_BSHFT ),  /* RF_ASIC_BAND_AGC_LUT_MAPPING */
        FALSE,  /* TXAGC_LUT */
        WTR2965_FBRX_LOW_ATTN_MODE,  /* FBRX_ATTN_STATE */
        0,  /* Array Filler */
      },
    },
    {
      RFDEVICE_PA,
      GEN_PA,  /*AP7219M  NAME */
      1,  /* DEVICE_MODULE_TYPE_INSTANCE */--------》和逻辑列表对应
      0 /*Warning: Not specified*/,  /* PHY_PATH_NUM */
      {
        0  /* Orig setting:  */,  /* INTF_REV */
        (0x349 << 22)/*mfg_id*/ | (0x0F << 14)/*prd_id*/ | (6)/*port_num*/,  /* PORT_NUM */-------和器件参数,port口一致,port口根据pa或asm的文件中的数据匹配。
        0,  /* Array Filler */
        0,  /* Array Filler */
        0,  /* Array Filler */
        0,  /* Array Filler */
      },
    },
    {
      RFDEVICE_PAPM,
      QFE2101,  /* NAME */
      0,  /* DEVICE_MODULE_TYPE_INSTANCE */
      0 /*Warning: Not specified*/,  /* PHY_PATH_NUM */
      {
        0  /* Orig setting:  */,  /* INTF_REV */
        (0x217 << 22)/*mfg_id*/ | (0x31 << 14)/*prd_id*/ | (9)/*port_num*/,  /* PORT_NUM */
        0,  /* Array Filler */
        0,  /* Array Filler */
        0,  /* Array Filler */
        0,  /* Array Filler */
      },
    },
    {
      RFDEVICE_ASM,
      GEN_ASM,  /*AP6716M  NAME */
      0,  /* DEVICE_MODULE_TYPE_INSTANCE */--------》和逻辑列表对应
      0 /*Warning: Not specified*/,  /* PHY_PATH_NUM */
      {
        0  /* Orig setting:  */,  /* INTF_REV */
        (0x349 << 22)/*mfg_id*/ | (0x2F << 14)/*prd_id*/ | (1)/*port_num*/,  /* PORT_NUM */-------和器件参数,port口一致,port口根据pa或asm的文件中的数据匹配
        0,  /* Array Filler */
        0,  /* Array Filler */
        0,  /* Array Filler */
        0,  /* Array Filler */
      },
    },


    {
      RFDEVICE_HDET,
      TRX_HDET,  /* NAME */
      0,  /* DEVICE_MODULE_TYPE_INSTANCE */
      0 /*Warning: Not specified*/,  /* PHY_PATH_NUM */
      {
        0  /* Orig setting:  */,  /* INTF_REV */
        0,  /* Array Filler */
        0,  /* Array Filler */
        0,  /* Array Filler */
        0,  /* Array Filler */
        0,  /* Array Filler */
      },
    },
  },
};

可以看到,上面有两个我们新增的器件和QFE2101、wtr2965,配置时需要注意的地方的已经标红,

1、器件总数量

2、wtr2965的port口

3、器件port口

四、GPIO开关控制

在LTE或其他制式下的band中有些会存在GPIO控制的开关,一般配置较简单,需要从原理图或者逻辑表中得到这些开关的配置信息,如:

rfc_sig_info_type rf_card_wtr2965_qrd_non_ca_4373_1_rx1_lte_b1_sig_cfg = 
{
  RFC_ENCODED_REVISION, 
  {
    { (int)RFC_WTR2965_QRD_NON_CA_4373_1_RF_PATH_SEL_06,   { RFC_LOW, 0 }, {RFC_LOW, 0 }  },
    { (int)RFC_WTR2965_QRD_NON_CA_4373_1_RF_PATH_SEL_20,   { RFC_LOW, 0 }, {RFC_LOW, 0 }  },
    { (int)RFC_WTR2965_QRD_NON_CA_4373_1_RF_PATH_SEL_05,   { RFC_HIGH, 0 }, {RFC_LOW, 0 }  },
    { (int)RFC_SIG_LIST_END,   { RFC_LOW, 0 }, {RFC_LOW, 0 } }
  },
};

这是LTEband1的rx分级GPIO的配置内容

 { (int)RFC_WTR2965_QRD_NON_CA_4373_1_RF_PATH_SEL_06,   { RFC_LOW, 0 }, {RFC_LOW, 0 }  },

三部分;

1、(int)RFC_WTR2965_QRD_NON_CA_4373_1_RF_PATH_SEL_06  是根据原理图或逻辑表确定用的哪个开关,如果没有需要自己添加。

2、 { RFC_LOW, 0 }  配高还是配低需要从逻辑表确定。

3、 {RFC_LOW, 0 }   默认为低就可,不用改。

有几个开关就配几个,高低根据逻辑表确定即可。

你可能感兴趣的:(嵌入式)