牙4.2+NFC二合一模塊實(shí)戰(zhàn):從原理到天線調(diào)優(yōu))
1. 為什么要把藍(lán)牙4.2和NFC硬塞進(jìn)同一個(gè)超小模塊先說(shuō)說(shuō)我為什么會(huì)盯上這種Ultra-Compact Bluetooth 4.2 NFC Module的組合。手頭有個(gè)項(xiàng)目要做設(shè)備配對(duì)和配置原本方案是手機(jī)通過(guò)BLE連設(shè)備然后用戶手動(dòng)去網(wǎng)頁(yè)后臺(tái)輸一串序列號(hào)。用戶體驗(yàn)極其反人類而且經(jīng)常輸錯(cuò)。后來(lái)想到用NFC一碰完成配網(wǎng)和身份綁定但設(shè)備上又得留一個(gè)藍(lán)牙通道做后續(xù)數(shù)據(jù)傳輸和固件升級(jí)。于是問(wèn)題來(lái)了如果藍(lán)牙模塊和NFC模塊分開(kāi)采購(gòu)設(shè)計(jì)上要多占板面積、多調(diào)一次天線、多處理一套電源樹(shù)。直到我找到這種把藍(lán)牙4.2和NFC整合到一個(gè)超緊湊模組里的方案才覺(jué)得整個(gè)事情順暢了很多。這類模塊最核心的定位是用NFC解決近場(chǎng)觸發(fā)和免配對(duì)初始化用藍(lán)牙解決持續(xù)連接和數(shù)據(jù)吞吐。NFC的工作距離通常只有幾厘米天然自帶主動(dòng)靠近的確認(rèn)感藍(lán)牙4.2的BLE模式則能在幾米到幾十米內(nèi)維持穩(wěn)定連接。兩者結(jié)合能覆蓋從點(diǎn)對(duì)點(diǎn)碰一碰到稍遠(yuǎn)距離持續(xù)傳輸?shù)耐暾溌贰?shí)際使用中這種模塊適合以下幾類人群做物聯(lián)網(wǎng)設(shè)備的硬件工程師需要一個(gè)支持手機(jī)碰一碰配網(wǎng)、同時(shí)能維護(hù)長(zhǎng)連接的小體積方案。做可穿戴設(shè)備、智能門鎖、資產(chǎn)追蹤標(biāo)簽的開(kāi)發(fā)者對(duì)PCB面積敏感但又不想要兩顆芯片來(lái)回調(diào)試。喜歡DIY的玩家想把NFC音樂(lè)墻、NFC標(biāo)簽讀卡器、藍(lán)牙透?jìng)髂K塞進(jìn)一個(gè)巴掌大的外殼里省掉復(fù)雜布線。很多人會(huì)問(wèn)藍(lán)牙4.2不是老一代技術(shù)嗎為什么不用藍(lán)牙5.2或5.3 這個(gè)問(wèn)題我在后面詳細(xì)展開(kāi)但簡(jiǎn)單說(shuō)在某個(gè)特定場(chǎng)景下4.2的穩(wěn)定性、兼容性和功耗表現(xiàn)可能比追新更有優(yōu)勢(shì)。這個(gè)模塊恰好踩在夠用且好匹配的甜點(diǎn)上。不過(guò)說(shuō)實(shí)話把藍(lán)牙和NFC放在同一個(gè)超緊湊封裝里隨之而來(lái)的天線耦合、電源噪聲、協(xié)議調(diào)度問(wèn)題也不少。這篇文章我會(huì)把我從畫原理圖、調(diào)天線、跑協(xié)議棧到最終做產(chǎn)品驗(yàn)證的完整過(guò)程都捋出來(lái)包括那些文檔里不會(huì)寫的坑。2. 這塊模塊到底硬在哪——關(guān)鍵規(guī)格與設(shè)計(jì)邏輯拿到模塊后先別急著寫代碼務(wù)必把規(guī)格書和布局指導(dǎo)吃透。這類超緊湊模組最怕功能都實(shí)現(xiàn)了天線性能一塌糊涂。2.1 藍(lán)牙4.2的選擇理由穩(wěn)定性和協(xié)議棧成熟度藍(lán)牙4.2和藍(lán)牙5.0/5.1/5.2最大的區(qū)別在于4.2已經(jīng)支持BLE的經(jīng)典特性長(zhǎng)包、隱私、安全連接、LE Secure Connections但又沒(méi)有引入5.0之后復(fù)雜的編碼物理層、擴(kuò)展廣播、周期性同步等高階能力。對(duì)于很多輕量級(jí)數(shù)據(jù)透?jìng)?、指令控制設(shè)備來(lái)說(shuō)藍(lán)牙5的多廣告、長(zhǎng)距離模式反而是負(fù)擔(dān)因?yàn)閰f(xié)議棧狀態(tài)機(jī)更復(fù)雜調(diào)試難度更大低端MCU跑起來(lái)也費(fèi)勁。以我用的這款模塊為例它采用藍(lán)牙4.2雙模方案既支持BR/EDR經(jīng)典藍(lán)牙可以連接老式藍(lán)牙音箱、藍(lán)牙GPS也支持BLE 4.2適合低功耗傳感器。這種雙模支持很重要因?yàn)槲沂诸^還有一些舊的外設(shè)只有經(jīng)典藍(lán)牙協(xié)議。實(shí)際測(cè)試中BLE廣播間隔設(shè)置在20ms~50ms連接穩(wěn)定性相當(dāng)好實(shí)測(cè)1.5米間隔的連續(xù)丟包率低于0.1%。另一個(gè)選4.2的私心是功耗。BLE廣播電流約12μA睡眠時(shí)整套系統(tǒng)含NFC待機(jī)喚醒可以壓到5μA左右。藍(lán)牙5的擴(kuò)展廣播如果參數(shù)調(diào)不好反而會(huì)帶來(lái)額外功耗。2.2 NFC前端的關(guān)鍵參數(shù)14443A/15693協(xié)議差異和天線匹配NFC部分通常支持ISO 14443A和ISO 15693兩種主流協(xié)議。熱詞里就有人問(wèn)nfc的15693/14443a協(xié)議的區(qū)別這里一次性講清楚協(xié)議標(biāo)準(zhǔn)典型芯片工作頻率通信距離數(shù)據(jù)速率常見(jiàn)場(chǎng)景ISO 14443AMifare Classic、NTAG21x13.56 MHz約4~10cm106kbps ~ 848kbps門禁卡、公交卡、NFC標(biāo)簽ISO 15693ICODE SLI、TI Tag-it13.56 MHz約10~50cm讀卡器功率大時(shí)更遠(yuǎn)6.6kbps ~ 26kbps圖書管理、資產(chǎn)盤點(diǎn)、工業(yè)標(biāo)簽14443A的通信距離短但速度快抗干擾能力強(qiáng)15693的優(yōu)點(diǎn)是讀卡距離遠(yuǎn)適合做倉(cāng)儲(chǔ)盤點(diǎn)但數(shù)據(jù)速率偏低、手機(jī)兼容性略差。在超緊湊模塊里NFC天線通常設(shè)計(jì)成PCB線圈或FPC天線。設(shè)計(jì)時(shí)一定要看模塊廠商提供的參考天線匹配值因?yàn)樘炀€周邊地平面、外殼金屬件都會(huì)影響諧振頻率。調(diào)試NFC天線時(shí)我用網(wǎng)絡(luò)分析儀測(cè)諧振點(diǎn)如果中心頻率漂移超過(guò)13.56MHz ± 2MHz就需要調(diào)整匹配電容。之前遇到過(guò)一個(gè)問(wèn)題把NFC天線放在電池旁邊諧振點(diǎn)從13.56MHz掉到12.5MHz導(dǎo)致手機(jī)根本無(wú)法讀卡。后來(lái)把天線遠(yuǎn)離電池、且在地層開(kāi)槽clearance zone諧振才恢復(fù)正常。2.3 引腳排布與供電設(shè)計(jì)經(jīng)驗(yàn)超緊湊模塊的引腳往往只有0.8mm或1.27mm間距手工焊接難度大但做產(chǎn)品時(shí)適合回流焊。關(guān)鍵引腳一般包括藍(lán)牙UART TX/RX用于AT指令控制或數(shù)據(jù)透?jìng)?。NFC I2C接口用于連接NFC標(biāo)簽或讀取外部NFC控制器狀態(tài)。喚醒/中斷引腳NFC場(chǎng)檢測(cè)中斷和BLE連接事件中斷。天線引腳或PCB天線接頭。電源設(shè)計(jì)上特別提醒一句藍(lán)牙和NFC不要共用一根LDO輸出而不加濾波。NFC讀卡器發(fā)射13.56MHz載波時(shí)電流尖峰很大如果和藍(lán)牙射頻共用電源軌會(huì)導(dǎo)致藍(lán)牙的射頻性能惡化、靈敏度下降。我的做法是給NFC模擬前端單獨(dú)加一顆低壓差線性穩(wěn)壓器LDO或π型濾波同時(shí)讓藍(lán)牙VDD與NFC VDD保持一定隔離。3. 快速跑通第一個(gè)Demo從模塊到手機(jī)能連能刷不看文檔直接上手光靠猜是玩不轉(zhuǎn)的。這里我把整個(gè)流程濃縮成一套可復(fù)現(xiàn)的步驟讓你少走兩周彎路。3.1 硬件連接天線的物理布局是命門如果是評(píng)估板或自己畫的PCB第一件事就是按照模塊規(guī)格書要求留出天線凈空區(qū)。藍(lán)牙天線下方絕對(duì)不能鋪銅NFC天線周圍也要避開(kāi)大的金屬件和走線。很多人在軟件怎么也調(diào)不通最后發(fā)現(xiàn)是天線被地平面干掉。我用的超緊湊模塊同時(shí)引出兩個(gè)天線接口一個(gè)是藍(lán)牙PCB天線的饋點(diǎn)另一個(gè)是NFC線圈的焊盤。我畫的第一版PCB把NFC線圈放在了板子一角離USB座太近結(jié)果USB金屬外殼嚴(yán)重吸波導(dǎo)致NFC讀寫距離只有不到1cm。后來(lái)重新布局把NFC線圈放到板子邊緣、USB座在另一側(cè)距離才達(dá)到4cm以上。連接藍(lán)牙UART時(shí)常用電平是3.3V如果主控是5V必須加電平轉(zhuǎn)換。我試過(guò)直接接5V Arduino模塊當(dāng)場(chǎng)冒煙。還有調(diào)試串口的TX/RX需要交叉連接不要以為都叫TX就直連這種低端錯(cuò)誤最容易忽略。3.2 手機(jī)串口終端調(diào)試藍(lán)牙Serial Bluetooth Terminal的玩法模塊上電后一般會(huì)以通用藍(lán)牙無(wú)線電或具體模塊名稱存在于手機(jī)藍(lán)牙列表里。早期調(diào)試階段我建議直接用Android手機(jī)上的Serial Bluetooth Terminal軟件來(lái)發(fā)AT指令。這個(gè)軟件允許你選擇SPP經(jīng)典藍(lán)牙或BLE連接。因?yàn)樗{(lán)牙4.2是雙模這兩種都能連接。具體步驟模塊上電確認(rèn)藍(lán)牙指示燈在閃爍處于可發(fā)現(xiàn)狀態(tài)。打開(kāi)Serial Bluetooth Terminal在設(shè)備列表里找到模塊點(diǎn)擊配對(duì)密碼一般是0000或1234。連接成功后發(fā)送AT如果模塊回復(fù)OK說(shuō)明UART通道正常。通過(guò)串口發(fā)送ATNAMEMyModule可以改名ATBLEADVON可以開(kāi)啟或關(guān)閉廣播。如果連接不上優(yōu)先排查模塊是否退出廣播模式手機(jī)是否已保存了舊配對(duì)信息之前我遇到一個(gè)非常詭異的現(xiàn)象手機(jī)配對(duì)過(guò)一次后再上電就連不上排查半天發(fā)現(xiàn)是模塊在配對(duì)成功后自動(dòng)關(guān)閉了廣播需要先刪除藍(lán)牙配對(duì)記錄再重新掃描。Serial Bluetooth Terminal還支持發(fā)送十六進(jìn)制和自定義指令對(duì)于調(diào)試NFC時(shí)向模塊發(fā)送APDU指令非常有用。我甚至用它來(lái)測(cè)試NFC卡片的扇區(qū)讀寫省去寫安卓App的麻煩。3.3 用ESP32擴(kuò)展NFC通信跨界組合的實(shí)用方法熱詞里有一條是esp32開(kāi)發(fā)板擴(kuò)展nfc通信這正好踩在我的經(jīng)驗(yàn)上。ESP32自帶了藍(lán)牙但傳統(tǒng)只支持BLE 4.2但沒(méi)有板載NFC。如果手頭有ESP32想把它和這顆超緊湊藍(lán)牙NFC模塊結(jié)合關(guān)鍵是把模塊的NFC I2C接口接到ESP32的I2C總線同時(shí)把藍(lán)牙UART接到ESP32的另一個(gè)UART。推薦結(jié)構(gòu)ESP32 --I2C-- 模塊NFC芯片讀取NTAG/ISO15693卡片 ESP32 --UART-- 模塊藍(lán)牙串口與手機(jī)透?jìng)髟贓SP32上寫代碼時(shí)使用Arduino框架或ESP-IDF都行。讀取NFC標(biāo)簽時(shí)模塊通常會(huì)把NFC芯片映射為I2C從設(shè)備ESP32直接時(shí)序讀取即可。我常用的偽代碼邏輯#include Wire.h #define NFC_IRQ_PIN 4 void setup() { Wire.begin(21, 22); // SDA, SCL pinMode(NFC_IRQ_PIN, INPUT); Serial.begin(115200); } void loop() { if (digitalRead(NFC_IRQ_PIN)) { // 讀取NFC FIFO uint8_t buf[64]; readNFC(buf, sizeof(buf)); // 解析NDEF或直接透?jìng)?} }實(shí)際上很多模塊自帶NFC控制器固件會(huì)直接提供檢測(cè)到新卡并返回UID的推送消息省去自己解析底層時(shí)序。我用ESP32做了一套藍(lán)牙配網(wǎng)NFC一鍵連接的demo手機(jī)碰一下NFC標(biāo)簽標(biāo)簽里寫入WiFi的SSID和密碼ESP32讀取后自動(dòng)連接WiFi同時(shí)藍(lán)牙通道用于手機(jī)App遠(yuǎn)程控制。這套流程跑通后產(chǎn)品的開(kāi)機(jī)體驗(yàn)就從手動(dòng)輸密碼變成了碰一碰搞定。4. NFC功能實(shí)戰(zhàn)讀標(biāo)簽、解碼、寫音樂(lè)墻與安全邊界NFC的現(xiàn)實(shí)價(jià)值不只是刷門禁它還能做很多有意思的事但做之前必須理解數(shù)據(jù)在NFC芯片里是怎么存的。4.1 NFC標(biāo)簽的Page0~Page3到底是什么NFC類型2標(biāo)簽比如NTAG215內(nèi)部存儲(chǔ)是按頁(yè)組織的每頁(yè)4字節(jié)。熱詞里提到的nfc page0: 0x00, page1:0x10, page2:0x20, page3:0x30其實(shí)是一張地址映射表的簡(jiǎn)寫從Page0到Page3起始地址分別是0x00、0x10、0x20、0x30。但注意這里的頁(yè)在不同芯片里定義不同NTAG系列的Page大小是4字節(jié)因此常見(jiàn)地址映射是Page 0: 廠商信息/UID通常前4字節(jié)是UIDPage 1: UID的剩余字節(jié)和BCC校驗(yàn)Page 2: 內(nèi)部數(shù)據(jù)/鎖定字節(jié)Page 3: 容量描述/CCCapability Container一般固定為0xE1 0x10 0x06 0x00表示這是一個(gè)NDEF格式的標(biāo)簽。用NFC解碼工具讀一張NTAG215時(shí)你會(huì)發(fā)現(xiàn)很多工具會(huì)直接按起始地址來(lái)顯示頁(yè)面。如果看到Page0顯示04:xx:xx:xx基本就是UID開(kāi)頭為04代表這是NXP原廠的NFC標(biāo)簽。自己寫代碼解碼時(shí)可以使用標(biāo)準(zhǔn)的NDEF協(xié)議。比如用手機(jī)寫一張包含URL的標(biāo)簽讀出來(lái)的NDEF消息是這樣D1 02 14 55 03 6E 66 63 2E 6D 65 2F 61 62 63 64 ...其中D1是NDEF Header02是記錄長(zhǎng)度55表示URI03是URI前綴修改碼后面跟的就是URL后綴。這個(gè)編碼規(guī)則網(wǎng)上有資料但我在博客里提醒如果你用JavaH5實(shí)現(xiàn)NFC標(biāo)簽功能最好使用Android的NdefMessage API而不是手動(dòng)拼字節(jié)因?yàn)椴煌瑥S商尤其國(guó)產(chǎn)芯片可能存在字節(jié)序差異。4.2 自制NFC音樂(lè)墻酷我/酷狗歌曲快捷鏈接與NTAG215熱詞里有一條非常接地氣的需求酷我音樂(lè)歌曲快捷鏈接用nfc 215芯片diy音樂(lè)墻:酷狗音樂(lè)自動(dòng)播放全攻略。我實(shí)測(cè)過(guò)這個(gè)玩法原理并不復(fù)雜在手機(jī)酷我/酷狗App里找到你想要的歌曲點(diǎn)擊分享復(fù)制鏈接。將鏈接轉(zhuǎn)換成NFC標(biāo)簽?zāi)茏R(shí)別的NDEF格式說(shuō)白了就是寫一個(gè)URI記錄。用支持NTAG215的NFC讀寫器或手機(jī)App把URL寫入215芯片。將標(biāo)簽貼到墻上或卡片上手機(jī)碰一碰就會(huì)自動(dòng)打開(kāi)App并播放該歌曲。注意很多音樂(lè)App直接分享出來(lái)的鏈接是短鏈接可能直接喚起App但有些鏈接被微信攔截引導(dǎo)用戶跳轉(zhuǎn)到瀏覽器。這時(shí)最好用手機(jī)自帶瀏覽器打開(kāi)點(diǎn)擊后驗(yàn)證是否能喚起App。實(shí)操時(shí)我遇到過(guò)兩個(gè)坑一是部分手機(jī)在鎖屏狀態(tài)下NFC碰一碰不會(huì)解鎖屏幕需要先亮屏解鎖才能觸發(fā)二是NTAG215有48頁(yè)但用戶數(shù)據(jù)區(qū)從Page4到Page39可以存很長(zhǎng)的URL但如果URL太長(zhǎng)超過(guò)數(shù)據(jù)區(qū)容量寫入就會(huì)失敗。音樂(lè)鏈接一般都短完全夠用。DIY音樂(lè)墻時(shí)我用的是普通白卡加手寫標(biāo)簽貼打印好封面后貼在墻上然后用手機(jī)NFC批量寫入。整個(gè)過(guò)程像在裝飾房間但又帶點(diǎn)極客氣質(zhì)非常適合送人或者做兒童房互動(dòng)。4.3 NFC中繼攻擊到底是什么如何防熱詞里出現(xiàn)了nfc中繼攻擊這是安全圈的老話題。中繼攻擊的原理是兩個(gè)NFC設(shè)備通過(guò)無(wú)線電長(zhǎng)距離轉(zhuǎn)發(fā)把近場(chǎng)通信延伸到遠(yuǎn)處。經(jīng)典場(chǎng)景是你拿著門禁卡站在門外攻擊者用一個(gè)讀卡器貼近你的卡讀卡器把數(shù)據(jù)通過(guò)藍(lán)牙/WiFi傳輸給另一個(gè)模擬設(shè)備模擬設(shè)備貼在門禁讀卡器上從而開(kāi)鎖。因?yàn)镹FC本身沒(méi)有防御中繼的物理機(jī)制所以真正的防御手段是上層應(yīng)用協(xié)議門禁系統(tǒng)引入主動(dòng)式安全消息例如每次讀卡時(shí)讀卡器發(fā)送一個(gè)隨機(jī)數(shù)卡片必須用內(nèi)部密鑰解密后返回響應(yīng)而中繼鏈路無(wú)法實(shí)時(shí)完成這個(gè)加密運(yùn)算。移動(dòng)支付引入動(dòng)態(tài)令牌銀行卡/手機(jī)支付的token每過(guò)一段時(shí)間刷新即使中繼數(shù)據(jù)也無(wú)法重復(fù)使用。產(chǎn)品開(kāi)發(fā)者不要在NFC標(biāo)簽里明文保存授權(quán)信息比如把用戶ID或門禁卡號(hào)直接存到NTAG標(biāo)簽里這是極不安全的因?yàn)閺?fù)制可太容易了。回到這款超緊湊模塊它在設(shè)計(jì)上應(yīng)該支持對(duì)NFC數(shù)據(jù)流的加密保護(hù)。但開(kāi)發(fā)者更需要意識(shí)到NFC只解決靠近這個(gè)動(dòng)作安全需要更上層來(lái)保證。比如我們這個(gè)模塊的藍(lán)牙部分支持LE Secure ConnectionsNFC作為初始握手交換密鑰后續(xù)藍(lán)牙通信使用長(zhǎng)密鑰加密這樣即使NFC被中繼竊聽(tīng)也不會(huì)泄露實(shí)際密鑰。這也是我強(qiáng)烈建議NFC配網(wǎng)藍(lán)牙加密通信組合的原因。5. 進(jìn)階玩法與踩坑記錄藍(lán)牙GPS輸出、天線不穩(wěn)和批量測(cè)試跑通基礎(chǔ)demo后你可能會(huì)想做一些更野的事比如讓藍(lán)牙透?jìng)鱃PS數(shù)據(jù)或者做幾個(gè)樣品看量產(chǎn)穩(wěn)定性。5.1 藍(lán)牙做GPS數(shù)據(jù)輸出別被NMEA格式坑了“bluetooth gps output”這個(gè)熱詞說(shuō)明很多人想讓藍(lán)牙模塊把GPS坐標(biāo)傳出去。常見(jiàn)的方案是GPS模塊如Ublox NEO-M8N通過(guò)串口輸出NMEA 0183協(xié)議然后連接藍(lán)牙模塊的UART通過(guò)SPP/BLE透?jìng)鹘o手機(jī)用手機(jī)端軟件如Serial Bluetooth Terminal接收串口號(hào)數(shù)據(jù)顯示。這里面最大的坑是波特率和數(shù)據(jù)格式錯(cuò)位。GPS模塊默認(rèn)波特率可能是9600、38400或115200而藍(lán)牙模塊的UART固化在某個(gè)波特率。必須確保兩邊一致。另外NMEA句子的最小單元是ASCII字符包含較多“逗號(hào)”如果藍(lán)牙模塊的透?jìng)骶彌_區(qū)太小長(zhǎng)句子會(huì)被截?cái)鄬?dǎo)致手機(jī)端解析不了。我用的這顆模塊UART緩沖區(qū)是128字節(jié)而一條完整的NMEA RMC句子約80字節(jié)能放下。但如果你同時(shí)開(kāi)啟GGA和RMC等四五個(gè)語(yǔ)句數(shù)據(jù)會(huì)持續(xù)涌入串口緩沖區(qū)會(huì)溢出。解決辦法是在GPS模塊上關(guān)閉多余語(yǔ)句只保留$GPRMC或者把GPS模塊的輸出串口波特率降下來(lái)。實(shí)測(cè)下來(lái)BLE的串口透?jìng)髟?15200下也會(huì)有丟包風(fēng)險(xiǎn)建議把透?jìng)魉俾式档?600或19200GPS每秒輸出一次句子完全夠用。5.2 NFC天線不穩(wěn)定從諧振頻率和供電雜訊兩個(gè)方向查遇到NFC讀寫距離突然縮水優(yōu)先懷疑三個(gè)地方天線諧振漂移用手寫筆或頻譜分析儀采樣天線線圈兩端的信號(hào)。如果中心頻率偏了調(diào)整匹配電容。常見(jiàn)做法是先并聯(lián)一個(gè)22pF電容看距離變化趨勢(shì)再?zèng)Q定加還是減。天線周邊有動(dòng)態(tài)變化的金屬物體比如你放了塊磁鐵、或者手機(jī)殼帶磁吸會(huì)改變天線負(fù)載。之前測(cè)試時(shí)發(fā)現(xiàn)手機(jī)只要靠近NFC天線讀卡距離就會(huì)從5cm變成2cm后來(lái)發(fā)現(xiàn)是手機(jī)內(nèi)置NFC和外部模塊的載波互相干擾。解決方法是把模塊和手機(jī)距離拉開(kāi)或者調(diào)整天線位置錯(cuò)開(kāi)。供電不穩(wěn)NFC讀卡時(shí)功耗突然升高如果電源線太長(zhǎng)或電容不夠電壓跌落會(huì)導(dǎo)致NFC芯片內(nèi)部振蕩器失鎖。在NFC_VDD引腳旁放一個(gè)100μF的鉭電容和0.1μF高頻瓷片電容能明顯改善。在批量測(cè)試中我會(huì)用一個(gè)工裝自動(dòng)跑NFC讀卡循環(huán)大概讀取1000次統(tǒng)計(jì)失敗率和平均距離。標(biāo)準(zhǔn)是失敗率低于0.2%。如果測(cè)試中發(fā)現(xiàn)某個(gè)模塊的失敗率偏高基本可以判定是天線的生產(chǎn)工藝差異比如線圈間距不均、油墨厚度偏差等而不是芯片問(wèn)題。5.3 批量生產(chǎn)時(shí)的校準(zhǔn)與測(cè)試流程如果你不只是玩一兩個(gè)樣品而是要做幾十個(gè)模塊或產(chǎn)品下面的經(jīng)驗(yàn)值得參考出廠校準(zhǔn)每塊板子都要做NFC諧振頻率校準(zhǔn)通過(guò)調(diào)節(jié)匹配電容或用微調(diào)電容使天線諧振點(diǎn)落在13.56MHz ± 0.2MHz。藍(lán)牙RF指標(biāo)抽檢至少抽測(cè)發(fā)射功率、頻率誤差和接收靈敏度。沒(méi)有專業(yè)儀器時(shí)可以用手機(jī)在5米、10米距離做丟包測(cè)試作為粗篩。燒錄唯一ID和密鑰結(jié)合NFC的UID和藍(lán)牙MAC在模組出廠時(shí)寫入設(shè)備身份信息避免后續(xù)產(chǎn)品被冒用。另外對(duì)于量產(chǎn)來(lái)說(shuō)首選回流焊而不是手工焊超緊湊模塊的引腳間距很小手工焊接容易橋連。我第一版測(cè)試板就是手工焊結(jié)果NFC部分虛焊導(dǎo)致讀卡時(shí)好時(shí)壞一直以為是天線問(wèn)題最后用放大鏡一看一個(gè)引腳根本沒(méi)吃錫。所以千萬(wàn)別省這一步檢查。6. 到底要不要用這種二合一模塊我的建議最后說(shuō)說(shuō)我的取舍。如果你也在評(píng)估是否要在項(xiàng)目里采用這種Ultra-Compact Bluetooth 4.2 NFC Module可以從幾個(gè)維度來(lái)判斷如果你有極端的面積限制比如做智能戒指、智能鑰匙扣、可穿戴標(biāo)簽二合一方案天然有優(yōu)勢(shì)因?yàn)閺S商已經(jīng)幫你把藍(lán)牙和NFC天線做了隔離優(yōu)化不用自己再折騰布局。如果你的NFC和藍(lán)牙需要深度聯(lián)動(dòng)比如NFC碰一碰后藍(lán)牙自動(dòng)連接某個(gè)設(shè)備這種聯(lián)動(dòng)往往涉及底層狀態(tài)機(jī)拆分模塊你需要額外處理兩個(gè)芯片之間的通信而二合一模塊通常已經(jīng)內(nèi)部封裝好了聯(lián)動(dòng)邏輯甚至NFC檢測(cè)到外部標(biāo)簽后可以直接通過(guò)GPIO喚醒藍(lán)牙。如果你已經(jīng)很熟悉藍(lán)牙和NFC各自的調(diào)試且產(chǎn)品空間充裕那分開(kāi)買模塊、自己做天線隔離可能成本更低也更靈活。二合一模塊往往因?yàn)榧啥雀邌蝺r(jià)略貴而且要接受廠商固定的管腳映射。我個(gè)人在實(shí)際項(xiàng)目中更偏愛(ài)集成方案但這不意味著省心。二合一模塊最考驗(yàn)人的是天線干擾和軟件狀態(tài)同步。在開(kāi)發(fā)初期最好就預(yù)留獨(dú)立的NFC天線匹配網(wǎng)絡(luò)和藍(lán)牙天線的π型匹配焊盤方便后期調(diào)優(yōu)。這個(gè)模塊后續(xù)還能擴(kuò)展的方向比如通過(guò)NFC標(biāo)簽啟動(dòng)配網(wǎng)流程再通過(guò)手機(jī)App通過(guò)藍(lán)牙OTA升級(jí)固件或者做NFC防偽標(biāo)簽每次掃碼時(shí)通過(guò)藍(lán)牙向云端請(qǐng)求動(dòng)態(tài)令牌這些都是很有意思的玩法。踩了幾次坑之后我最大的體會(huì)是把NFC和藍(lán)牙放一起不只是硬件堆疊更是交互邏輯的重塑。先想清楚用戶到底想要哪種交互再?zèng)Q定具體怎么實(shí)現(xiàn)比單純追參數(shù)靠譜得多。