1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 高通msm8953平台射频调试

高通msm8953平台射频调试

时间:2019-07-07 09:58:50

相关推荐

高通msm8953平台射频调试

高通msm8953平台射频调试

最近需要调试一个RF, 初次接触漏洞百出,艰难调试完成,记录下自己踩的坑.

一.概述

射频调试需要具备一些基础知识这样能够更好的帮助理解.

首先仔细观察原理图,自己分清射频器件,包括PA(功率放大器),ASM(开关),TRANSCEIVER,mipi器件等.

一般发射通路是trancevier->PA->ASM,接受通路相反.

另外对于一些PA ASM器件既两者都是可以的.只是说主功能是这个.

另外天线的主集,分集.主机负责发送和接收,而分集只负责接收信号.

上面列举的只是一些非常基础的知识,能够帮助完成简单的射频模块的调试

二.调试步骤

对于新的RF-card调试我是分成三步去完成.(1)拷贝一个相近的RFcard重命名,然后将ASM,PA驱动放入代码,在编译文件中添加次RFCARD的编译控制.(2)配置射频通路.(3)tunner状态优化.

2.1 新增RF-card

(1)编译控制:

MPSS.TA.3.1/modem_proc/build/ms/dynrec.lst(可以不加)

MPSS.TA.3.1/modem_proc/rfc_tabasco/api/rfc_hwid.h

RF_HW_WTR2965_NON_CA_SAW_4320_XX = (uint8)XX, MPSS.TA.3.1/modem_proc/rfc_tabasco/build/modem_rfc.scons

env.PublishProtectedApi:RF_HW_WTR2965_NON_CA_SAW_4320_XX = (uint8)XX,

(2)新增RF-card

MPSS.TA.3.1/modem_proc/rfc_tabasco/rf_card/rfc_wtr2965_non_ca_saw_4320_XX

(3)重命名

替换RFcard的名字.后期会写个脚本来完成

注意大小写!!!

(4)增加ASM和PA

ASM:

MPSS.TA.3.1/modem_proc/rfdevice_asm/src/rfdevice_asm_factory_ag.cpp

+#include “rfdevice_asm_rr88643_21_data_ag.h”

rfdevice_asm_data* rfdevice_asm_data_create(){

else if ( mfg_id == 0x0134 && prd_id == 0x78 && prd_rev == 0){asm_data = rfdevice_asm_rf1660_data_ag::get_instance();}

其中需要注意mfg_id和prd_id有没有相同的.mfg_id和prd_id查看datasheet.

(5)新增port口

#define RFDEVICE_ASM_RR88916_21_NUM_PORTS 46

rfdevice_asm_rr88916_21_asm_on_data

rfdevice_asm_rr88916_21_asm_off_data

rfdevice_asm_rr88916_21_trigger_off_data

PA:

PA的方法参看ASM.

完成这些后建议保存一份在本地.后续调试的时候都在拷贝一份在本地修改后在拷贝到代码中编译.完成以上步骤后可以编译,查看能否编译通过,解决编译报错.

2.2.配置射频通路

配置射频通路是移植的难点.在开始配置之前需要找提供一份gpio对照表还有port口对应.最快速的方法是将这个表打印出来然后对着datasheet在对应band写好port.port口配置需要注意的有:新增port;PA做asm需要先使能,然后记得关闭;还有PA:B38/40/41经常需要做切换需要注意,ASM内部的开关切换等.

(1)RFCard子目录

build cdma common gnss gsm lte tdscdma wcdma

在build目录中

env.AddRfCard(‘RF_HW_WTR2965_NON_CA_SAW_4320_XX’, ‘rfc_wtr2965_non_ca_saw_4320_XX_cmn_ag.h’, ‘rfc_wtr2965_non_ca_saw_4320_XX_cmn_ag’)

可以用来删除RFcard,通常采用直接删除.

(2)common

我们需要在里面配置phy_devices_list;logical_devices_list;sig_info;logical_device_properties等几个大快.

2.1:phy_devices_list:

{ /*Device: WTR2965/

WTR2965, /PHY_DEVICE_NAME/

0, /PHY_DEVICE_INSTANCES/ 实际器件递增

RFC_NO_ALTERNATE_PART,

RFDEVICE_COMM_PROTO_RFFE, RFDEVICE_COMM_PROTO_VERSION_DEFAULT,

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

0x217, /PHY_DEVICE_MANUFACTURER_ID/ MID

0xCA, /PHY_DEVICE_PRODUCT_ID/ PID

0, /PHY_DEVICE_PRODUCT_REV/

0x01, /DEFAULT USID RANGE START/ UID

0x01, /DEFAULT USID RANGE END/

0x01, /PHY_DEVICE_ASSIGNED_USID/

0 /Warning: Not specified/, /RFFE_GROUP_ID/

FALSE, /INIT/

RFC_TX_MODEM_CHAIN_0, /ASSOCIATED_DAC/

}, /END - Device: WTR2965 */

2.2:logical_devices_list[]:

逻辑设备是按照类来分的,asm属于asm,pa属于pa.

{ /Device: WTR2965/

RFDEVICE_TRANSCEIVER, /DEVICE_MODULE_TYPE/

WTR2965, /DEVICE_MODULE_NAME/

0, /DEVICE_MODULE_TYPE/ 同一类的序号,同一类都是从0开始

0, /* ASSOCIATED_PHY_DEVICE_INSTANCE/ 实际物理器件同一个器件相同

}, /END - Device: WTR2965/

2.3:rfc_signal_info_type

这个数组对应这需要用到的gpio口的生命,和target/msm8953/src/rfc_msm_signal_info_ag.c属于映射关系

Target:

{RFC_ANT_SEL, 100, 0, RFC_GRFC, 1, DAL_GPIO_OUTPUT , “grfc[0]”},

/Signal: RFC_MSM_RF_PATH_SEL_01, MSM Pin Name: GPIO_100*/

例如在这里我们定义了GPIO100 是RFC_ANT_SEL类型,功能1,输出类型

Common:

{RFC_MSM_RF_PATH_SEL_01, RFC_LOW, DAL_GPIO_PULL_DOWN, DAL_GPIO_2MA, (DALGpioIdType)NULL }, /*RFC_WTR2965_NON_CA_SAW_4320_62_RF_PATH_SEL_01/

2.4:logical_device_properties

这个主要是对应band的初始化

需要在对应的/bands_supported/ /preferred_bands_supported/中加上需要支持的band.没有载波聚合的一般需要添加三个分笔试device 0 PRX device 1 DRX 和device 2 TX

在配置中主要分成三部分/Bit mask element 0/,/Bit mask element 1/,/Bit mask element 2 */

0:GSM和CDMA

1:WCDMA和lte的1~6

2:所有剩下的.

2.5:common/inc

这个文件可以简单理解成我们的头文件,我们需要将src中添加的GPIO映射在这个文件中也加上.注意顺序,顺序不对会导致拉不起来的情况

(3)lte

射频通路配置没有载波聚合的话分为三部分.PRX,DRX,TX. PRX:主集接受部分.一般有两个器件TRANSCEIVER和ASM; DRX:分集的接受TRANSCEIVER和ASM; TX:发射,TRANSCEIVER,ASM,PA和HDET(功率检测)

PRX:

RFC_ENCODED_REVISION,

RFC_RX_MODEM_CHAIN_0, /* Modem Chain/

0, /NV Container/

0, /Antenna/

2, /NUM_DEVICES_TO_CONFIGURE/ 总的器件数,0表示没有

{

{

RFDEVICE_TRANSCEIVER,

WTR2965, /NAME/

0, /DEVICE_MODULE_TYPE_INSTANCE/ 需要和logical_list中的序号一直

0, /PHY_PATH_NUM/

{

0 /Warning: Not specified/, /INTF_REV/

(int)WTR2965_LTEFDD_PRXLGY1_BAND20_PLB2, /PORT/ 注意配置的RF是不是走的这个port

( RFDEVICE_RX_GAIN_STATE_MAPPING_INVALID ), /RF_ASIC_BAND_AGC_LUT_MAPPING/

FALSE, /TXAGC_LUT/

WTR2965_FBRX_ATTN_DEFAULT, /FBRX_ATTN_STATE/

0, /Array Filler/

},

},

{

RFDEVICE_ASM,

GEN_ASM, /NAME/

1, /DEVICE_MODULE_TYPE_INSTANCE/

0 /Warning: Not specified/, /PHY_PATH_NUM/

{

0 /Orig setting:/, /INTF_REV/

(0x3F3 << 22)/mfg_id/ | (0x96 << 14)/prd_id/ | (1)/port_num/, /PORT_NUM/ port_num是根据datashett算出的

0, /Array Filler/

0, /Array Filler/

0, /Array Filler/

0, /Array Filler/

},

},

},

DRX:

RFC_ENCODED_REVISION,

RFC_RX_MODEM_CHAIN_1, /Modem Chain/

1, /NV Container/

1, /Antenna/

2, /NUM_DEVICES_TO_CONFIGURE/

{

{

RFDEVICE_TRANSCEIVER,

WTR2965, /NAME/

0, /DEVICE_MODULE_TYPE_INSTANCE/

1, /PHY_PATH_NUM/

{

0 /Warning: Not specified/, /INTF_REV/

(int)WTR2965_LTEFDD_DRXLGY1_BAND25_DMB1, /PORT/

( RFDEVICE_RX_GAIN_STATE_MAPPING_INVALID ), /RF_ASIC_BAND_AGC_LUT_MAPPING/

FALSE, /TXAGC_LUT/

WTR2965_FBRX_ATTN_DEFAULT, /FBRX_ATTN_STATE/

0, /Array Filler/

},

},

{

RFDEVICE_ASM,

GEN_ASM, /NAME/

2, /DEVICE_MODULE_TYPE_INSTANCE/

0 /Warning: Not specified/, /PHY_PATH_NUM/

{

0 /Orig setting:/, /INTF_REV/

(0x134 << 22)/mfg_id/ | (0x78 << 14)/prd_id/ | (9)/port_num/, /PORT_NUM/

0, /Array Filler/

0, /Array Filler/

0, /Array Filler/

0, /Array Filler */

},

},

TX:

RFC_ENCODED_REVISION,

RFC_TX_MODEM_CHAIN_0, /* Modem Chain/

0, /NV Container/

0, /Antenna/

4, /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_BAND25_THMLB4, /PORT/

( RFDEVICE_PA_LUT_MAPPING_VALID | WTR2965_LP_LUT_TYPE << RFDEVICE_PA_STATE_0_BSHFT | WTR2965_HP_LUT_TYPE << RFDEVICE_PA_STATE_1_BSHFT | WTR2965_HP_LUT_TYPE << RFDEVICE_PA_STATE_2_BSHFT | WTR2965_HP_LUT_TYPE << RFDEVICE_PA_STATE_3_BSHFT ), /RF_ASIC_BAND_AGC_LUT_MAPPING/

FALSE, /TXAGC_LUT/

WTR2965_FBRX_LOW_ATTN_MODE, /FBRX_ATTN_STATE/

0, /Array Filler/

},

},

{

PA

},

{

ASM

},

{

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 */

},

},

rfc_wtr2965_non_ca_saw_4320_62_lte_config_ag.cpp

需要配置对应band的配置.

(6)GSM/WCDMA/CDMA

这三个制式一般都没有分集,所以只需要将分集的配置换个主机设置成一样即可,其余配置都一样.

完成这些配置后就可以编译下载跑综测校准,修改直到没有问题.

3.tunner配置

Tunner状态配置属于射频的收尾,优化接受. 所以我们只需要配置PRX和DRX, 对于TX我们不需要关注.

需要在调通所有band后发给天线厂,天线厂调试完成会给我们一个状态表,根据此表配置即可.

Tunner首先需要从原理图找到对应的GPIO口,然后在target/msm8953/src/rfc_msm_signal_info_ag.c找到对应的gpio.在这个文件中会存在多个定义,可以将不需要的INVALID防止出现无法拉起的情况.

{ RFC_ANT_SEL , RFC_GPIO_INVALID, 0 , RFC_GRFC , 1, DAL_GPIO_OUTPUT ,“grfc[0]”}, /* Signal: RFC_MSM_RF_PATH_SEL_01, MSM Pin Name: GPIO_100*/

然后在lte/gsm/cdma/中配置状态

rfc_sig_info_type rf_card_wtr2965_non_ca_saw_4320_XX_rx_on_rfm_device_1_lte_b19_sig_cfg = 分集的

{

RFC_ENCODED_REVISION,

{

{ (int)RFC_WTR2965_NON_CA_SAW_4320_XX_RF_PATH_SEL_09, { RFC_LOW, 0/Warning: Not specified/ }, {RFC_CONFIG_ONLY, 0/Warning: Not specified/ } },

{ (int)RFC_WTR2965_NON_CA_SAW_4320_XX_RF_PATH_SEL_01, { RFC_HIGH, 0/Warning: Not specified/ }, {RFC_CONFIG_ONLY, 0/Warning: Not specified/ } },

{ (int)RFC_SIG_LIST_END, { RFC_LOW, 0 }, {RFC_LOW, 0 } }

},

};

4.总结

1.注意大小写!!!,新增RFcard时候重名名忘记大小写,埋下巨坑,后期才发现结果浪费大量时间.考虑写个脚本完成这一步.

2.在配置通路的时候,lte的分集asm器件没有和logical_deviced对应起来.

3.GPIO拉不起来,在target/里面将不需要的重定义全部invaild掉.

4.注意asm内部开关切换.

5.所谓载波聚合通缩的将就是将多个整合在一起,增加带宽,提高下载速率,所以带CA的需要将主机和分集的在配置一遍,保证有两路可以同时走通.

6.由于本人也是初次接触,所以理解不够深入,此文档仅供参考.后期会深入整理.对于缩写不正确的地方欢迎留言批评.

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