Modem2G/3G/4G/5G:吐血总结:30分钟掌握高通modem RFFE driver(射频驱动)配置方法(一)

By:GentlemanTsao

紧急任务

你是一位电子厨师,接到指挥官下达的紧急任务,要求在30分钟内为R星居民做出美食,否则R星将可能发生饥荒。

R星人以电磁波为食。

随即你收到了总部发来的美食图谱,如下:
在这里插入图片描述
这是R星语言。什么,没看懂?来来来,我搞到了一份带注释的图谱:
在这里插入图片描述
现在知道要做什么了吧?让我们动起来~

30分钟时间太紧张?别慌,30分钟=30X60=1800秒,足够电磁波从太阳到地球往返两个来回了。这样看还少吗?

1. 选择一个厨房(RF card)

做法式大餐和做中式大餐,对厨房配置的要求是不同的。因此,选择一个合适的厨房(RF card)可以让我们的烹饪得心应手。

在哪里看厨房(RF card)选项?

下面的文件列出了所有的备用厨房:
AMSS/modem_proc/rfc_jolokia/api/rfc_hwid.h

/* -------------------------------------------------------
** The RF Card Id used in the target
** Note: The Id needs to be sequential
** ------------------------------------------------------- */
typedef enum {
  RF_HW_UNDEFINED                         = (uint8)0,
  RF_TARGET_NONE                          = RF_HW_UNDEFINED,
  RF_HW_WTR2965_CHN_ULCA_3P_APT           = (uint8)3,
  RF_HW_WTR4905_NON_CA                    = (uint8)31,
  RF_HW_WTR2965_NON_CA_4360_CHIE_V2       = (uint8)75,
  RF_HW_WTR3925_QRD632_APT_QPA4361        = (uint8)87,
  RF_HW_WTR2965_DLCA_ULCA_4340            = (uint8)155,
  RF_HW_WTR2965_NON_CA_4373_V2            = (uint8)164,
  RF_HW_WTR2965_ULCA_QFE                  = (uint8)167,
  ...
  } rf_hw_type;

选哪个厨房(RF card)合适?

如果不能确定,请咨询RF大厨。

在哪里登记我选好的厨房(RF card)?

请登记到nv1878。
modem开机初始化RF时,先读取nv1878,然后准备厨房必须的装备(lib等文件)。

nv1878的名字是rfhardwareconfiguration。

怎样登记呢?

使用QXDM tool修改nv1878;
或者,load已经修改好的qcn or efs文件。

2. 采购食材(配置物理设备列表)

现在,我们已经是有房的人的(厨房也是房~~)。但是,俗话说,巧妇难为无米之炊。有了厨房只是第一步,接下来还需采购食材(配置物理设备列表)。

看下我们需要哪些食材:
在这里插入图片描述
从上图看,我们需要准备5种食材:
粉丝(QM56020)——供应商:第三方
黑鱼(QM57016)——供应商:第三方
姜(QFE2101)——供应商:高通
食用油(WTR2965)——供应商:高通
葱(MXD86A0S)

好,下面列一个采购清单,让ARM去采购。

采购清单(物理设备列表)写在哪里?

请写在对应RF Card目录的xxx_cmn_ag.cpp文件中。
例如:
Rfc_wtr2965_non_ca_saw_4320_cmn_ag.cpp
(modem_proc\rfc_tabasco\rf_card\rfc_wtr2965_non_ca_saw_4320\common\src)

采购清单以下面的形式:

rfc_phy_device_info_type rfc_wtr2965_non_ca_saw_4320_phy_devices_list[] = 
{
  { /*Device: WTR2965 */ 
    WTR2965, /* PHY_DEVICE_NAME */ 
    0, /* PHY_DEVICE_INSTANCE */ 
    RFC_NO_ALTERNATE_PART, /* PHY_DEVICE_ALT_PART_NUM_OF_INSTANCE */ 
    RFDEVICE_COMM_PROTO_RFFE, /* PHY_DEVICE_COMM_PROTOCOL */ 
    RFDEVICE_COMM_PROTO_VERSION_DEFAULT, /* PHY_DEVICE_COMM_PROTOCOL_VERSION */ 
    {    0,0 /* 0 not specified */,}, /* PHY_DEVICE_COMM_BUS */ 
    0x0217, /* PHY_DEVICE_MANUFACTURER_ID */ 
    0xCA, /* PHY_DEVICE_PRODUCT_ID */ 
    0, /* PHY_DEVICE_PRODUCT_REV */ 
    0x01, /* DEFAULT USID RANGE START */
    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 */
  ...
}

采购清单撰写注意事项:

PHY_DEVICE_INSTANCE:
食材的清单编号,从0开始依次递增。

PHY_DEVICE_COMM_BUS:
食材的包装编号——总线。有的食材可以包装在同一个盒子里。有的要独立打包。
如何确认
看下上图的食材右侧标注的RFFE[n]_DATA/CLK。
n-1 即是该食材(物理设备)的包装编号。

PHY_DEVICE_MANUFACTURER_ID:
PHY_DEVICE_PRODUCT_ID:
PHY_DEVICE_PRODUCT_REV:
每份食材都有自己的说明书——SPEC。SPEC中标注了生产厂家(MANUFACTURER_ID)、产品名称(PRODUCT_ID),批次(PRODUCT_REV)。这些都需要填写到采购清单中。请仔细查看SPEC。

DEFAULT USID:
PHY_DEVICE_ASSIGNED_USID:
这两个是食材的标签。
DEFAULT USID是出厂默认的唯一标签;
PHY_DEVICE_ASSIGNED_USID是我们给它贴的唯一标签。注意这个标签必须不同于其他食材。

好了,采购清单完成。

3. 切配食材(配置逻辑设备列表)

看一下最开始的菜谱。
在这里插入图片描述

水煮鱼片要用的配料是黑鱼片(PA57016),剁椒鱼头要用的配料是鱼头(ASM57016)。而我们采购来的是黑鱼(QM57016)。该怎么做,不用我多解释了吧?切起来~

现在我们要把原始食材切配分割成可以直接使用的食材,这一步又称为(配置逻辑设备列表)。

食材在哪里切配(逻辑设备列表)?

同样在RF Card目录的xxx_cmn_ag.cpp文件中。

例如:

rfc_logical_device_info_type rfc_wtr2965_non_ca_saw_4320_logical_devices_list[] = 
{
  { /*Device: WTR2965 */ 
    RFDEVICE_TRANSCEIVER, /* DEVICE_MODULE_TYPE */ 
    WTR2965, /* DEVICE_MODULE_NAME */ 
    0, /* DEVICE_MODULE_TYPE_INSTANCE */ 
    0, /* ASSOCIATED_PHY_DEVICE_INSTANCE */ 
  }, /* END - Device: WTR2965 */ 
  { /*Device: QFE2101 */ 
    RFDEVICE_PAPM, /* DEVICE_MODULE_TYPE */ 
    QFE2101, /* DEVICE_MODULE_NAME */ 
    0, /* DEVICE_MODULE_TYPE_INSTANCE */ 
    1, /* ASSOCIATED_PHY_DEVICE_INSTANCE */ 
  }, /* END - Device: QFE2101 */ 
  { /*Device: QM56020 */ 
    RFDEVICE_PA, /* DEVICE_MODULE_TYPE */ 
    GEN_PA, /* DEVICE_MODULE_NAME */ 
    0, /* DEVICE_MODULE_TYPE_INSTANCE */ 
    2, /* ASSOCIATED_PHY_DEVICE_INSTANCE */ 
  }, /* END - Device: QM56020 */  

  { /*Device: QM57016 pa */
    RFDEVICE_PA, /* DEVICE_MODULE_TYPE */
    GEN_PA, /* DEVICE_MODULE_NAME */
    1, /* DEVICE_MODULE_TYPE_INSTANCE */
    3, /* ASSOCIATED_PHY_DEVICE_INSTANCE */
  }, /* END*/

  { /*Device: QM57016 asm */
    RFDEVICE_ASM, /* DEVICE_MODULE_TYPE */
    GEN_ASM, /* DEVICE_MODULE_NAME */
    0, /* DEVICE_MODULE_TYPE_INSTANCE */
    3, /* ASSOCIATED_PHY_DEVICE_INSTANCE */
  },  /*END*/

切配食材注意事项

DEVICE_MODULE_TYPE:
指的是食材种类。例如食用油(TRANSCEIVER),鱼片,粉丝等主料(PA),鱼头(ASM)等等。

DEVICE_MODULE_NAME:
切配后的食材名称。注意同一种原始食材,例如黑鱼(QM57016),切配后的名称可能会变成鱼片(PA)和鱼头(ASM)。

DEVICE_MODULE_TYPE_INSTANCE:
同一类食材的编号。从0开始。例如,假如有两种鱼片(PA QM56020 和PA QM57016),则第一个是0,第二个是1.

ASSOCIATED_PHY_DEVICE_INSTANCE:
指该食材是从哪个原始食材上切分的。填的是原始食材的编号(即对应的是物理设备列表的PHY_DEVICE_INSTANCE)。

好了,切配食材已经完成. 0(n_n)0

下一篇将继续我们的电子烹饪之旅:腌制和炒爆熘炸煎~
不要走开,马上回来。

作者:
GentlemanTsao, 资深Android大厨,带你探索舌尖之旅。

推荐菜单:
Java系列
Java并发和多线程教程2020版

Java函数式编程教程

猜你喜欢

转载自blog.csdn.net/GentelmanTsao/article/details/107410858