当前位置: 代码迷 >> 综合 >> Modem2G/3G/4G/5G:RFFE Driver(射频前端驱动):高通平台GRFC配置方法
  详细解决方案

Modem2G/3G/4G/5G:RFFE Driver(射频前端驱动):高通平台GRFC配置方法

热度:68   发布时间:2024-02-10 21:16:07.0

文 | GentlemanTsao

前言

RFFE driver中的GRFC配置是十分重要却容易不被重视的部分。

重要性在于:

常见的modem crash、逻辑通路不通等问题很可能是GRFC配置错误引起的。

不被重视是因为:

配置代码改动量不大;

错误比较隐蔽(例如映射顺序错误、冗余定义等)。

因此,为了避免出现错误,深入理解GRFC是必要的。

文章目录

    • 前言
    • 1.什么是GRFC
    • 2.GRFC的配置流程概览
    • 3.msm_sig_info的配置与分析
      • msm_sig_info Table位置:
      • msm_sig_info Table示例:
      • Table元素解读:
      • rfc_msm_sig_info_type结构体
        • signal type
        • msm_gpio |grfc_num:GPIO到GRFC的映射
        • output_type
        • function_select
    • 4._sig_cfg的配置与分析
      • _sig_cfg table位置:
      • _sig_cfg table 示例:
      • Table元素解读:
      • _sig_cfg table 与msm_sig_info Table的关系
    • 5.各频段的sig_cfg配置
    • 6.TDD GRFC timing配置
    • 7.配置准则、常见错误及避免方法
      • 准则1:【强制】:
      • 准则2:【强制】
      • 准则3:【推荐】
      • 准则4:【推荐】
      • 准则5:【强制】

1.什么是GRFC

GRFC是连接内部或外部组件的专用信号,通过在特定时间开/关,达到控制功能的作用。例如控制ASM。

下面的例子是GPIO75用于控制ASM的通路。
在这里插入图片描述

如下的控制逻辑表定义了,GPIO 75不同的取值对应的通路。

在这里插入图片描述

可以看出,拉高时,PRX_B1连通;拉低时,PRX_B4连通。

有了以上基本认识,接下来先了解GRFC配置的基本流程。

2.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的配置与分析介绍。

3.msm_sig_info的配置与分析

msm_sig_info Table位置:

fc_msm_signal_info.ag.c

msm_sig_info Table示例:

在这里插入图片描述

Table元素解读:

首先,以第二个元素为例,注意右侧的注释:
在这里插入图片描述

红圈部分标注了该table的下标。实际上,这个下标在fc_msm_signal_info.ag.h文件中,定义了如下的枚举类型:
在这里插入图片描述

所以注意:table中元素的顺序和枚举的顺序必须是一一对应的。

上面的元素主要表示了三个含义:

  • GPIO 100 映射到了GRFC 0上;
  • 用于天线控制;
  • 它的元素下标是RFC_MSM_RF_PATH_SEL_01——换句话说,当我们指定RFC_MSM_RF_PATH_SEL_01时,指的即是GPIO 100.

通常了解这个含义就可以配置大部分GPIO了。接下来我们还需看看各个参数的具体含义。

rfc_msm_sig_info_type结构体

每个元素是一个rfc_msm_signal_info_type类型,包含如下的几个参数:
在这里插入图片描述

signal type

下表列出了signal type对应的功能:

在这里插入图片描述

msm_gpio |grfc_num:GPIO到GRFC的映射

目的:告诉modem某个RF操作对应控制哪个GPIO。

两者是一一映射的关系。注意该映射关系已经预定义,我们不能自行修改。

如下是GPIO和GRFC的映射关系:

在这里插入图片描述

output_type

所有GRFC signal都需设置为RFC_GRFC.

function_select

对于GRFC signal,通常设为1. 该参数用于某些特别的GRFC允许输出不同的类型。

4.<rf_card>_sig_cfg的配置与分析

<rf_card>_sig_cfg table位置:

Rfc_xxx_cmn_ag.cpp

<rf_card>_sig_cfg table 示例:

在这里插入图片描述

Table元素解读:

仍然以GPIO 100为例,右侧也有一个标注:
在这里插入图片描述

同样的,红圈标注的是该元素的下标,它也是在RF card头文件中定义的枚举,如下所示:
在这里插入图片描述

上述元素主要表示三个含义:

  • RFC_MSM_RF_PATH_SEL_01(即GPIO 100)需要在该RF card中使用;
  • RFC_MSM_RF_PATH_SEL_01的初始值是RFC_LOW;
  • RFC_MSM_RF_PATH_SEL_01(即GPIO 100)在RF card sig table的下标是RFC_WTR2965_NON_CA_SAW_4320_SIG_GPIO_100——换句话说,在该RF card各band设置GPIO时,当我们指定RFC_WTR2965_NON_CA_SAW_4320_SIG_GPIO_100,它指的即是GPIO 100.

<rf_card>_sig_cfg table 与msm_sig_info Table的关系

msm_sig_info Table中列出了所有的RF
GPIO;

<rf_card>_sig_cfg table列出了用到的RF GPIO,并且映射到msm_sig_info
Table。如下图所示:

在这里插入图片描述

5.各频段的sig_cfg配置

上面两节主要介绍的是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,具体的作用在下一节中讨论。

6.TDD GRFC timing配置

TDD频段的sig_cfg会带有时序参数。例如GSM的sig_cfg:
在这里插入图片描述

每个signal都带有一个starting time和ending time。

除非必要,我们不应修改高通预设的timing参数。

7.配置准则、常见错误及避免方法

为了避免出错,在配置GRFC过程中坚持下面几个准则是有益的:

准则1:【强制】:

描述:

msm_sig_info table的元素顺序必须和元素下标枚举的顺序一致。

举例:

GPIO 100 在table中的下标是1:
在这里插入图片描述

则RFC_MSM_RF_PATH_SEL_01在枚举中的值也必须是1.
在这里插入图片描述

违反该准则将导致msm_sig_info table的映射关系错乱,出现modem crash或GPIO无效。

准则2:【强制】

描述:

<rf_card>_sig_cfg table的元素顺序必须和元素下标枚举的顺序一致。

举例:

GPIO 100 在<rf_card>_sig_cfg table的下标是31,如下:
在这里插入图片描述

则RFC_WTR2965_NON_CA_SAW_4320_SIG_GPIO_100在枚举中的值也必须是31:
在这里插入图片描述

违反该准则会出现GPIO实际值与设置不符。

准则3:【推荐】

描述:

新增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的要求。

准则4:【推荐】

描述:

同一个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有多个别名没有任何好处,反而容易产生冲突,特别是当你在不同的地方使用不同的名字时。

准则5:【强制】

描述:

去掉没用到的GRFC

举例:

参考下面的流程:

在这里插入图片描述

band sig cfg中部分GRFC有预设值,如果不去掉,会影响正确的设置。

  相关解决方案