高通新一代的TWS mirroring solution QCC514X/QCC304X已經上市一段時間,也有客戶的TWS耳機產品陸續進入認證、量產階段。但近來有接獲幾家客戶反映安規部分BLE 2M band edge的部分fail,這邊就整理一下解決的方法供大家參考。
由於QCC514X / QCC304X系列晶片的BLE output power typical高達10dBm,如果使用的band pass filter或者SAW filter insertion loss比較小,那BLE的output power也會維持在高點,相對的band edge也就比較容易fail。
接下來廢話不多說直接進入主題跟大家講講底下2個解決BLE 2M band edge fail的方法:
1. 改變TX payload:
實驗室在測試認證band edge時是用高通的tool Bluetest3,設定上channel是使用0(2402MHz)以及39(2480MHz),PHY則分別是1M及2M的BLE PHY,如下左圖。
投機的方法則是改變TX的bit pattern,實驗室測試應該都是打default第一個設定值pseudo-rdm9(PRBS9),各位可以請實驗室的測試人員試著改打10101010或者1111000看看是不是就能pass。
因為改打其他payload來過認證這個方法要看實驗室是不是能接受,所以在這邊就不多做著墨,畢竟每家實驗室有他們自己習慣的測試手法及經驗累積。
2. 調降BLE output power:
由於QCC514X/QCC304X不像上一代晶片QCC512X / QCC302X/QCC303X可以直接透過mib key設定最大輸出power使用power table中哪一階,因此在調降BLE output power時多了一些眉角。
在QCC514X/QCC304X power table中,每一階power table包含了4列的設定值,每列所代表的定義如下:
BR: 0x09 0x50 0x03
EDR: 0x09 0x32 0x03
LE: 0x09 0x50 0x03
QHS: 0x09 0x50 0x03
我們這次討論的是調降BLE output power for band edge fail issue,因此我們要做變動及fine tune的部分只有第3列BLE的部分。
以power table index 4這階來做BLE output power fine tune,得到
LE: 0x09 0x95 0x03的數據,
在公板上量測到BLE output power落在5.77~6.18dBm的結果如下圖:
因此將LE: 0x09 0x95 0x03這個數據置換到原始power table 4那階的BLE部分,最重要的是BLE最大輸出power table 10那階數值也要置換為 LE: 0x09 0x95 0x03,完整power table如下,最後將底下power table放到MDE subsys1_config2.htf並存檔及Deploy即大功告成。
# TX_POWER_CTRL_TX_POWER_TABLE
TX_POWER_CTRL_TX_POWER_TABLE = { \
{ \
\
{ \
0x09 /* txAtten */ , 0x14 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , -16 /* dBm */ \
}, \
{ \
0x09 /* txAtten */ , 0x0c /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , -16 /* dBm */ \
}, \
{ \
0x09 /* txAtten */ , 0x14 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , -16 /* dBm */ \
}, \
{ \
0x09 /* txAtten */ , 0x14 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , -16 /* dBm */ \
} \
}, \
{ \
\
{ \
0x09 /* txAtten */ , 0x21 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , -12 /* dBm */ \
}, \
{ \
0x09 /* txAtten */ , 0x14 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , -12 /* dBm */ \
}, \
{ \
0x09 /* txAtten */ , 0x21 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , -12 /* dBm */ \
}, \
{ \
0x09 /* txAtten */ , 0x21 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , -12 /* dBm */ \
} \
}, \
{ \
\
{ \
0x09 /* txAtten */ , 0x32 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , -8 /* dBm */ \
}, \
{ \
0x09 /* txAtten */ , 0x21 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , -8 /* dBm */ \
}, \
{ \
0x09 /* txAtten */ , 0x32 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , -8 /* dBm */ \
}, \
{ \
0x09 /* txAtten */ , 0x32 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , -8 /* dBm */ \
} \
}, \
{ \
\
{ \
0x09 /* txAtten */ , 0x50 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , -4 /* dBm */ \
}, \
{ \
0x09 /* txAtten */ , 0x32 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , -4 /* dBm */ \
}, \
{ \
0x09 /* txAtten */ , 0x50 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , -4 /* dBm */ \
}, \
{ \
0x09 /* txAtten */ , 0x50 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , -4 /* dBm */ \
} \
}, \
{ \
\
{ \
0x09 /* txAtten */ , 0x85 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , 0 /* dBm */ \
}, \
{ \
0x09 /* txAtten */ , 0x50 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , 0 /* dBm */ \
}, \
{ \
0x09 /* txAtten */ , 0x85 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , 0 /* dBm */ \
}, \
{ \
0x09 /* txAtten */ , 0x85 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , 0 /* dBm */ \
} \
}, \
{ \
\
{ \
0x09 /* txAtten */ , 0xe4 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , 4 /* dBm */ \
}, \
{ \
0x09 /* txAtten */ , 0x85 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , 4 /* dBm */ \
}, \
{ \
0x09 /* txAtten */ , 0x95 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , 4 /* dBm */ \
}, \
{ \
0x09 /* txAtten */ , 0x91 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , 4 /* dBm */ \
} \
}, \
{ \
\
{ \
0x00 /* txAtten */ , 0xe6 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , 10 /* dBm */ \
}, \
{ \
0x00 /* txAtten */ , 0xa4 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , 9 /* dBm */ \
}, \
{ \
0x09 /* txAtten */ , 0x95 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , 4 /* dBm */ \
}, \
{ \
0x00 /* txAtten */ , 0xb4 /* txPwrMag */ , 0x03 /* txPwrExp */ , 0x00 /* flags */ , 9 /* dBm */ \
} \
}, \
{ \
\
{ \
0x00 /* txAtten */ , 0x00 /* txPwrMag */ , 0x00 /* txPwrExp */ , 0x00 /* flags */ , 0 /* dBm */ \
}, \
{ \
0x00 /* txAtten */ , 0x00 /* txPwrMag */ , 0x00 /* txPwrExp */ , 0x00 /* flags */ , 0 /* dBm */ \
}, \
{ \
0x00 /* txAtten */ , 0x00 /* txPwrMag */ , 0x00 /* txPwrExp */ , 0x00 /* flags */ , 0 /* dBm */ \
}, \
{ \
0x00 /* txAtten */ , 0x00 /* txPwrMag */ , 0x00 /* txPwrExp */ , 0x00 /* flags */ , 0 /* dBm */ \
} \
}, \
{ \
\
{ \
0x00 /* txAtten */ , 0x00 /* txPwrMag */ , 0x00 /* txPwrExp */ , 0x00 /* flags */ , 0 /* dBm */ \
}, \
{ \
0x00 /* txAtten */ , 0x00 /* txPwrMag */ , 0x00 /* txPwrExp */ , 0x00 /* flags */ , 0 /* dBm */ \
}, \
{ \
0x00 /* txAtten */ , 0x00 /* txPwrMag */ , 0x00 /* txPwrExp */ , 0x00 /* flags */ , 0 /* dBm */ \
}, \
{ \
0x00 /* txAtten */ , 0x00 /* txPwrMag */ , 0x00 /* txPwrExp */ , 0x00 /* flags */ , 0 /* dBm */ \
} \
}, \
{ \
\
{ \
0x00 /* txAtten */ , 0x00 /* txPwrMag */ , 0x00 /* txPwrExp */ , 0x00 /* flags */ , 0 /* dBm */ \
}, \
{ \
0x00 /* txAtten */ , 0x00 /* txPwrMag */ , 0x00 /* txPwrExp */ , 0x00 /* flags */ , 0 /* dBm */ \
}, \
{ \
0x00 /* txAtten */ , 0x00 /* txPwrMag */ , 0x00 /* txPwrExp */ , 0x00 /* flags */ , 0 /* dBm */ \
}, \
{ \
0x00 /* txAtten */ , 0x00 /* txPwrMag */ , 0x00 /* txPwrExp */ , 0x00 /* flags */ , 0 /* dBm */ \
} \
}}
Note. Power table架構介紹及在MDE加入power table可以參考博文: QCC514x/QCC304x Power Table 測試和設定
最後再量一次BR/EDR output power如下,以確定我們沒有不小心動到BR跟EDR的power輸出。