1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 高通平台 MSM8937/MSM8953 RF配置流程

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

时间:2018-10-12 03:39:21

相关推荐

高通平台 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: AP6716Mfor 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确定

如上,截取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 } 默认为低就可,不用改。

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。