Generic RF Controls (GRFC)
Customization
Application Note
80-NE606-4 A
August 4, 2014
1.Introduction
略。
2.Overview of GRFC
本章介绍modem的RF card(RFC)和GRFC功能。
2.1 RFC/GRFC
- RFC
- 控制射频前端(RFFE)组件(例如天线开关、功率放大器(PA)和低噪声放大器(LNA))以及管理依赖于RFC的数据;
- GRFC
- 连接到内部或外部组件的专用信号;在特定时间切换它们的状态以控制使用不同的功能,例如启动PA;
- 如果使用,需要在软件中定义为GRFC。
Modem | Number of GRFCs |
MSM8x74/MDM9x25 | 29 |
MSM8974AB | 28 |
MSM8926 | 24 |
MSM8916 | 22 |
MSM8936/MSM8939 | 22 |
MDM9x35 | 16 |
MSM8994 | 16 |
3.自定义GRFC
3.1 更改GRFC代码的前提条件
QTI(高通公司)建议所有客户对每个项目的射频进行硬件审查。在此过程中,审查所有GPIO分配,以确保分配的GPIO用于预期功能。在对GRFC进行必要的代码更改之前,需要整理一份GRFC控制逻辑表。
3.2 自定义GRFC检查表
图3.1(为每个波段自定义GRFC的流程图)所示的流程图说明了,怎么在一个特定的频段或通道上,增加/删除GRFC信号。以B1 rx0为例。
对于自定义GRFC:
- 列出所有频段的GPIO使用情况和功能。
- 添加用于每个频段的GRFC信号。
- 比较<rf_card>_sig_info和msm_signal_info,检查所需的GRFC信号是否在<rf_card>_sig_info中可用。
有关怎么样将GRFC信号映射到GPIO的信息,请参阅第4,5,6章。
如果这些信号在<rf_card>_sig_info中无效,则添加它们;
了解怎么在<rf_card>_sig_info中添加GRFC信号,请参阅第6章第4小节。 - 在band_sig_cfg中,在<rf_card>_sig_info中添加有效的GRFC信号。
有关怎么样在band_sig_cfg中添加GRFC信号,请参阅第7章; - 可选项 - 如果需要,添加与开关相关的GRFC信号;
有关GRFC控制的ASM的示例,请参阅第8章。 - 可选项 - 如果需要,在 tx0/tx2 添加与PA相关的GRFC信号。
有关GRFC控制PA的示例,请参阅第9章。 - 添加完需要的GRFC信号后,删去所有不需要的信号;
关于怎么在每个band_sig_cfg中删去GRFC,请参阅第10章第1节。
- 比较<rf_card>_sig_info和msm_signal_info,检查所需的GRFC信号是否在<rf_card>_sig_info中可用。
- 对所有需要支持的频段循环上述的操作;
- 检查<rf_card>_sig_info中是否有重复的GRFC信号,并删除重复的信号;
关于怎么去检查是否有重复的GRFC信号,请参阅第10章第2节。
在RFC中自定义GRFC的检查表
Item | File to change | Reference |
Change msm_signal | rfc_msm_signal_info_ag.h rfc_msm_signal_info_ag.c | Chapter 5 |
Change <rf_card>_sig_info | rfc_<rf_card>_cmn_ag.cpp rfc_<rf_card>_cmn_ag.h | Chapter 6 |
Set GRFC in band | rfc_<rf_card>_<technology>_config_data_ag.c | Chapter 7 |
4.设置用于射频的GRFC信号
本章以MSM8916为例,介绍信号信息。
4.1 MSM_signal_info
射频使用的GRFC信号必须存在于 rfc_msm_signal_info 和 <rf_card>_sig_info 中。
要正确设置GRFC,必须将 <rf_card>_sig_info 映射到 rfc_msm_signal_info,以便可以控制相应的GPIO。
rfc_msm_signal_info 是一组msm信号;每个信号都是 <rf_card>_sig_info 中使用的 msm_signal。
以下是MSM信号的示例:
本例中的此信号命名为RFC_MSM_RF_PATH_SEL_00,它映射到GPIO 75和GRFC编号1。通过RFC_MSM_RF_PATH_SEL_00 信号名在 MSM 信号的枚举和 RFC 信号的枚举之间创建映射。
MSM信号的解释在第5.2节中描述。
4.2 msm_signal_info和<rf_card>_sig_info之间的关系
msm_signal_info 与 <rf_card>_sig_info 之间的关系是通过将 msm_signal_info 设置在<rf_card>_sig_info 中来创建的。它们的关系如图4-1(公共信号与MSM信号的关系图)所示。
并非所有GPIO信号都在RF操作中配置。只有rfc_<rf_card>_sig_info列表中列出的信号才在RF初始化中配置。
4.3 common文件中的 <RF_card>_sig_info
<rf_card>_sig_info位于每个 rf_card 的公共文件夹内,例如,\modem_proc\rfc_dimepm\rf_card\rfc_wtr1605_chile_sxdsda_v2\common\src\rfc_wtr1605_chile_sxdsda_v2_cmn_ag.cpp
<rf_card>_sig_info是包含该<rf_card>使用到的所有RFC信号信息的数组。此数组的每个元素都是头文件中定义的枚举数组。在每个成员中,只能使用定义的枚举类型;否则,会出现编译错误。
文件: \modem_proc\rfc_dimepm\rf_card\rfc_wtr1605_chile_sxdsda_v2\common\inc\
rfc_wtr1605_chile_sxdsda_v2_cmn_ag.h
图 4-3 wtr1605_chile_sxdsda_sig_info的枚举定义
添加或删除修改头文件中枚举类型定义所需的任何信号,有关示例,请参阅第6章和第10章。
图4-4所示的 <rf_card>_sig_info 包含有关GRFC信号的重要信息。每个信号都是一个具有五个成员的结构体,但只需要对前两个成员进行更改。
表4-1 信号定义,列出了对GRFC信号很重要的部分信号定义。
结构体成员的下标 | 0 | 1 |
介绍 | MSM信号的枚举类型 | 默认状态 |
例子 | RF_PATH_SEL_00 | 默认状态低 |
RF初始化后,每个GRFC信号会被设置成默认状态。
当信号进入特定频段时,将每个频段配置的信号设置为用户定义的逻辑状态,以WCDMA B1 Rx0为例。
文件: \modem_proc\rfc_dimepm\rf_card\rfc_wtr1605_chile_sxdsda_v2\wcdma\src\
rfc_wtr1605_chile_sxdsda_v2_wcdma_config_data_ag.c
当 UE 进入WCDMA B1时,它打开Rx并将上面列出的信号设置为RFC_HIGH状态。如图4-5所示。
5. 解释msm_sig_info
5.1 恢复GPIO和GRFC之间的映射
GPIO和GRFC的映射位于modem_proc/rfc_dimepm/target/msm8916/src/rfc_msm_signal_info.ag.c.
注意:不同的modem系列具有不同的RFC文件夹名称。
Modem | RFC文件夹名 |
MSM8974/MSM8974AB/MDM9x25/MSM8926 | rfc_dime |
MSM8916/MSM8936/MSM8939 | rfc_dimepm |
MDM9x35/MSM8994 | rfc_bolt |
下图是RFC_MSM_SIGNAL_INFO的示例代码。
5.2 rfc_msm_sig_info_type结构体
rfc_msm_sig_info_type 中列出的每个信号都包含如下所示的参数。
5.2.1 GRFC信号类型
GRFC信号根据其用途进行定义,例如,PA_ON信号用于控制PA设置为ON的GPIO。
表5-2 列出了GRFC信号类型和它们对应的功能。
GRFC信号类型 | 功能 |
RFC_ANT_SEL | 控制天线开关 |
RFC_PA_RANGE0 | 控制PA_RANGE的bit0 |
RFC_PA_RANGE1 | 控制PA_RANGE的bit1 |
RFC_PA_ON | 控制打开PA |
RFC_TX_ON_AG | 设置启动Tx(仅WTR1605) |
RFC_RX_ON_AG | 设置启动Rx(仅WTR1605) |
注意:仅讨论了与GRFC信号相关的GRFC信号类型。RFC_RFIC0_SSBI1,RFC_RFFE1_CLK等不被视为GRFC信号。
注意:当对不同的信号类型使用不同的信号时序时,需要使用正确的GRFC信号类型来控制相应的前端设备。
下图为GRFC信号类型的示例。
PA_ON
PA_ON用来打开PA。如果特定频段使用GRFC PA,则TX0_SIG_INFO中应至少存在一个PA_ON信号。将此信号设置为RFC_CONFIG_ONLY可让固件在RF操作期间控制此GRFC。
PA_R
PA_R用于控制GRFC PA的PA范围(不是很懂)。将此信号设置为RFC_CONFIG_ONLY将允许固件在RF操作期间控制此GRFC。
PATH_SEL
PATH_SEL用于控制射频前端路径上的开关。应将其设置为所需的逻辑(High或Low)。
RF_ON
RF_ON用来开启 WTR1605 Tx。
5.2.2 GPIO/GRFC 编号
当modem设置为RF操作时,GPIO和GRFC编号用于通知modem软件控制哪个GPIO。
GPIO和GRFC是一一对应的关系。客户不应该改变GPIO和GRFC的映射关系。
附录12(如下图) 中介绍了GPIO-GRFC映射。
5.2.3 输出类型
输出类型定义MSM_SIGNAL是否为输出类型。对于所有GRFC信号,应设置为RFC_GRFC。
5.2.4 功能选择
功能选择用于允许某些GPIO支持不同的输出类型信号(RFC_RFIC0_SSBI1 或 RFC_PA_ON)。
对于GRFC信号,功能选择通常设为1。
与MSM8916相关的某些GRFC信号,请参见[Q2]。
注意:第5.2.1节中列出的PA_ON、PA_RANGE、ANT_SEL等信号被视为GRFC功能,因此信号应在功能选择字段中设置为GRFC。
任何定义为GRFC的GPIO都可用于PA_ON/PA_RANGE/ANT_SEL。
有一组GPIO引脚专用于GRFC功能。如果可能,请将这些GPIO用作GRFC。
即使可行,也不建议将RFFE3_CLK(74)定义为GRFC。
5.3 特殊情况 - 无效信号
对于特定调制解调器,可能无法启用某些GRFC信号。默认情况下,在MSM_SIGNAL_INFO表中使用占位符,例如,在MSM8916中,未启用RFC_MSM_PATH_SEL_04。所有字段都设置为无效。
6. 检查<rf_card>_sig_cfg中是否存在GRFC信号
基于RFC如何使用GRFC信号(参见第4章)以及如何解释MSM_SIGNAL_INFO,本章介绍如何检查<rf_card>_sig_cfg中是否存在所需的GRFC信号。
6.1 决定使用哪个MSM信号
GPIO 75被用作控制ASM路径选择的示例。根据GRFC信号的功能,应选择MSM_SIGNAL_INFO表中的特定MSM信号。
MSM_SIGNAL必须在以下参数中有正确的设置:
- 信号类型,例如,ASM通道选择功能应该使用 ANT_SET;怎么选择信号类型,请参阅第5章第3小节
- GPIO编号
- GRFC编号
- 功能选择;怎么选择功能,请参阅[Q2]。
MSM信号表和枚举定义如下所示。在这种情况下,应在<RF_CARD>_SIG_CFG中选择使用PATH_SEL_00。该MSM信号的枚举名称为RFC_MSM_RF_PATH_SEL_00。枚举类型名称在<rf_card>_sig_cfg中使用。
6.2 在MSM信号信息中添加正确的信号类型
如果期望的MSM信号已经在表中,那么直接在<rf_card>_sig_cfg中使用就可以。另外,也要在msm_signal_info中添加正确信号类型的MSM_signal。
假设用GPIO 75做PA_ON信号,而该信号未在msm_signal_info表中定义,则必须在msm_signal_info表的末尾添加一个条目,才能将GPIO 75启用为PA_ON。在RFC_MSM_SIGNAL_INFO_TYPE末尾添加新的枚举,需要确保这个枚举名称是唯一的,并且与现有的msm_signal没有冲突。
注意:RFC_MSM8916_SIGNAL_INFO是RFC_MSM_SIGNAL_INFO_TYPE类型。因此,rfc_msm_signal_info中的顺序应与上面定义的枚举类型定义相同(即RFC_MSM_PA_ON_20在枚举中的位置为1,对应的信号在rfc_msm_signal_info中的下标也要为1)。
在RFC_MSM8916_SIGNAL_INFO末尾添加一个条目。然后启用GPIO 75作为PA_ON信号和RFC_MSM_RF_PA_ON_20。
6.3 检查<rf_card>_sig_cfg中是否存在某个MSM信号及该信号是否映射到RFC信号
根据6.1节和6.2节中的信息获得所需的MSM信号枚举名称。
下一步是检查<rf_card>_sig_cfg中是否存在该MSM信号,并将其映射到可以使用的RFC信号上。
查看下面显示的<rf_card>_sig_info,查看在6.1和6.2节中找到的MSM信号枚举是否映射到任何RFC信号。
在本例中,GPIO 75 被映射到了RFC_WTR1605_CHILE_SXDSDA_V2_RF_PATH_SEL_00上,可以在RFC代码中直接使用。
如果这个MSM信号枚举没有映射到任何RFC信号上,请查看6.4节,怎么添加一个新的映射到指定MSM信号枚举上的RFC信号。
6.4 将MSM信号添加到CMN文件的<rf_card>_sig_info
假设将GPIO 75用作PA_ON(有关更多信息,请参见第6.2节),则将其添加到 rfc_msm_signal_info 表中,如下所示。
这个GRFC的枚举类型是 RFC_MSM_PA_ON_20。根据第6.3节,它不存在于<rf_card>_sig_info中。因此,必须在 <rf_card>sig_info 中添加它才能在RFC中使用它。
1. 添加允许在RFC代码中使用的新枚举类型的RFC信号。
2.将 RFC_WTR1605_CHILE_SXDSDA_V2_PA_ON_20 映射到 RFC_MSM_RF_PA_ON_20。
第一个参数是MSM信号名字,RFC_MSM_PA_ON_20(GPIO 75)。
简而言之,GPIO 75的初始电平为低。未配置为任何RF模式时,GPIO被设为RFC_LOW。
注意:<rf_card>_sig_info不能有重复的GRFC信号。否则,可能会产生关于GRFC控制的冲突。例如,GPIO 75 被设置为PA_ON_20,那么它就不可以被当成PATH_SEL_00。如果GPIO 75 同时被配置为两种信号状态,那么就会导致GPIO控制出现冲突。因此,PATH_SEL_00就必须从<rf_card>_sig_cfg中删除。如何在<rf_card>_sig_cfg中删除RFC信号,请参阅第10章。
7.在RFC中使用GRFC
7.1 添加GRFC信号到 sig_cfg 功能文件
最后一步是将GRFC信号添加到 sig_cfg 功能文件中。本例中,使用GPIO 75 作为 B1 和 B4 之间的路径选择。从表8-1的控制逻辑表中知道,使用B1 rx0时GPIO 75设置为高。
如图所示,将PATH_SELL_00设置为RFC_HIGH。
TDD 的功能文件中,信号配置可能还包括配置时序的时序参数。
GSM要求GRFC信号在sig_cfg中具有定时信息。
每个信号都有一个开始的 time-spot/logic 和一个结束的 time-spot/log,比如,PATH_SEL_15就被设置成了开始时 RFC_HIGH,t = -10,结束时为RFC_LOW,t = 0。
注意:建议除非必要,否则不要更改QTI设置的定时信息。
8. GRFC控制的开关示例
图8-1所示的是一个SP2T的例子。此GRFC控制的开关示例显示如何在RFC中配置GRFC信号以启用此开关。
上图为:图 8-1 GPIO控制的ASM框图。
SP2T用作PRX_B1和PRX_B4之间的路径选择开关。控制逻辑如表8-1所示。
当GPIO 75 被设为High时,PRX_B1选通。当GPIO 75 设为Low时,PRX_B4选通。
8.1 在msm_signal_info中查找signal
本节介绍如何在MSM_SIGNAL_INFO中查找映射到GPIO 75的MSM_SIGNAL。
根据cmn文件中RFC_MSM_SIGNAL_INFO_TYPE的枚举定义,GPIO 75 就是RFC_MSM_RF_PATH_SEL_00。如果此信号不在MSM_SIGNAL_INFO表中,请将其添加到MSM_SIGNAL_INFO表中。
注意:RF软件只能使用MSM_SIGNAL_INFO中列出的GPIO。MSM_SIGNAL_INFO中列出的所有GPIO都是与RF相关的GPIO。QTI不建议将与RF相关的GPIO用于其他目的。
8.2 确定GRFC信号类型
用作GRFC信号的GPIO可以选择四种GRFC信号类型,如GPIO 75为GRFC 1,可用作如第5.2.1节所述的GRFC类型。
如果GPIO 75被用来作为通路控制的开关,类型选择RFC_ANT_SEL。
8.3 增加RFC_ANT_SEL信号和期望的GPIO
假设GPIO 80 被用作 RFC_ANT_SEL,但是在msm_signal_info_table中没有这个MSM信号。因此,需要添加一个RFC_ANT_SEL类型的MSM信号和GPIO 80到msm_signal_info_table中。
添加MSM信号的步骤在第6.4节中介绍。
8.3.1 修改rfc_msm_signal_info_ag.h
在rfc_msm_signal_type的末尾添加一个新的枚举变量。对ANT_SEL信号使用未使用的枚举名称,并使用RFC_MSM_RF_PATH_SEL_xx以避免在调试过程中产生困惑。
8.3.2 修改rfc_msm_signal_info_ag.c
如图所示,在RFC_MSM_SIGNAL_INFO表的末尾添加RFC_MSM_RF_PATH_SEL_26。
注意:RFC_MSM8916_SIGNAL_INFO是类型为RFC_MSM_SIGNAL_INFO_TYPE的枚举变量。因此,顺序要与第8.3.1节中定义的RFC_MSM_SIGNAL_TYPE枚举类型匹配。
8.4 在<rf_card>_cmn_ag.h文件中添加GRFC信号
在<rf_card>_sig_type的末尾添加一个枚举参数RF_PATH_SEL_26。
8.5 在<rf_card>_sig_info中添加GRFC信号
在<rf_card>_sig_info table末尾添加一个映射到RFC_MSM_RF_PATH_SEL_26的条目(参见第8.3.2节),该条目映射到GPIO 80。
8.6 在band_sig_cfg中使用GRFC信号
将GRFC信号添加到<rf_card>_sig_info(见8.5节)后,如图所示,RF_PATH_SEL_26可用于band_sig_cfg(频段信号配置)。
9.GRFC控制的PA示例
本章提供有关选择 GRFC 信号类型以控制 PA 的信息。有关如何查找相应的 GRFC 信号的信息,请参见第6.1节。
9.1 GRFC PA 配置和 GRF ASM 配置的区别
对于GRFC PA,必须存在PA_ON和PA_RANGE信号才能控制PA操作。
图9-1是PA框图示例。
PA _ENABLE 控制 PA 的打开和关闭。当这个引脚设置为高时,PA 就打开。BAND_SEL0/1 用来选择频段。表 9-1 列出了 PA 的控制逻辑。
VMODE 0 和 VMODE 1 用来控制 PA 功放增益效果。表 9-2 列出了 PA 功放增益的控制逻辑。
当每个功能文件中至少存在一个PA_ON GRFC信号和一个PR_RANGE信号时,软件只能配置为使用GPIO PA。
如果没有 PA_ON 和 PA_RANGE 信号,那么当开启 Tx 通道时,软件可能会死机。
PA0_R0/PA_R1信号是一对PA_RANGE信号,其中两个位用于控制 PA 增益状态。当前实现最多支持四个功率放大器增益状态。在RFC代码中,则应将其设置为RFC_CONFIG_ONLY,以允许固件控制它们。
如果 PA_ON10 设为 RFC_CONFIG_ONLY,那么当 PA 开启时,固件会打开它。当收到关闭 PA 的命令时,PA_ON10 会被设为低。
总的来说,只有一个信号可以设为 PA_ON;其他的选择频段的 GPIO 都要设为 PATH_SEL 信号。
PA_R0/R1逻辑与NV PA_RANGE_MAP相关,并且随技术的不同而不同。
有关如何设置PA_RANGE_MAP和PA相关NV的信息,请参见第9.6节。
PA_ON逻辑设置因工艺而异。TDD技术必须指定起点和终点逻辑。
表 9-3 不同技术的PA_ON信号逻辑
9.2 添加 RFC_PA_ON 和期望的 GPIO
假设GPIO 80用作 RFC_PA_ON,而在msm_signal_info表中不存在这个 msm 信号。那么就需要添加一个 RFC_PA_ON 类型,GPIO 80 的MSM信号。添加 RFC_PA_ON 和期望的 GPIO,请参阅第6.4节。
9.2.1 修改 rfc_msm_signal_info_ag.h
在rfc_msm_signal_type最后添加一个新的枚举变量。使用一个没有使用过的枚举名称,对于PA_ON信号,使用RFC_MSM_PA_ON_xx来避免调试过程中产生疑惑。
9.2.2 修改rfc_msm_signal_info_ag.c
如下图所示,在 rfc_msm_signal_info 表的末尾添加 RFC_MSM_PA_ON_20。
注意:rfc_MSM8916_signal_info 是 rfc_msm_signal_info_type 类型的枚举变量。因此,顺序需要和上图的枚举变量的顺序一样。
9.3 在<rf_card>_cmn_ag.h添加GRFC信号
在<rf_card>_sig_type末尾添加一个新的枚举变量 PA_ON_20。
9.4 在<rf_card>_sig_info中添加GRFC信号
在<rf_card>_sig_info表的末尾,添加一个映射到 RFC_MSM_PA_ON_20 的入口。详情请查看第8.3.2节。
9.5 在band_sig_cfg中使用GRFC信号
将GRFC信号加到 <rf_card>_sig_info 之后,就可以在band_sig_cfg中使用PA_ON_20。
9.6 修改PA相关的NV
如果使用第三方提供的PA,一定要记得修改与PA相关的静态NV。
与PA相关的NV:
- PA_RANGE_MAP – NV#6717 NV_LTE_B1_PA_RANGE_MAP_I
- PA_SWITCH_POINT – NV#6719 NV_LTE_B1_PA_RISE_FALL_THRESHOLD_I
注意:在MPSS.DPM.2.0和MPSS.BO.2.0中的最新MPSS版本中添加了新的NV PA_STATIC_I。
它包括上面的PA_RANGE_MAP和PA_SWITCH_POINT。
注意:如果PA_STATIC_I不存在,软件依然使用上述的NV项。
9.6.1 设置 PA_RANGE_MAP
必须设置 PA_RANGE_MAP NV 值来使用正确的 PA 增益状态控制。目前软件允许使用两个 GPIO 引脚来控制 PA 范围。
这个 NV 值得定义如下:
数据类型 —— 由8个int8类型的成员组成的数据
每一个元素的下标对应一个 TxState(PA 增益状态)。索引 0 对应于TxState 0,索引 1 对应TxState1等等(不一定使用所有的索引)。
在任何给定的元素中,bit0 (LS bit)对应于 PA_RANGE0 引脚状态,bit1 对应于 PA_RANGE1 引脚状态。“1” 对应VDD。“0”对应GND。
AMSS软件将TX输出动态范围划分为四个线性化范围(带重叠)。此NV项定义对于每个线性化范围,PA应处于的状态。该NV项设置控制PA_RANGE0和PA_RANGE1的位,这些位用于为线性化器表定义的动态范围的每个部分设置PA的增益状态。
PA_RANGE0 和 PA_RANGE1 值的设置,应该与所使用的 PA 的芯片手册中的信息匹配。注意,第一个值表示最低的线性化器表,其对应于最小Tx输出功率。表 9-4 定义了如何为给定的PA_RANGE0 和 PA_RANGE1 设置填充NV项。
对于上述PA开关点配置,Rise_Fall_1和Rise_Fall_2必须设置为相同的电平(在低和中功率增益之间切换)。
表 9-5 列出了两个增益状态控制。
9.6.2 设置 PA 开关点
对应的 NV 项是 NV_LTE_<band>_PA_RISE_FALL_THRESHOLD_I。
这个NV的定义如下:
数据类型 —— 一个由16个 int16 类型的成员组成的数组。但是,组成格式可以替换为8个结构体,每个结构体包含两个成员。每个结构体对应一个 TxState (PA增益状态)。结构体 0 对应 TxState 0,结构体 1 对应 TxState 1,以此类推(不是所有结构体都必须使用)。每个结构体的元素 0 包含上升阈值,元素 1 包含下降阈值。每个元素的分辨率为每分贝10个计数,并以TxAGC单位给出。
此 NV 项指定 PA 从一个 PA 范围切换到另一个范围的 Tx 功率电平阈值。阵列中填充了按表9-6所示组织的切换点。此NV项还指定在功率电平降低时将激活滞后计时器的电平。