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)即天線開關模塊
- #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,
- },
- };
#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
- 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 */
- },
- },
- },
- };
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
- 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;
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的一個引腳
- };
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,
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情況下所有需要初始的引腳
- };
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情況下所有需要初始的引腳
};
到這裏,軟件的通路就打通了
初學難免出錯, 有分析不對之處還請明示