高通平台RF配置流程
高通平台RF配置流程
**注:**本文参考项目路径和代码为SIM7600 LE20分支
1 准备工作
需要的资料:
- 各个器件的datasheet
- 原理图
- 逻辑表(内容包含支持哪些制式、band,各个band用到哪些器件,需要哪些GPIO,GPIO配高还是配低等)
上诉由RF同事提供
RF驱动modem的配置工作有:
- 物理、逻辑列表的配置
- PA、ASM文件的添加
- 各制式下的TX、RX配置
- 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_ID
、PHY_DEVICE_PRODUCT_ID
、PHY_DEVICE_PRODUCT_REV:
这三个值与rfdevice_pa_s5643_52_data_ag.cpp
中的保持一致,参考的是datasheet。DEFAULT USID RANGE START
、DEFAULT USID RANGE END
和PHY_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 } },
分为三部分
(int)RFC_WTR2965_NON_CA2_4320_SIM_0_RF_PATH_SEL_05
是根据原理图或逻辑表来确定用哪个开关,如果没有则需要自己添加- 第一个
{ RFC_LOW, -0 }
配高还是配低需要从逻辑表确定。 - 第二个
{ RFC_LOW, 0 }
默认为低就可,不用改。
参考博文
《高通平台,MSM8937/MSM8953 RF配置流程》https://blog.csdn.net/a5103330/article/details/78901375
《高通RFC适配RFFE-配置RF》
https://www.freesion.com/article/8475167793/
高通平台RF配置流程相关推荐
- 高通平台Bootloader启动流程【转】
本文转载自:http://blog.csdn.net/fang_first/article/details/49615631 ====================基本知识============= ...
- 高通平台ADSP USB流程
在高通平台上,ADSP(Audio Digital Signal Processor,音频数字信号处理器)可以通过 USB 接口与主机进行数据传输,以下是大致的 ADSP USB 流程: 主机发起 U ...
- 高通平台android 环境配置编译及开发经验总结
完全转自:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通 ...
- 高通平台android 环境配置编译及开发经验总结【转】
1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通开发板上烧录文件系统 建立高通平台开发环境 高通平台,android和 modem 编译流程分析 高通平台 7620 启动流 ...
- 高通平台android开发总结 MSM平台上的AMSS
http://blog.csdn.net/mirkerson/article/details/7691029 MSM平台上的AMSS REX启动分析--基于Qualcomm平台 1.高通平台andro ...
- 高通平台android开发总结
http://www.cnblogs.com/yuzaipiaofei/archive/2012/07/24/4124179.html 1.高通平台android开发总结 1.1 搭建高通平台环境开发 ...
- 高通平台android开发总结 .
http://blog.csdn.net/mirkerson/article/details/7691029 http://blog.csdn.net/mirkerson/article/detail ...
- 高通平台msm8917蓝牙mac地址流程
高通平台msm8917蓝牙mac地址流程 Where is the BD address? BD address can be saved in following places: modem NV ...
- 高通平台sensor学习
刚入行驱动时最先接触调试的外设模块便是sensor,一直都是零零散散的记录,这次终于下定决心对自己所学做一个系统的总结. sensor作为一款常用的外设,虽不起眼但是很多功能确实离不开它.比如我们手机 ...
最新文章
- echarts在360中以及IE8浏览器不兼容:解决方案
- 《Android传感器开发与智能设备案例实战》——第2章,第2.4节安装ADT
- python和c语言的对比_类C语言与Python负数除法求值间的差异
- oracle 提示i386,新手请教:RAC安装时检测i386软件包未安装,这个怎么处理?
- JS中函数和变量声明的提升
- 二维粗糙海面matlab,三维随机粗糙海面的Monte-Carlo仿真
- arguments的理解
- HTML做一个简单漂亮的宠物网页(纯html代码)
- 使用科来网络分析系统
- Web3D软件WebMax正式版发布
- 差分信号,差分对和耦合(一)——基本概念介绍
- 几个可以整蛊你朋友的 Python 程序
- ESP定律脱压缩壳aspack
- android跑马灯效果不起作用,Android实现跑马灯效果的方法
- 蛮力法的相关问题总结
- bch纠错码 码长8_密码学BCH纠错编码算法
- vim:修改vim录制的宏
- 超声波模块测距 Arduino代码
- 梯度下降算法_梯度下降算法的工作原理
- 95文件及文件夹操作实践
热门文章
- matlab与数学实验心得体会,数学matlab实验心得体会
- noip2012 文化之旅 (深搜,最优性剪枝)
- Orbit Downloader 小巧无广告的下载工具,超赞的在线视频下载能力,比迅雷清爽多了!
- 微信小程npm相关问题
- 打开ps提示计算机中丢失,ps打开出现dll文件丢失怎么解决
- Chrome在Win下的跨域解决方案
- Pytorch入门实战 | 第P2周:彩色图片识别
- 关于floor函数与ceil函数与round函数
- Android-0. Android studio在导航栏增加自己的功能图标(如小扳手)
- threejs 形状几何体_使用Playcanvas.js实现的3D几何体/形状