https://blog.csdn.net/green1900/article/details/46443285
1、原理
MSM/MDM+WTR RF Frontend(MIPI)结构
2、MIPI ASM Customization
Reference
80-NG377-1_A_MIPI_Device_Customization.pdf
添加或者修改天线开关设备。
2.1 Step1 ASM设备驱动
文件路径:/modem_proc/rfdevices_asm/src,可以完成如下工作:
1、为已经存在的ASM设备更改配置
比如在rfdevice_asm_cxa4416gc_data_ag.h和rfdevice_asm_cxa4416gc_data_ag中为cxa4416gc修改配置。
2、添加一个新的ASM设备。
为一个新ASM设备添加.h和.cpp文件,.h和.cpp文件内容可以参考已经存在的其他设备的文件内容。
zhe.yuan@Develop:~/project/mdm9x25_3030/MDM9X25/modem_proc/rfdevice_asm/src$ ls -l
rfdevice_asm_common.cpp
rfdevice_asm_cxa4416gc_data_ag.cpp
rfdevice_asm_cxa4416gc_data_ag.h
rfdevice_asm_cxm3617er_data_ag.cpp
rfdevice_asm_cxm3617er_data_ag.h
rfdevice_asm_cxm3632er_data_ag.cpp
rfdevice_asm_cxm3632er_data_ag.h
rfdevice_asm_cxm3637ak_data_ag.cpp
rfdevice_asm_cxm3637ak_data_ag.h
rfdevice_asm_cxm3637k_data_ag.cpp
rfdevice_asm_cxm3637k_data_ag.h
rfdevice_asm_cxm3640k_data_ag.cpp
rfdevice_asm_cxm3640k_data_ag.h
rfdevice_asm_cxm3641er_data_ag.cpp
rfdevice_asm_cxm3641er_data_ag.h
rfdevice_asm_cxm3641k_data_ag.cpp
rfdevice_asm_cxm3641k_data_ag.h
rfdevice_asm_cxm3642k_data_ag.cpp
rfdevice_asm_cxm3642k_data_ag.h
rfdevice_asm_cxm3643k_es02_data_ag.cpp
rfdevice_asm_cxm3643k_es02_data_ag.h
rfdevice_asm_cxm3643k_es03_data_ag.cpp
rfdevice_asm_cxm3643k_es03_data_ag.h
rfdevice_asm_cxm3654ur_data_ag.cpp
rfdevice_asm_cxm3654ur_data_ag.h
rfdevice_asm_cxm3655k_data_ag.cpp
rfdevice_asm_cxm3655k_data_ag.h
rfdevice_asm_cxm3656k_data_ag.cpp
rfdevice_asm_cxm3656k_data_ag.h
rfdevice_asm_cxm3657k_data_ag.cpp
rfdevice_asm_cxm3657k_data_ag.h
rfdevice_asm_cxm3807k_data_ag.cpp
rfdevice_asm_cxm3807k_data_ag.h
rfdevice_asm_data.cpp
rfdevice_asm_dgm366_data_ag.cpp
rfdevice_asm_dgm366_data_ag.h
rfdevice_asm_factory_ag.cpp
rfdevice_asm_hfqswejua224_data_ag.cpp
rfdevice_asm_hfqswejua224_data_ag.h
rfdevice_asm_lmsp2pqd_g22_data_ag.cpp
rfdevice_asm_lmsp2pqd_g22_data_ag.h
rfdevice_asm_lmsp32qp_e10_data_ag.cpp
rfdevice_asm_lmsp32qp_e10_data_ag.h
rfdevice_asm_lmsp32qp_f03_data_ag.cpp
rfdevice_asm_lmsp32qp_f03_data_ag.h
rfdevice_asm_lmsp32qq_f31_data_ag.cpp
rfdevice_asm_lmsp32qq_f31_data_ag.h
rfdevice_asm_lmspfbqh_f65_data_ag.cpp
rfdevice_asm_lmspfbqh_f65_data_ag.h
rfdevice_asm_murata_hfqswkcua212_20c_data_ag.cpp
rfdevice_asm_murata_hfqswkcua212_20c_data_ag.h
rfdevice_asm_murata_hfqswkcua212_23e_data_ag.cpp
rfdevice_asm_murata_hfqswkcua212_23e_data_ag.h
rfdevice_asm_rfmd1498a_0x28_data_ag.cpp
rfdevice_asm_rfmd1498a_0x28_data_ag.h
rfdevice_asm_sky13473_data_ag.cpp
rfdevice_asm_sky13473_data_ag.h
rfdevice_asm_sky13488_data_ag.cpp
rfdevice_asm_sky13488_data_ag.h
rfdevice_asm_xmssgf3g0pa_009_data_ag.cpp
rfdevice_asm_xmssgf3g0pa_009_data_ag.h
(1)在.cpp文件中为ASM on/off/trigger操作定义寄存器配置
#define RFDEVICE_ASM_SKY13488_NUM_PORTS 12
#define RFDEVICE_ASM_SKY13488_ASM_ON_NUM_REGS 1
static uint8 rfdevice_asm_sky13488_asm_on_regs[RFDEVICE_ASM_SKY13488_ASM_ON_NUM_REGS] = {0x00, };
static int16 rfdevice_asm_sky13488_asm_on_data[RFDEVICE_ASM_SKY13488_NUM_PORTS][RFDEVICE_ASM_SKY13488_ASM_ON_NUM_REGS] =
{
{ /* PORT NUM: 1 */
0XA,
},
{ /* PORT NUM: 2 */
0X8,
},
{ /* PORT NUM: 3 */
0X4,
},
{ /* PORT NUM: 4 */
0X5,
},
{ /* PORT NUM: 5 */
0X6,
},
{ /* PORT NUM: 6 */
0X7,
},
{ /* PORT NUM: 7 */
0X9,
},
{ /* PORT NUM: 8 */
0XB,
},
{ /* PORT NUM: 9 */
0XC,
},
{ /* PORT NUM: 10 */
0X1,
},
{ /* PORT NUM: 11 */
0X2,
},
{ /* PORT NUM: 12 */
0X3,
},
};
static int16 rfdevice_asm_sky13488_asm_off_data[RFDEVICE_ASM_SKY13488_NUM_PORTS][RFDEVICE_ASM_SKY13488_ASM_OFF_NUM_REGS] =
{
{ /* PORT NUM: 1 */
0x00,
},
。
。
。
{ /* PORT NUM: 12 */
0x00,
},
};
static int16 rfdevice_asm_sky13488_asm_trigger_data[RFDEVICE_ASM_SKY13488_NUM_PORTS][RFDEVICE_ASM_SKY13488_ASM_TRIGGER_NUM_REGS] =
{
{ /* PORT NUM: 1 */
0x01,
},
。
。
。
{ /* PORT NUM: 12 */
0x01,
},
};
注意:RFDEVICE_ASM_SKY13488_NUM_PORTS是端口的数量,不同的端口对应不同的频段开关。该数量与rfdevice_asm_sky13488_asm_*_data列表中的寄存器数值是一致的。比如该值设置为12,那么与rfdevice_asm_sky13488_asm_*_data肯定应该有12个数值。
以SKY13488为例,该芯片的spec会给出真值表,列出不同band对应的寄存器值:
这些值转换成16进制后,与代码modem_proc/rfdevice_asm/src/rfdevice_asm_sky13488_data_ag.cpp中rfdevice_asm_sky13488_asm_on_data[](见上面)对应起来:
这样在代码里面,就可以为gsm、wcdma、lte。。。来选择ASM设备端口了
(2)在.cpp文件中为ASM设备配置正确的MID、PID和product revision
boolean rfdevice_asm_sky13488_data_ag::device_info_get( rfdevice_asm_info_type *asm_info )
{
boolean ret_val = FALSE;
if ( NULL == asm_info )
{
return FALSE;
}
else
{
asm_info->mfg_id = 0x1A5;
asm_info->prd_id = 0x5F;
asm_info->prd_rev = 0;
asm_info->num_ports = RFDEVICE_ASM_SKY13488_NUM_PORTS;
ret_val = TRUE;
}
return ret_val;
}
MID即MANUFACTURER ID,PID即PRODUCT ID,由芯片spec查到。
2.2 Step2 更新FTM中ASM信息
在文件rfdebice_asm_factory_ag.cpp中:
1、为新添加的ASM设备include进.h文件
2、为新添加的ASM设备更改或添加程序
主要是MID、PID和product revision
#include "rfdevice_asm_cxm3657k_data_ag.h"
#include "rfdevice_asm_cxm3632er_data_ag.h"
#include "rfdevice_asm_cxm3617er_data_ag.h"
#include "rfdevice_asm_cxm3807k_data_ag.h"
#include "rfdevice_asm_dgm366_data_ag.h"
#include "rfdevice_asm_hfqswejua224_data_ag.h"
#include "rfdevice_asm_murata_hfqswkcua212_20c_data_ag.h"
#include "rfdevice_asm_murata_hfqswkcua212_23e_data_ag.h"
#include "rfdevice_asm_sky13488_data_ag.h"
#include "rfdevice_asm_sky13473_data_ag.h"
rfdevice_asm_data* rfdevice_asm_data_create (uint16 mfg_id, uint8 prd_id, uint8 prd_rev)
{
rfdevice_asm_data * asm_data = NULL;
if ( mfg_id == 0x020C && prd_id == 0x06 && prd_rev == 3)
{
asm_data = rfdevice_asm_lmspfbqh_f65_data_ag::get_instance();
}
.
.
.
else if ( mfg_id == 0x01A5 && prd_id == 0x5F && prd_rev == 0)
{
asm_data = rfdevice_asm_sky13488_data_ag::get_instance();
}
else if ( mfg_id == 0x01A5 && prd_id == 0x45 && prd_rev == 0)
{
asm_data = rfdevice_asm_sky13473_data_ag::get_instance();
}
return asm_data;
}
2.3 Step3更新common devices list
在RFC common文件中,为你的ASM设备更新信息,比如:在rfc_wtr1625_naeu_cmn_ag.cpp中:
rfc_device_cfg_info_type rfc_wtr1625_naeu_cmn_devices_list[] =
{
.
.
.
{ /*Device: ASM_12T_9T */
RFDEVICE_ASM, /* DEVICE_TYPE */
GEN_ASM /* ASM_12T_9T */, /* DEVICE_NAME */
0, /* DEVICE_TYPE_INSTANCE */
RFDEVICE_COMM_PROTO_RFFE, /* DEVICE_COMM_PROTOCOL */
{ 1,0 /* 0 not specified */,}, /* DEVICE_COMM_BUS */
0x01A5, /* MANUFACTURER_ID */
0x5F, /* PRODUCT_ID */
0, /* PRODUCT_REV */
0xB, /* DEFAULT USID RANGE START */
0xB, /* DEFAULT USID RANGE END */
0xA, /* ASSIGNED_USID */
0xA, /* RFFE_GROUP_ID */
FALSE, /* INIT */
RFC_INVALID_PARAM, /* ASSOCIATED_DAC */
RFDEVICE_TYPE_INVALID, /* ASSOCIATED_DEVICE_TYPE */
0 /*Warning: Not specified*/, /* ASSOCIATED_DEVICE_TYPE_INSTANCE */
}, /* END - Device: ASM_12T_9T */
};
2.4 Step4匹配ASM端口
在文件rfc_wtr1625_naeu_<tech>_config_data_ag.c中,为不同的Tech/Mode/Band/匹配对应的ASM端口
例如rfc_wtr1625_naeu_gsm_config_data_ag.c中,为gsm 850 rx配置:
查询sky13488 spec得到band真值表:
查询设备驱动rfdevice_asm_sky13488_data_ag.cpp得到真值与port对应表:
修改代码:
3、MIPI PA Customization
Reference
80-NG377-1_A_MIPI_Device_Customization.pdf
添加或者修改PA设备。
3.1 Step1 PA设备驱动
文件路径/modem_proc/rfdevices_pa/src,可以完成如下工作::
1、为已经存在的PA设备更改配置,在其对应文件中修改。
如:rfdevice_pa_acpm_7600_data_ag.h和rfdevice_pa_acpm_7600_data_ag.cpp
2、添加一个新的PA设备
为一个新PA设备添加.h和.cpp文件,.h和.cpp文件内容可以参考已经存在的其他设备的文件。
zhe.yuan@Develop:~/project/mdm9x25_3030/MDM9X25/modem_proc/rfdevice_pa/src$ ll
rfdevice_pa_2g_rf8108_0x04_20_data_ag.cpp
rfdevice_pa_2g_rf8108_0x04_20_data_ag.h
rfdevice_pa_acpm_7600_data_ag.cpp
rfdevice_pa_acpm_7600_data_ag.h
rfdevice_pa_acpm_7620_data_ag.cpp
rfdevice_pa_acpm_7620_data_ag.h
rfdevice_pa_acpm_7650_data_ag.cpp
rfdevice_pa_acpm_7650_data_ag.h
rfdevice_pa_acpm_9301_data_ag.cpp
rfdevice_pa_acpm_9301_data_ag.h
rfdevice_pa_acpm_9340_data_ag.cpp
rfdevice_pa_acpm_9340_data_ag.h
rfdevice_pa_acpm_9341_data_ag.cpp
rfdevice_pa_acpm_9341_data_ag.h
rfdevice_pa_acpm_9407_data_ag.cpp
rfdevice_pa_acpm_9407_data_ag.h
rfdevice_pa_acpm_9411_data_ag.cpp
rfdevice_pa_acpm_9411_data_ag.h
rfdevice_pa_acpm_9413_data_ag.cpp
rfdevice_pa_acpm_9413_data_ag.h
rfdevice_pa_acpm_9417_data_ag.cpp
rfdevice_pa_acpm_9417_data_ag.h
rfdevice_pa_acpm_9420_data_ag.cpp
rfdevice_pa_acpm_9420_data_ag.h
rfdevice_pa_acpm_9428_data_ag.cpp
rfdevice_pa_acpm_9428_data_ag.h
rfdevice_pa_acpm_9512_data_ag.cpp
rfdevice_pa_acpm_9512_data_ag.h
rfdevice_pa_acpm_9513_data_ag.cpp
rfdevice_pa_acpm_9513_data_ag.h
rfdevice_pa_acpm_9517_data_ag.cpp
rfdevice_pa_acpm_9517_data_ag.h
rfdevice_pa_common.cpp
rfdevice_pa_data.cpp
rfdevice_pa_factory_ag.cpp
rfdevice_pa_rfmd_7389_data_ag.cpp
rfdevice_pa_rfmd_7389_data_ag.h
rfdevice_pa_rfmd_7940_data_ag.cpp
rfdevice_pa_rfmd_7940_data_ag.h
rfdevice_pa_rfmd_7941_data_ag.cpp
rfdevice_pa_rfmd_7941_data_ag.h
rfdevice_pa_rfmd_7941_es02_data_ag.cpp
rfdevice_pa_rfmd_7941_es02_data_ag.h
rfdevice_pa_rfmd_8007_data_ag.cpp
rfdevice_pa_rfmd_8007_data_ag.h
rfdevice_pa_rfmd_8012a_data_ag.cpp
rfdevice_pa_rfmd_8012a_data_ag.h
rfdevice_pa_rfmd_8013a_data_ag.cpp
rfdevice_pa_rfmd_8013a_data_ag.h
rfdevice_pa_rfmd_8013_data_ag.cpp
rfdevice_pa_rfmd_8013_data_ag.h
rfdevice_pa_rfmd_8014_data_ag.cpp
rfdevice_pa_rfmd_8014_data_ag.h
rfdevice_pa_rfmd_8017a_data_ag.cpp
rfdevice_pa_rfmd_8017a_data_ag.h
rfdevice_pa_rfmd_8017_data_ag.cpp
rfdevice_pa_rfmd_8017_data_ag.h
rfdevice_pa_rfmd_8020_data_ag.cpp
rfdevice_pa_rfmd_8020_data_ag.h
rfdevice_pa_rfmd_8021_data_ag.cpp
rfdevice_pa_rfmd_8021_data_ag.h
rfdevice_pa_sky_77629_51_data_ag.cpp
rfdevice_pa_sky_77629_51_data_ag.h
rfdevice_pa_sky_77629_data_ag.cpp
rfdevice_pa_sky_77629_data_ag.h
rfdevice_pa_sky_77772_data_ag.cpp
rfdevice_pa_sky_77772_data_ag.h
rfdevice_pa_sky_77773_data_ag.cpp
rfdevice_pa_sky_77773_data_ag.h
rfdevice_pa_tqp_9051_data_ag.cpp
rfdevice_pa_tqp_9051_data_ag.h
在.cpp文件中为PA bias/range/on/off/trigger操作定义寄存器配置
在.cpp文件中为你的PA设备配置正确的MID、PID和product revision、PA范围
MID、PID可以从spec查到:
3.2 Step2更新FTM中PA信息
在文件rfdebice_pa_factory_ag.cpp中:
1、为新添加的PA设备include进.h文件
2、为新添加的PA设备更改或添加程序
3.3 Step3更新common devices list
在RFC common文件中,为你的PA设备更新信息,比如在rfc_wtr1605_na1_cmn_ag.cpp中:
3.4 Step4匹配PA端口
在rfc_wtr1605_na1_<tech>_config_data_ag.c中,为不同的Tech/Mode/Band/中匹配对应的PA端口
例如rfc_wtr1605_na1_wcdma_config_data_ag.c中,配置WCDMA B1 Tx0:
查询7600 spec得到band真值表:
查询设备驱动rfdevice_pa_acpm_7600_data_ag.cpp得到真值与port对应表:
修改代码:
4、MSM8974/MDM9x25 RFC Code Checklist
References
80-NA157-179_A_MSM8974_MDM9x25_RFC_Code_Customization_Checklist.pdf
4.1选择rf_card类型
RF卡有许多类型,不同的RF卡对应不同的device list。
rf_card文件夹路径MDM9X25/modem_proc/rfc_dime/rf_card,该路径下包含了所有用到的RF卡类型:
在代码编译时,所有的RF cards文件都会被编译,modem使用NV1878来决定实际使用哪个卡。NV1878数值与RF card类型的对应关系表在文件Rfc_hwid.h。在PFT1220Q项目中,NV1878值为207,所以RF卡类型应为RF_HW_WTR1625_NAEU ,对应源文件路径MDM9X25/modem_proc/rfc_dime/rf_card/rfc_wtr1625_naeu。注:NA是北美、EU是欧洲。
/* -------------------------------------------------------
** The RF Card Id used in the target
** Note: The Id needs to be sequential
** ------------------------------------------------------- */
typedef enum {
RF_HW_UNDEFINED = (uint8)0,
RF_TARGET_NONE = RF_HW_UNDEFINED,
RF_HW_WTR1625_APAC_QFE_ASDIV = (uint8)10,
RF_HW_WTR1605_NA1_APT = (uint8)11,
RF_HW_WTR1605_NA2_APT = (uint8)12,
RF_HW_WTR1605_EU1_APT = (uint8)13,
RF_HW_WTR1605_ATT_CA_APT = (uint8)14,
RF_HW_WTR1605_KR_CA_APT = (uint8)15,
RF_HW_WTR1605_CMCC_APT = (uint8)16,
RF_HW_WTR1605_APAC21_APT = (uint8)17,
RF_HW_WTR1605_APAC11_APT = (uint8)18,
RF_HW_WTR1625_NAEU_CA_LIQUID = (uint8)19,
RF_HW_WTR1625_SGLTE_QFE = (uint8)20,
RF_HW_WTR1625_QFE2720_CA_NA = (uint8)21,
RF_HW_WTR1625_QFE2720_CA_EU = (uint8)22,
RF_HW_WTR1625_APAC_CA_B20 = (uint8)23,
RF_HW_WTR1625_SGLTE = (uint8)24,
RF_HW_WTR1625_CMCC_QFE = (uint8)25,
RF_HW_WTR1605_VZ_SV_ET = (uint8)26,
RF_HW_WTR1625_SVSG_QFE = (uint8)27,
RF_HW_WTR1605_FLUID = (uint8)28,
RF_HW_WTR1605_RP2 = (uint8)29,
RF_HW_WTR1605_NA1_ET121 = (uint8)30,
RF_HW_WTR1625_GLOBAL_CA_QFE = (uint8)31,
RF_HW_WTR1625_RP1 = (uint8)32,
RF_HW_WTR1625_SGLTE_QFE_TUNER = (uint8)33,
RF_HW_WTR1605_SGLTE_CMCC_4MODE = (uint8)34,
RF_HW_WTR1605_SGLTE_CMCC_3MODE = (uint8)35,
RF_HW_WTR1625_SGLTE_QFE1 = (uint8)36,
RF_HW_WTR1625_SGLTE_QFE1_TUNER = (uint8)37,
RF_HW_WTR1625_VZ_SV1_F4 = (uint8)38,
RF_HW_WTR1605_NA1_APT_N5331 = (uint8)39,
RF_HW_WTR1605_NA2_APT_N5331 = (uint8)40,
RF_HW_WTR1605_EU1_APT_N5331 = (uint8)41,
RF_HW_WTR1605_ATT_CA_ET = (uint8)42,
RF_HW_WTR1605_EU_ET = (uint8)43,
RF_HW_WTR1605_NA2_ET = (uint8)44,
RF_HW_WTR1625_SV_DSDA_QFE = (uint8)45,
RF_HW_WTR1625_APAC = (uint8)46,
RF_HW_WTR1625_SVSG_QFE_ASDIV = (uint8)48,
RF_HW_WTR1625_SVSG_QFE_ASDIV2 = (uint8)49,
RF_HW_WTR1625_SG_DSDA_QFE_OMRD = (uint8)50,
RF_HW_WTR1605_SGLTE = (uint8)51,
RF_HW_WTR1625_GLOBAL_CA_TP100_LATEST = (uint8)52,
RF_HW_WTR1625_VZ_SV1 = (uint8)53,
RF_HW_WTR1625_VZ_SV2 = (uint8)54,
RF_HW_WTR1625_GLOBAL_CA_TP100_2 = (uint8)55,
RF_HW_WTR1625_GLOBAL_CA_TP100_3 = (uint8)56,
RF_HW_WTR1625_GLOBAL_CA_TP100_4 = (uint8)57,
RF_HW_WTR1625_GLOBAL_CA_TP100_4B = (uint8)58,
RF_HW_WTR1625_GLOBAL_CA_TP100_5 = (uint8)59,
RF_HW_WTR1625_RP2 = (uint8)60,
RF_HW_WTR1625_NAEU_CA_SLTE = (uint8)61,
RF_HW_WTR1625_GLOBAL_CA_TP102_0 = (uint8)70,
RF_HW_WTR1625_GLOBAL_CA_TP101_0 = (uint8)71,
RF_HW_WTR1605_CHILE_RF360 = (uint8)72,
RF_HW_WTR1605_CHILE_RF360_TDET = (uint8)73,
RF_HW_WTR1625_GLOBAL_CA_TP103_0 = (uint8)75,
RF_HW_WTR1625_GLOBAL_CA_TP103_1 = (uint8)76,
RF_HW_WTR1625_GLOBAL_CA_TP102_1 = (uint8)77,
RF_HW_WTR1625_GLOBAL_CA_TP101_1 = (uint8)78,
RF_HW_WTR1625_GLOBAL_CA_TP100_6 = (uint8)80,
RF_HW_WTR1605_RP6 = (uint8)81,
RF_HW_WTR1605_RP7 = (uint8)82,
RF_HW_WTR1625_SGLTE_DSDA = (uint8)124,
RF_HW_WTR1605_SGLTE_DSDA = (uint8)151,
RF_HW_WTR1605_SGLTE2 = (uint8)151,
RF_HW_WTR1605_CTSV_SGLTE_DSDA_ASD = (uint8)152,
RF_HW_WGR7640 = (uint8)174,
RF_HW_WTR1605_VZ_SV_QFE2320 = (uint8)203,
RF_HW_WTR1625_NAEU = (uint8)207,
RF_HW_WTR1625_NAEU_CA = (uint8)246,
RF_HW_WTR1625_APAC_CA = (uint8)247,
RF_HW_WTR1605_VZ_SV_APT = (uint8)249,
RF_HW_WTR1605_VZ_SV_APT_ASDIV = (uint8)250,
RF_HW_WTR1605_SGLTE_ASDIV = (uint8)251,
RF_HW_WTR1625_STP8962 = (uint8)252,
RF_HW_WTR1605_RP3 = (uint8)253,
/* Add any new HW ID before this line */
RF_HW_MAX,
RF_HW_DEFAULT = RF_HW_MAX, /* Default card for Off-Target Builds */
RF_HW_EFS_CARD = (uint8)191, /* EFS Card */
} rf_hw_type;
4.2 MID、PID、USID
MANUFACTURER_ID、PRODUCT_ID、default USID是不同器件的编号,根据该ID可以区分不同的器件。在芯片驱动、rfc_wtr1625_naeu_cmn_devices_list、rfc_wtr1625_naeu_<tech>_config_data_ag.c中都需要为各个芯片设置。
例如PA8007,在MDM9X25/modem_proc/rfdevice_pa/src/rfdevice_pa_rfmd_8007_data_ag.cpp中,device_info_get():
MDM9X25/modem_proc/rfc_dime/rf_card/rfc_wtr1625_naeu/common/src/rfc_wtr1625_naeu_cmn_ag.cpp中,在rfc_wtr1625_naeu_cmn_devices_list中,
在Z:\mdm9x25_3030\MDM9X25\modem_proc\rfc_dime\rf_card\rfc_wtr1625_naeu\lte\src\rfc_wtr1625_naeu_lte_config_data_ag.c中:
注意确保rfc_wtr1625_naeu_cmn_ag.cpp中rfc_wtr1625_naeu_cmn_devices_list器件列表的器件与实际硬件电路设计一致。MIPI device信息,如MANUFACTURER_ID、PRODUCT_ID、default USID、ASSIGNED_USID需要根据实际使用的器件改动。详细方法可以参考《80-NG377-1 Presentation:MIPI Device Customization》。
注意:
1、MANUFACTURER_ID、PRODUCT_ID从芯片的spec中查到,例如:
2、ASSIGNED_USID为研发自己设定,需要注意相同MANUFACTURER_ID的不同Device,其PRODUCT_ID和DEVICE_TYPE_INSTANCE不同。
4.3 DEVICE_TYPE_INSTANCE
DEVICE_TYPE_INSTANCE参数用来标明电路板上相同类型设备的不同元器件。
如果板子上相同类型设备元器件的数目超过一个,比如PA、ASM、天线调节器。。。就用不同的ID来标记他们,如0、1、2。。。用来作为他们的DEVICE_TYPE_INSTANCE
注意:同一元器件的DEVICE_TYPE_INSTANCE在rfc_wtr1625_naeu_cmn_devices_list和rfc_wtr1625_naeu_<tech>_config_data_ag.c中要一样。比如B7 PA,在rfc_wtr1625_naeu_cmn_devices_list中DEVICE_TYPE_INSTANCE值为2:
rfc_wtr1625_naeu_lte_config_data_ag.c中DEVICE_TYPE_INSTANCE值也为2:
4.4 DEVICE_COMM_BUS
DEVICE_COMM_BUS的第一个参数用来指定连接到的MIPI device的MIPI RFFE bus。
0表示第一个RFFE bug,而2表示第二个。
该数值根据MIPI device的实际连线来确定。
4.5 删除用不到的device
如果QFE device(QFE1100/1101、QFE1510)在设计中没有使用,那么就将他们从device list中删除。其它device也一样,如果没有用到,就删除掉。比如PA、ASM等等。
同样,从CDMA/GSM/LTE/WCDMA每个band的配置文件中删除没有用到的device。比如,在文件rfc_wtr1625_naeu_wcdma_config_data_ag.c,
当从device configuration list中增加或者删除device时候,确保相应修改NUM_DEVICES_TO_CONFIGURE参数。该参数应该根据具体方案的设计来设定。
此时NUM_DEVICES_TO_CONFIGURE为6,如果删除一个device的话,则NUM_DEVICES_TO_CONFIGURE应该改成5。
4.6端口匹配
确保端口匹配。不同technology中每个band的port软件设定应与硬件设计一致。例如:
rf_card_wtr1625_naeu_rx0_wcdma_b1_sig_cfg定义如下:
./rfc_dime/rf_card/rfc_wtr1625_naeu/wcdma/src/rfc_wtr1625_naeu_wcdma_config_data_ag.c
rfc_sig_info_type rf_card_wtr1625_naeu_rx0_wcdma_b1_sig_cfg =
{
0x02250245, /* Revision: v2.37.581 */// uint32 rfc_revision
{
{ (int)RFC_WTR1625_NAEU_RF_PATH_SEL_03, RFC_HIGH },// sig_name; rfc_logic_type
{ (int)RFC_SIG_LIST_END, RFC_LOW }//sig_name; rfc_logic_type
},
};
rf_card_wtr1625_naeu_rx0_wcdma_b1_sig_cfg.cfg_sig_list[0]的sig_name之所以选择RFC_WTR1625_NAEU_RF_PATH_SEL_03的原因:
倒查如下:
(1)
在文件./rfc_dime/rf_card/rfc_wtr1625_naeu/common/src/rfc_wtr1625_naeu_cmn_ag.cpp中,
rfc_signal_info_type rfc_wtr1625_naeu_sig_info[RFC_WTR1625_NAEU_SIG_NUM + 1] =
{
。。。
{ RFC_MSM_RF_PATH_SEL_03 , RFC_LOW, DAL_GPIO_PULL_DOWN, DAL_GPIO_2MA, (DALGpioSignalType)NULL }, /* RFC_WTR1625_NAEU_RF_PATH_SEL_03 */
。。。
};
注意:
在rfc_wtr1625_naeu_sig_info[RFC_WTR1625_NAEU_SIG_NUM + 1]列表中RFC_MSM_RF_PATH_SEL_03排序是第14,而在wtr1625_naeu_sig_type的定义中RFC_WTR1625_NAEU_RF_PATH_SEL_03排序也是第14,这样RFC_MSM_RF_PATH_SEL_03和RFC_WTR1625_NAEU_RF_PATH_SEL_03就对应起来了。
(2)
在文件./rfc_dime/target/mdm9x25/src/rfc_msm_signal_info_ag.c中,
rfc_msm_signal_info_type rfc_mdm9x25_signal_info[RFC_MSM_SIG_NUM] =
{
。。。
{ RFC_ANT_SEL , 39 , 14 , RFC_GRFC , 1, DAL_GPIO_OUTPUT }, /* Signal: RFC_MSM_RF_PATH_SEL_03, MSM Pin Name: PA1_RANGE0*/
。。。
};
注意,在rfc_mdm9x25_signal_info[RFC_MSM_SIG_NUM]列表中,grfc number也是14,而GPIO口对应的是39口。
rfc_msm_signal_info_type的定义如下:
typedef struct
{
rfc_signal_type signal_type; //信号类型
uint32 msm_gpio; //msm GPIO
uint8 grfc_num; //grfc number
rfc_gpio_grfc_type output_type;
uint8 function_select;
DALGpioDirectionType direction;
} rfc_msm_signal_info_type;
即GPIO39在硬件设计中是配置为RFC_WTR1625_NAEU_RF_PATH_SEL_03的。
5、RFC wtr1625 naeu config
下面以rfc wtr1625 naeu wcdma config为例,来详细介绍rfc wtr1625 naeu config代码。
Codes
./rfc_dime/rf_card/rfc_wtr1625_naeu/wcdma/src/rfc_wtr1625_naeu_wcdma_config_data_ag.c
./rfc_dime/rf_card/rfc_wtr1625_naeu/wcdma/src/rfc_wtr1625_naeu_wcdma_config_ag.cpp
./rfc_dime/rf_card/rfc_wtr1625_naeu/wcdma/inc/rfc_wtr1625_naeu_wcdma_config_ag.h
5.1 获取signal config data
Signal config data通过函数sig_cfg_data_get()获取()。该函数所在路径为:
./rfc_dime/rf_card/rfc_wtr1625_naeu/wcdma/src/rfc_wtr1625_naeu_wcdma_config_ag.cpp
定义如下:
boolean rfc_wtr1625_naeu_wcdma_ag::sig_cfg_data_get( rfc_cfg_params_type *cfg, rfc_sig_cfg_type **ptr ) {
.
.
.
else if ( ( cfg->rx_tx == RFC_CONFIG_RX ) && ( cfg->logical_device == RFM_DEVICE_0 ) && ( cfg->band == (int)RFCOM_BAND_IMT ) && ( cfg->req == RFC_REQ_DEFAULT_GET_DATA ) )
{ *ptr = &(rf_card_wtr1625_naeu_rx0_wcdma_b1_sig_cfg.cfg_sig_list[0]); ret_val = TRUE; }
else if ( ( cfg->rx_tx == RFC_CONFIG_RX ) && ( cfg->logical_device == RFM_DEVICE_1 ) && ( cfg->band == (int)RFCOM_BAND_IMT ) && ( cfg->req == RFC_REQ_DEFAULT_GET_DATA ) )
{ *ptr = &(rf_card_wtr1625_naeu_rx1_wcdma_b1_sig_cfg.cfg_sig_list[0]); ret_val = TRUE; }
else if ( ( cfg->rx_tx == RFC_CONFIG_TX ) && ( cfg->logical_device == RFM_DEVICE_0 ) && ( cfg->band == (int)RFCOM_BAND_IMT ) && ( cfg->req == RFC_REQ_DEFAULT_GET_DATA ) )
{ *ptr = &(rf_card_wtr1625_naeu_tx0_wcdma_b1_sig_cfg.cfg_sig_list[0]); ret_val = TRUE; }
.
.
.
}
Band class定义如下:
/*!
@brief
Band class definitions as specified by 3GPP2 C.S0057.
*/
typedef enum rfm_band_class_e
{
RFM_CDMA_BC0 = 0, /*!< 800 MHz Band */
RFM_CDMA_BC1 = 1, /*!< 1900 MHz Band */
RFM_CDMA_BC2 = 2, /*!< TACS Band */
RFM_CDMA_BC3 = 3, /*!< JTACS Band */
RFM_CDMA_BC4 = 4, /*!< Korean PCS Band */
RFM_CDMA_BC5 = 5, /*!< 450 MHz Band */
RFM_CDMA_BC6 = 6, /*!< 2 GHz Band */
RFM_CDMA_BC7 = 7, /*!< Upper 700 MHz Band */
RFM_CDMA_BC8 = 8, /*!< 1800 MHz Band */
RFM_CDMA_BC9 = 9, /*!< 900 MHz Band */
RFM_CDMA_BC10 = 10, /*!< Secondary 800 MHz Band */
RFM_CDMA_BC11 = 11, /*!< 400 MHz European PAMR Band */
RFM_CDMA_BC12 = 12, /*!< 800 MHz PAMR Band */
RFM_CDMA_BC13 = 13, /*!< 2.5 GHz IMT-2000 Extension Band */
RFM_CDMA_BC14 = 14, /*!< US PCS 1.9GHz Band */
RFM_CDMA_BC15 = 15, /*!< AWS Band */
RFM_CDMA_BC16 = 16, /*!< US 2.5GHz Band */
RFM_CDMA_BC17 = 17, /*!< US 2.5GHz Forward Link Only Band */
RFM_CDMA_BC18 = 18, /*!< 700 MHz Public Safety Band */
RFM_CDMA_BC19 = 19, /*!< Lower 700 MHz Band */
RFM_CDMA_BC20 = 20, /*!< L-Band */
RFM_CDMA_MAX_BAND /*!< Terminal value for the enum, not a valid
band */
} rfm_cdma_band_class_type;
以rf_card_wtr1625_naeu_rx0_wcdma_b1_sig_cfg、rf_card_wtr1625_naeu_rx1_wcdma_b1_sig_cfg和rf_card_wtr1625_naeu_tx0_wcdma_b1_sig_cfg为例,介绍signal config data的配置。
1、rf_card_wtr1625_naeu_rx0_wcdma_b1_sig_cfg
rf_card_wtr1625_naeu_rx0_wcdma_b1_sig_cfg定义如下:
./rfc_dime/rf_card/rfc_wtr1625_naeu/wcdma/src/rfc_wtr1625_naeu_wcdma_config_data_ag.c
rfc_sig_info_type rf_card_wtr1625_naeu_rx0_wcdma_b1_sig_cfg =
{
0x02250245, /* Revision: v2.37.581 */// uint32 rfc_revision
{
{ (int)RFC_WTR1625_NAEU_RF_PATH_SEL_03, RFC_HIGH },// sig_name; rfc_logic_type
{ (int)RFC_SIG_LIST_END, RFC_LOW }//sig_name; rfc_logic_type
},
};
rfc_sig_info_type定义为:
typedef struct
{
uint32 rfc_revision;
rfc_sig_cfg_type cfg_sig_list[];
} rfc_sig_info_type;
rfc_sig_cfg_type定义为:
typedef struct
{
int sig_name;
rfc_logic_type logic;
} rfc_sig_cfg_type;
sig_name有:
typedef enum
{
RFC_WTR1625_NAEU_TIMING_PA_CTL,
RFC_WTR1625_NAEU_TIMING_PA_RANGE,
RFC_WTR1625_NAEU_TIMING_ASM_CTL,
RFC_WTR1625_NAEU_TIMING_TUNER_CTL,
RFC_WTR1625_NAEU_TIMING_PAPM_CTL,
RFC_WTR1625_NAEU_TIMING_TX_TX_RF_ON0,
RFC_WTR1625_NAEU_TIMING_TX_RX_RF_ON0,
RFC_WTR1625_NAEU_TIMING_ASM_TRIGGER,
RFC_WTR1625_NAEU_TIMING_PAPM_TX_TX_TRIGGER,
RFC_WTR1625_NAEU_TIMING_PAPM_OFF_TX_RX_TX_TRIGGER,
RFC_WTR1625_NAEU_TIMING_PA_TRIGGER,
RFC_WTR1625_NAEU_TIMING_PAPM_OFF_TX_RX_TX_CTL,
RFC_WTR1625_NAEU_TIMING_PAPM_TX_TX_CTL,
RFC_WTR1625_NAEU_RF_PATH_SEL_03, //14
RFC_WTR1625_NAEU_RF_PATH_SEL_05,
RFC_WTR1625_NAEU_RF_PATH_SEL_06,
RFC_WTR1625_NAEU_RF_PATH_SEL_11,
RFC_WTR1625_NAEU_RF_PATH_SEL_04,
RFC_WTR1625_NAEU_RF_PATH_SEL_18,
RFC_WTR1625_NAEU_RF_PATH_SEL_08,
RFC_WTR1625_NAEU_RF_PATH_SEL_15,
RFC_WTR1625_NAEU_RF_PATH_SEL_14,
RFC_WTR1625_NAEU_RF_PATH_SEL_16,
RFC_WTR1625_NAEU_PA_ON_05,
RFC_WTR1625_NAEU_RFIC0_SSBI1,
RFC_WTR1625_NAEU_RFIC0_SSBI2,
RFC_WTR1625_NAEU_RFFE1_CLK,
RFC_WTR1625_NAEU_RFFE1_DATA,
RFC_WTR1625_NAEU_RFFE2_CLK,
RFC_WTR1625_NAEU_RFFE2_DATA,
RFC_WTR1625_NAEU_INTERNAL_GNSS_BLANK,
RFC_WTR1625_NAEU_EXT_GPS_LNA_EN,
RFC_WTR1625_NAEU_GPDATA0_0,
RFC_WTR1625_NAEU_GPDATA0_1,
RFC_WTR1625_NAEU_TX_GTR_TH,
RFC_WTR1625_NAEU_PA_IND,
RFC_WTR1625_NAEU_SIG_NUM,
RFC_WTR1625_NAEU_SIG_INVALID,
}wtr1625_naeu_sig_type;
rfc_logic_type有:
typedef enum
{
RFC_LOW,
RFC_HIGH,
RFC_CONFIG_ONLY,
RFC_LOGIC_NUM,
RFC_LOGIC_INVALID = 0xFFFFFFFF
} rfc_logic_type;
rf_card_wtr1625_naeu_rx0_wcdma_b1_sig_cfg.cfg_sig_list[0]的sig_name之所以选择RFC_WTR1625_NAEU_RF_PATH_SEL_03的原因:
倒查如下:
(1)
在文件./rfc_dime/rf_card/rfc_wtr1625_naeu/common/src/rfc_wtr1625_naeu_cmn_ag.cpp中,
rfc_signal_info_type rfc_wtr1625_naeu_sig_info[RFC_WTR1625_NAEU_SIG_NUM + 1] =
{
。。。
{ RFC_MSM_RF_PATH_SEL_03 , RFC_LOW, DAL_GPIO_PULL_DOWN, DAL_GPIO_2MA, (DALGpioSignalType)NULL }, /* RFC_WTR1625_NAEU_RF_PATH_SEL_03 */
。。。
};
注意:
在rfc_wtr1625_naeu_sig_info[RFC_WTR1625_NAEU_SIG_NUM + 1]列表中RFC_MSM_RF_PATH_SEL_03排序是第14,而在wtr1625_naeu_sig_type的定义中RFC_WTR1625_NAEU_RF_PATH_SEL_03排序也是第14,这样RFC_MSM_RF_PATH_SEL_03和RFC_WTR1625_NAEU_RF_PATH_SEL_03就对应起来了。
(2)
在文件./rfc_dime/target/mdm9x25/src/rfc_msm_signal_info_ag.c中,
rfc_msm_signal_info_type rfc_mdm9x25_signal_info[RFC_MSM_SIG_NUM] =
{
。。。
{ RFC_ANT_SEL , 39 , 14 , RFC_GRFC , 1, DAL_GPIO_OUTPUT }, /* Signal: RFC_MSM_RF_PATH_SEL_03, MSM Pin Name: PA1_RANGE0*/
。。。
};
注意,在rfc_mdm9x25_signal_info[RFC_MSM_SIG_NUM]列表中,grfc number也是14,而GPIO口对应的是39口。
rfc_msm_signal_info_type的定义如下:
typedef struct
{
rfc_signal_type signal_type; //信号类型
uint32 msm_gpio; //msm GPIO
uint8 grfc_num; //grfc number
rfc_gpio_grfc_type output_type;
uint8 function_select;
DALGpioDirectionType direction;
} rfc_msm_signal_info_type;
即GPIO39在硬件设计中是配置为RFC_WTR1625_NAEU_RF_PATH_SEL_03的。
2、rf_card_wtr1625_naeu_tx0_wcdma_b1_sig_cfg
rf_card_wtr1625_naeu_tx0_wcdma_b1_sig_cfg配置如下:
rfc_sig_info_type rf_card_wtr1625_naeu_tx0_wcdma_b1_sig_cfg =
{
0x02280278, /* Revision: v2.40.632 */
{
{ (int)RFC_WTR1625_NAEU_TX_GTR_TH, RFC_CONFIG_ONLY },
{ (int)RFC_WTR1625_NAEU_PA_IND, RFC_CONFIG_ONLY },
{ (int)RFC_SIG_LIST_END, RFC_LOW }
},
};
rfc_sig_info_type的定义在上面已经做过介绍。
5.2获取device config data
device config data通过函数devices_cfg_data_get()获取()。该函数所在路径为:
./rfc_dime/rf_card/rfc_wtr1625_naeu/wcdma/src/rfc_wtr1625_naeu_wcdma_config_ag.cpp
定义如下:
boolean rfc_wtr1625_naeu_wcdma_ag::devices_cfg_data_get( rfc_cfg_params_type *cfg, rfc_device_info_type **ptr )
{
...
else if ( ( cfg->rx_tx == RFC_CONFIG_RX ) && ( cfg->logical_device == RFM_DEVICE_0 ) && ( cfg->band == (int)RFCOM_BAND_IMT ) && ( cfg->req == RFC_REQ_DEFAULT_GET_DATA ) )
{ *ptr = &(rf_card_wtr1625_naeu_rx0_wcdma_b1_device_info); ret_val = TRUE; }
else if ( ( cfg->rx_tx == RFC_CONFIG_RX ) && ( cfg->logical_device == RFM_DEVICE_1 ) && ( cfg->band == (int)RFCOM_BAND_IMT ) && ( cfg->req == RFC_REQ_DEFAULT_GET_DATA ) )
{ *ptr = &(rf_card_wtr1625_naeu_rx1_wcdma_b1_device_info); ret_val = TRUE; }
else if ( ( cfg->rx_tx == RFC_CONFIG_TX ) && ( cfg->logical_device == RFM_DEVICE_0 ) && ( cfg->band == (int)RFCOM_BAND_IMT ) && ( cfg->req == RFC_REQ_DEFAULT_GET_DATA ) )
{ *ptr = &(rf_card_wtr1625_naeu_tx0_wcdma_b1_device_info); ret_val = TRUE; }
...
}
以rf_card_wtr1625_naeu_rx0_wcdma_b1_device_info和rf_card_wtr1625_naeu_tx0_wcdma_b1_device_info为例,介绍device config data的配置。
1、rf_card_wtr1625_naeu_rx0_wcdma_b1_device_info
rf_card_wtr1625_naeu_rx0_wcdma_b1_device_info配置如下:
rfc_device_info_type rf_card_wtr1625_naeu_rx0_wcdma_b1_device_info =
{
0x02250245, /* Revision: v2.37.581 *///RFC版本
RFC_RX_MODEM_CHAIN_0, /* Modem Chain */
0 /* Warning: Not Specified */, /* ET Modem Chain */
0, /* NV Container */
3, /* NUM_DEVICES_TO_CONFIGURE */需要配置的device数量,详见(1)NUM_DEVICES_TO_CONFIGURE
{
{
RFDEVICE_TRANSCEIVER, //RF设备类型
WTR1625, /* NAME *///RF设备名称
0, /* DEVICE_TYPE_INSTANCE */
0, /* PHY_PATH_NUM */
{
0 /*Warning: Not specified*/, /* INTF_REV */
(int) WTR1625_WCDMA_PRX_BAND1_PMB4, /* PORT *///端口,详见(2)port
( RFDEVICE_PA_LUT_MAPPING_INVALID ), /* RF_ASIC_BAND_PA_LUT_MAP */
FALSE, /* TXAGC_LUT */
0, /* Array Filler */
0, /* Array Filler */
},
},
{
RFDEVICE_ASM, //RF设备类型
GEN_ASM /* ASM_12T_9T */, /* NAME *///RF设备名称
0, /* DEVICE_TYPE_INSTANCE */
0 /*Warning: Not specified*/, /* PHY_PATH_NUM */
{
0 /* Orig setting: */, /* INTF_REV */
(0x01A5 << 22)/*mfg_id*/ | (0x5F << 14)/*prd_id*/ | (2)/*port_num*/, /* PORT_NUM */
0, /* Array Filler */
0, /* Array Filler */
0, /* Array Filler */
0, /* Array Filler */
},
},
{
RFDEVICE_TUNER, //RF设备类型
QFE1520, /* NAME *///RF设备名称
0, /* DEVICE_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 */
},
},
},
};
rfc_device_info_type定义如下:
typedef struct
{
/*32 bit element capturing the RFC revision:
upper 8 bits: Branch/PL revision
next 8 bits: Major revision: This gets updated when there is
a change to GPIO/GRFC mapping information, that
could impact all RF Cards. A major revision
update triggers release for all RF cards.
lower 16 bits: Minor revision: Any changes specific to certain
RF cards only, such as signal logic or device
configurations. Minor revision update only
mandates release of affected RF cards. */
uint32 rfc_revision; //rfc版本
/* Modem Chain is specified in ag files per
logical path (RFM device) and band.
For Rx configuration, this represents the ADC/WB chain to be used.
For Tx configuration, this represents the DAC/TXC/TXR chain to be used.
This information is required to be band specific as some cards
split bands across transceivers: All low bands on one TRx, which
is hardwired to a certain ADC/DAC chain and all high bands on
the other TRx, which is hardwired to the other ADC/DAC chain */
uint32 modem_chain;
uint32 et_mode
m_chain;
/* This captures which NV container to derive calibrated data from.
Multiple logical paths (RFM devices) which share the same RF path
will share the same NV container. */
uint32 nv_container;
/* Number of physical devices, such as PAs, Antenna Switch modules
and transceivers */
uint32 num_devices; //物理设备的数量,如PA、天线开关、发射器
/* Configuration information for each device, such as port info */
rfc_asic_info_type rf_asic_info[]; //每个设备的配置信息,如端口信息。下面介绍
} rfc_device_info_type;
rfc_asic_info_type的定义如下:
typedef struct
{
rfdevice_type_enum_type device_type;//RF设备类型,TRANSCEIVER、RECEIVER、PA。。。
rfdevice_id_enum_type device_id;
uint32 instance;
uint32 phy_path_num;
int32 data[RFC_ASIC_INFO_DATA_SIZE];
} rfc_asic_info_type;
在rfc_device_info_type rf_card_wtr1625_naeu_rx0_cdma_bc1_device_info 中选择WTR1625_CDMA_PRX_BAND1_PMB1的依据:硬件设计。
(1)NUM_DEVICES_TO_CONFIGURE
需要设置的设备数量,根据实际用到的设备来配置。该值与下面的设备数目保持一致。例如:在rf_card_wtr1625_naeu_rx0_wcdma_b1_device_info中,该值为3,是因为下面有3个设备:RFDEVICE_TRANSCEIVER、RFDEVICE_ASM、RFDEVICE_TUNER。
(2)port
rf_card_wtr1625_naeu_rx0_wcdma_b1_device_info选择WTR1625_WCDMA_PRX_BAND1_PMB4由硬件设计决定:
2. rf_card_wtr1625_naeu_tx0_wcdma_b1_device_info
rf_card_wtr1625_naeu_tx0_wcdma_b1_device_info配置如下:
rfc_device_info_type rf_card_wtr1625_naeu_tx0_wcdma_b1_device_info =
{
0x02280278, /* Revision: v2.40.632 */
RFC_TX_MODEM_CHAIN_0, /* Modem Chain */
RFC_TX_MODEM_CHAIN_1, /* ET Modem Chain */
0, /* NV Container */
0, /* Antenna */
6, /* NUM_DEVICES_TO_CONFIGURE */
{
{
RFDEVICE_TRANSCEIVER,
WTR1625, /* NAME */
0, /* DEVICE_TYPE_INSTANCE */
0, /* PHY_PATH_NUM */
{
0 /*Warning: Not specified*/, /* INTF_REV */
(int)WTR1625_WCDMA_TX_BAND1_TMB3, /* PORT */
( RFDEVICE_PA_LUT_MAPPING_VALID | WTR1625_LP_LUT_TYPE << RFDEVICE_PA_STATE_0_BSHFT | WTR1625_HP_LUT_TYPE << RFDEVICE_PA_STATE_1_BSHFT | WTR1625_HP_LUT_TYPE << RFDEVICE_PA_STATE_2_BSHFT | WTR1625_HP_LUT_TYPE << RFDEVICE_PA_STATE_3_BSHFT ), /* RF_ASIC_BAND_PA_LUT_MAP */
FALSE, /* TXAGC_LUT */
0, /* Array Filler */
0, /* Array Filler */
},
},
{
RFDEVICE_PA,
GEN_PA /* HCPA */, /* NAME */
0, /* DEVICE_TYPE_INSTANCE */
0 /*Warning: Not specified*/, /* PHY_PATH_NUM */
{
0 /* Orig setting: */, /* INTF_REV */
(0x0107 << 22)/*mfg_id*/ | (0x01 << 14)/*prd_id*/ | (0)/*port_num*/, /* PORT_NUM */
//(0x0134 << 22)/*mfg_id*/ | (0x30 << 14)/*prd_id*/ | (0)/*port_num*/, /* PORT_NUM */
0,
0, /* Array Filler */
0, /* Array Filler */
0, /* Array Filler */
},
},
{
RFDEVICE_PAPM,
QFE1100, /* NAME */
0, /* DEVICE_TYPE_INSTANCE */
0 /*Warning: Not specified*/, /* PHY_PATH_NUM */
{
0 /* Orig setting: */, /* INTF_REV */
(0x0217 << 22)/*mfg_id*/ | (0x30 << 14)/*prd_id*/ | (1)/*port_num*/, /* PORT_NUM */
0, /* Array Filler */
0, /* Array Filler */
0, /* Array Filler */
0, /* Array Filler */
},
},
{
RFDEVICE_ASM,
GEN_ASM /* ASM_12T_9T */, /* NAME */
0, /* DEVICE_TYPE_INSTANCE */
0 /*Warning: Not specified*/, /* PHY_PATH_NUM */
{
0 /* Orig setting: */, /* INTF_REV */
(0x01A5 << 22)/*mfg_id*/ | (0x5F << 14)/*prd_id*/ | (2)/*port_num*/, /* PORT_NUM */
0, /* Array Filler */
0, /* Array Filler */
0, /* Array Filler */
0, /* Array Filler */
},
},
{
RFDEVICE_HDET,
TRX_HDET, /* NAME */
0, /* DEVICE_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 */
},
},
{
RFDEVICE_TUNER,
QFE1520, /* NAME */
0, /* DEVICE_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 */
},
},
},
};
6、RIL相关
源代码:
LINUX/android/:
hardware/ril/include/telephony/ril.h
hardware/ril/reference-ril/ril.h
hardware/ril/libril/ril.cpp
frameworks/base/telephony/java/android/telephony/ServiceStage.java
frameworks/opt/telephony-msim/frameworks/src/com/codeaurora/internal/telephony/MSimGsmServiceStateTracker.java
frameworks/opt/telephony/src/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
6.1 UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
当语音网络状态改变时候被调用,同时下面两个也会被调用:
RIL_REQUEST_VOICE_REGISTRATION_STATE
RIL_REQUEST_OPERATOR
/**
* RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
*
* Called when the voice network state changed
*
* Callee will invoke the following requests on main thread:
*
* RIL_REQUEST_VOICE_REGISTRATION_STATE
* RIL_REQUEST_OPERATOR
*
* "data" is NULL
*
* FIXME should this happen when SIM records are loaded? (eg, for
* EONS)
*/
例如日志:
03-18 19:54:31.164 D/RILJ ( 1305): [UNSL]< UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED [SUB0]
03-18 19:54:31.164 D/RILJ ( 1305): [7411]> OPERATOR [SUB0]
03-18 19:54:31.174 D/RILJ ( 1305): [7412]> DATA_REGISTRATION_STATE [SUB0]
03-18 19:54:31.174 D/RILJ ( 1305): [7413]> VOICE_REGISTRATION_STATE [SUB0]
03-18 19:54:31.174 D/RILJ ( 1305): [7414]> QUERY_NETWORK_SELECTION_MODE [SUB0]
03-18 19:54:31.174 E/RILQ ( 209): (0/209): RIL[0][cmd-22(288)] qcril_cm_ss_convert_gsm8bit_alpha_string_to_utf8: Invalid parameters for GSM alphabet to UTF8 conversion, input len = 0
03-18 19:54:31.174 E/RILQ ( 209): (0/209): RIL[0][cmd-22(288)] qcril_cm_ss_convert_gsm8bit_alpha_string_to_utf8: Invalid parameters for GSM alphabet to UTF8 conversion, input len = 0
03-18 19:54:31.184 D/RILJ ( 1305): [7411]< OPERATOR {CHN-UNICOM, UNICOM, 46001} [SUB0]
03-18 19:54:31.184 D/RILJ ( 1305): [7412]< DATA_REGISTRATION_STATE {1, d10b, 060b594d, 15, null, 20, null, null, null, null, null} [SUB0]
03-18 19:54:31.194 D/RILJ ( 1305): [7413]< VOICE_REGISTRATION_STATE {1, d10b, 060b594d, 3, null, null, null, 0, null, null, 1, null, null, 0, ce} [SUB0]
03-18 19:54:31.194 D/RILJ ( 1305): [UNSL]< UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED [SUB0]
03-18 19:54:31.194 D/RILJ ( 1305): [7414]< QUERY_NETWORK_SELECTION_MODE {0} [SUB0]
03-18 19:54:31.194 D/PHONE ( 1305): [ServiceState] setDataRegState=0
03-18 19:54:31.194 D/PHONE ( 1305): [ServiceState] setDataRadioTechnology=15
03-18 19:54:31.194 D/GsmSST ( 1305): [MSimGsmSST] [SUB : 0] handlPollStateResultMessage: GsmSST setDataRegState=0 regState=1 dataRadioTechnology=15
03-18 19:54:31.194 D/PHONE ( 1305): [ServiceState] setVoiceRegState=0
03-18 19:54:31.194 E/PHONE ( 1305): [ServiceState] setState deprecated use setVoiceRegState()
03-18 19:54:31.194 D/RILJ ( 1305): [7415]> OPERATOR [SUB0]
03-18 19:54:31.194 D/RILJ ( 1305): [7416]> DATA_REGISTRATION_STATE [SUB0]
03-18 19:54:31.204 D/RILJ ( 1305): [7417]> VOICE_REGISTRATION_STATE [SUB0]
03-18 19:54:31.204 E/RILQ ( 209): (0/209): RIL[0][cmd-22(288)] qcril_cm_ss_convert_gsm8bit_alpha_string_to_utf8: Invalid parameters for GSM alphabet to UTF8 conversion, input len = 0
03-18 19:54:31.204 E/RILQ ( 209): (0/209): RIL[0][cmd-22(288)] qcril_cm_ss_convert_gsm8bit_alpha_string_to_utf8: Invalid parameters for GSM alphabet to UTF8 conversion, input len = 0
03-18 19:54:31.204 D/RILJ ( 1305): [7418]> QUERY_NETWORK_SELECTION_MODE [SUB0]
03-18 19:54:31.204 D/RILJ ( 1305): [7415]< OPERATOR {CHN-UNICOM, UNICOM, 46001} [SUB0]
03-18 19:54:31.204 D/RILJ ( 1305): [7416]< DATA_REGISTRATION_STATE {1, d10b, 060b594d, 15, null, 20, null, null, null, null, null} [SUB0]
6.2 OPERATOR
网络提供商
/**
* RIL_REQUEST_OPERATOR
*
* Request current operator ONS or EONS
*
* "data" is NULL
* "response" is a "const char **"
* ((const char **)response)[0] is long alpha ONS or EONS
* or NULL if unregistered
*
* ((const char **)response)[1] is short alpha ONS or EONS
* or NULL if unregistered
* ((const char **)response)[2] is 5 or 6 digit numeric code (MCC + MNC)
* or NULL if unregistered
*
* Valid errors:
* SUCCESS
* RADIO_NOT_AVAILABLE
* GENERIC_FAILURE
*/
例如日志:
03-18 19:54:31.194 D/RILJ ( 1305): [7415]> OPERATOR [SUB0]
。。。
03-18 19:54:31.204 D/RILJ ( 1305): [7415]< OPERATOR {CHN-UNICOM, UNICOM, 46001} [SUB0]
6.3 DATA_REGISTRATION_STATE
当前数据注册状态。
/**
* RIL_REQUEST_DATA_REGISTRATION_STATE
*
* Request current DATA registration state
*
* "data" is NULL
* "response" is a "char **"
* ((const char **)response)[0] is registration state 0-5 from TS 27.007 10.1.20 AT+CGREG
* ((const char **)response)[1] is LAC if registered or NULL if not
* ((const char **)response)[2] is CID if registered or NULL if not
* ((const char **)response)[3] indicates the available data radio technology,
* valid values as defined by RIL_RadioTechnology.
* ((const char **)response)[4] if registration state is 3 (Registration
* denied) this is an enumerated reason why
* registration was denied. See 3GPP TS 24.008,
* Annex G.6 "Additonal cause codes for GMM".
* 7 == GPRS services not allowed
* 8 == GPRS services and non-GPRS services not allowed
* 9 == MS identity cannot be derived by the network
* 10 == Implicitly detached
* 14 == GPRS services not allowed in this PLMN
* 16 == MSC temporarily not reachable
* 40 == No PDP context activated
* ((const char **)response)[5] The maximum number of simultaneous Data Calls that can be
* established using RIL_REQUEST_SETUP_DATA_CALL.
*
* The values at offsets 6..10 are optional LTE location information in decimal.
* If a value is unknown that value may be NULL. If all values are NULL,
* none need to be present.
* ((const char **)response)[6] is TAC, a 16-bit Tracking Area Code.
* ((const char **)response)[7] is CID, a 0-503 Physical Cell Identifier.
* ((const char **)response)[8] is ECI, a 28-bit E-UTRAN Cell Identifier.
* ((const char **)response)[9] is CSGID, a 27-bit Closed Subscriber Group Identity.
* ((const char **)response)[10] is TADV, a 6-bit timing advance value.
*
* LAC and CID are in hexadecimal format.
* valid LAC are 0x0000 - 0xffff
* valid CID are 0x00000000 - 0x0fffffff
*
* Please note that registration state 4 ("unknown") is treated
* as "out of service" in the Android telephony system
*
* Valid errors:
* SUCCESS
* RADIO_NOT_AVAILABLE
* GENERIC_FAILURE
*/
例如日志:
03-18 19:54:31.194 D/RILJ ( 1305): [7416]> DATA_REGISTRATION_STATE [SUB0]
。。。
03-18 19:54:31.204 D/RILJ ( 1305): [7416]< DATA_REGISTRATION_STATE {1, d10b, 060b594d, 15, null, 20, null, null, null, null, null} [SUB0]
6.4 VOICE_REGISTRATION_STATE
当前语音注册状态。
/**
* RIL_REQUEST_VOICE_REGISTRATION_STATE
*
* Request current registration state
*
* "data" is NULL
* "response" is a "char **"
* ((const char **)response)[0] is registration state 0-6,
* 0 - Not registered, MT is not currently searching
* a new operator to register
* 1 - Registered, home network
* 2 - Not registered, but MT is currently searching
* a new operator to register
* 3 - Registration denied
* 4 - Unknown
* 5 - Registered, roaming
* 10 - Same as 0, but indicates that emergency calls
* are enabled.
* 12 - Same as 2, but indicates that emergency calls
* are enabled.
* 13 - Same as 3, but indicates that emergency calls
* are enabled.
* 14 - Same as 4, but indicates that emergency calls
* are enabled.
*
* ((const char **)response)[1] is LAC if registered on a GSM/WCDMA system or
* NULL if not.Valid LAC are 0x0000 - 0xffff
* ((const char **)response)[2] is CID if registered on a * GSM/WCDMA or
* NULL if not.
* Valid CID are 0x00000000 - 0xffffffff
* In GSM, CID is Cell ID (see TS 27.007)
* in 16 bits
* In UMTS, CID is UMTS Cell Identity
* (see TS 25.331) in 28 bits
* ((const char **)response)[3] indicates the available voice radio technology,
* valid values as defined by RIL_RadioTechnology.
* ((const char **)response)[4] is Base Station ID if registered on a CDMA
* system or NULL if not. Base Station ID in
* decimal format
* ((const char **)response)[5] is Base Station latitude if registered on a
* CDMA system or NULL if not. Base Station
* latitude is a decimal number as specified in
* 3GPP2 C.S0005-A v6.0. It is represented in
* units of 0.25 seconds and ranges from -1296000
* to 1296000, both values inclusive (corresponding
* to a range of -90 to +90 degrees).
* ((const char **)response)[6] is Base Station longitude if registered on a
* CDMA system or NULL if not. Base Station
* longitude is a decimal number as specified in
* 3GPP2 C.S0005-A v6.0. It is represented in
* units of 0.25 seconds and ranges from -2592000
* to 2592000, both values inclusive (corresponding
* to a range of -180 to +180 degrees).
* ((const char **)response)[7] is concurrent services support indicator if
* registered on a CDMA system 0-1.
* 0 - Concurrent services not supported,
* 1 - Concurrent services supported
* ((const char **)response)[8] is System ID if registered on a CDMA system or
* NULL if not. Valid System ID are 0 - 32767
* ((const char **)response)[9] is Network ID if registered on a CDMA system or
* NULL if not. Valid System ID are 0 - 65535
* ((const char **)response)[10] is the TSB-58 Roaming Indicator if registered
* on a CDMA or EVDO system or NULL if not. Valid values
* are 0-255.
* ((const char **)response)[11] indicates whether the current system is in the
* PRL if registered on a CDMA or EVDO system or NULL if
* not. 0=not in the PRL, 1=in the PRL
* ((const char **)response)[12] is the default Roaming Indicator from the PRL,
* if registered on a CDMA or EVDO system or NULL if not.
* Valid values are 0-255.
* ((const char **)response)[13] if registration state is 3 (Registration
* denied) this is an enumerated reason why
* registration was denied. See 3GPP TS 24.008,
* 10.5.3.6 and Annex G.
* 0 - General
* 1 - Authentication Failure
* 2 - IMSI unknown in HLR
* 3 - Illegal MS
* 4 - Illegal ME
* 5 - PLMN not allowed
* 6 - Location area not allowed
* 7 - Roaming not allowed
* 8 - No Suitable Cells in this Location Area
* 9 - Network failure
* 10 - Persistent location update reject
* 11 - PLMN not allowed
* 12 - Location area not allowed
* 13 - Roaming not allowed in this Location Area
* 15 - No Suitable Cells in this Location Area
* 17 - Network Failure
* 20 - MAC Failure
* 21 - Sync Failure
* 22 - Congestion
* 23 - GSM Authentication unacceptable
* 25 - Not Authorized for this CSG
* 32 - Service option not supported
* 33 - Requested service option not subscribed
* 34 - Service option temporarily out of order
* 38 - Call cannot be identified
* 48-63 - Retry upon entry into a new cell
* 95 - Semantically incorrect message
* 96 - Invalid mandatory information
* 97 - Message type non-existent or not implemented
* 98 - Message not compatible with protocol state
* 99 - Information element non-existent or not implemented
* 100 - Conditional IE error
* 101 - Message not compatible with protocol state
* 111 - Protocol error, unspecified
* ((const char **)response)[14] is the Primary Scrambling Code of the current
* cell as described in TS 25.331, in hexadecimal
* format, or NULL if unknown or not registered
* to a UMTS network.
*
* Please note that registration state 4 ("unknown") is treated
* as "out of service" in the Android telephony system
*
* Registration state 3 can be returned if Location Update Reject
* (with cause 17 - Network Failure) is received repeatedly from the network,
* to facilitate "managed roaming"
*
* Valid errors:
* SUCCESS
* RADIO_NOT_AVAILABLE
* GENERIC_FAILURE
*/
例如:
03-18 19:54:42.148 D/RILJ ( 1305): [7421]> VOICE_REGISTRATION_STATE [SUB0]
。。。
03-18 19:54:42.198 D/RILJ ( 1305): [7421]< VOICE_REGISTRATION_STATE {1, d10b, 060b594d, 3, null, null, null, 0, null, null, 1, null, null, 0, ce} [SUB0]
6.5 MSimGsmSST
MSim Gsm Service State Tracker:网络服务状态变化
6.6 Service State
oldSS:old Service State
newSS:new Service State
例如:
03-18 19:54:42.208 D/GsmSST ( 1305): [MSimGsmSST] [SUB : 0] Poll ServiceState done: oldSS=[0 0 home CHN-UNICOM UNICOM 46001 UMTS HSPAP CSS not supported -1 -1 RoamInd=-1 DefRoamInd=-1 EmergOnly=false] newSS=[0 0 home CHN-UNICOM UNICOM 46001 UMTS HSPA CSS not supported -1 -1 RoamInd=-1 DefRoamInd=-1 EmergOnly=false] oldMaxDataCalls=20 mNewMaxDataCalls=20 oldReasonDataDenied=-1 mNewReasonDataDenied=-1
整理一下,就可以看出前后网络服务状态的变化:
03-18 19:54:42.208 D/GsmSST ( 1305): [MSimGsmSST] [SUB : 0] Poll ServiceState done:
oldSS=[0 0 home CHN-UNICOM UNICOM 46001 UMTS HSPAP CSS not supported -1 -1 RoamInd=-1 DefRoamInd=-1 EmergOnly=false]
newSS=[0 0 home CHN-UNICOM UNICOM 46001 UMTS HSPA CSS not supported -1 -1 RoamInd=-1 DefRoamInd=-1 EmergOnly=false] oldMaxDataCalls=20 mNewMaxDataCalls=20 oldReasonDataDenied=-1 mNewReasonDataDenied=-1
6.7 dataRegState
手机注册状态。
/**
* Normal operation condition, the phone is registered
* with an operator either in home network or in roaming.
*/
public static final int STATE_IN_SERVICE = 0;
/**
* Phone is not registered with any operator, the phone
* can be currently searching a new operator to register to, or not
* searching to registration at all, or registration is denied, or radio
* signal is not available.
*/
public static final int STATE_OUT_OF_SERVICE = 1;
/**
* The phone is registered and locked. Only emergency numbers are allowed. {@more}
*/
public static final int STATE_EMERGENCY_ONLY = 2;
/**
* Radio of telephony is explicitly powered off.
*/
public static final int STATE_POWER_OFF = 3;
例如日志:
6.8 regState
RIL level registration state values。
/**
* RIL level registration state values from ril.h
* ((const char **)response)[0] is registration state 0-6,
* 0 - Not registered, MT is not currently searching
* a new operator to register
* 1 - Registered, home network
* 2 - Not registered, but MT is currently searching
* a new operator to register
* 3 - Registration denied
* 4 - Unknown
* 5 - Registered, roaming
* 10 - Same as 0, but indicates that emergency calls
* are enabled.
* 12 - Same as 2, but indicates that emergency calls
* are enabled.
* 13 - Same as 3, but indicates that emergency calls
* are enabled.
* 14 - Same as 4, but indicates that emergency calls
* are enabled.
* @hide
*/
public static final int RIL_REG_STATE_NOT_REG = 0;
/** @hide */
public static final int RIL_REG_STATE_HOME = 1;
/** @hide */
public static final int RIL_REG_STATE_SEARCHING = 2;
/** @hide */
public static final int RIL_REG_STATE_DENIED = 3;
/** @hide */
public static final int RIL_REG_STATE_UNKNOWN = 4;
/** @hide */
public static final int RIL_REG_STATE_ROAMING = 5;
/** @hide */
public static final int RIL_REG_STATE_NOT_REG_EMERGENCY_CALL_ENABLED = 10;
/** @hide */
public static final int RIL_REG_STATE_SEARCHING_EMERGENCY_CALL_ENABLED = 12;
/** @hide */
public static final int RIL_REG_STATE_DENIED_EMERGENCY_CALL_ENABLED = 13;
/** @hide */
public static final int RIL_REG_STATE_UNKNOWN_EMERGENCY_CALL_ENABLED = 14;
例如日志:
6.9 dataRadioTechnology
/**
* Available radio technologies for GSM, UMTS and CDMA.
* Duplicates the constants from hardware/radio/include/ril.h
* This should only be used by agents working with the ril. Others
* should use the equivalent TelephonyManager.NETWORK_TYPE_*
*/
/** @hide */
public static final int RIL_RADIO_TECHNOLOGY_UNKNOWN = 0;
/** @hide */
public static final int RIL_RADIO_TECHNOLOGY_GPRS = 1;
/** @hide */
public static final int RIL_RADIO_TECHNOLOGY_EDGE = 2;
/** @hide */
public static final int RIL_RADIO_TECHNOLOGY_UMTS = 3;
/** @hide */
public static final int RIL_RADIO_TECHNOLOGY_IS95A = 4;
/** @hide */
public static final int RIL_RADIO_TECHNOLOGY_IS95B = 5;
/** @hide */
public static final int RIL_RADIO_TECHNOLOGY_1xRTT = 6;
/** @hide */
public static final int RIL_RADIO_TECHNOLOGY_EVDO_0 = 7;
/** @hide */
public static final int RIL_RADIO_TECHNOLOGY_EVDO_A = 8;
/** @hide */
public static final int RIL_RADIO_TECHNOLOGY_HSDPA = 9;
/** @hide */
public static final int RIL_RADIO_TECHNOLOGY_HSUPA = 10;
/** @hide */
public static final int RIL_RADIO_TECHNOLOGY_HSPA = 11;
/** @hide */
public static final int RIL_RADIO_TECHNOLOGY_EVDO_B = 12;
/** @hide */
public static final int RIL_RADIO_TECHNOLOGY_EHRPD = 13;
/** @hide */
public static final int RIL_RADIO_TECHNOLOGY_LTE = 14;
/** @hide */
public static final int RIL_RADIO_TECHNOLOGY_HSPAP = 15;
/**
* GSM radio technology only supports voice. It does not support data.
* @hide
*/
public static final int RIL_RADIO_TECHNOLOGY_GSM = 16;
/**
* TD-SCDMA
* @hide
*/
public static final int RIL_RADIO_TECHNOLOGY_TD_SCDMA = 17;
/**
* IWLAN
* @hide
*/
public static final int RIL_RADIO_TECHNOLOGY_IWLAN = 18;
例如日志:
7、调试记录
7.1 Mipi 设备做兼容的方法
针对8916,8939 等平台,8909 平台不同。
主要修改两个地方:
1.common 文件夹
2.对应用的的band
案例:
代码需要同时兼容7907和7941两个PA,主板上的PA可能是7907也可能是7941,代码要做到兼容。修改如下:
1.common 文件夹
如下图所示:
2.具体band 处的配置
如下图所示:
7.2 Modifing PA range map setting
7.2.1检查器件的DATASHEET
首先我们检查PA的datasheet,例如P660的mipi控制TDSB34,B39 发射的PA的register0
图 (1)
TDSB34,B39 硬件上连接对应PORT33口,寄存器0的值为0x25,0x26,分别控制LPM,HPM,为2档PA,有一个切换点。代码中对应如下图(2)
图(2)
7.2.2检查RF_CARD CODE
a.检查TRANSCEIVER的LUT setting与功放高低增益相互对应关系,如B34 TDSCDMA的配置如下:
图(3)
该增益模式是WTR1605_LP_LUT_TYPE 低
WTR1605_HP_LUT_TYPE 高
WTR1605_LUT_PWR_INVALID 无效
WTR1605_LUT_PWR_INVALID 无效
3G的TRANSCEIVER的增益模式配置是由低到高的,4G的TRANSCEIVER的增益模式配置是由高到低的。
b.如何才能使TRANSCEIVER的增益与PA功放的等级对应呢?这个就需要我们设置该频段的NV项的PA_RANGE_MAP 见如下图(4)
图(4)
我们的XTT 校准工具中也需要相应的修改,如下图(5)
图(5)
Tx FreqComp:PA State List 该值设置为1,0,0 它索引的是PA_RANGE_MAP 中的值,第一个值1,索引为PA_RANGE_MAP 数组中第二个值的PA状态,及本例中的高增益状态,可以根据该状态设置其他校准配置项,及其他所有的配置可能要按照PA 增益由高到低排序,也及校准的XTT是从高增益往低增益校准的。
8、MSM8994 RF驱动调试
8.1选择rf_card类型
经高通review原理图后,高通建议我们使用rf card RFC_WTR3925_SSKU_QFEs_ET (HWID=5)。
所以使用的代码是:modem_proc/rfc_bolt/rf_card/rfc_wtr3925_ssku_qfes_et
HWID:modem_proc/rfc_bolt/api/rfc_hwid.h
备注:建立source insight工程,可以调高调试效率。
8.2 Transceiver
8.2.1 MID、PID、USID
配置依据:
MIPI bus | MIPI devices | MID | PID | USID |
|
RFFE1 | WTR3905 | 0x217 | 0xC0 | 0x01 | Transceiver |
RFFE2 | QFE2101 | 0x217 | 0x31 | 0x04 | APT |
RFFE2 | SKY77814 | 0x1A5 | 0x85 | 0x0F | PA |
RFFE2 | RF7459 | 0x134 | 0x30 | 0x0F | PA |
RFFE3 | RF1496A | 0x134 | 0x20 | 0x0B | DRx SWITCH |
RFFE5 | RF1498A | 0X134 | 0X28 | 0x0B | PRx SWITCH |
配置思路:
比对并修改MID、PID、USID
代码:
modem_proc/rfc_bolt/rf_card/rfc_wtr3925_ssku_qfes_et/common/src/rfc_wtr3925_ssku_qfes_et_cmn_ag.cpp
8.2.2 PORT
配置依据:
RF Port | G | C | W | LTE-FDD | LTE-TDD | TD-SCDMA |
| QB |
| 1,2,5,8 | 1,3,7,8,20 | 38,39,40,41 | 34,39 |
TX_LB1 | 850,900 | – | – | – | – | – |
TX_LB2 | – | BC0 | 5,8 | 20 | – | – |
TX_LB3 | – | – | – | – | – | – |
TX_LB4 | – | – | – | – | – | – |
TX_HMLB1 | – | – | – | – | – | – |
TX_HMLB1 | – | – | – | – | – | – |
TX_HMB1 | – | – | – | – | – | – |
TX_HMB2 | – | – | – | 7 | 38,40,41 | – |
TX_HMB3 | – | – | 1,2 | 1,3 | 39 | 34,39 |
TX_HMB4 | 1800,1900 | – | – | – | – | – |
| – | – | – | – | – | – |
PRX_LB1 | 900 | – | 8 | – | – | – |
PRX_LB2 | – | – | – | – | – | – |
PRX_LB3 | – | – | – | 20 | – | – |
PRX_LB4 | 850 | BC0 | 5 | – | – | – |
PRX_MB1 | 1900 | – | 2 | – | – | – |
PRX_MB2 | – | – | – | – | 39 | 34,39 |
PRX_MB3 | 1800 | – | – | 3 | – | – |
PRX_MB4 | – | – | – | – | – | – |
PRX_MB5 | – | – | 1 | 1 | – | – |
PRX_MLB6 | – | – | – | – | – | – |
PRX_HB1 | – | – | – | 7 | – | – |
PRX_HB2 | – | – | – | – | 40 | – |
PRX_HB3 | – | – | – | – | 38,41 | – |
PRX_HB4 | – | – | – | – | – | – |
| – | – | – | – | – | – |
DRX_LB1 | – | – | 8 | – | – | – |
DRX_LB2 | – | – | – | – | – | – |
DRX_LB3 | – | – | – | 20 | – | – |
DRX_LB4 | – | – | 5 | – | – | – |
DRX_MB1 | – | – | 2 | – | – | – |
DRX_MB2 | – | – | – | – | 39 | 39 |
DRX_MB3 | – | – | – | 3 | – | – |
DRX_MB4 | – | – | – | – | – | – |
DRX_MB5 | – | – | 1 | 1 | – | – |
DRX_MLB6 | – | – | – | – | – | 34 |
DRX_HB1 | – | – | – | 7 | – | – |
DRX_HB2 | – | – | – | – | – | – |
DRX_HB3 | – | – | – | – | 40 | – |
DRX_HB4 | – | – | – | – | 38,41 | – |
配置思路:
逐个模式比对、修改。按照GMS、CDMA、WCDMA、LTE-FDD、LTE-TDD、TD-SCDMA顺序,将表格中参数逐个与代码比对,修改,调试完一个,再看另一个。
在每个模式中,对每个频段逐个比对、修改。每个频段要比对TX、PRX、DRX的Port。
代码:
modem_proc/rfc_bolt/rf_card/rfc_wtr3925_ssku_qfes_et/模式/src/的*.c文件。以GSM为例,对应代码是modem_proc/rfc_bolt/rf_card/rfc_wtr3925_ssku_qfes_et/gsm/src/rfc_wtr3925_ssku_qfes_et_gsm_config_data_ag.c
所有相关代码列表:
modem_proc/rfc_bolt/rf_card/rfc_wtr3925_ssku_qfes_et/
./gsm/src/rfc_wtr3925_ssku_qfes_et_gsm_config_data_ag.c
./cdma/src/rfc_wtr3925_ssku_qfes_et_cdma_config_data_ag.c
./wcdma/src/rfc_wtr3925_ssku_qfes_et_wcdma_config_data_ag.c
./lte/src/rfc_wtr3925_ssku_qfes_et_lte_config_data_ag.c
./tdscdma/src/rfc_wtr3925_ssku_qfes_et_tdscdma_config_data_ag.c
TX项:一一将上表中参数与代码rf_card_wtr3925_ssku_qfes_et_tx0_模式频段_device_info中的WTR3925 Port项比对,如果不一致,修改代码。以GMS 850频段TX为例:
表格参数:
RF Port | G |
TX_LB1 | 850,900 |
对应代码:
PRX项:一一将上表中参数与代码rf_card_wtr3925_ssku_qfes_et_rx0_模式频段_device_info中的WTR3925 Port项比对,如果不一致,修改代码。以WCDMA B8频段PRX为例:
表格参数:
RF Port | W |
PRX_LB1 | 8 |
代码:
DRX项:一一将上表中参数与代码rf_card_wtr3925_ssku_qfes_et_rx1_模式频段_device_info中的WTR3925 Port项比对,如果不一致,修改代码。以WCDMA B8频段DRX为例:
表格参数:
RF Port | W |
DRX_LB1 | 8 |
代码:
8.3 PA
8.3.1更新device list
添加新增的PA,移除不用的PA。
修改依据:
相关代码:
modem_proc/rfc_bolt/rf_card/rfc_wtr3925_ssku_qfes_et/common/src/rfc_wtr3925_ssku_qfes_et_cmn_ag.cpp
rfc_phy_device_info_type rfc_wtr3925_ssku_qfes_et_phy_devices_list[]
rfc_logical_device_info_type rfc_wtr3925_ssku_qfes_et_logical_devices_list[]
其中,rfc_phy_device_info_type rfc_wtr3925_ssku_qfes_et_phy_devices_list[]的设置如下:
器件的排列顺序:Transceiver、APT、PA、SWITCH
MIPI BUS的设置。下图红框中的值,0、1、2、3。。。分别对应RFFE1、RFFE2、RFFE3、RFFE4。。。
MID:PHY_DEVICE_MANUFACTURER_ID
PID:PHY_DEVICE_PRODUCT_ID
USID:PHY_DEVICE_ASSIGNED_USID
PHY_DEVICE_INSTANCE:从0开始顺序递增
rfc_logical_device_info_type rfc_wtr3925_ssku_qfes_et_logical_devices_list[]的设置如下:
器件的顺序:Transceiver、APT、PA、SWITCH
DEVICE_MODULE_TYPE_INSTANCE:
ASSOCIATED_PHY_DEVICE_INSTANCE:从0开始顺序递增
8.3.2 RF7459
8.3.2.1添加驱动
由于rf_card rfc_wtr3925_ssku_qfes_et默认不使用PA RF7459,所以要添加一下RF7459的驱动。
PA的驱动代码统一放在路径:modem_proc/rfdevice_pa/src/
经查找,发现源代码里PA7389的MID、PID和RF7459一样。可以考虑借用PA7389的驱动,然后再做修改。
对照代码rfdevice_pa_rfmd_7389_data_ag.cpp和RF参数配置表,在RF参数配置表上补上port一栏。
如果代码中缺少PA参数对应的port,则修改代码。
PA端口。修改依据:
代码修改:
Bias data。修改依据:
代码修改:
相关代码:
modem_proc/rfdevice_pa/src/
./rfdevice_pa_factory_ag.cpp
./rfdevice_pa_rfmd_7389_data_ag.cpp
8.3.2.2 device list
在device list里面检查是否有RF7459的MID、PID、USID,如果没有,则添加上去。
相关代码:
modem_proc/rfc_bolt/rf_card/rfc_wtr3925_ssku_qfes_et/common/src/rfc_wtr3925_ssku_qfes_et_cmn_ag.cpp
8.3.2.3修改各模式频段的PA
根据RF参数配置表中的RF7459参数,修改代码。
配置依据:
Band |
| Value | Port |
B1 | HPM | 0x0D | 0 |
LPM | 0x0E | ||
B2 | HPM | 0x15 | 1 |
LPM | 0x16 | ||
B3 | HPM | 0x1D | 2 |
LPM | 0x1E | ||
B34 B39 | HPM | 0x25 | 3 |
LPM | 0x26 | ||
B5/CDMA BC0 | HPM | 0x2D | 4 |
LPM | 0x2E | ||
B26 | HPM | 0x |
|
LPM | 0x | ||
B20 | HPM | 0x55 | 13 |
LPM | 0x56 | ||
B8 | HPM | 0x3D | 6 |
LPM | 0x3E | ||
GMSK/EDGE LB | HPM | 0x44 | 9 |
MPM | 0x45 | ||
LPM | 0x46 | ||
ULPM | 0x47 | ||
GMSK/EDGE HB | HPM | 0x4C | 11 |
MPM | 0x4D | ||
LPM | 0x4E | ||
ULPM | 0x4F |
支持的所有频段 |
GSM: 850/900/1800/1900 |
TD-SCDMA: B34,B39; |
WCDMA:B1,B2,B5,B8 |
LTE-FDD:B1,B3,B7,B8,B20; |
LTE-TDD: B40,B38,B39,B41 |
CDMA BC0 |
对于GMS,850,900用的是LB,即如下数据:
GMSK/EDGE LB | HPM | 0x44 | 9 |
MPM | 0x45 | ||
LPM | 0x46 | ||
ULPM | 0x47 |
对于GMS,1800,1900用的是HB,即如下数据:
GMSK/EDGE HB | HPM | 0x4C | 11 |
MPM | 0x4D | ||
LPM | 0x4E | ||
ULPM | 0x4F |
配置思路:
逐个模式比对、修改。按照下表顺序,依次对GMS、TD-SCDMA、WCDMA、LTE-FDD、LTE-TDD、CDMA,将PA Port表中参数逐个与代码比对,修改,调试完一个,再看另一个。
支持的所有频段 |
GSM: 850/900/1800/1900 |
TD-SCDMA: B34,B39; |
WCDMA:B1,B2,B5,B8 |
LTE-FDD:B1,B3,B7,B8,B20; |
LTE-TDD: B40,B38,B39,B41 |
CDMA BC0 |
代码:
modem_proc/rfc_bolt/rf_card/rfc_wtr3925_ssku_qfes_et/模式/src/的*.c文件。以GSM为例,对应代码是modem_proc/rfc_bolt/rf_card/rfc_wtr3925_ssku_qfes_et/gsm/src/rfc_wtr3925_ssku_qfes_et_gsm_config_data_ag.c
所有相关代码列表:
modem_proc/rfc_bolt/rf_card/rfc_wtr3925_ssku_qfes_et/
./gsm/src/rfc_wtr3925_ssku_qfes_et_gsm_config_data_ag.c
./cdma/src/rfc_wtr3925_ssku_qfes_et_cdma_config_data_ag.c
./wcdma/src/rfc_wtr3925_ssku_qfes_et_wcdma_config_data_ag.c
./lte/src/rfc_wtr3925_ssku_qfes_et_lte_config_data_ag.c
./tdscdma/src/rfc_wtr3925_ssku_qfes_et_tdscdma_config_data_ag.c
一一将上表中参数与代码rf_card_wtr3925_ssku_qfes_et_tx0_模式频段_device_info中的RFDEVICE_PA Port项比对,如果不一致,修改代码。以GMS 850频段为例:
表格参数:
使用的PA是RF7459,port参数如下表。
GMSK/EDGE LB | HPM | 0x44 | 9 |
MPM | 0x45 | ||
LPM | 0x46 | ||
ULPM | 0x47 |
对应代码:
填上DEVICE_MODULE_TYPE_INSTANCE、MID、PID、PORT。其中DEVICE_MODULE_TYPE_INSTANCE是850频段使用到的PA数量。
MIPI bus | MIPI devices | MID | PID | USID |
|
RFFE1 | WTR3905 | 0x217 | 0xC0 | 0x01 | Transceiver |
RFFE2 | QFE2101 | 0x217 | 0x31 | 0x04 | APT |
RFFE2 | SKY77814 | 0x1A5 | 0x85 | 0x0F | PA |
RFFE2 | RF7459 | 0x134 | 0x30 | 0x0F | PA |
RFFE3 | RF1496A | 0x134 | 0x20 | 0x0B | DRx SWITCH |
RFFE5 | RF1498A | 0X134 | 0X28 | 0x0B | PRx SWITCH |
配置思路:
比对并修改MID、PID、USID
代码:
modem_proc/rfc_bolt/rf_card/rfc_wtr3925_ssku_qfes_et/common/src/rfc_wtr3925_ssku_qfes_et_cmn_ag.cpp
8.2.2 PORT
配置依据:
RF Port | G | C | W | LTE-FDD | LTE-TDD | TD-SCDMA |
| QB |
| 1,2,5,8 | 1,3,7,8,20 | 38,39,40,41 | 34,39 |
TX_LB1 | 850,900 | – | – | – | – | – |
TX_LB2 | – | BC0 | 5,8 | 20 | – | – |
TX_LB3 | – | – | – | – | – | – |
TX_LB4 | – | – | – | – | – | – |
TX_HMLB1 | – | – | – | – | – | – |
TX_HMLB1 | – | – | – | – | – | – |
TX_HMB1 | – | – | – | – | – | – |
TX_HMB2 | – | – | – | 7 | 38,40,41 | – |
TX_HMB3 | – | – | 1,2 | 1,3 | 39 | 34,39 |
TX_HMB4 | 1800,1900 | – | – | – | – | – |
| – | – | – | – | – | – |
PRX_LB1 | 900 | – | 8 | – | – | – |
PRX_LB2 | – | – | – | – | – | – |
PRX_LB3 | – | – | – | 20 | – | – |
PRX_LB4 | 850 | BC0 | 5 | – | – | – |
PRX_MB1 | 1900 | – | 2 | – | – | – |
PRX_MB2 | – | – | – | – | 39 | 34,39 |
PRX_MB3 | 1800 | – | – | 3 | – | – |
PRX_MB4 | – | – | – | – | – | – |
PRX_MB5 | – | – | 1 | 1 | – | – |
PRX_MLB6 | – | – | – | – | – | – |
PRX_HB1 | – | – | – | 7 | – | – |
PRX_HB2 | – | – | – | – | 40 | – |
PRX_HB3 | – | – | – | – | 38,41 | – |
PRX_HB4 | – | – | – | – | – | – |
| – | – | – | – | – | – |
DRX_LB1 | – | – | 8 | – | – | – |
DRX_LB2 | – | – | – | – | – | – |
DRX_LB3 | – | – | – | 20 | – | – |
DRX_LB4 | – | – | 5 | – | – | – |
DRX_MB1 | – | – | 2 | – | – | – |
DRX_MB2 | – | – | – | – | 39 | 39 |
DRX_MB3 | – | – | – | 3 | – | – |
DRX_MB4 | – | – | – | – | – | – |
DRX_MB5 | – | – | 1 | 1 | – | – |
DRX_MLB6 | – | – | – | – | – | 34 |
DRX_HB1 | – | – | – | 7 | – | – |
DRX_HB2 | – | – | – | – | – | – |
DRX_HB3 | – | – | – | – | 40 | – |
DRX_HB4 | – | – | – | – | 38,41 | – |
配置思路:
逐个模式比对、修改。按照GMS、CDMA、WCDMA、LTE-FDD、LTE-TDD、TD-SCDMA顺序,将表格中参数逐个与代码比对,修改,调试完一个,再看另一个。
在每个模式中,对每个频段逐个比对、修改。每个频段要比对TX、PRX、DRX的Port。
代码:
modem_proc/rfc_bolt/rf_card/rfc_wtr3925_ssku_qfes_et/模式/src/的*.c文件。以GSM为例,对应代码是modem_proc/rfc_bolt/rf_card/rfc_wtr3925_ssku_qfes_et/gsm/src/rfc_wtr3925_ssku_qfes_et_gsm_config_data_ag.c
所有相关代码列表:
modem_proc/rfc_bolt/rf_card/rfc_wtr3925_ssku_qfes_et/
./gsm/src/rfc_wtr3925_ssku_qfes_et_gsm_config_data_ag.c
./cdma/src/rfc_wtr3925_ssku_qfes_et_cdma_config_data_ag.c
./wcdma/src/rfc_wtr3925_ssku_qfes_et_wcdma_config_data_ag.c
./lte/src/rfc_wtr3925_ssku_qfes_et_lte_config_data_ag.c
./tdscdma/src/rfc_wtr3925_ssku_qfes_et_tdscdma_config_data_ag.c
TX项:一一将上表中参数与代码rf_card_wtr3925_ssku_qfes_et_tx0_模式频段_device_info中的WTR3925 Port项比对,如果不一致,修改代码。以GMS 850频段TX为例:
表格参数:
RF Port | G |
TX_LB1 | 850,900 |
对应代码:
PRX项:一一将上表中参数与代码rf_card_wtr3925_ssku_qfes_et_rx0_模式频段_device_info中的WTR3925 Port项比对,如果不一致,修改代码。以WCDMA B8频段PRX为例:
表格参数:
RF Port | W |
PRX_LB1 | 8 |
代码:
DRX项:一一将上表中参数与代码rf_card_wtr3925_ssku_qfes_et_rx1_模式频段_device_info中的WTR3925 Port项比对,如果不一致,修改代码。以WCDMA B8频段DRX为例:
表格参数:
RF Port | W |
DRX_LB1 | 8 |
代码:
8.3 PA
8.3.1更新device list
添加新增的PA,移除不用的PA。
修改依据:
相关代码:
modem_proc/rfc_bolt/rf_card/rfc_wtr3925_ssku_qfes_et/common/src/rfc_wtr3925_ssku_qfes_et_cmn_ag.cpp
rfc_phy_device_info_type rfc_wtr3925_ssku_qfes_et_phy_devices_list[]
rfc_logical_device_info_type rfc_wtr3925_ssku_qfes_et_logical_devices_list[]
其中,rfc_phy_device_info_type rfc_wtr3925_ssku_qfes_et_phy_devices_list[]的设置如下:
器件的排列顺序:Transceiver、APT、PA、SWITCH
MIPI BUS的设置。下图红框中的值,0、1、2、3。。。分别对应RFFE1、RFFE2、RFFE3、RFFE4。。。
MID:PHY_DEVICE_MANUFACTURER_ID
PID:PHY_DEVICE_PRODUCT_ID
USID:PHY_DEVICE_ASSIGNED_USID
PHY_DEVICE_INSTANCE:从0开始顺序递增
rfc_logical_device_info_type rfc_wtr3925_ssku_qfes_et_logical_devices_list[]的设置如下:
器件的顺序:Transceiver、APT、PA、SWITCH
DEVICE_MODULE_TYPE_INSTANCE:
ASSOCIATED_PHY_DEVICE_INSTANCE:从0开始顺序递增
8.3.2 RF7459
8.3.2.1添加驱动
由于rf_card rfc_wtr3925_ssku_qfes_et默认不使用PA RF7459,所以要添加一下RF7459的驱动。
PA的驱动代码统一放在路径:modem_proc/rfdevice_pa/src/
经查找,发现源代码里PA7389的MID、PID和RF7459一样。可以考虑借用PA7389的驱动,然后再做修改。
对照代码rfdevice_pa_rfmd_7389_data_ag.cpp和RF参数配置表,在RF参数配置表上补上port一栏。
如果代码中缺少PA参数对应的port,则修改代码。
PA端口。修改依据:
代码修改:
Bias data。修改依据:
代码修改:
相关代码:
modem_proc/rfdevice_pa/src/
./rfdevice_pa_factory_ag.cpp
./rfdevice_pa_rfmd_7389_data_ag.cpp
8.3.2.2 device list
在device list里面检查是否有RF7459的MID、PID、USID,如果没有,则添加上去。
相关代码:
modem_proc/rfc_bolt/rf_card/rfc_wtr3925_ssku_qfes_et/common/src/rfc_wtr3925_ssku_qfes_et_cmn_ag.cpp
8.3.2.3修改各模式频段的PA
根据RF参数配置表中的RF7459参数,修改代码。
配置依据:
Band |
| Value | Port |
B1 | HPM | 0x0D | 0 |
LPM | 0x0E | ||
B2 | HPM | 0x15 | 1 |
LPM | 0x16 | ||
B3 | HPM | 0x1D | 2 |
LPM | 0x1E | ||
B34 B39 | HPM | 0x25 | 3 |
LPM | 0x26 | ||
B5/CDMA BC0 | HPM | 0x2D | 4 |
LPM | 0x2E | ||
B26 | HPM | 0x |
|
LPM | 0x | ||
B20 | HPM | 0x55 | 13 |
LPM | 0x56 | ||
B8 | HPM | 0x3D | 6 |
LPM | 0x3E | ||
GMSK/EDGE LB | HPM | 0x44 | 9 |
MPM | 0x45 | ||
LPM | 0x46 | ||
ULPM | 0x47 | ||
GMSK/EDGE HB | HPM | 0x4C | 11 |
MPM | 0x4D | ||
LPM | 0x4E | ||
ULPM | 0x4F |
支持的所有频段 |
GSM: 850/900/1800/1900 |
TD-SCDMA: B34,B39; |
WCDMA:B1,B2,B5,B8 |
LTE-FDD:B1,B3,B7,B8,B20; |
LTE-TDD: B40,B38,B39,B41 |
CDMA BC0 |
对于GMS,850,900用的是LB,即如下数据:
GMSK/EDGE LB | HPM | 0x44 | 9 |
MPM | 0x45 | ||
LPM | 0x46 | ||
ULPM | 0x47 |
对于GMS,1800,1900用的是HB,即如下数据:
GMSK/EDGE HB | HPM | 0x4C | 11 |
MPM | 0x4D | ||
LPM | 0x4E | ||
ULPM | 0x4F |
配置思路:
逐个模式比对、修改。按照下表顺序,依次对GMS、TD-SCDMA、WCDMA、LTE-FDD、LTE-TDD、CDMA,将PA Port表中参数逐个与代码比对,修改,调试完一个,再看另一个。
支持的所有频段 |
GSM: 850/900/1800/1900 |
TD-SCDMA: B34,B39; |
WCDMA:B1,B2,B5,B8 |
LTE-FDD:B1,B3,B7,B8,B20; |
LTE-TDD: B40,B38,B39,B41 |
CDMA BC0 |
代码:
modem_proc/rfc_bolt/rf_card/rfc_wtr3925_ssku_qfes_et/模式/src/的*.c文件。以GSM为例,对应代码是modem_proc/rfc_bolt/rf_card/rfc_wtr3925_ssku_qfes_et/gsm/src/rfc_wtr3925_ssku_qfes_et_gsm_config_data_ag.c
所有相关代码列表:
modem_proc/rfc_bolt/rf_card/rfc_wtr3925_ssku_qfes_et/
./gsm/src/rfc_wtr3925_ssku_qfes_et_gsm_config_data_ag.c
./cdma/src/rfc_wtr3925_ssku_qfes_et_cdma_config_data_ag.c
./wcdma/src/rfc_wtr3925_ssku_qfes_et_wcdma_config_data_ag.c
./lte/src/rfc_wtr3925_ssku_qfes_et_lte_config_data_ag.c
./tdscdma/src/rfc_wtr3925_ssku_qfes_et_tdscdma_config_data_ag.c
一一将上表中参数与代码rf_card_wtr3925_ssku_qfes_et_tx0_模式频段_device_info中的RFDEVICE_PA Port项比对,如果不一致,修改代码。以GMS 850频段为例:
表格参数:
使用的PA是RF7459,port参数如下表。
GMSK/EDGE LB | HPM | 0x44 | 9 |
MPM | 0x45 | ||
LPM | 0x46 | ||
ULPM | 0x47 |
对应代码:
填上DEVICE_MODULE_TYPE_INSTANCE、MID、PID、PORT。其中DEVICE_MODULE_TYPE_INSTANCE是850频段使用到的PA数量。