qcom 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_proc\rfdevice_asm\src\Rfdevice_asm_sky13455_data_ag.cpp         asm(Antenna switch matrix)即天線開關模塊

  1. #define RFDEVICE_ASM_SKY13455_ASM_ON_NUM_REGS 1  
  2. static uint8 rfdevice_asm_sky13455_asm_on_regs[RFDEVICE_ASM_SKY13455_ASM_ON_NUM_REGS] =  {0x00, };  
  3. static int16 rfdevice_asm_sky13455_asm_on_data[RFDEVICE_ASM_SKY13455_NUM_PORTS][RFDEVICE_ASM_SKY13455_ASM_ON_NUM_REGS] =  
  4. {  
  5.   { /* PORT NUM: 0 */  
  6.     0x0A,                此值與寄存器值表格中的值相對應,比如  LTX  對應的值爲  x0001010=0x0A  
  7.   },  
  8.   { /* PORT NUM: 1 */  
  9.     0x08,   
  10.   },  
  11.   { /* PORT NUM: 2 */  
  12.     0x04,   
  13.   },  
  14.   { /* PORT NUM: 3 */  
  15.     0x05,   
  16.   },  
  17.   { /* PORT NUM: 4 */  
  18.     0x06,   
  19.   },  
  20.   { /* PORT NUM: 5 */  
  21.     0x07,   
  22.   },  
  23.   { /* PORT NUM: 6 */  
  24.     0x09,   
  25.   },  
  26.   { /* PORT NUM: 7 */  
  27.     0x0B,   
  28.   },  
  29.   { /* PORT NUM: 8 */  
  30.     0x0C,   
  31.   },  
  32.   { /* PORT NUM: 9 */  
  33.     0x01,   
  34.   },  
  35.   { /* PORT NUM: 10 */  
  36.     0x02,   
  37.   },  
  38.   { /* PORT NUM: 11 */  
  39.     0x03,   
  40.   },  
  41. };  
#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_proc\rfc_jolokia\rf_card\rfc_wtr4905_om\lte\src\Rfc_wtr4905_om_lte_config_data_ag.c

  1. rfc_device_info_type rf_card_wtr4905_om_rx0_lte_b1_device_info =   
  2. {  
  3.   RFC_ENCODED_REVISION,   
  4.   RFC_RX_MODEM_CHAIN_0,   /* Modem Chain */  
  5.   0,   /* NV Container */  
  6.   RFC_INVALID_PARAM /* Warning: Not Specified */,   /* Antenna */  
  7.   2,  /* NUM_DEVICES_TO_CONFIGURE */  
  8.   {  
  9.     {  
  10.       RFDEVICE_TRANSCEIVER,  
  11.       WTR4905,  /* NAME */  
  12.       0,  /* DEVICE_MODULE_TYPE_INSTANCE */  
  13.       0,  /* PHY_PATH_NUM */  
  14.       {  
  15.         0 /*Warning: Not specified*/,  /* INTF_REV */  
  16.         (int)WTR4905_LTEFDD_PRXLGY1_BAND1_PMB2,  /* PORT */           此PORT是MSM處理器端的接口,具體選取見附錄1</span>分析   
  17.         ( RFDEVICE_PA_LUT_MAPPING_INVALID ),  /* RF_ASIC_BAND_AGC_LUT_MAPPING */  
  18.         FALSE,  /* TXAGC_LUT */  
  19.         WTR4905_FBRX_ATTN_DEFAULT,  /* FBRX_ATTN_STATE */  
  20.         0,  /* Array Filler */  
  21.       },  
  22.     },  
  23.     {  
  24.         RFDEVICE_ASM,  
  25.         GEN_ASM,  /* NAME */  
  26.         0,  /* DEVICE_MODULE_TYPE_INSTANCE */  
  27.         0 /*Warning: Not specified*/,  /* PHY_PATH_NUM */  
  28.         {  
  29.           0  /* Orig setting:  */,  /* INTF_REV */  
  30.           (0x01A5 << 22)/*mfg_id*/ | (0x41 << 14)/*prd_id*/ | (5)/*port_num*/,  /* PORT_NUM */                                                                               //此處的port num會對應以上的rfdevice_asm_sky13455_asm_on_data[PORT_NUM]數組成員,在數組中用紅色字體來表示  
  31.           0,  /* Array Filler */  
  32.           0,  /* Array Filler */  
  33.           0,  /* Array Filler */  
  34.           0,  /* Array Filler */  
  35.         },  
  36.     },  
  37.   },  
  38. };  
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_proc\rfdevice_wtr4905\ag\api\Wtr4905_typedef_ag.h  

  1. typedef enum   
  2. {  
  3.   WTR4905_WCDMA_DRXLGY1_BAND1_DMB1,   
  4. **************   
  5.   以下步驟跟據硬件給的圖來決定  
  6.   WTR4905_WCDMA_DRXLGY1_BAND8_DLB3,   
  7.                         先決定是哪個BAND       //決定於下表右方的數字  
  8.   WTR4905_WCDMA_DRXLGY1_BAND11_DMB1,   
  9.   再決定是否爲主接受  
  10.   WTR4905_WCDMA_DRXLGY1_BAND11_DMB2,   
  11.                    D代表rx1,副接收,用rx1表示   如:rf_card_wtr4905_om_rx1_wcdma_b8_device_info  //對應硬件文檔的RF port部分的DRX_xBx,如下表  
  12.   WTR4905_WCDMA_PRXLGY1_BAND1_PMB2,                                                                                                       b8表示BAND8  
  13.                   P代表rx0表示主接收 用rx0表示   如:rf_card_wtr4905_om_rx0_wcdma_b8_device_info   //對應硬件文檔的RF port部分的PRX_xBx,如下表  
  14.   WTR4905_WCDMA_PRXLGY1_BAND1_PMB3,   
  15.   WTR4905_WCDMA_PRXLGY1_BAND1_PHB1,  
  16.                                  再決定後邊的數字   
  17.   WTR4905_WCDMA_PRXLGY1_BAND1_PHB2,   
  18.   WTR4905_WCDMA_PRXLGY1_BAND2_PMB2,   
  19. *****************  
  20.   WTR4905_WCDMA_PRXLGY1_BAND8_PLB2,   
  21.   WTR4905_WCDMA_PRXLGY1_BAND8_PLB3,   
  22.   
  23.   WTR4905_WCDMA_RX_BAND_INVALID,   
  24. } wtr4905_wcdma_rx_port_data_type;  
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的通路

  1. rfc_signal_info_type rfc_wtr4905_china_ct_4m_sig_info[RFC_WTR4905_CHINA_CT_4M_SIG_NUM + 1] =   
  2. {  
  3.   { RFC_MSM_TIMING_PA_CTL      , RFC_LOW, DAL_GPIO_NO_PULL, DAL_GPIO_2MA, (DALGpioIdType)NULL }, /* RFC_WTR4905_CHINA_CT_4M_TIMING_PA_CTL*/   
  4.   { RFC_MSM_TIMING_PA_RANGE    , RFC_LOW, DAL_GPIO_NO_PULL, DAL_GPIO_2MA, (DALGpioIdType)NULL }, /* RFC_WTR4905_CHINA_CT_4M_TIMING_PA_RANGE */   
  5.   { RFC_MSM_TIMING_ASM_CTL     , RFC_LOW, DAL_GPIO_NO_PULL, DAL_GPIO_2MA, (DALGpioIdType)NULL }, /* RFC_WTR4905_CHINA_CT_4M_TIMING_ASM_CTL */   
  6.   { RFC_MSM_TIMING_PAPM_CTL    , RFC_LOW, DAL_GPIO_NO_PULL, DAL_GPIO_2MA, (DALGpioIdType)NULL }, /* RFC_WTR4905_CHINA_CT_4M_TIMING_PAPM_CTL */   
  7.   { 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 */   
  8.  .......紅色部分代表WTR和MSM的連接,此定義在WTR相關的文件中,這裏RFC_MSM_TIMING_xx_xx就是MSM的一個引腳   
  9.   
  10. };  
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的一個引腳 

};
以上結構體於下邊結構體對應,後邊用來控制管腳的初始化

  1. typedef enum  
  2. {  
  3.   RFC_WTR4905_OM_TIMING_PA_CTL,     你看看,順序都一樣,指的肯定是同一個引腳了,下邊的程序中會用到  
  4.   RFC_WTR4905_OM_TIMING_PA_RANGE,  
  5.   RFC_WTR4905_OM_TIMING_ASM_CTL,  
  6.   RFC_WTR4905_OM_TIMING_PAPM_CTL,  
  7.   RFC_WTR4905_OM_TIMING_TX_TX_RF_ON0,  
  8.   RFC_WTR4905_OM_TIMING_TX_RX_RF_ON0,  
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,
  1. rfc_sig_info_type rf_card_wtr4905_om_tx0_lte_b1_sig_cfg =   
  2. {  
  3.   RFC_ENCODED_REVISION,   
  4.   {  
  5.     { (int)RFC_WTR4905_OM_PA0_R0_ALT1,   { RFC_CONFIG_ONLY, 0 }, {RFC_LOW, 0 }  },這裏用到上邊結構體裏定義的引腳,這裏用來初始化引腳  
  6.     { (int)RFC_WTR4905_OM_PA0_R1_ALT1,   { RFC_CONFIG_ONLY, 0 }, {RFC_LOW, 0 }  },  
  7.     { (int)RFC_SIG_LIST_END,   { RFC_LOW, 0 }, {RFC_LOW, 0 } }  
  8.   },       因爲選定特定的band的話,需要有些引腳需要初始化爲特定電平,這個結構體來包含相應band情況下所有需要初始的引腳  
  9. };  
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情況下所有需要初始的引腳
};

到這裏,軟件的通路就打通了

                                                                                                                             初學難免出錯, 有分析不對之處還請明示


發佈了54 篇原創文章 · 獲贊 55 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章