1. 读卡器到卡片:前向链路的调制与编码
如果你和我一样经常跟非接触式IC卡打交道,读卡器、卡片、天线、协议栈换了一大圈,被问到最多的技术问题里肯定有一个:Type A 和 Type B 到底有什么不同?有人说是调制方式不同,有人说是编码方式不同,还有人说A卡读得快、B卡抗干扰强。这些说法都对,但都不完整。真正把两种卡推向两条技术路线的,其实是整个物理层设计——从前向调制、编码,到反向副载波调制,每一步都选了完全不同的实现方案。
在非接触式IC卡开始工作的最开始,读卡器要通过天线向卡片发送能量和指令。射频场使用的载波频率都是13.56MHz,这是大家共用的ISM频段,但怎么让数据“坐上”载波,Type A 和 Type B 给出了两个截然不同的答案。只盯着应用层的ATQA、ATQB这些命令看,永远理解不了这两种卡为什么有那么多行为差异。
1.1 ASK调制:100%和10%背后的取舍
Type A 用的是 100% ASK 调制。也就是说,读卡器发送数据时,载波会按照一定时间模式被直接“切断”。切断瞬间,射频场幅度几乎掉到零,在波形上形成一个个明显的“坑”。这些坑的宽窄、长短,就携带了0和1的信息。
Type B 则不一样,它采用 ASK 调制,但调制深度只有10%左右,标准里通常要求8%到14%。同样是发数据,载波幅度只是在原电平基础上轻微下降,从波形上看像是“喘了一口气”,远没有Type A那种断崖式跌落。
为什么要这样设计?这跟两个标准在设计时对供电稳定性、解调复杂度、抗干扰能力的考量有关。
卡片运行的能量完全来自射频场。100% ASK调制会导致场强周期性跌到接近零,卡片内部整流电路必须靠电容储能来扛过这些缺口。Type A老卡片普遍在芯片里放一个相对大容量的滤波电容,就是为了扛住这些“坑”。但深调制的好处也非常明显:接收端解调极其容易,只要检测“载波有没有断”就能还原数据,对弱场、动态场强变化都不敏感。
Type B 的10% ASK则相反,射频场几乎连续输出,卡片能量供给非常平稳,但解调器必须能分辨90%和100%这两种电平之间的细微差别。这个差别在近场强耦合时够用,一旦卡片离读卡器较远、场强衰减严重,信噪比就会变得紧张。所以Type B对灵敏度和天线匹配的要求通常更高一点。这也解释了为什么很多Type B项目的天线调试会比Type A更“娇气”。
1.2 编码方式:改进Miller与NRZ的差异
调制解决了“载波上怎么打点”的问题,编码决定了打出来的点按什么规则排列。Type A前向用的是改进的Miller编码,Type B前向用的是NRZ编码,两者形态差异非常大。
Miller编码说白了是一种基于脉冲间隔的编码方式。在改进Miller编码里,数据1用一个较长的低电平缺口表示,数据0用一个较短的缺口表示,起始位用更长的固定缺口。读卡器发送时,就按这套时间模板快速开、关载波。
NRZ则最直白:高电平表示1,低电平表示0,没有中间变换,也不需要额外的时间调制。Type B读卡器发数据时,只要把射频场幅度在满场和降低后的场之间切换就行。
两种编码放在一起对比很有意思:Miller编码适合深调制,因为载波本来就是断的,把信息嵌在缺口的宽窄里很自然;NRZ编码适合浅调制,因为场上始终有连续载波,可以直接用电平高低表示逻辑值。
对卡片端来说,解码Miller需要精确测量缺口宽度,所以卡里要有一个相当准确的定时基准;解码NRZ则更依赖幅度分辨能力,以及从连续载波里恢复出位时钟的准确度。前者对时间窗口敏感,后者对幅度阈值敏感。两种方案没有绝对高下,只是设计哲学不同——Type A更强调简单可靠、低成本,Type B更强调供电连续、适合复杂调制。
2. 卡片回复:副载波负载调制才是真正的分水岭
前向链路读卡器发、卡片听,这只是一半。真正让两种卡“性格迥异”的,是反向链路——卡片怎么把自己的数据传回读卡器。这个方向上的差异比前向更加明显,也更影响读卡器设计。
2.1 负载调制与副载波:没有发射机的“回复”
非接触卡片体内没有独立的有源发射机,它不可能像手机一样主动发射信号。卡片的回复靠的是“负载调制”。简单理解就是:卡片根据要发送的数据,动态改变自己天线回路的阻抗,这个阻抗变化会耦回到读卡器天线上,形成能被检测到的幅度或相位变化。
但问题在于,卡片引起的阻抗变化非常微弱,直接识别很困难。所以标准引入了副载波的概念:副载波频率 = 13.56MHz / 16 = 847.5kHz。卡片先把要发送的基带数据调制到这个847.5kHz副载波上,再用这个副载波去控制自身回路的负载变化。读卡器检测到的就是主载波旁边出现的一对边带信号,分离出边带后再解调出基带数据。
这个设计逻辑可以理解成:主载波是“公交车”,副载波是“车内广播频道”,真正的内容在“车内广播”上。有了副载波,反向信号就有了比较规律的频域特征,读卡器可以用窄带滤波把微弱的卡片信号从强主载波旁边捞出来。
2.2 Type A反向:副载波OOK加曼彻斯特
Type A的反向链路工作流程是这样的:卡片先把数据流用曼彻斯特编码处理。曼彻斯特编码的特点是每个位周期中间必然发生一次电平跳变,跳变方向不同就代表1或0。然后再用这个曼彻斯特编码信号去“开/关”847.5kHz副载波,也就是OOK调制。
一句话概括:Type A反向是“曼彻斯特编码 + OOK副载波调制”。读卡器收到的包络,像一串有固定节奏的方波脉冲,每个位窗口前半段有副载波、后半段没有,或者反过来,用这种位置关系表示0和1。从示波器上看,就是一段一段的“眨眼式”波形。
这种方式的实现成本低:卡片侧只要一个开关管控制负载通断就行,读卡器侧也只需要包络检波加副载波解调。缺点是OOK本质上是“有信号/没信号”的等幅切换,抗幅度干扰能力一般。尤其在场强波动、附近有金属物扰动时,容易出现位错误。
2.3 Type B反向:BPSK相位跳变
Type B的反向链路走了另一条路线:它不用开关键控副载波,而是让847.5kHz副载波连续存在,通过相位在两个值之间跳变来传递数据,也就是BPSK调制。相位为0和相位为180度对应不同逻辑值,读卡器解调时看的是同一段副载波里相位怎么翻转。
BPSK的直观特点是:从包络上看,反向信号幅度基本恒定,没有Type A那种明显的一节一节“喇叭口”。它的能量全部集中在副载波频率附近,频谱利用率更高,抗幅度干扰能力更强。代价是解调更复杂——读卡器必须锁定副载波相位,需要做正交解调或差分相位检测,不能像Type A那样看看包络就行。
很多人在现场用示波器看两类卡的回波时会有强烈对比:Type A回波像“眨眼”,Type B回波像“平稳的菱形纹”。这个差异从ISO 14443第一版设计时就已经注定。
2.4 为什么速率几乎都是106kbit/s
很多刚接触非接触卡的人会问:一样是13.56MHz载波,为什么卡到读卡器的传输速率基本都是106kbit/s?其实这个值是算出来的:位速率 = 载波频率 ÷ 128 ≈ 106kbit/s,副载波847.5kHz又等于载波÷16。这两个分频关系保证了一个位周期内刚好有8个副载波周期。
这个整数倍关系不是巧合,它让从副载波恢复位时钟变得非常简单:数字电路只要数8个副载波过零点,就完成一个位周期;数16个副载波周期就是两个位周期。整个硬件时序可以全部分频实现,不用PLL,成本低、时序准。标准后来也定义了212kbit/s、424kbit/s、848kbit/s这些更高档位,但底层副载波还是847.5kHz,只是位周期缩短、编码方式调整。日常见到的大量应用,比如M1卡、NFC-A标签、绝大多数门禁与支付卡,跑的还是106kbit/s基本速率。
| 链路 | Type A | Type B |
|---|---|---|
| 前向调制 | ASK 100%(深调制) | ASK 10%(浅调制) |
| 前向编码 | 改进Miller | NRZ |
| 反向调制 | 副载波OOK | 副载波BPSK |
| 反向编码 | 曼彻斯特 | BPSK相位 |
| 位速率 | 106kbit/s(可扩展) | 106kbit/s(可扩展) |
3. 防冲突算法:A卡“对暗号”,B卡“抽签排队”
如果只有一张卡在读写器面前,一切简单。但现实是,桌面上可能同时放着两张、五张卡。这时候读卡器怎么从一堆卡里挑出目标?Type A 和 Type B 又走出两条完全不同的路。
3.1 Type A按位防冲突:一棵“二叉树”
Type A的防冲突机制叫“按位防冲突”,原理上像玩猜数字游戏。读卡器先广播一个请求命令,所有在场的Type A卡都会回应自己UID的部分比特。读卡器接着发送一个带掩码的选择命令,掩码指定了大家必须返回的UID比特位。如果两张卡的某个UID位不同,它们在同时返回时,这个位上就会出现冲突,读卡器的接收电路会检测到“同一时刻出现0和1”的冲突信号。
知道冲突发生在哪一位后,读卡器就把这个冲突位固定为0,让符合这一分支的卡继续应答,另一分支的卡被排除。这样一轮一轮往下锁定位,直到最后只剩一张卡,再发送选择命令正式选中它。
工程上的一个细节是,Type A的防冲突是逐位交互的,速度不快,尤其在卡多的时候来回确认次数多。但好处是抗冲突能力强,几乎没有“漏”的情况。NFC论坛里的NFC-A兼容了这套机制,所以手机上的多数卡模拟功能都建立在Type A基础上。
3.2 Type B时隙ALOHA:排队抽签
Type B用的是时隙ALOHA算法。读卡器先发一个REQB请求,里面带上时隙参数N,表示这次允许卡在几个时隙里应答。每张卡收到请求后,自己随机挑一个时隙号,等自己的时隙到了再发ATQB应答。读卡器依次监听每个时隙:若某个时隙里只有一张卡响应,就能正常处理;若多张卡选了同一个时隙发生碰撞,读卡器在下轮重新请求,让它们再随机一次。
通俗点说,Type A像考场上老师逐一核对学生证号,Type B更像抽签:所有人随机拿1到N号,报到你的号就举手,撞号了重新抽。
这种机制的优点是实现简单,卡片侧只要有一个随机数发生器就行,适合大量卡片同时进入场区的场景。缺点是存在一定碰撞重试概率,读卡器无法定位到某一位的冲突,只能根据哪个时隙出现CRC错误或无声来判断。
3.3 防冲突差异带来的应用影响
从工程角度看,Type A更适合少量卡、快速锁定目标的场景,比如门禁、支付;Type B更适合成批标签、慢速存量的场景,例如物流盘点、证件查验。
这里要特别提一句:由于防冲突机制不同,读卡器芯片处理Type A和Type B的流程也完全不同。早年有些读卡器模块只支持Type A,比如大量Mifare专用模块;后来才出现双协议读卡芯片,把Type B一并兼容。做项目选型时,如果只标“支持ISO 14443”,其实远远不够,必须确认读卡器到底支持A、B,还是A/B双协议。
4. 现场测试与波形判断:怎么快速区分A/B卡
理论讲完了,总要落到调试台上。我给大家分享几个自己常用的判断方法,新手可以直接照做。
4.1 用手机或读卡器快速判型
手边没有示波器时,最简单的办法是把卡贴近手机NFC区域,用支持读卡类型的App查看。绝大多数手机NFC默认能识别NFC-A,部分也能识别NFC-B。如果App能正确报出ATQA值或ATS,基本可以断定是Type A;如果App报出ATQB,或卡类型显示ISO 14443B,那就是Type B。
另一个办法是拿桌面读卡器直接读底层命令。Type A卡收到REQA后会返回ATQA,Type B卡收到REQB后会返回ATQB,这两个应答的数据结构完全不同,一眼就能分辨。很多读卡器API会直接暴露这些层数据,不用自己抓波形就能判断卡型。
4.2 示波器观察调制波形
想看调制差异,可以把示波器探头切换到近场模式,用线圈探头靠近读卡器天线,观察读卡器发送命令期间的载波包络。
Type A命令段的波形是“断崖式”的:每个位周期里都有接近100%的幅度跌落,缺口很明显,你甚至可以用游标量出短缺口、长缺口的时长差异。Type B命令段则是一条相对平坦的包络,只有约10%幅度的轻微起伏,需要把示波器纵向分辨率拉高才看得清楚。
在反向回波阶段,也就是读卡器停止发射、进入接收状态时,Type A回波包络呈明显通断状态,能看到一段段副载波脉冲;Type B回波则是连续副载波,相位在跳变。用普通幅度触发可能触发不了Type B回波,得设置成边沿触发,加长采集时间,才能看到整段波形。
4.3 调试中常见的三个坑
第一个坑是天线失谐导致Type B读不到卡。Type B依赖检测低幅度变化,天线失谐会把调制深度进一步压低,直接导致解调失败。遇到Type B不读卡时,我一般先查天线匹配电容,再查射频场覆盖范围,别一上来就怀疑卡片。
第二个坑是Type A卡片在强场下出现“过压复位”。100% ASK调制对能量管理要求高,卡片离读卡器天线太近,整流电压过高,有些卡片会触发内置限压保护重启,表现就是读卡器刚滴一声,卡就“死机”了。解决办法是调整读卡器功率,或优化时序,给卡片留出复位时间。
第三个坑是示波器接地点干扰导致波形假象。射频近场测量时,示波器地线夹会形成一个大环天线,引入共模干扰,看Type B那种10%浅调制时几乎看不出真实波形。正确做法是用近场探头直接测,或者把探头尖端与地之间短路成一个小环,再贴近天线探测。
| 观察点 | Type A | Type B |
|---|---|---|
| 读卡器命令段调制 | 接近100%的深坑 | 约10%的浅槽 |
| 卡片回波包络 | 副载波一段段开断 | 连续副载波、相位跳变 |
| SOF起始 | 长缺口加短缺口组合 | 高低电平组合 |
| 解码难点 | 时间窗口判断 | 低幅度信号分辨 |
5. 工程选型与行业应用经验
聊完原理和调试,最后说说实际选型。很多人以为Type A和Type B一样,只要读卡器写着支持14443就完事,实际上两者生态差别很大。
5.1 Type A和Type B各自的主场
Type A在小额支付、门禁、公交、校园卡、NFC标签上有压倒性优势。Mifare Classic、Mifare Plus、Desfire这些主流逻辑加密卡全是Type A阵营,NFC论坛的Type 1/2/3/4标签大部分也建立在A类物理层之上。手机读卡、模拟门禁卡,绝大多数靠的是Type A。
Type B常见于对身份认证和安全性要求更高的场景。比如一些电子证件查验终端、票务系统,以及需要多卡并发感应的行业应用,因为Type B的防冲突机制和多算法CPU卡片适配度更好。部分金融卡和交通复合卡项目,也会根据应用需求选择B类实现。
如果一个项目打算兼容两类卡,需要在读卡器芯片和天线设计上提前做双协议支持,不能只靠软件切换,因为前向调制深度、反向解调方式、防冲突流程都不同。现在的双协议读卡芯片很成熟,成本也不高,所以除非项目只绑定单一卡种,否则我基本建议直接上双协议方案。
5.2 选型与项目落地的心得
关于选型落地,我个人的经验有四点。
第一,先确认卡类型再选读卡器。很多项目方只提供“非接触IC卡”几个字,等采购完才发现读卡器只支持A、不支持B,联调时才发现问题,返工周期很长。
第二,细看读卡器芯片的调制参数。同样是支持Type A,有些芯片的ASK调制深度在弱场下会降到80%以下,导致特定卡片解调不稳定;同类问题在Type B上更容易出现,因为B类对调制深度和天线Q值的要求更苛刻。
第三,别忽略卡片厂商的差异化实现。虽然ISO标准定义了参数范围,但不同品牌卡片在Miller缺口宽度、副载波相位精度上会有细微偏差。现场如果发现某批卡在一种读卡器上正常、在另一种读卡器上失败,不妨用示波器把该批卡的回波波形和标准参考卡对比一下,往往能看出偏差。
第四,从维护角度看,Type A的调试资料更多、社区支持更广,遇到问题容易找到人求助;Type B相对小众,可一旦走上稳定轨道,它的抗干扰性和供电连续性在工业环境里反而更有优势。项目如果看重长期稳定性和复杂场景适应能力,可以优先考虑Type B加CPU卡的组合。
搞懂Type A和Type B的区别之后,再回头看刚开始那些表象说法——读得快、抗干扰强——其实都是结果。真正决定这两种卡不同“性格”的,是前向的ASK调制深度与编码方式,加上反向的副载波调制方式,一步步把整个协议栈分成了两个流派。遇到“读卡器读不了某张卡”或者“为什么两种卡不能混用”这类问题,先往物理层和波形层面看,往往比在应用层反复调API参数要高效得多。