
简介复旦微电子FM17550 NFC读卡芯片开发资料包围绕该芯片整理了从硬件到软件的全套参考资源适合嵌入式硬件工程师、NFC模块开发者和电子设计竞赛团队。资料包含FM17550数据手册、硬件原理图与PCB设计文件、Demo板用户手册以及FM175xx示例例程能够帮助解决芯片外围匹配电路设计、天线调试、读卡程序编写等关键问题。包内文件共138个压缩包大小3.74MB。其中h与c文件是完整的工程源代码pdf文档涵盖芯片规格与使用说明pcb/原理图可直接用于硬件参考uvproj/uvopt等为Keil工程配置打开即可编译下载。资源浏览量已有796人次适合希望基于官方Demo快速搭建13.56MHz读卡器、深入了解FM17550寄存器配置与通信流程的开发者。通过对照例程与手册可大幅缩短驱动移植和硬件调试周期。 做NFC读卡器开发的朋友对复旦微电子的FM17550应该不陌生。这颗芯片在非接触式读写领域用得非常多尤其是门禁、消费机、读写器这类13.56MHz频段的产品基本属于国产替代里很能打的选择。最近我拿到一份FM17550的开发资料包里面有PDF硬件参考设计、原理图、PCB图和完整的程序代码DEMO文件正好最近在做相关项目就花时间把整套资料从头到尾梳理了一遍。这篇博文就围绕这套资料展开说说硬件设计上哪些地方不能踩坑、DEMO程序怎么快速跑通、以及我实际调试过程中遇到的各种问题。先给不了解的朋友简单交代一下背景。FM17550是复旦微电子推出的一款高度集成的NFC读写芯片支持ISO/IEC 14443A/B协议工作频率13.56MHz标配SPI、I2C、UART三种主机接口可读可写M1卡S50/S70、NFC标签等等。它和NXP的RC522在引脚和寄存器层面有很高的兼容性所以很多原本用RC522的设计可以直接切换过来。对我来说它最大的吸引力在于采购渠道稳定、成本更低而且调试工具和参考设计都比较完整对国内工程师来说非常友好。说回这份资料包。我拿到手第一感觉是“东西够全”PDF参考设计、原理图、PCB、固件DEMO全都有而且路径命名很有条理直接按文档、硬件、软件三层归类。如果你也刚拿到类似的资料包我建议不要急着打开程序去改代码先把硬件参考设计完整看一遍特别是天线匹配部分。有些朋友觉得程序能跑就行、硬件差不多得了结果后面读卡距离短、抗干扰差回头再改板子周期和成本都搭进去了。1. 内容整体设计与思路拆解1.1 资料包整体结构盘点与使用顺序先把这个资料包的结构聊透。复旦微官方的开发资料通常不是简单丢几个文件给你而是按“硬件设计——软件驱动——调试工具”三条线组织。这份资料也是如此主要包含四大部分PDF文档芯片数据手册、用户手册、硬件设计指南、天线设计规范个别版本还会附带勘误表和生产应用笔记硬件参考设计原理图源文件通常是OrCAD或AD格式和PCB图包含了完整的射频前端、天线匹配、电源电路和接口电路程序代码DEMO基于常见MCU平台STM32、51、Arduino等的驱动代码和应用例程包含寻卡、防冲突、选卡、认证、读写等完整流程其他辅助文件有时还包含上位机工具、调试说明、封装库等。这里有个使用顺序的建议先读数据手册里的“电气特性”和“接口说明”再看硬件设计指南里的天线匹配章节然后才是打开原理图逐个模块核对。最后再动DEMO代码。原因是FM17550这类射频芯片硬件设计会直接影响软件调试的难度。如果你一开始就在错误的硬件上调试很容易得出“芯片有问题”的错误结论。注意不同渠道流出的资料版本可能不同有的PDF是初版、有的是修订版。打开原理图之前先核对芯片型号尾缀FM17550、FM17550E、FM17550S等不同尾缀在个别电气参数上存在细微差别参考设计也可能有微调。1.2 为什么参考设计不能直接照抄很多人的习惯是拿到参考原理图直接复制粘贴改个丝印就发板了。FM17550的参考设计确实可以直接用但“直接用”和“理解后用”是两回事。参考设计里的天线匹配参数是基于官方测试板的天线尺寸和PCB叠层算出来的。你的板子如果改动了天线形状、线圈匝数、板厚、介质常数甚至铺铜距离天线的等效电感和Q值都会变。这时候如果还照搬元件的参数谐振频率可能就会偏掉表现就是读卡距离短或者灵敏度忽高忽低。正确的做法是把参考设计当成一个基准而不是最终答案。先把天线的尺寸和形状定下来再根据实际测量结果去调整匹配电容和电阻。FM17550的接收电路对天线Q值比较敏感Q值太高会导致带宽变窄、波形失真Q值太低又会降低读卡灵敏度。这个平衡点需要自己拿网络分析仪或者靠实际读卡距离去摸索。另外还有一个比较容易忽略的点——参考设计的层叠和你的实际制板参数往往不同。FM17550的参考板一般用双面板或四层板如果你改成不同厚度的板子天线线圈和匹配网络对地的寄生电容就会变化谐振点也会跟着漂移。所以资料给的参考值是一个很好的起点但不该被当成金科玉律。2. 硬件参考设计核心要点原理图与PCB图怎么读、怎么改2.1 原理图模块拆解从电源到天线FM17550的原理图可以清晰分成几个模块电源电路、晶振电路、主机接口、射频前端和天线匹配网络。逐个说。电源电路方面FM17550是3.3V供电数据手册里标称工作电压通常允许2.5V到3.6V的范围。参考设计里一般在电源输入端放一个LDO或者直接由系统3.3V供电然后加去耦电容组合典型的是0.1μF和10μF搭配。这里我要多说一句射频芯片的供电质量直接影响发射功率稳定性供电纹波太大的话读卡距离会明显缩水。如果你在系统里用了DC-DC给FM17550供电务必确认开关频率的纹波不会耦合到射频前端否则很容易出怪问题。晶振电路用的是13.56MHz无源晶振匹配电容一般取15pF到33pF具体值需要根据晶振的负载电容参数来决定。这里有个细节晶振的焊接和走线要尽量靠近芯片的OSCIN和OSCOUT引脚远离天线和射频走线否则容易造成频率牵引和辐射干扰。主机接口部分FM17550支持SPI、I2C和UART三种接口参考设计一般默认做成SPI接口因为SPI速率最高适合需要快速读写多扇区的场景。接口模式是通过引脚电平配置的具体在数据手册里有一张模式选择表。SPI模式下要注意MISO、MOSI、SCK、CS这四根线的上拉电阻以及电气电平是否和主控匹配。射频前端和天线匹配网络是整个原理图的核心。FM17550的天线驱动引脚是TX1和TX2接收引脚是RX参考设计里会有一组由电感和电容组成的匹配网络把芯片的射频输出阻抗变换到和天线线圈匹配同时在接收路径上做分压和滤波。官方参考值通常是几个并联电容串联一个电感的结构具体参数在你拿到不同版本资料时会略有不同。2.2 PCB布局布线关键细节射频走线、铺铜与过孔PCB设计是FM17550项目里最容易拉开差距的部分。我见过太多的板子原理图一模一样就是布板的人不同出来的读卡性能差一大截。关键点主要在以下几个地方天线区域禁铜天线线圈正下方和周围一定范围内不要走其他信号线不要铺铜否则高频磁场会在铜皮上感应涡流损耗能量。一般要求天线正反面都留出净空区。匹配网络就近摆放TX1/TX2到匹配网络、匹配网络到天线焊盘的走线尽量短而宽避免走线过长带来的寄生电感。晶振远离天线和射频走线前面提过晶振是13.56MHz的振荡源和射频同频干扰耦合后会直接影响接收灵敏度。模拟地和数字地处理FM17550的EPAD裸露焊盘是模拟地要和数字地单点连接。如果板上同时有MCU和继电器、电机等大电流器件要注意地平面分割防止数字噪声灌入射频地。过孔使用要克制天线走线如果需要换层会引入额外的寄生电感和电阻尽量在顶层直接走完。不可避免要打过孔时至少打两个以上过孔降低阻抗。说个我自己的踩坑经历第一版PCB为了节省空间在天线线圈下方走了一条I2C信号线结果读卡距离从4厘米直接掉到1厘米不到后来把信号线挪走、重新铺铜之后才恢复正常。所以PCB阶段多花点心思远比后面调匹配来得省事。2.3 天线尺寸与匹配参数怎么参考官方参考设计通常会附带一款指定尺寸的天线设计参数比如80mm×50mm的线圈4到5匝线宽0.5mm之类。如果你的产品结构允许直接采用这个尺寸那是最省事的直接抄匹配参数就行。但实际情况往往是你得根据外壳结构来定天线大小这时候就要自己算。天线线圈可以简化理解为一个电感它的电感量大约和匝数的平方成正比。电感量改变之后匹配电容就要相应调整以保持13.56MHz的谐振频率。最粗的估算公式是频率 f 1 / (2π√(LC))在目标频率13.56MHz下若天线的等效电感测得是2μH那谐振电容大致是C 1 / (4π² × f² × L) 1 / (4 × 9.8696 × 183.8736 × 2×10⁻⁶) ≈ 69pF这个只是LC谐振的粗略估算实际匹配网络里还有分压电阻、阻尼电阻和分布电容参与不能完全套公式但这个计算能帮你在初始选值时有个基准方向。提示没有网络分析仪的情况下最实用的办法是准备一组不同容值的电容比如47pF、56pF、68pF、82pF、100pF实际焊接测试读卡距离找到最佳值后固定下来。这个方法土但很有效。3. DEMO程序代码拆解与MCU平台快速移植3.1 DEMO工程结构与代码组织方式打开DEMO程序包第一眼看到的一般是工程文件夹和一堆源文件。复旦微官方的DEMO代码通常按“底层驱动 应用层例程”的方式组织。底层驱动里主要是fm17550.c和fm17550.h封装了寄存器读写、命令收发等基础函数应用层则是寻卡、防冲突、选卡、认证、读写扇区等完整的例程直接对应你产品要用的功能。代码风格上官方DEMO对时序的要求比较严格尤其是SPI通信的速率、延时参数的设置。有些MCU主频高、SPI分频配置不当导致通信速率超过FM17550的上限表现就是命令发送正常但读不到卡数据。这里需要额外注意代码里有没有平台相关的延时函数移植时记得改成你自己平台的实现。还有个实用的习惯下载到代码后先用逻辑分析仪或者示波器抓一下FM17550的SPI时序确认时钟极性和相位设置正确。FM17550的SPI模式一般是模式0CPOL0CPHA0但有的DEMO工程里可能配置成模式1这时候直接通信就会失败。3.2 从寻卡到读写核心流程逐个走一遍FM17550和M1卡的通信流程可以用几个关键命令串起来寻卡Request、防冲突Anticollision、选卡Select、认证Authentication、读写Read/Write。寻卡命令是0x26或0x52芯片发出载波并检测场内是否有卡片响应。这里有个参数要注意寻卡命令中的比特帧校验CRC是硬件自动完成的不需要软件计算。收到卡片的应答后返回的是ATQA数据表示卡片类型。防冲突命令是针对场内有多个卡片的情况FM17550使用基于序列号的逐位仲裁算法最终选出唯一一张卡拿到完整的4字节或7字节UID。选卡命令下发后卡片会返回SAK表示卡片是否支持ISO14443A-4等扩展协议。到这一步一张M1卡的通信链路就算建起来了。然后是认证。M1卡每个扇区有两个密钥KeyA和KeyB认证时需要通过FM17550的认证命令把6字节密钥和块地址发给卡片。认证成功后才可以对当前扇区的数据块进行读写操作。这里有个很容易踩的坑M1卡的块地址是绝对地址比如扇区0的数据块是块0到块3其中块0是厂商代码区包含UID只能读不能改扇区0的块3是控制块存放密钥和访问控制位改错了整张卡可能就废了。DEMO代码里读写操作一般都有完整的注释但很多人移植时会漏掉一个细节读块和写块之前都要重新认证。每次对不同的扇区操作或者对同一扇区切换读写权限时认证流程是必须重新做的。漏掉认证直接发读写命令大概率返回错误码0xFF或者干脆无响应。3.3 移植到自己的板子要改哪几处从DEMO工程移植到自己的硬件平台需要修改的地方其实不多但每一处都不能漏底层SPI或I2C/UART的初始化引脚定义、时钟使能、速率配置这些完全依赖你的MCU平台延时函数FM17550的命令执行时间通常在几毫秒到几十毫秒之间要确保延时精度可靠。用SysTick或者定时器实现不要用空循环硬等否则不同编译优化级别下行为会不一致中断引脚处理FM17550有IRQ引脚可以配置成中断方式或轮询方式。DEMO里一般用轮询项目量产时建议改成中断提高CPU利用率复位引脚FM17550的NRSTPD引脚可以复用为复位功能上电后要正确设置否则芯片可能处于异常状态。移植完成后的第一件事是先跑一个最基础的“寻卡测试”能读到卡号的ATQA和UID说明芯片初始化、SPI通信、天线工作都正常然后才去做复杂的多扇区读写功能。4. 常见问题与排查技巧实录4.1 问题排查思路先软件后硬件还是先硬件后软件碰到FM17550不出活我建议的排查顺序是先确认供电和时钟再确认主机接口通信然后是射频天线最后才是协议流程。因为射频协议层的问题往往会被错误地归结为“读不到卡”但根因可能是前面任何一个环节出了差错。第一步查供电FM17550的3.3V引脚电压稳不稳纹波大不大第二步查时钟用示波器探一下晶振引脚确认13.56MHz频率起振频率偏差控制在±10ppm以内第三步查SPI通信用逻辑分析仪看主机和芯片之间是否有正常的命令交互第四步查天线用示波器看TX1/TX2引脚的波形正常应该能看到一个13.56MHz的调制载波信号。这四个环节都正常再考虑是不是协议层配置的问题。4.2 读卡距离短或者根本读不到卡这是FM17550开发中最常见的问题原因一般集中在三个方向天线失谐是最常见的原因。匹配电容不准、天线电感偏差大都会导致谐振频率偏离13.56MHz能量传输效率下降。这类问题最直观的表现是把卡片贴在天线上能读稍微抬高一点就完全没反应。解决办法是重新调整匹配电容或者用网络分析仪看谐振曲线。天线Q值过高或者过低也会影响距离。Q值过高时天线带宽太窄容易受环境金属和温度影响Q值过低时灵敏度不够。官方资料一般建议Q值在30到50之间没有网分的情况下可以通过改变阻尼电阻的大小来调节一般推荐在10Ω到47Ω之间结合实际读距调整。供电和地线问题也会导致距离短。供电纹波大、地平面不完整、射频地和数字地没有分开都会拉低性能。还有一种情况是天线周围有金属物体或者大面积铺铜这属于结构问题改板子才能解决。4.3 SPI通信正常但命令执行总报错如果SPI通信波形正常但FM17550的命令返回值不对先检查几个点。一是FIFO的读写时序FM17550发命令前要往FIFO里写数据写之前要清空FIFO否则上一轮残留的数据会混进来。二是命令字和参数的顺序不能错比如认证命令要依次写入命令字、块地址、密钥字节和CRC顺序错了芯片会直接返回错误。三是等待卡响应的时间不能太短某些卡片在特定状态下响应比较慢一般建议等待时间不小于5ms。还有一点容易被忽略FM17550的命令执行后需要读FIFO里返回的数据但返回数据的长度不是固定的。比如防冲突命令返回UID的长度取决于级联等级可能返回4字节也可能是7字节。如果代码里硬编码了数据长度在遇到7字节UID的卡时就可能解析错位。DEMO代码里一般会通过状态寄存器的标志位来判断数据是否有效但移植时也容易被简化掉。4.4 常见问题速查表现象可能原因排查与解决办法完全读不到卡晶振不起振、供电异常、SPI配置错误示波器查晶振、万用表查电压、逻辑分析仪查SPI时序读卡距离明显偏短天线失谐、Q值不当、天线区域有铜调整匹配电容、调节阻尼电阻、去除天线下方铺铜读卡距离飘忽不定供电纹波大、天线受金属环境影响改善供电滤波、调整天线位置或结构返回错误码0xFFFIFO未清空、命令顺序错误、等待时间不足清空FIFO、核对命令参数顺序、增加超时时间能读卡但写卡失败未重新认证、写保护位配置错误写操作前重新执行认证流程、检查访问控制位多张卡同时出现时表现异常防冲突流程不完整检查防冲突级联处理逻辑特别是7字节UID5. 从DEMO走向量产的几个额外提醒很多项目在DEMO阶段跑得好好的一到量产就出幺蛾子这里有几个经验可以分享一下。首先是PCBA加工的一致性。天线的走线宽度、过孔位置、板材的介电常数在批量生产时会有偏差这就导致每批板子的天线谐振点都不完全一样。如果产品对读卡距离要求高建议在产线上加一道天线调测工位用电容微调的方式把每片板子的谐振点校准到13.56MHz附近。听上去增加成本但对读卡器这类产品来说出厂一致性就是口碑。然后是元器件选型。匹配电容建议用NP0/C0G材质电容温度稳定性好X7R甚至X5R材质在温度变化时容值会明显漂移直接影响天线谐振。另外晶振要选带载能力合适、频率容差小的型号最好配合官方推荐的电容量。便宜的晶振虽然也能起振但频率偏差大了读卡灵敏度和兼容性都会受影响。最后说一下固件层面的量产考虑。DEMO代码通常没有做异常处理比如卡片中途拔出、读写超时、命令重试等等。量产固件一定要加状态机和超时重试机制不然终端用户体验会很糟糕。举个例子用户在消费机上读卡扣款如果卡片在认证后突然移开写操作没完成你的固件需要能检测到这个状态并回滚操作否则就会出现“扣了款但没记录”或者“没扣款但卡被写了”的情况。FM17550这套开发资料整体上还是很完整的尤其是硬件参考设计和DEMO代码的质量都不错。我个人在实际操作中的体会是真正耽误时间的往往不是芯片本身而是对资料细节的理解深度——寄存器每个字段都去翻数据手册确认一遍硬件每个引脚都对照原理图核对一遍程序每段代码都搞清楚它在整个流程里的作用到了调试阶段就会顺畅很多。最后再分享一个小技巧如果你在调天线匹配时手头没有网络分析仪可以准备一张性能良好的M1卡配合示波器观察天线两端波形在卡片进入磁场前后的变化反复调整电容找到波形变化最明显的状态那个点通常就是谐振最佳点。这套资料用好了FM17550项目从画板到量产是可以走得很顺的。本文还有配套的精品资源点击获取