資料包實戰(zhàn):從原理圖到DEMO代碼)
簡介復旦微電子的FM17550開發(fā)資料包面向NFC/RFID硬件設計及嵌入式開發(fā)工程師適合正在選型評估、需要電路參考或驅動移植的中級開發(fā)者使用。壓縮包共138個文件大小僅3.74MB以PDF硬件手冊、C/H源代碼、Keil工程文件uvproj及編譯生成的hex/axf等為主其中C/H源碼文件合計超過50個PDF文檔5份并附有Demo板絲印圖和用戶手冊方便對照解讀整個工程。已有796人學習/下載。借助參考設計原理圖和PCB圖可快速完成芯片外圍電路搭建與天線匹配參考例程源碼則展示了寄存器配置、卡片尋卡與認證等關鍵流程便于直接移植到門禁、消費機、讀卡模塊等產(chǎn)品中。資料包小但五臟俱全適合作為項目啟動時的參考起點。1. 項目概述與開發(fā)資料包整體解讀1.1 FM17550是什么能用在哪些場景干嵌入式這些年最怕的不是芯片難調而是拿到一份資料不知道從哪下手。前陣子整理網(wǎng)盤翻出一個標注“FM17550開發(fā)資料包”的zip解壓后里面躺著PDF、原理圖、PCB、程序DEMO東西很全但堆在一起反而讓人有點無從下手。FM17550是復旦微電子推出的一顆13.56MHz頻段非接觸式讀寫卡芯片也就是我們常說的NFC芯片。它把射頻收發(fā)和模擬前端集成在芯片內(nèi)部外部MCU只需要通過SPI、UART或I2C其中一種接口發(fā)指令就能完成尋卡、讀寫、認證等操作。很多做門禁、考勤、售飯機、智能柜、充電樁、甚至小家電NFC配置功能的朋友都會用它來做讀寫卡前端。這顆芯片比較討喜的地方在于它的寄存器級指令和NXP RC系列高度兼容。如果你以前調過RC522或者類似芯片換到FM17550上的學習成本很低如果你是完全新手資料包里的參考設計和DEMO代碼也能讓你快速跑通流程。加上復旦微的芯片在供貨和價格上對中小項目更友好所以它在國產(chǎn)化替代和成本敏感的項目里出現(xiàn)頻率很高。1.2 解壓后先看哪份文件四類資料的優(yōu)先級很多人拿到壓縮包就直奔代碼結果燒錄之后發(fā)現(xiàn)讀不到卡回頭再翻PDF一來一回浪費半天。我的經(jīng)驗是嚴格按照“芯片手冊 → 原理圖 → PCB → DEMO代碼”的順序來讀先建立硬件層面的整體概念再去看代碼很多問題能提前避開。資料類型主要內(nèi)容核心用途優(yōu)先級PDF文檔芯片數(shù)據(jù)手冊、應用筆記引腳定義、寄存器、時序、電氣參數(shù)第一優(yōu)先原理圖參考設計的完整電路芯片外圍電路、天線匹配參考第二優(yōu)先PCB圖布局布線工程文件天線走線方式、器件擺放參考第三優(yōu)先DEMO代碼完整示例工程驅動移植、功能驗證的起點拿到硬件后重點看這里有個小提示原理圖和PCB圖通常是PDF導出版或某個EDA工具的工程版如果EDA版本不同打不開先看PDF版不必強求改工程。真正決定你能不能把硬件調通的最關鍵文件是數(shù)據(jù)手冊里的天線匹配和寄存器配置部分這部分我放在下一節(jié)展開說。2. 硬件參考設計深度解析原理圖與PCB圖應該怎么看2.1 原理圖里必須重點看懂的四個部分FM17550外圍電路不復雜但每一處都有講究。第一是電源和去耦。芯片的數(shù)字和模擬部分都要供電參考設計一般會在每個電源引腳旁邊就近放0.1μF電容如果系統(tǒng)里還有其他大功耗器件建議再并一個10μF左右的電容。DIY時隨便飛線可能也能工作但量產(chǎn)設計上去耦電容離引腳遠了會導致電源紋波大讀卡距離會明顯縮短。第二是天線匹配電路。這是整個原理圖里最核心的部分。FM17550內(nèi)部有發(fā)射驅動天線匹配網(wǎng)絡一般由串聯(lián)電容、并聯(lián)電容和電阻組成原理圖上天線接口旁邊那一小撮電容電阻就是用來把天線線圈的阻抗調到13.56MHz諧振點的。不同板廠、不同板材、不同天線形狀匹配值都會不一樣參考設計給的是標準值實際做板后還要微調。第三是接口模式配置。FM17550支持SPI、UART、I2C三種接口具體使用哪個由引腳電平配置決定。原理圖上能看到這些配置引腳的上下拉電阻看的時候要記錄下當前設計選的是哪種接口因為這不光影響原理圖連接還直接影響DEMO代碼里你要調的底層驅動。最典型的“發(fā)命令沒響應”問題十有八九就是接口模式?jīng)]對上。第四是復位和中斷引腳。復位引腳可以做硬復位用中斷引腳可以在卡片進入或離開射頻場時通知MCU省去MCU不斷輪詢的麻煩。參考設計里通常會把這兩個引腳引到MCU的GPIO上實際項目中如果MCU引腳不夠中斷引腳可以省掉但不建議把復位省掉調試時會非常需要。2.2 PCB布局布線的細節(jié)與常見坑原理圖看完了再來看PCB重點看四個方面天線走線區(qū)下面要有足夠的凈空不能大面積鋪銅或走其他信號線否則會直接把射頻能量吃掉讀卡距離變短甚至讀不了卡。天線線圈盡量走頂層走線寬度、拐角和圈數(shù)保持一致參考設計里天線的形狀和尺寸是根據(jù)匹配電路算出來的改PCB時最好不要隨意改天線面積。匹配電容電阻要盡量靠近天線饋線入口電源去耦電容靠近芯片電源腳晶振靠近芯片晶振腳走線短而粗。如果產(chǎn)品有金屬外殼要在結構設計時就給天線留出“呼吸區(qū)”金屬結構件、螺絲、電池這類東西離天線太近都會讓頻率偏移。我見過很多“模塊單獨測驗完全正常裝進外殼就廢了”的案例十有八九是天線下方的凈空被破壞或者金屬件靠得太近。這些問題原理圖上看不出來必須結合實際結構來考慮。3. DEMO程序代碼核心邏輯拆解3.1 DEMO程序是什么拿到代碼先看什么很多人第一次接觸“DEMO程序”這個詞甚至會跑到小紅書去問“直接打開程序代碼是什么意思”。其實所謂DEMO就是芯片廠商或方案公司為了讓你快速驗證硬件、熟悉協(xié)議棧提前寫好的示例代碼。FM17550開發(fā)包里帶的DEMO一般會包含初始化芯片、尋卡、防沖突、選卡、認證、讀寫塊這幾個功能的完整例程。拿到代碼不要急著編譯先把源碼目錄過一遍。通常結構是一個platform層封裝你所用MCU的SPI/UART/I2C底層接口一個芯片驅動層實現(xiàn)FM17550的寄存器讀寫和命令封裝再往上就是main函數(shù)里的實驗流程。搞清楚這個分層后面移植到自己的板子上會非常省事。3.2 一條完整的Mifare卡讀寫流程以最常見的Mifare Classic S50卡為例整個流程固定為初始化芯片配置工作模式、天線開關等參數(shù)。尋卡發(fā)送PCD_REQUEST命令檢測天線場里有沒有卡。防沖突如果多張卡在場通過防碰撞命令選出一張。選卡對選出的卡返回UID等參數(shù)。認證用密鑰對扇區(qū)做密碼認證。讀寫認證通過后對數(shù)據(jù)塊執(zhí)行讀寫操作。在DEMO代碼里這幾個步驟通常對應PcdRequest、PcdAnticoll、PcdSelect、PcdAuthState、PcdRead、PcdWrite這幾個函數(shù)。你不需要重新發(fā)明輪子先把這些函數(shù)調通再根據(jù)業(yè)務需求改上層邏輯就行。這里有一個容易忽略的關鍵點尋卡方式有“普通尋卡”和“防沖突尋卡”兩種。一些DEMO默認只寫普通尋卡如果你的應用場景是多張卡可能同時出現(xiàn)一定要用帶防沖突的循環(huán)版本否則卡一多就亂。這個篩選思路和“韓信點兵”的逐個排除邏輯有些類似每循環(huán)一輪識別一張卡直到處理完場上所有卡為止。3.3 輪詢和中斷怎么選DEMO代碼里通常有兩種檢測卡的常用方式。一種是MCU死循環(huán)輪詢反復發(fā)尋卡指令代碼簡單缺點是一直占用MCU時間、功耗高。另一種是用FM17550的中斷引腳卡片進場或離場時芯片拉一個電平信號給MCUMCU在中斷里發(fā)尋卡指令靈敏度高還省電。如果你的產(chǎn)品有低功耗需求我強烈建議用中斷方式并且在進場中斷里只做標記和簡單處理把耗時操作放到主循環(huán)或任務里避免中斷處理時間過長影響系統(tǒng)其它功能。4. 從零跑通一套FM17550 DEMO的實操記錄4.1 硬件連接和準備我這次測試用了一塊第三方FM17550模塊主控用STM32通過SPI接口連接。接線非常簡單對照原理圖和數(shù)據(jù)手冊的引腳定義按下表連接即可MCU引腳FM17550模塊引腳說明3.3VVCC電源GNDGND共地PA5SCKSPI時鐘PA6MISOSPI數(shù)據(jù)輸出PA7MOSISPI數(shù)據(jù)輸入PA4CS片選PA3RST復位PA2IRQ中斷可選用連好之后用一張Mifare S50卡片或者任何支持NFC-A模式的手機模擬卡就可以開始測試。上電前先用萬用表確認模塊的3.3V和GND沒有短路這個動作雖然基礎但能省掉后面一大半排查時間。4.2 編譯、燒錄與驗證流程在DEMO工程里把硬件平臺的宏定義改成當前主控型號確認SPI引腳配置和你的接線一致然后編譯燒錄。串口調試助手波特率一般設115200打開后能看到類似“Place the card on the antenna”的提示。把卡放到天線上如果一切正常日志會依次出現(xiàn)尋卡成功、UID、認證成功、讀寫數(shù)據(jù)的打印。如果串口沒有任何輸出先檢查電源和復位腳如果輸出“尋卡失敗”重點查天線匹配和卡片擺放位置。這個階段我強烈建議準備一個簡單的Python串口腳本把收到的UID和塊數(shù)據(jù)格式化打印看現(xiàn)場數(shù)據(jù)比肉眼對著串口助手方便得多import serial ser serial.Serial(COM3, 115200, timeout1) while True: data ser.readline().decode(errorsignore).strip() if data: print(data)幾十行pyserial就夠用很多項目里我甚至只靠這個腳本就完成了產(chǎn)線初檢。腳本的作用就是把原始串口數(shù)據(jù)變得可讀不用額外寫上位機。4.3 用示波器或萬用表快速驗證天線讀卡不穩(wěn)時可以用示波器測天線兩端的波形正常情況下在卡進入射頻場時能明顯看到13.56MHz載波被調制。如果沒有示波器也可以先拿萬用表量天線線圈的直流電阻一般幾歐姆到十幾歐姆之間如果電阻為零或者無窮大說明天線斷線或短路了這是排查問題最快的一步。5. 常見問題排查與移植心得5.1 讀不到卡先按這個順序排查讀不到卡是FM17550調試里出現(xiàn)頻率最高的問題絕大多數(shù)都能通過這張表解決現(xiàn)象可能原因排查處理芯片初始化失敗電源不對、晶振沒起振測VCC電壓用示波器看晶振波形有初始化但找不到卡天線匹配不對檢查匹配電容調整并聯(lián)電容能找到卡但認證失敗卡類型不匹配、密鑰不對確認用S50卡核對DEMO里的密鑰值讀卡距離很短天線凈空不夠、金屬干擾優(yōu)化PCB凈空調整匹配電路偶爾讀卡失敗供電紋波大、電源不穩(wěn)加強去耦檢查3.3V的帶載能力我印象最深的一次問題是客戶反饋“明明參考設計一模一樣為什么距離差很多”。后來對比才發(fā)現(xiàn)他們在PCB上把天線區(qū)下方鋪了大片地等于把天線輻射的能量短路掉了。把銅皮挖掉之后距離直接恢復。5.2 接口和移植過程中的三個坑第一DEMO代碼默認的通信接口不一定是你要用的接口。拿到資料先確認原理圖選的是SPI、UART還是I2C代碼里也要把對應的宏或驅動分支打開兩邊不一致時最常見的表現(xiàn)就是發(fā)命令沒響應、讀回來全是0xFF。第二MCU底層延時函數(shù)要準。FM17550很多命令之間有最小時間間隔要求如果延時不準確可能偶發(fā)卡死。建議用定時器級的延時函數(shù)不要用純編譯器優(yōu)化的空循環(huán)Release優(yōu)化等級不同時很容易跑飛。第三移植到自己MCU時盡量保留廠商DEMO的分層結構。底層只改接口函數(shù)協(xié)議棧部分不要大改。很多人在移植時覺得協(xié)議棧代碼“看不懂不順眼”重寫一遍之后引入一堆bug完全沒有必要。5.3 我的一些實操體會做NFC類產(chǎn)品硬件上最值得投入時間的其實是天線部分芯片和代碼反而相對成熟。FM17550這顆芯片的整體穩(wěn)定性在同類方案里表現(xiàn)不錯尤其是和RC系列兼容這點讓很多老項目遷移時幾乎可以零成本切換。再加上復旦微的資料包把原理圖、PCB和DEMO都放全了對工程師來說確實省心。最后再分享一個技巧如果你手上的項目只需要做卡號識別不涉及卡片數(shù)據(jù)寫入可以只用尋卡、防沖突、選卡三步不做密鑰認證量產(chǎn)時整個流程能快不少。判斷清楚業(yè)務需求很多時候比盲目照著DEMO完整跑一遍更重要這也是我做NFC幾年下來最深的體會。本文還有配套的精品資源點擊獲取