博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Modem2G/3G/4G/5G:RFFE Driver(射频前端驱动):高通平台GRFC配置方法
阅读量:2768 次
发布时间:2019-05-13

本文共 3346 字,大约阅读时间需要 11 分钟。

文 | GentlemanTsao

前言

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

重要性在于:

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

不被重视是因为:

配置代码改动量不大;

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

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

文章目录

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有预设值,如果不去掉,会影响正确的设置。

我是GentlemanTsao,Android &modem 软件专家,热衷分享技术干货和研发心得,欢迎点赞关注哦 0(n_n)0

转载地址:http://gosod.baihongyu.com/

你可能感兴趣的文章
SPI总线分析
查看>>
C/C++常见gcc编译链接错误解决方法
查看>>
ffmpeg基础命令
查看>>
linux I/0复用函数之 ------ poll()
查看>>
linux函数之------fread和read的区别
查看>>
socket通信介绍
查看>>
linux I/0复用函数之 ------ epoll()
查看>>
软件低功耗设计的一点小结
查看>>
spring boot入门(三)单元测试
查看>>
mysql8.0版本在配置文件my.ini[mysqld]加上skip-grant-tables后无法启动
查看>>
使用Spring Boot上传文件时报The field headpic exceeds its maximum permitted size of 1048576 bytes错误
查看>>
Mybatis处理日期类型字段时抛出invalid comparison: java.util.Date and java.lang.String异常
查看>>
bootstrapvalidator和bootstrap-datetimepicker一起使用的坑
查看>>
bootstrap radio动态选中
查看>>
bootstrap 3.3.7 bug tooltip关闭时报Uncaught TypeError: Cannot read property 'off' of null
查看>>
bootstrap-select 下拉列表高度调整
查看>>
bootstrap-select动态加载数据和多级联动
查看>>
使用spring boot 2.1.6生成的maven项目导入eclipse后报错pom.xml第一行报unknown error
查看>>
IntelliJ IDEA入门(二)配置文件目录更改
查看>>
IntelliJ IDEA入门(一)无法新建JavaClass和Package解决办法
查看>>