MSM RF Driver Configuration
来源:互联网 发布:java实现iis域认证 编辑:程序博客网 时间:2024/06/06 18:04
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对应的寄存器值:
表格 1 SKY13488真值表
这些值转换成16进制后,与代码modem_proc/rfdevice_asm/src/rfdevice_asm_sky13488_data_ag.cpp中rfdevice_asm_sky13488_asm_on_data[](见上面)对应起来:
表格 2 端口与真值对应关系表
这样在代码里面,就可以为gsm、wcdma、lte。。。来选择ASM设备端口了
表格 3 ASM设备GSM配置表
(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数量。
- MSM RF Driver Configuration
- MSM RF Driver Configuration
- smd driver of msm
- MSM Camera Driver Base(一)
- qcom I2C driver : i2c-msm-v2.c
- MTK Android Driver :2G RF para
- msm
- [PATCH 1/1] msm: DMAEngine: Add DMAEngine driver based on old MSM DMA APIs
- qcom I2C driver i2c-msm-v2.c code analysis
- MSSQLServer JDBC Driver + Tomcat Configuration
- rf
- RF
- RF
- Cstyle的UEFI导读之UEFI Driver Configuration
- msm 震动
- msm原理
- GBDT RF,rf 调参
- configuration
- 上台阶
- Wine QQ 安装
- SpringBoot之starter(R)
- 解决apt-get install E: 无法定位软件包问题
- Redis与Memcached的区别
- MSM RF Driver Configuration
- 极简略介绍 javascript 事件代理(事件委托)
- 大数据Spark企业级实战版【学习笔记】-----交互式SQL处理框架Spark SQL
- java.io.IOException: Expected at least 2 bytes
- hadoop安装,并配置单节点hadoop集群
- 4.S5PV210看门狗定时器相关寄存器描述
- Hadoop 及 Hive 压缩应用
- ArrayList源码解析
- Redis笔记——技术点汇总