本文共 3346 字,大约阅读时间需要 11 分钟。
文 | GentlemanTsao
RFFE driver中的GRFC配置是十分重要却容易不被重视的部分。
重要性在于:
常见的modem crash、逻辑通路不通等问题很可能是GRFC配置错误引起的。
不被重视是因为:
配置代码改动量不大;
错误比较隐蔽(例如映射顺序错误、冗余定义等)。
因此,为了避免出现错误,深入理解GRFC是必要的。
GRFC是连接内部或外部组件的专用信号,通过在特定时间开/关,达到控制功能的作用。例如控制ASM。
下面的例子是GPIO75用于控制ASM的通路。
如下的控制逻辑表定义了,GPIO 75不同的取值对应的通路。
可以看出,拉高时,PRX_B1连通;拉低时,PRX_B4连通。
有了以上基本认识,接下来先了解GRFC配置的基本流程。
基本流程图:
上面的流程图列出了配置GRFC的主要步骤。其中涉及三个重要的table:
Band_sig_cfg:
指个频段的sig_cfg, 在逻辑配置表中会标注该band有几个GPIO以及对应的值,我们只需按照逻辑配置表的标注填写。在第5节5.各频段的sig_cfg配置有详细介绍。
<rf_card>_sig_cfg:
该table列出了RF card用到的所有GRFC,以及它们和MSM signals的对应关系。详细内容在第4节4.<rf_card>_sig_cfg的配置与分析中介绍。
msm_sig_info:
该table列出了GPIO和GRFC的对应关系。详细内容在第3节3.msm_sig_info的配置与分析介绍。
fc_msm_signal_info.ag.c
首先,以第二个元素为例,注意右侧的注释:
红圈部分标注了该table的下标。实际上,这个下标在fc_msm_signal_info.ag.h文件中,定义了如下的枚举类型:
所以注意:table中元素的顺序和枚举的顺序必须是一一对应的。
上面的元素主要表示了三个含义:
通常了解这个含义就可以配置大部分GPIO了。接下来我们还需看看各个参数的具体含义。
每个元素是一个rfc_msm_signal_info_type类型,包含如下的几个参数:
下表列出了signal type对应的功能:
目的:告诉modem某个RF操作对应控制哪个GPIO。
两者是一一映射的关系。注意该映射关系已经预定义,我们不能自行修改。
如下是GPIO和GRFC的映射关系:
所有GRFC signal都需设置为RFC_GRFC.
对于GRFC signal,通常设为1. 该参数用于某些特别的GRFC允许输出不同的类型。
Rfc_xxx_cmn_ag.cpp
仍然以GPIO 100为例,右侧也有一个标注:
同样的,红圈标注的是该元素的下标,它也是在RF card头文件中定义的枚举,如下所示:
上述元素主要表示三个含义:
msm_sig_info Table中列出了所有的RF GPIO;
<rf_card>_sig_cfg table列出了用到的RF GPIO,并且映射到msm_sig_info
Table。如下图所示:上面两节主要介绍的是GPIO与GRFC的映射关系,该映射是在RF初始化阶段执行的。GPIO的最终设置(高或低),是在各频段的sig_cfg中配置。
仍然以GPIO 100为例,如下是B38 rx0的sig_cfg:
这里我们将GPIO 100 设为0. (RFC_LOW)
注意到这里{ RFC_LOW, 0/Warning: Not specified/ }的第二个参数“0”,表示time_offset,具体的作用在下一节中讨论。
TDD频段的sig_cfg会带有时序参数。例如GSM的sig_cfg:
每个signal都带有一个starting time和ending time。
除非必要,我们不应修改高通预设的timing参数。
为了避免出错,在配置GRFC过程中坚持下面几个准则是有益的:
描述:
msm_sig_info table的元素顺序必须和元素下标枚举的顺序一致。
举例:
GPIO 100 在table中的下标是1:
则RFC_MSM_RF_PATH_SEL_01在枚举中的值也必须是1.
违反该准则将导致msm_sig_info table的映射关系错乱,出现modem crash或GPIO无效。
描述:
<rf_card>_sig_cfg table的元素顺序必须和元素下标枚举的顺序一致。
举例:
GPIO 100 在<rf_card>_sig_cfg table的下标是31,如下:
则RFC_WTR2965_NON_CA_SAW_4320_SIG_GPIO_100在枚举中的值也必须是31:
违反该准则会出现GPIO实际值与设置不符。
描述:
新增GRFC项添加在table的最后。
举例:
假如需要在rfc_wtr2965_non_ca_saw_4320_sig_info中新增一项GPIO 111,在table中添加在RFC_SIG_LIST_END之前:
在下标枚举中添加到RFC_WTR2965_NON_CA_SAW_4320_SIG_NUM之前:
准则3实际上保证了在新增GRFC时,满足了准则1和2的要求。
描述:
同一个msm signal不要映射到多个<rf_card> sig。
举例:
下面的例子中,RFC_MSM_RF_PATH_SEL_01(GPIO 100)映射到两个<rf_card> sig,分别是
RFC_WTR2965_NON_CA_SAW_4320_SIG_GPIO_10;
RFC_WTR2965_NON_CA_SAW_4320_RF_PATH_SEL_01
同一个GPIO有多个别名没有任何好处,反而容易产生冲突,特别是当你在不同的地方使用不同的名字时。
描述:
去掉没用到的GRFC
举例:
参考下面的流程:
band sig cfg中部分GRFC有预设值,如果不去掉,会影响正确的设置。
我是GentlemanTsao,Android &modem 软件专家,热衷分享技术干货和研发心得,欢迎点赞关注哦 0(n_n)0
转载地址:http://gosod.baihongyu.com/