高通平台RF配置流程

**注:**本文参考项目路径和代码为SIM7600 LE20分支

1 准备工作

需要的资料:

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

上诉由RF同事提供

RF驱动modem的配置工作有:

  1. 物理、逻辑列表的配置
  2. PA、ASM文件的添加
  3. 各制式下的TX、RX配置
  4. GPIO开关控制

2 物理、逻辑列表的配置

2.1 rf_card类型选择

RF卡有许多类型,不同的RF卡对应不同的device list

rf_card文件夹路径AMSS_LE20/modem_proc/rfc_jolokia/rf_card,该路径下包含了所有用到的RF卡类型:

在代码编译时,所有的RF cards文件都会被编译,modem使用NV:1878来决定实际使用哪个卡。NV1878数值与RF card类型的对应关系表在文件Rfc_hwid.h。

在AMSS_LE20项目中,读取NV1878值为250,所以RF卡类型应为RF_HW_WTR2965_NON_CA2_4320_SIM_0 ,对应源文件路径AMSS_LE20/modem_proc/rfc_jolokia/api/rfc_hwid.h

**注:**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_WTR2965_NON_CA2_4320_SAW          = (uint8)219,RF_HW_WTR2965_DUAL_WTR_4320_GPS         = (uint8)223,RF_HW_WTR2965_NON_CA2_4320_SIM_0        = (uint8)250, //Add by simRF_HW_WTR2965_NON_CA2_4320_SIM          = (uint8)241, //Add by sim......
} rf_hw_type;

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

2.2 配置物理逻辑列表

在RFC common文件中,为ASM和PA设备更新信息,比如:在modem_proc/rfc_jolokia/rf_card/rfc_wtr2965_non_ca2_4320_sim_0/common/src/rfc_wtr2965_non_ca2_4320_sim_0_cmn_ag.cpp中:

1、WTR2965是原本就存在的,需要注意的是wtr2965总线的确定

{ 4,0 /* 0 not specified */,}, /* PHY_DEVICE_COMM_BUS */

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

2、配置新增的器件信息,这里以S5643-52为例

  { /*Device: S5643-52 */GEN_DEVICE, /* PHY_DEVICE_NAME */1, /* PHY_DEVICE_INSTANCE */2, /* PHY_DEVICE_ALT_PART_NUM_OF_INSTANCE */RFDEVICE_COMM_PROTO_RFFE, /* PHY_DEVICE_COMM_PROTOCOL */RFDEVICE_COMM_PROTO_VERSION_DEFAULT, /* PHY_DEVICE_COMM_PROTOCOL_VERSION */ {    0,0 /* 0 not specified */,}, /* PHY_DEVICE_COMM_BUS */0x02E9, /* PHY_DEVICE_MANUFACTURER_ID */0x8A, /* PHY_DEVICE_PRODUCT_ID */
#ifdef FEATURE_NO_PA_DEBUG0 | RFC_SKIP_RFFE_DETECT_BIT_IND, /* PHY_DEVICE_PRODUCT_REV */
#else0, /* PHY_DEVICE_PRODUCT_REV */
#endif0x0F, /* DEFAULT USID RANGE START */0x0F, /* DEFAULT USID RANGE END */0x0F, /* PHY_DEVICE_ASSIGNED_USID */0 /*Warning: Not specified*/, /* RFFE_GROUP_ID */FALSE, /* INIT */RFC_INVALID_PARAM, /* ASSOCIATED_DAC */}, /* END - Device: S5643 */
  • PHY_DEVICE_NAME:这里是GEN_DEVICE代表着这个PA是一个复合类型,包含了ASM的功能,该器件还需要在ASM中添加对应的驱动,那时该值应该为GEN_ASM。如果只是一个PA,则该值应当是GEN_PA

  • PHY_DEVICE_INSTANCE:物理器件的编号,每个设备需要有唯一编号,并且该编号从0开始计算,数目依次增加。1,代表了这是第二个设备。

  • PHY_DEVICE_COMM_BUS:表示物理设备接在那根RFFE总线上,这里0代表的是RFFE1。

  • PHY_DEVICE_MANUFACTURER_IDPHY_DEVICE_PRODUCT_IDPHY_DEVICE_PRODUCT_REV:这三个值与rfdevice_pa_s5643_52_data_ag.cpp中的保持一致,参考的是datasheet。

  • DEFAULT USID RANGE STARTDEFAULT USID RANGE ENDPHY_DEVICE_ASSIGNED_USID一般相同。通常先选择使用USID值,当然也可以使用其他值。文档中有说明,在同一个RFFE BUS上的器件的PHY_DEVICE_ASSIGNED_USID需要不同。

3、添加逻辑器件

  { /*Device: SKY77916*/ RFDEVICE_PA, /* DEVICE_MODULE_TYPE */ GEN_PA, /* DEVICE_MODULE_NAME */ 1, /* DEVICE_MODULE_TYPE_INSTANCE */ 2, /* ASSOCIATED_PHY_DEVICE_INSTANCE */ }, /* END - Device:  */
  • DEVICE_MODULE_TYPE: 应当是RFDEVICE_PA(如果是ASM则应为RFDEVICE_ASM)
  • DEVICE_MODULE_NAME: 对于第三方PA来说是GEN_PA(如果是ASM则应为GEN_ASM)
  • DEVICE_MODULE_TYPE_INSTANCE: 该类型设备的第几个器件,ASM和PA是独立的,这里的1表示PA的第二个器件。
  • ASSOCIATED_PHY_DEVICE_INSTANCE: 对应上面的物理器件PHY_DEVICE_INSTANCE。

3 PA、ASM文件的添加

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

文件最下方需要修改为该器件的相关参数,按照datasheet配置

boolean rfdevice_pa_s5643_52_data_ag::device_info_get( rfdevice_pa_info_type *pa_info )
{boolean ret_val = FALSE;if ( NULL == pa_info ){return FALSE;}else{pa_info->mfg_id = 0x02E9;pa_info->prd_id = 0x8A;pa_info->prd_rev = 0;pa_info->num_ports = RFDEVICE_PA_S5643_52_NUM_PORTS;pa_info->num_pa_ranges = 4;ret_val = TRUE;}return ret_val;
}

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

  • #include “rfdevice_pa_s5643_52_data_ag.h”

  • 以及

 else if ( mfg_id ==  0x02E9 && prd_id == 0x8A  && prd_rev == 0){pa_data = rfdevice_pa_s5643_52_data_ag::get_instance();}

4 各制式下的RX、TX配置

rfc_device_info_type rf_card_wtr2965_non_ca2_4320_sim_0_tx0_lte_b1_device_info =
{RFC_ENCODED_REVISION, RFC_TX_MODEM_CHAIN_0,   /* Modem Chain */0,   /* NV Container */0,   /* Antenna */5,  /* NUM_DEVICES_TO_CONFIGURE */    // ========>器件总数量{{RFDEVICE_TRANSCEIVER,WTR2965, /* NAME */0,   /* DEVICE_MODULE_TYPE_INSTANCE */0,   /* PHY_PATH_NUM */            {0 /* Warning: Not specified */,   /* INTF_REV */                  (int)WTR2965_LTEFDD_TX_BAND1_THMLB4,   /* PORT */     // =========> port口( RFDEVICE_PA_LUT_MAPPING_VALID | WTR2965_LP_LUT_TYPE << RFDEVICE_PA_STATE_0_BSHFT | WTR2965_LP_LUT_TYPE << RFDEVICE_PA_STATE_1_BSHFT | WTR2965_HP_LUT_TYPE << RFDEVICE_PA_STATE_2_BSHFT | WTR2965_HP_LUT_TYPE << RFDEVICE_PA_STATE_3_BSHFT  ),   /* RF_ASIC_BAND_AGC_LUT_MAPPING */FALSE,   /* TXAGC_LUT */WTR2965_FBRX_LOW_ATTN_MODE,   /* FBRX_ATTN_STATE */0,  /* Array Filler */},},{RFDEVICE_ASM,GEN_ASM /*sky77916_ASM_with_gsm_pa*/, /* NAME */0,  /* DEVICE_MODULE_TYPE_INSTANCE */0 /*Warning: Not specified*/,  /* PHY_PATH_NUM */ // =========> 和逻辑列表对应{0  /* Orig setting:  */,  /* INTF_REV */(0x1A5 << 22)/*mfg_id*/ | (0x96 << 14)/*prd_id*/ | (15)/*port_num(11)*/,  /* PORT_NUM */(0x02E9 << 22)/*mfg_id*/ | (0x29 << 14)/*prd_id*/ | (15)/*port_num*/,  /* PORT_NUM */// ===========>和器件参数、port口一致,port口根据pa或asm的文件中的数据匹配0,  /* Array Filler */0,  /* Array Filler */0,  /* Array Filler */},},{RFDEVICE_PA,GEN_PA /*sky77638_PA*/, /* NAME */0,  /* DEVICE_MODULE_TYPE_INSTANCE */  // =========> 和逻辑列表对应0 /*Warning: Not specified*/,  /* PHY_PATH_NUM */{0  /* Orig setting:  */,  /* INTF_REV */(0x1A5 << 22)/*mfg_id*/ | (0x1C << 14)/*prd_id*/ | (33)/*port_num 0*/,  /* PORT_NUM */(0x02E9 << 22)/*mfg_id*/ | (0x89 << 14)/*prd_id*/ | (0)/*port_num*/,  /* PORT_NUM */(0x02E9 << 22)/*mfg_id*/ | (0x8A << 14)/*prd_id*/ | (0)/*port_num*/,  /* PORT_NUM */// ===========>和器件参数、port口一致,port口根据pa或asm的文件中的数据匹配0,  /* Array Filler */0,  /* Array Filler */},},{RFDEVICE_ASM,GEN_ASM /*SKY77638_ASM*/, /* NAME */1,  /* DEVICE_MODULE_TYPE_INSTANCE */0 /*Warning: Not specified*/,  /* PHY_PATH_NUM */{0  /* Orig setting:  */,  /* INTF_REV */(0x1A5 << 22)/*mfg_id*/ | (0x1C << 14)/*prd_id*/ | (4),  /* PORT_NUM */(0x02E9 << 22)/*mfg_id*/ | (0x89 << 14)/*prd_id*/ | (4)/*port_num*/,  /* PORT_NUM */(0x02E9 << 22)/*mfg_id*/ | (0x8A << 14)/*prd_id*/ | (4)/*port_num*/,  /* PORT_NUM */0,  /* Array Filler */0,  /* Array Filler */},},{RFDEVICE_HDET,TRX_HDET,  /* NAME */0,  /* DEVICE_MODULE_TYPE_INSTANCE */0 /*Warning: Not specified*/,  /* PHY_PATH_NUM */{0  /* Orig setting:  */,  /* INTF_REV */0,  /* Array Filler */0,  /* Array Filler */0,  /* Array Filler */0,  /* Array Filler */0,  /* Array Filler */},},},
};

可以看到,上面有两个我们新增的器件和wtr2965

1、器件总数量

2、wtr2965的port口

3、器件的port口

5 GPIO开关控制

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

#elif defined(FEATURE_HW_ASKEY_TUNNER){ (int)RFC_WTR2965_NON_CA2_4320_SIM_0_RF_PATH_SEL_05,   { RFC_LOW, -0 }, {RFC_LOW, 0 }  },{ (int)RFC_WTR2965_NON_CA2_4320_SIM_0_RF_PATH_SEL_20,   { RFC_HIGH, -0 }, {RFC_LOW, 0 }  },
#else

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

{ (int)RFC_WTR2965_NON_CA2_4320_SIM_0_RF_PATH_SEL_05, { RFC_LOW, -0 }, {RFC_LOW, 0 } },分为三部分

  1. (int)RFC_WTR2965_NON_CA2_4320_SIM_0_RF_PATH_SEL_05是根据原理图或逻辑表来确定用哪个开关,如果没有则需要自己添加
  2. 第一个{ RFC_LOW, -0 }配高还是配低需要从逻辑表确定。
  3. 第二个{ RFC_LOW, 0 }默认为低就可,不用改。

参考博文

《高通平台,MSM8937/MSM8953 RF配置流程》https://blog.csdn.net/a5103330/article/details/78901375

《高通RFC适配RFFE-配置RF》
https://www.freesion.com/article/8475167793/

高通平台RF配置流程相关推荐

  1. 高通平台Bootloader启动流程【转】

    本文转载自:http://blog.csdn.net/fang_first/article/details/49615631 ====================基本知识============= ...

  2. 高通平台ADSP USB流程

    在高通平台上,ADSP(Audio Digital Signal Processor,音频数字信号处理器)可以通过 USB 接口与主机进行数据传输,以下是大致的 ADSP USB 流程: 主机发起 U ...

  3. 高通平台android 环境配置编译及开发经验总结

    完全转自:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通 ...

  4. 高通平台android 环境配置编译及开发经验总结【转】

    1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通开发板上烧录文件系统 建立高通平台开发环境 高通平台,android和 modem 编译流程分析 高通平台 7620 启动流 ...

  5. 高通平台android开发总结 MSM平台上的AMSS

    http://blog.csdn.net/mirkerson/article/details/7691029 MSM平台上的AMSS REX启动分析--基于Qualcomm平台 1.高通平台andro ...

  6. 高通平台android开发总结

    http://www.cnblogs.com/yuzaipiaofei/archive/2012/07/24/4124179.html 1.高通平台android开发总结 1.1 搭建高通平台环境开发 ...

  7. 高通平台android开发总结 .

    http://blog.csdn.net/mirkerson/article/details/7691029 http://blog.csdn.net/mirkerson/article/detail ...

  8. 高通平台msm8917蓝牙mac地址流程

    高通平台msm8917蓝牙mac地址流程 Where is the BD address? BD address can be saved in following places: modem NV ...

  9. 高通平台sensor学习

    刚入行驱动时最先接触调试的外设模块便是sensor,一直都是零零散散的记录,这次终于下定决心对自己所学做一个系统的总结. sensor作为一款常用的外设,虽不起眼但是很多功能确实离不开它.比如我们手机 ...

最新文章

  1. echarts在360中以及IE8浏览器不兼容:解决方案
  2. 《Android传感器开发与智能设备案例实战》——第2章,第2.4节安装ADT
  3. python和c语言的对比_类C语言与Python负数除法求值间的差异
  4. oracle 提示i386,新手请教:RAC安装时检测i386软件包未安装,这个怎么处理?
  5. JS中函数和变量声明的提升
  6. 二维粗糙海面matlab,三维随机粗糙海面的Monte-Carlo仿真
  7. arguments的理解
  8. HTML做一个简单漂亮的宠物网页(纯html代码)
  9. 使用科来网络分析系统
  10. Web3D软件WebMax正式版发布
  11. 差分信号,差分对和耦合(一)——基本概念介绍
  12. 几个可以整蛊你朋友的 Python 程序
  13. ESP定律脱压缩壳aspack
  14. android跑马灯效果不起作用,Android实现跑马灯效果的方法
  15. 蛮力法的相关问题总结
  16. bch纠错码 码长8_密码学BCH纠错编码算法
  17. vim:修改vim录制的宏
  18. 超声波模块测距 Arduino代码
  19. 梯度下降算法_梯度下降算法的工作原理
  20. 95文件及文件夹操作实践

热门文章

  1. matlab与数学实验心得体会,数学matlab实验心得体会
  2. noip2012 文化之旅 (深搜,最优性剪枝)
  3. Orbit Downloader 小巧无广告的下载工具,超赞的在线视频下载能力,比迅雷清爽多了!
  4. 微信小程npm相关问题
  5. 打开ps提示计算机中丢失,ps打开出现dll文件丢失怎么解决
  6. Chrome在Win下的跨域解决方案
  7. Pytorch入门实战 | 第P2周:彩色图片识别
  8. 关于floor函数与ceil函数与round函数
  9. Android-0. Android studio在导航栏增加自己的功能图标(如小扳手)
  10. threejs 形状几何体_使用Playcanvas.js实现的3D几何体/形状