我是靠谱客的博主 霸气铅笔,最近开发中收集的这篇文章主要介绍RF电路图的理解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

RF总体的连接图如下

左边为天线开关模块跟功放的集成体,如RF360,QFE23XX,SKYXXXX                                                  下边以SKY简称

中间的WTR4X05作用:射频收发器,工作过程为(基带信号<--->上/下变频<--->滤波<--->放大信号)    下边以WTR简称

右边modem_ic指处理器芯片,我们这里可以假设为高通的MSM8909处理器,                                  下边就以MSM简称


WTR4X05(射频收发器)的内部结构图如下图:


         上方为RF transmitters发送模块框图   ,quadrature upconverter为上变频,高频率才能发送










         下方为RF receivers接收模块框图   quadrature downconverter下变频,变为低频率后才能有MSMcpu芯片处理




          通过开关标号来实现通路的选择


最左边的接口分为三波:发送一波,主接收PRX一波,副接收DRX一波。一半副接收可以节省电量,在不接受的时候可以处于休眠状态


每一波又可以分为三小波:LB小波,HB小波,MB小波同下图QFI1040的硬件接口对应,不通的接口对应不同的band,如下表格所示









类似QFE1040模块主要作为asm(Antenna switch matrix)即天线开关模块


以上是对整体框架及作用的说明,在实际的项目中,硬件会给软件以下框图

软件主要是要打通一个通道,包括QFE1040、WTR1341都有各自的通道需要配置

QFE1040通道的配置,如下图,需要用到哪个band就打开相应的通道,比如:2,4band就需要打通TX_DA1通道

打开相应的通道只需要向QFE1040的寄存器中写入相应的值即可打开相应的通道,见后边的“寄存器值表格”


     每一个RF port对应不同的频段,比如上图中的GSM850,就应该使用PRX_LB2硬件接口,对应的硬件电路图如下

                                                           硬件电路连接图


                                                                 寄存器值表格,在SKY13455的芯片手册中可以找到


SKY到WTR的通路

寄存器值表格用来决定左边的硬件电路连接图用哪个来作为输入,在代码中的表示形式如下:                                                                                                                                                                                //***代码所在文件 modem_procrfdevice_asmsrcRfdevice_asm_sky13455_data_ag.cpp         asm(Antenna switch matrix)即天线开关模块

#define RFDEVICE_ASM_SKY13455_ASM_ON_NUM_REGS 1
static uint8 rfdevice_asm_sky13455_asm_on_regs[RFDEVICE_ASM_SKY13455_ASM_ON_NUM_REGS] =  {0x00, };
static int16 rfdevice_asm_sky13455_asm_on_data[RFDEVICE_ASM_SKY13455_NUM_PORTS][RFDEVICE_ASM_SKY13455_ASM_ON_NUM_REGS] =
{
  { /* PORT NUM: 0 */
    0x0A,                此值与寄存器值表格中的值相对应,比如  LTX  对应的值为  x0001010=0x0A
  },
  { /* PORT NUM: 1 */
    0x08, 
  },
  { /* PORT NUM: 2 */
    0x04, 
  },
  { /* PORT NUM: 3 */
    0x05, 
  },
  { /* PORT NUM: 4 */
    0x06, 
  },
  { /* PORT NUM: 5 */
    0x07, 
  },
  { /* PORT NUM: 6 */
    0x09, 
  },
  { /* PORT NUM: 7 */
    0x0B, 
  },
  { /* PORT NUM: 8 */
    0x0C, 
  },
  { /* PORT NUM: 9 */
    0x01, 
  },
  { /* PORT NUM: 10 */
    0x02, 
  },
  { /* PORT NUM: 11 */
    0x03, 
  },
};

RF card部分的代码会用到以上port ,代码如下 :                 modem_procrfc_jolokiarf_cardrfc_wtr4905_omltesrcRfc_wtr4905_om_lte_config_data_ag.c

rfc_device_info_type rf_card_wtr4905_om_rx0_lte_b1_device_info = 
{
  RFC_ENCODED_REVISION, 
  RFC_RX_MODEM_CHAIN_0,   /* Modem Chain */
  0,   /* NV Container */
  RFC_INVALID_PARAM /* Warning: Not Specified */,   /* Antenna */
  2,  /* NUM_DEVICES_TO_CONFIGURE */
  {
    {
      RFDEVICE_TRANSCEIVER,
      WTR4905,  /* NAME */
      0,  /* DEVICE_MODULE_TYPE_INSTANCE */
      0,  /* PHY_PATH_NUM */
      {
        0 /*Warning: Not specified*/,  /* INTF_REV */
        (int)WTR4905_LTEFDD_PRXLGY1_BAND1_PMB2,  /* PORT */           此PORT是MSM处理器端的接口,具体选取见附录1</span>分析 
        ( RFDEVICE_PA_LUT_MAPPING_INVALID ),  /* RF_ASIC_BAND_AGC_LUT_MAPPING */
        FALSE,  /* TXAGC_LUT */
        WTR4905_FBRX_ATTN_DEFAULT,  /* FBRX_ATTN_STATE */
        0,  /* Array Filler */
      },
    },
	{
		RFDEVICE_ASM,
		GEN_ASM,  /* NAME */
		0,	/* DEVICE_MODULE_TYPE_INSTANCE */
		0 /*Warning: Not specified*/,  /* PHY_PATH_NUM */
		{
		  0  /* Orig setting:  */,	/* INTF_REV */
		  (0x01A5 << 22)/*mfg_id*/ | (0x41 << 14)/*prd_id*/ | (5)/*port_num*/,	/* PORT_NUM */                                                                               //此处的port num会对应以上的rfdevice_asm_sky13455_asm_on_data[PORT_NUM]数组成员,在数组中用红色字体来表示
		  0,  /* Array Filler */
		  0,  /* Array Filler */
		  0,  /* Array Filler */
		  0,  /* Array Filler */
		},
	},
  },
};


附录1               //以下定义在各个RF card目录的文件中,如modem_procrfdevice_wtr4905agapiWtr4905_typedef_ag.h  

typedef enum 
{
  WTR4905_WCDMA_DRXLGY1_BAND1_DMB1, 
************** 
  以下步骤跟据硬件给的图来决定
  WTR4905_WCDMA_DRXLGY1_BAND8_DLB3, 
                        先决定是哪个BAND       //决定于下表右方的数字
  WTR4905_WCDMA_DRXLGY1_BAND11_DMB1, 
  再决定是否为主接受
  WTR4905_WCDMA_DRXLGY1_BAND11_DMB2, 
			       D代表rx1,副接收,用rx1表示   如:rf_card_wtr4905_om_rx1_wcdma_b8_device_info  //对应硬件文档的RF port部分的DRX_xBx,如下表
  WTR4905_WCDMA_PRXLGY1_BAND1_PMB2,                                                                                                       b8表示BAND8
			      P代表rx0表示主接收 用rx0表示   如:rf_card_wtr4905_om_rx0_wcdma_b8_device_info   //对应硬件文档的RF port部分的PRX_xBx,如下表
  WTR4905_WCDMA_PRXLGY1_BAND1_PMB3, 
  WTR4905_WCDMA_PRXLGY1_BAND1_PHB1,
                                 再决定后边的数字 
  WTR4905_WCDMA_PRXLGY1_BAND1_PHB2, 
  WTR4905_WCDMA_PRXLGY1_BAND2_PMB2, 
*****************
  WTR4905_WCDMA_PRXLGY1_BAND8_PLB2, 
  WTR4905_WCDMA_PRXLGY1_BAND8_PLB3, 

  WTR4905_WCDMA_RX_BAND_INVALID, 
} wtr4905_wcdma_rx_port_data_type;

三个器件相关代码目录为:

MSM:   /modem_proc/rfc_jolokia/target/msm8909/src

WTR :  /modem_proc/rfc_jolokia/rf_card/rfc_wtr4905_chile_3g/wcdma/src

SKY :  /modem_proc/rfdevice_asm/src


下边是MSM跟WTR的通路

rfc_signal_info_type rfc_wtr4905_china_ct_4m_sig_info[RFC_WTR4905_CHINA_CT_4M_SIG_NUM + 1] = 
{
  { RFC_MSM_TIMING_PA_CTL      , RFC_LOW, DAL_GPIO_NO_PULL, DAL_GPIO_2MA, (DALGpioIdType)NULL }, /* RFC_WTR4905_CHINA_CT_4M_TIMING_PA_CTL*/ 
  { RFC_MSM_TIMING_PA_RANGE    , RFC_LOW, DAL_GPIO_NO_PULL, DAL_GPIO_2MA, (DALGpioIdType)NULL }, /* RFC_WTR4905_CHINA_CT_4M_TIMING_PA_RANGE */ 
  { RFC_MSM_TIMING_ASM_CTL     , RFC_LOW, DAL_GPIO_NO_PULL, DAL_GPIO_2MA, (DALGpioIdType)NULL }, /* RFC_WTR4905_CHINA_CT_4M_TIMING_ASM_CTL */ 
  { RFC_MSM_TIMING_PAPM_CTL    , RFC_LOW, DAL_GPIO_NO_PULL, DAL_GPIO_2MA, (DALGpioIdType)NULL }, /* RFC_WTR4905_CHINA_CT_4M_TIMING_PAPM_CTL */ 
  { RFC_MSM_TIMING_TX_TX_RF_ON0, RFC_LOW, DAL_GPIO_NO_PULL, DAL_GPIO_2MA, (DALGpioIdType)NULL}, /* RFC_WTR4905_CHINA_CT_4M_TIMING_TX_TX_RF_ON0 */ 
 .......红色部分代表WTR和MSM的连接,此定义在WTR相关的文件中,这里RFC_MSM_TIMING_xx_xx就是MSM的一个引脚 

};
以上结构体于下边结构体对应,后边用来控制管脚的初始化

typedef enum
{
  RFC_WTR4905_OM_TIMING_PA_CTL,     你看看,顺序都一样,指的肯定是同一个引脚了,下边的程序中会用到
  RFC_WTR4905_OM_TIMING_PA_RANGE,
  RFC_WTR4905_OM_TIMING_ASM_CTL,
  RFC_WTR4905_OM_TIMING_PAPM_CTL,
  RFC_WTR4905_OM_TIMING_TX_TX_RF_ON0,
  RFC_WTR4905_OM_TIMING_TX_RX_RF_ON0,
rfc_sig_info_type rf_card_wtr4905_om_tx0_lte_b1_sig_cfg = 
{
  RFC_ENCODED_REVISION, 
  {
    { (int)RFC_WTR4905_OM_PA0_R0_ALT1,   { RFC_CONFIG_ONLY, 0 }, {RFC_LOW, 0 }  },这里用到上边结构体里定义的引脚,这里用来初始化引脚
    { (int)RFC_WTR4905_OM_PA0_R1_ALT1,   { RFC_CONFIG_ONLY, 0 }, {RFC_LOW, 0 }  },
    { (int)RFC_SIG_LIST_END,   { RFC_LOW, 0 }, {RFC_LOW, 0 } }
  },       因为选定特定的band的话,需要有些引脚需要初始化为特定电平,这个结构体来包含相应band情况下所有需要初始的引脚
};

到这里,软件的通路就打通了

                                                                                                                             初学难免出错, 有分析不对之处还请明示


最后

以上就是霸气铅笔为你收集整理的RF电路图的理解的全部内容,希望文章能够帮你解决RF电路图的理解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部