1. 项目概述与核心价值
如果你正在开发一个涉及NFC或高频RFID的应用,比如智能门锁、资产盘点终端或者非接触式支付设备,那么你大概率绕不开ISO15693和ISO14443这两个核心协议。协议本身是枯燥的,但如何快速验证你的芯片能否正确执行这些协议,如何调试通信过程中的异常,往往是项目初期最耗时也最令人头疼的环节。TI的TRF7970A NFC/RFID收发器芯片以其对多协议的支持而闻名,而其官方的评估模块(EVM)和配套的PC图形用户界面(GUI)软件,恰恰是解决上述痛点的利器。它不是一个简单的演示工具,而是一个功能强大的协议分析仪和交互式调试台。
这个GUI将TRF7970A芯片底层复杂的寄存器配置、帧构造和时序控制,封装成了一个个直观的按钮和选项。你不需要从零开始编写驱动代码去发送一个ISO15693的“写块”命令,只需在对应标签页选择命令、填入数据、点击执行,就能看到完整的请求与响应数据流。这对于理解协议交互时序、验证天线设计、排查读写失败原因具有不可替代的价值。无论是射频硬件工程师确认前端电路性能,还是嵌入式软件工程师调试通信逻辑,甚至是应用层开发人员快速构建原型,这套工具都能提供从物理层到部分应用层的可见性。接下来,我将结合多年使用经验,为你深入拆解如何利用TRF7970A EVM GUI,高效地完成对ISO15693、ISO14443协议以及NFC点对点、卡模拟等核心功能的测试与验证。
2. 环境搭建与GUI基础操作
2.1 硬件连接与驱动安装
拿到TRF7970A EVM板后,第一步是建立与PC的通信。板子通常通过一个基于FTDI芯片的USB转UART桥接器与电脑连接。你需要使用一根Micro-USB线为板子供电并建立数据连接。首次连接时,Windows系统可能会自动搜索并安装FTDI的虚拟串口驱动,如果未能自动安装,你需要前往FTDI官网下载对应的VCP驱动程序。安装成功后,在设备管理器的“端口(COM和LPT)”下,应该能看到一个类似“USB Serial Port (COMx)”的设备,记住这个COM口号,比如COM3。
接下来,从TI官网下载并安装TRF7970A EVM GUI软件。启动软件后,首要任务就是在软件界面中选择正确的COM端口并建立连接。通常,软件主界面会有一个“Connect”或“Select COM Port”的按钮,点击后选择你刚才记下的COM口。连接成功后,软件状态指示灯通常会变绿,并且“Registers”标签页里可以读取到TRF7970A芯片内部寄存器的默认值,这是判断硬件连接和通信是否正常的最直接方法。如果连接失败,请依次检查:USB线是否完好、板载电源指示灯是否亮起、设备管理器中的COM口是否存在且未被其他软件占用。
2.2 GUI界面布局与核心功能区解析
成功连接后,你会看到一个功能分区明确的GUI主窗口。整个界面可以划分为几个核心区域:
- 协议标签页:这是GUI的核心,以标签页形式组织了ISO15693、ISO14443A、ISO14443B、FeliCa、NFC-PP等主要协议。你的大部分测试工作都将在这里进行。
- 命令执行区:在每个协议标签页内,通常有“Set Protocol”(设置协议)、“Execute”(执行)等按钮,以及用于选择特定命令(如读、写、防碰撞)的单选框或下拉菜单。
- 数据交互窗口:包括“发送数据”输入框和“协议日志”或“响应”显示区域。你输入的命令参数和芯片返回的响应数据(包括原始十六进制数据和部分解析结果)会在这里显示,是分析问题的主要依据。
- 寄存器查看与配置页:独立的“Registers”标签页,用于直接读写TRF7970A的所有配置寄存器。高级用户可以通过这里微调射频参数,但新手需谨慎操作。
- 通用工具页:“Find Tags”标签页用于快速扫描支持的所有标签类型;“Test”标签页用于发送自定义的原始命令字符串,是进行深度调试和特殊操作的关键。
注意:在开始任何协议操作前,务必先点击当前标签页内的“Set Protocol”按钮。这个操作会通知EVM上的MCU固件,将TRF7970A芯片初始化为对应协议模式(如ISO15693 26.48kHz单副载波模式)。如果跳过这一步,直接点击“Execute”,很可能会因为芯片工作模式不正确而导致命令执行失败或得不到预期响应。
3. ISO15693协议深度实操与TI扩展命令
ISO15693协议主要针对 vicinity 耦合设备,工作距离较远(通常可达1米以上),常用于资产管理、物流追踪等场景。TRF7970A GUI的ISO15693标签页提供了对该协议命令的完整支持。
3.1 基础命令:Inventory(盘点)与读/写单块
进行任何操作前,首先需要识别标签。点击“Inventory”或“Scan”按钮,GUI会发送盘点命令。成功时,日志窗口会显示标签的UID(唯一标识符)、DSFID(数据存储格式标识符)和AFI(应用族标识符)。这是后续所有块操作的基础,你必须先获得目标标签的UID。
读取和写入单个存储块是最常见的操作。在“Read Single Block”或“Write Single Block”命令中,你需要指定块地址(Block Number)和可选的数据。对于写操作,在“Data”字段填入4字节(16字节块模式则为16字节)的十六进制数据。点击“Execute”后,观察响应。成功的读操作会返回块数据;成功的写操作会返回一个确认响应(如0x00)。这里有一个关键细节:ISO15693的存储块通常有“锁定”(Lock)状态。尝试写入一个已锁定的块,标签会返回错误码0xA2(“Block is locked”)。因此,在写入前,有时需要先尝试读取以确认块状态。
3.2 TI定制命令详解:双块写与双块锁
根据你提供的资料,TRF7970A支持TI自定义的VICC命令,这需要标签是TI “Plus”硅片版本(部件号含RI-xxx-112A)。这两个命令极大地提升了批量操作的效率。
3.2.1 写两个块(命令码 0xA2)这个命令允许一次性写入两个连续的存储块。其请求帧格式严格遵循ISO15693自定义命令格式:[SOF][Flags][Command 0xA2][Manufacturer Code 0x07][Data][CRC][EOF]。其中Data字段包含8个字节,前4字节写入起始的偶数块,后4字节写入紧随的奇数块。
- 操作要点:起始块地址必须是偶数(如块0, 2, 4)。如果你指定起始块为奇数(如块3),标签将不执行操作并返回错误码
0xA1(“The addressed block does not exist”或参数错误)。这是最容易出错的地方。 - 实操步骤:
- 在ISO15693标签页,选择“Custom Command”或类似选项。
- 在命令码处填入
A2。 - 制造商代码固定为
07(代表TI)。 - 在数据域,填入8字节的十六进制数据。例如,你想写入块2和块3,数据为
11223344 55667788,则应填入1122334455667788。 - 点击执行。如果返回的响应数据中包含成功状态(如
00),则表示两块数据已同时写入。
3.2.2 锁两个块(命令码 0xA3)此命令用于一次性永久锁定两个连续的存储块,锁定后数据将不可更改。其格式与写双块命令类似,但数据域通常为空或包含特定参数。
- 操作要点:同样,起始块地址必须是偶数。更重要的是,如果目标块中任何一个已经被锁定,整个命令将失败,并返回错误码
0xA2。这意味着你不能用这个命令去“尝试”锁定,必须在发出命令前确保两个块都是未锁定的。通常的流程是:先读取这两个块的数据并确认无误,然后再执行锁块命令。 - 错误处理:如果收到
0xA2错误,你需要用“Read Block Status”命令(如果标签支持)或尝试进行单块写操作来逐个检查块0和块1的锁定状态,以确定是哪个块已被锁。
实操心得:在进行双块写或锁操作前,强烈建议先对目标块执行一次“Read Single Block”操作。这不仅能验证块是否可读(排除物理损坏),还能间接确认块是否已被锁定(如果读成功但后续写/锁失败,则可能是其他问题)。对于关键数据,采用“写入-校验-锁定”的三步法是可靠的工程实践。
4. ISO14443A协议流程全解析与防碰撞实战
ISO14443A是近场耦合协议,典型工作距离在10cm以内,是MIFARE Classic、MIFARE DESFire、NTAG等系列卡片的基础。其通信流程比ISO15693更复杂,涉及防碰撞、选择、激活等多个层。
4.1 防碰撞(Anticollision)流程:单标签与多标签场景
当读写器场区内存在多张同类型卡片时,防碰撞机制确保它能正确识别并选择其中一张进行通信。GUI的ISO14443A标签页自动化了这一流程。
4.1.1 单标签防碰撞这是最常用的场景。操作非常简单:
- 在ISO14443A标签页,确保“Anticollision”单选框被选中。
- 点击“Set Protocol”初始化芯片为ISO14443A读写器模式。
- 将一张ISO14443A卡片(如MIFARE 1K)放置在EVM天线有效范围内。
- 点击“Execute”。 GUI会自动执行ISO14443-3标准中规定的防碰撞循环(发送REQA/WUPA,接收ATQA,进行防碰撞循环直到获得完整的UID)。成功后,日志窗口会显示卡片的UID,并且GUI会自动选中“Select”命令,为下一步做好准备。
4.1.2 多标签防碰撞与高级技巧当需要同时处理两张卡片时(例如测试防碰撞算法),GUI提供了一个隐藏技巧,这在你提供的资料中提到了:使用“Test”标签页发送特殊命令0xE6。
- 在ISO14443A标签页,点击“Set Protocol”。
- 切换到“Test”标签页。
- 在“String to Send”输入框中,键入
E600。 - 将两张ISO14443A卡片同时放在天线附近。
- 点击“Send”。 这个
0xE6命令会触发固件执行一个支持双标签防碰撞的特殊流程。你可以在日志中看到它如何交替与两张卡片进行通信,并获取它们的UID。这个功能对于开发需要处理多卡的读卡器应用非常有帮助。
4.2 选择(Select)、RATS与PPS:激活卡片进入高层协议
防碰撞获得UID后,读写器需要“选择”这张卡片,并协商通信参数。
- Select命令:防碰撞成功后,“Select”单选框会自动被选中。保持卡片在场,点击“Execute”。GUI会发送包含卡片完整UID的SELECT命令。成功后,卡片被激活,进入“活跃”状态。
- RATS(Request for Answer To Select):SELECT成功后,GUI会自动跳到“RATS”命令。点击“Execute”,读写器请求卡片提供其ATS(Answer To Select)。ATS中包含了卡片支持的传输速率、帧大小等重要参数。这是进入ISO14443-4传输协议层的关键一步。
- PPS(Protocol and Parameter Selection):根据RATS的响应,如果读写器支持且希望改变通信速率,可以发起PPS请求。在GUI中,此操作可能自动或手动进行。需要注意的是,并非所有卡片都支持PPS。例如,经典的MIFARE Classic卡片就不支持ISO14443-4层,因此在RATS之后流程就结束了。对于这类卡片,后续的数据交换使用其自身的专有命令(可通过“Test”页发送)。
4.3 HLTA与Deselect:卡片状态管理
- HLTA (Halt Command):发送此命令可以使卡片进入“暂停”状态。卡片仍在场中,但不再响应新的REQA/WUPA,直到接收到一个特定的唤醒命令。这在需要临时“屏蔽”某张卡片时有用。
- Deselect:此命令将卡片从“活跃”状态释放回“就绪”状态。卡片仍然可以响应新的REQA。这是结束一次完整通信会话的规范方式。
注意事项:在对卡片进行一系列操作(特别是写操作)后,养成发送“Deselect”命令的习惯是一个好实践。这确保了卡片状态被正确重置,避免下次操作时出现状态不一致的错误。有些复杂的通信错误,可以通过“Deselect”后重新执行“Anticollision”流程来恢复。
5. ISO14443B协议与FeliCa协议要点
5.1 ISO14443B协议操作要点
ISO14443B协议在支付、身份证等领域应用广泛。其初始化流程与Type A不同。
- REQB/WUPB:相当于Type A的REQA/WUPA,用于探测场区内的B类卡片。在GUI的ISO14443B标签页,点击“Set Protocol”后,使用“REQB”命令。响应中会包含PUPI(伪唯一PICC标识符)等重要信息。
- ATTRIB:这是B类卡的选择命令,功能类似于Type A的SELECT,但更复杂。它需要用到REQB响应中的信息(如PUPI)来构造请求帧。关键点:必须先成功执行REQB,获得PUPI,才能进行ATTRIB。GUI通常会处理好这个顺序依赖。
- HaltB:与Type A的HLTA类似,用于暂停B类卡片。
一个高级调试场景:如资料所述,某些支付应用的B类卡片禁用了防碰撞。此时标准的REQB命令可能无效。你需要发送一个“单时隙”的REQB命令。这可以通过“Test”标签页实现:在“String to Send”中输入B000,然后点击“Send Raw”按钮(注意是Send Raw,它会自动处理帧头帧尾)。这是排查B类卡片无响应问题时需要尝试的步骤。
5.2 FeliCa协议快速上手
FeliCa是索尼推出的协议,也属于NFC Forum标准。在GUI中操作相对简单。
- 进入“FeliCa”标签页,点击“Set Protocol”。
- “Polling”命令会自动被选中。点击“Execute”。
- 将FeliCa卡片(如Suica、八达通)靠近天线,如果成功,日志会显示卡的制造商ID和系统码等信息。 FeliCa的通信速度很快,其“Polling”过程同时完成了寻卡和部分初始化。获取到系统码后,才能进行后续的读、写等具体服务操作(这些可能在GUI中需要通过“Test”页发送自定义命令实现)。
6. NFC点对点通信与卡模拟实战
这是TRF7970A作为NFC芯片的核心功能之一,展示了设备间双向通信的能力。此功能需要两套TRF7970A EVM和两台运行GUI的PC。
6.1 点对点(Peer-to-Peer)连接建立
- 硬件摆放:将两个EVM板的天线面相对,平行放置,间隔1-2厘米。这是耦合效率最高的方式。距离过远或角度偏差太大会导致连接不稳定。
- 软件配置:
- 发起设备(Initiator):在第一台PC的GUI中,进入“NFC-PP”标签页,直接点击“Set Protocol”,然后点击“Connect”。按钮变为“Disconnect”且指示灯变绿表示已就绪。
- 目标设备(Target):在第二台PC的GUI中,进入“NFC-PP”标签页,务必勾选“Target”复选框,然后点击“Set Protocol”。此时它处于等待连接状态。
- 建立连接:当发起端点击“Connect”后,它会主动搜寻并尝试连接目标设备。如果硬件摆放正确,几秒内两台设备的GUI连接指示灯都应变为绿色,表示NFC-DEP(数据交换协议)链路层已成功建立。
6.2 数据传输测试:文本与文件
连接建立后,你可以进行实际的数据传输测试,这直观地验证了NFC的互操作性。
- 文本传输:在发起设备的“Data entry”文本框内输入任意文字,点击“Execute”。稍等片刻,目标设备的接收日志区域就会显示出传输过来的文本信息。你可以尝试传输长文本,测试链路稳定性。
- 文件传输:这是一个更实用的功能。
- 在发起端,点击“Browse”选择一个任意格式的文件(如图片、文档、压缩包)。
- 在目标端,点击“Browse”指定一个本地文件夹用于保存接收的文件。
- 在发起端点击“Send”。GUI会显示传输进度条。
- 传输完成后,到目标端指定的文件夹查看,文件应该已成功接收并保存。实测心得:传输大文件(如几百KB)时,过程可能持续数秒,期间请确保两个EVM板位置固定,避免移动导致链路中断。
6.3 卡模拟(Card Emulation)模式
此模式允许一个TRF7970A EVM模拟成一张ISO14443A卡片,被另一个作为读写器的TRF7970A EVM读取。
- 模拟卡(Target)设置:一个EVM在“NFC-PP”标签页,勾选“Target”并点击“Set Protocol”。此外,还需要勾选“Advanced”复选框,然后再点击一次“Set Protocol”。这个高级模式使其准备好模拟卡片。
- 读写器(Initiator)设置:另一个EVM在“ISO14443A”标签页,像正常读卡一样操作:点击“Set Protocol”,然后执行“Anticollision”。
- 读取操作:将作为读写器的EVM天线靠近模拟卡EVM的天线。执行防碰撞,你应该能成功获取到模拟卡的UID(这个UID是TRF7970A固件预设或生成的)。进一步,你可以尝试发送“Select”命令,也会得到正确的响应。
重要提示:卡模拟模式对天线匹配和相对位置非常敏感。如果读写器端无法侦测到“卡片”,请尝试微调两者之间的距离和角度,并确保模拟卡端已正确进入高级目标模式。这个功能对于开发需要模拟特定卡片进行测试的读卡器应用极具价值。
7. 高级调试与故障排查指南
7.1 “Test”标签页的威力
“Test”标签页是高级用户的利器,它允许你绕过GUI的预设流程,直接向TRF7970A芯片发送原始的、符合其指令集的命令字符串。
- “Send” vs “Send Raw”:这是两个关键按钮。“Send”按钮用于发送完整的命令帧,包括起始符、长度字节等,这些由GUI自动帮你添加。“Send Raw”按钮则发送你输入的原汁原味的字符串,通常用于发送一些特殊的、非标准的帧,或者在你已经手动构造好完整帧结构时使用。例如,资料中提到的控制EVM板上LED灯的命令(如
FB打开LED2),就需要使用“Send”按钮。 - 寄存器连续读写:在底层驱动开发时,经常需要连续配置多个寄存器。你可以在“String to Send”输入类似
0900的字符串(表示连续写入从0x09寄存器开始的多个字节),点击“Send”,然后在逻辑分析仪上观察SPI或UART总线上的时序,这对于调试底层通信问题至关重要。
7.2 “Find Tags”模式与多协议轮询
“Find Tags”标签页模拟了读卡器的“寻卡”工作模式。点击“Run”后,EVM会自动循环地在所有已启用的协议(ISO15693, ISO14443A/B, FeliCa)间发送查询命令。一旦发现任何类型的标签,就会在列表中显示其UID和协议类型。
- 使用场景:快速测试你的天线对不同协议标签的读取性能;验证TRF7970A的多协议支持特性。
- 注意事项:如资料所述,当同时放置多个不同协议的标签在天线附近时,由于它们都是谐振电路,可能会相互干扰(耦合),导致读取距离变短或读取失败。测试时,建议一次只放置一个标签,或者将它们适当分开。
7.3 “Registers”标签页的陷阱与恢复
在这个标签页,你可以直接查看和修改TRF7970A的所有控制寄存器。但这里有一个巨大的坑:如果你不小心点击了“Set Defaults”按钮,GUI与EVM的通信会立即中断!
- 原因:这个操作重置了调制器和系统时钟寄存器(0x09),改变了MSP430微控制器的时钟源或分频,导致UART通信的波特率基准发生变化,PC与EVM的串口通信失步。
- 恢复方法:无需惊慌。关闭GUI软件,然后按下EVM板上的硬件复位按钮,或者直接拔插USB线断电重启。重新上电后,再打开GUI软件连接即可恢复。牢记:除非你非常清楚每个寄存器的含义,否则不要在“Registers”页随意修改值,更不要点“Set Defaults”。任何协议相关的配置,最好通过各个协议标签页的“Set Protocol”按钮来完成,让固件帮你设置正确的寄存器组。
7.4 常见问题排查速查表
| 问题现象 | 可能原因 | 排查步骤 |
|---|---|---|
| GUI连接不上COM口 | 1. 驱动未安装 2. COM口被占用 3. 板子未供电 | 1. 检查设备管理器,安装FTDI驱动 2. 关闭其他串口软件(如Putty) 3. 检查USB线、板载电源指示灯 |
| “Set Protocol”后无反应 | 1. 天线未连接或损坏 2. 标签类型不匹配 3. 标签不在有效场内 | 1. 检查天线连接器是否插紧 2. 确认标签协议与所选标签页一致 3. 将标签贴近天线中心,缓慢移动寻找最佳位置 |
| 能寻到卡但读/写失败 | 1. 块已锁定 2. 密码保护 3. 数据格式错误 4. 射频场强不足 | 1. 尝试读取块状态或尝试写其他块 2. 确认是否需要进行认证(MIFARE Classic) 3. 检查写入数据长度是否为4/16字节的倍数 4. 尝试减小读写器与标签距离 |
| ISO14443A防碰撞失败 | 1. 多张同类型卡干扰 2. 卡片不支持防碰撞(某些UID克隆卡) 3. 天线调谐不佳 | 1. 移开其他卡片,单卡测试 2. 更换一张已知良好的原装卡片测试 3. 检查天线匹配电路,或使用“Test”页发送 E600命令尝试 |
| NFC-PP模式连接失败 | 1. 未正确设置Target模式 2. 两块EVM距离过远或角度不对 3. 一方未点击“Set Protocol” | 1. 确认目标端勾选了“Target”和“Advanced” 2. 将两块板子天线面对面平行紧贴(<2cm) 3. 双方都必须先点击“Set Protocol”再连接 |
| 自定义命令发送无响应 | 1. 命令格式错误 2. 使用了错误的发送按钮(Send/Send Raw) 3. 标签不支持该命令 | 1. 对照芯片数据手册检查命令格式 2. 尝试切换“Send”和“Send Raw”按钮 3. 确认标签型号是否支持该定制命令(如TI Plus标签) |
最后,我想分享一点个人体会:TRF7970A EVM GUI的强大之处在于它将协议细节可视化。不要仅仅满足于点击按钮看到成功响应。多观察“协议日志”里每一行发送和接收的十六进制数据,尝试去解析它们(结合ISO标准文档),理解每一个字节的含义。当你能够通过“Test”页手动构造一个正确的读块命令并成功获取数据时,你对协议的理解就真正上了一个台阶。这套工具是连接理论标准和工程实现的桥梁,善用它,能让你在RFID/NFC开发中事半功倍。