1. 项目概述与芯片定位
在嵌入式硬件开发领域,尤其是物联网和自动识别应用中,RFID(射频识别)技术因其非接触、快速识别的特性,始终占据着重要地位。而在这个技术栈里,读写器芯片的性能与易用性,直接决定了整个系统的稳定性和开发效率。今天,我想深入聊聊德州仪器(TI)的TRF7960和TRF7961这两颗经典的13.56MHz RFID读写器芯片。它们不像一些高度集成的“黑盒”模块,而是将模拟前端、数字协议处理和丰富的配置接口都开放给了开发者,让你既能享受集成化的便利,又能深入到通信链路的最底层进行精细控制。这种“半透明”的设计哲学,对于需要优化性能、解决复杂现场问题或者学习RFID底层原理的工程师来说,价值巨大。
简单来说,TRF796x系列是一个完整的、可编程的13.56MHz RFID读写器片上系统(SoC)。它内部集成了从13.56MHz振荡器、RF功率放大器、接收解调器,到完整的ISO/IEC 14443 A/B、ISO/IEC 15693、Tag-it等协议的数字编解码和成帧逻辑。你只需要外接一个MCU(微控制器)、一个晶体、一个匹配网络和天线,就能构建一个全功能的读写器。其核心价值在于,它通过一套精心设计的寄存器,将复杂的射频通信参数(如调制深度、接收带宽、定时器、协议选项等)完全暴露出来。这意味着,当标准协议无法满足你的特殊需求,或者当通信环境恶劣导致标准流程失效时,你不再是束手无策,而是可以通过调整寄存器,像调试一个软件算法一样去调试射频链路。接下来,我将从接收、发射两大模块的架构讲起,并深入到关键寄存器的配置逻辑,分享一些从数据手册和实际调试中总结出的经验。
2. 接收模块:从天线信号到干净数据
接收链路是读写器理解标签“话语”的关键。TRF796x的接收设计充分考虑了鲁棒性和灵活性,其架构远不止一个简单的解调器那么简单。
2.1 模拟前端:双输入与自动通道选择
芯片有两个接收输入引脚:RX_IN1(引脚8)和RX_IN2(引脚9)。这并非简单的冗余备份,而是一种巧妙的抗干扰和信号优化设计。通常,这两个引脚会通过一个外部LC网络(相位偏移滤波器)连接到同一个天线耦合点。这个外部滤波器会给RX_IN2路径引入一个大约45度的相位偏移。
为什么需要两个输入和一个相位偏移?这主要是为了应对标签不同的反向散射调制方式。标签通过改变其天线的负载来反射读写器的载波,从而实现通信。这种调制可以是幅度调制(ASK),也可以是相位调制(PSK)。对于ASK信号,我们主要关心的是包络(幅度)的变化;而对于PSK信号,相位信息才是关键。RX_IN1通常被配置为接收AM(幅度调制)信号,而经过45度移相的RX_IN2则更擅长处理PM(相位调制)信号分量。这种架构确保无论标签采用何种调制方式,至少有一个输入通道能获得质量较好的信号,从而消除了潜在的“通信盲区”。
芯片内部,这两个模拟输入被复用到一个主接收器和一个辅助接收器。复用选择由芯片状态控制寄存器(地址0x00)的位B3(pm_on)控制。默认状态下(pm_on = 0),RX_IN1连接至主接收器,RX_IN2连接至辅助接收器。两个接收器都包含RF包络检测、增益级、带自动增益控制(AGC)的滤波器和RSSI测量模块。主接收器的输出会经过数字化后送入数字处理块进行解码,而辅助接收器的主要任务就是测量RSSI。
自动通道切换机制:这是TRF796x的一个智能特性。当标签响应被检测到时,两个输入通道的RSSI值会被同时测量并存储在RSSI电平寄存器(地址0x0F)中。芯片的控制系统会读取这两个值,并自动切换到信号更强的那个输入通道(通过将pm_on位设置为1)。这个过程对上层应用是透明的,但它显著提升了在复杂电磁环境下首次识别的成功率。
注意:外部相位偏移滤波器的设计至关重要。不正确的LC值会导致相位偏移不准,反而降低RX_IN2通道的性能。通常需要根据天线阻抗和PCB布局进行微调,或者直接参考TI官方评估板的设计。
2.2 RSSI:量化信号强度的眼睛
接收信号强度指示(RSSI)是评估通信链路质量、实现自适应功率控制甚至粗略测距的关键参数。TRF796x的RSSI测量模块会锁存解调后信号的峰值,因此你可以在一个接收数据包结束后再去读取RSSI值,非常方便。
RSSI电平寄存器(0x0F)用一个3位值(对应7个电平)来量化信号强度,每个电平间隔约为4dB。具体对应关系如下表所示(基于数据手册典型值):
| RSSI 寄存器值 | 对应的输入信号电平 (峰峰值) |
|---|---|
| 1 | 2 mVpp |
| 2 | 3.2 mVpp |
| 3 | 5 mVpp |
| 4 | 8 mVpp |
| 5 | 13 mVpp |
| 6 | 20 mVpp |
| 7 | 32 mVpp |
如何解读寄存器0x0F?这个寄存器不仅包含RSSI信息,还包含振荡器状态。其位定义如下:
- B7:未使用
- B6 (
osc_ok):晶体振荡器稳定标志。1表示稳定,这是芯片正常工作的前提。 - B5-B3:辅助接收器(RX_IN2)的RSSI值(B5是最高位)。
- B2-B0:主接收器(RX_IN1)的RSSI值(B2是最高位)。
例如,如果你读到寄存器值为0b0xxx0110(假设高三位是辅助通道值,忽略),那么B2=1, B1=1, B0=0,即主接收器RSSI值为6,对应大约20mVpp的输入信号电平。通过比较B5-B3和B2-B0的值,你就能直观地知道当前是哪个通道的信号更强,甚至可以手动决定使用哪个通道。
2.3 数字处理与协议成帧
模拟信号被数字化后,就进入了数字接收部分。这部分可以看作一个高度专业化的“通信协处理器”。
比特解码器:根据在ISO控制寄存器(地址0x01)中选择的协议(如ISO/IEC 15693, 14443A等),芯片内部的硬件解码器会将副载波编码的信号转换为比特流,并同时提取出数据时钟。这些解码器针对各种协议的编码方式(如曼彻斯特编码、米勒编码等)进行了优化,并且具有很高的容错能力,即使在有噪声干扰的情况下也能正确解码。
成帧逻辑:比特流随后被格式化成字节。在这个过程中,芯片会自动处理通信中的“标点符号”,包括帧起始(SOF)、帧结束(EOF)、通信起始和结束标志。同时,它还会自动进行奇偶校验和CRC校验。如果校验通过,这些开销位会被剥离,最终得到的“干净”数据被存入一个12字节的FIFO寄存器中,等待外部MCU读取。
中断机制:芯片通过IRQ引脚(引脚13)和IRQ状态寄存器(地址0x0C)与MCU高效交互。成功接收到SOF、FIFO数据达到75%、接收完成、发生CRC错误或比特碰撞时,都会触发中断。MCU在中断服务程序中读取IRQ状态寄存器,就能知道发生了什么事件,并采取相应动作(如读取FIFO数据)。
两个关键的接收定时器:
- RX等待时间寄存器(0x08):定义在发射操作结束后,接收解码器保持复位(不工作)的时间。这是为了防止发射电路关闭时的瞬态噪声被误认为是标签响应。这个时间以9.44µs为步进。
- RX无响应等待时间寄存器(0x07):在防碰撞时隙序列中,用于测量从时隙开始到标签响应开始的时间。如果在此时间内没有收到响应,芯片会触发中断,通知MCU这是一个空时隙,从而减轻MCU的计时负担。时间步进为37.76µs。
实操心得:在调试初期,如果遇到无法识卡的情况,除了检查硬件,务必确认这两个定时器的值是否合适。对于ISO/IEC 14443A协议,其默认的RX等待时间(66µs)通常够用。但对于某些响应特别慢的标签,或者天线Q值过高导致振铃时间过长时,可能需要适当增加RX等待时间,否则芯片可能会“错过”标签响应的开头几个比特。
3. 发射模块:从数据字节到射频场
发射链路负责将MCU送来的数据,按照选定的协议编码、调制,最终通过天线辐射出去。
3.1 模拟发射:振荡器、功率与调制
核心时钟源:发射机的“心脏”是一个13.56MHz的晶体振荡器(连接至引脚31和32)。它直接产生射频载波,同时也为数字部分和SYS_CLK输出(引脚27)提供时钟。SYS_CLK可以输出给外部MCU使用,其频率可通过调制器和SYS_CLK控制寄存器(地址0x09)的B4和B5位(Clo1,Clo0)编程为13.56MHz、6.78MHz或3.39MHz。
晶体选择与负载电容计算:这是硬件设计的关键一步。必须选择频率容差小(如±20ppm)、等效串联电阻(ESR)低的基频晶体。数据手册推荐使用HC49U封装。负载电容的计算需要格外小心。 公式为:CL = ((C1 * C2) / (C1 + C2)) + CS其中,CL是晶体规格书上要求的负载电容(例如18pF),C1和C2是连接在芯片OSC引脚和地之间的两个外部电容,CS是芯片内部I/O电容加上PCB的寄生电容(典型值约5pF,有±2pF偏差)。 假设CL=18pF,CS=4.5pF,并令C1 = C2,计算过程如下:
18pF = ((C1 * C1) / (C1 + C1)) + 4.5pF 18pF = (C1^2 / 2C1) + 4.5pF 18pF = C1/2 + 4.5pF C1/2 = 13.5pF C1 = 27pF因此,需要在两个OSC引脚上各接一个27pF的电容到地。在实际布线中,为了微调频率,通常会使用一个固定电容和一个可调电容的组合。
发射功率控制:发射功率由芯片状态控制寄存器(0x00)的位B4(rf_pwr)选择。在5V供电的自动模式下,1为半功率(100mW,约20dBm),0为全功率(200mW,约23dBm)。对应的RF输出阻抗分别为8Ω和4Ω。这意味着天线的匹配网络需要根据你选择的功率模式进行优化。在3.3V供电下,功率会相应降低。
调制深度控制:调制类型和深度通过调制器和SYS_CLK控制寄存器(0x09)的低三位(Pm2,Pm1,Pm0)进行配置。ASK调制深度可以从7%调整到30%,也支持100%的OOK(通断键控)。调制深度会影响通信距离和抗干扰能力。深度越大,标签解调越容易,但读写器自身的功耗波动也越大。对于ISO/IEC 14443A协议,通常使用10%或30%的ASK调制。
调制脉冲长度微调:对于高Q值天线,其较长的谐振衰减时间可能会“拉长”调制脉冲,导致标签误判。TX脉冲长度控制寄存器(地址0x06)就是用来校正这个效应的。寄存器值(1-255)乘以73.7ns就是实际的脉冲长度。如果寄存器值为0,则使用协议默认的脉冲长度。
3.2 数字发射与数据组织
数字发射的逻辑与接收是对称的。在开始发送数据前,通常先发送一个复位命令(0x0F)来清空FIFO。数据发送由特定的命令(如连续写命令0x3D)启动。
数据加载流程:
- MCU向寄存器0x1D写入TX长度字节1(高4位和中4位,代表完整字节数的高8位)。
- MCU向寄存器0x1E写入TX长度字节2。其中,B7-B4位是完整字节数的低4位,B3-B1位存储不完整字节的比特数(1-7),B0位是“存在不完整字节”标志位。
- MCU连续向FIFO I/O寄存器(0x1F)写入要发送的数据字节(最多12字节)。
- 当第一个字节被写入FIFO后,发送过程自动开始。
芯片会根据ISO控制寄存器(0x01)选择的协议,自动为数据添加SOF、EOF、奇偶校验和CRC字节。这意味着MCU只需要关心“净荷数据”,所有底层的、繁琐的编码工作都由TRF796x完成了。
协议特定选项:
- ISO14443B TX选项寄存器(0x02):用于配置ISO/IEC 14443 B协议的SOF/EOF长度和额外保护时间(EGT)。
- ISO14443A高比特率选项寄存器(0x03):允许为ISO/IEC 14443 A/B高比特率模式独立设置发射和接收的比特率,并选择奇偶校验系统。
发射定时器:TX定时器H字节(0x04)和L字节(0x05)寄存器可以用于精确控制发射开始的时刻。你可以设置一个延时(步进590ns,最长约9.7ms),并选择定时器的触发条件(如RX SOF开始/结束,TX SOF开始/结束)。这在实现某些需要严格时序的定制协议或防碰撞算法时非常有用。
4. 核心寄存器配置详解与实战流程
理解了架构,我们最终要落到寄存器的配置上。TRF796x的寄存器空间是它强大灵活性的体现。下面我将几个最关键的控制寄存器拆开揉碎了讲。
4.1 主控制寄存器:芯片的全局开关
芯片状态控制寄存器 (0x00)这是芯片的“总闸”,控制着最基本的工作模式。
- B7 (
stby):待机模式。1使能,此时稳压器和振荡器仍在工作,但接收(en_rec)和发射(en_tx)关闭,用于快速唤醒。 - B6 (
direct):直接模式使能。这是高级功能的关键,下文会详述。 - B5 (
rf_on):RF场开启。必须置1,天线才会产生射频场。 - B4 (
rf_pwr):RF功率选择。1为半功率,0为全功率。 - B3 (
pm_on):接收输入选择。1选择RX_IN2(用于PM),0选择RX_IN1(用于AM)。通常由芯片自动控制。 - B1 (
rec_on):接收器使能,用于外部场测量。 - B0 (
vrs5_3):供电电压选择。1为5V操作,0为3V操作。这个位必须与你的实际供电电压严格匹配,否则可能损坏芯片或导致性能异常。
ISO控制寄存器 (0x01)这是协议选择的“大脑”。其低5位(iso_4到iso_0)的组合,决定了芯片工作在哪种协议和模式下。例如:
00010: ISO/IEC 15693 高比特率 (26.48 kbps),单副载波,1/4模式(这是上电默认值)。01000: ISO/IEC 14443 A 106 kbps。10011: Tag-it 协议。
重要特性:每次向该寄存器写入一个新的协议代码,芯片都会自动将一系列底层配置寄存器(地址0x02到0x0B)重置为该协议的最佳预设值。这极大地简化了初始化流程。你通常只需要设置这个寄存器,就能让芯片在标准协议下正常工作。
4.2 直接模式:突破协议限制的利器
直接模式是TRF796x最强大的功能之一,它允许你绕过芯片内部的协议处理器,直接操作模拟或部分数字信号。这为你打开了自定义协议、调试底层信号或实现特殊通信需求的大门。
直接模式分为两种,由ISO控制寄存器(0x01)的B6位(dir_mode)选择:
- 直接模式0 (
dir_mode=0):芯片仅作为模拟前端(AFE)使用。发射端,你通过MOD引脚(14)直接控制RF调制(OOK)。接收端,你从I/O_6引脚(23)直接获取数字化后的副载波信号。所有协议处理都需要由外部MCU的软��完成。 - 直接模式1 (
dir_mode=1):芯片使用所选协议的副载波解码器。接收端,I/O_6输出的是解码后的串行比特流,I/O_5(22)输出比特时钟。发射端,同样由MOD引脚直接控制。这适用于那些比特编码与标准协议相同,但成帧格式不同的自定义协议。
启用直接模式的步骤:
- 在ISO控制寄存器中设置
dir_mode位,并选择需要的协议(对于模式1)。 - 向芯片状态控制寄存器(0x00)的B6位(
direct)写入1。关键点来了:这个写操作不能以停止条件结束(取决于你的MCU SPI/I2C库函数实现)。因为停止条件会终止直接模式并清零direct位。在直接模式下,I/O_5和I/O_6被占用,无法进行标准的并行寄存器读写。你需要通过发送一个特殊的“直接模式停止命令”或重新上电来退出直接模式。
避坑指南:直接模式对时序要求极其苛刻。MOD引脚的控制信号和I/O_6的采样时钟必须非常精确。建议先用逻辑分析仪或高速示波器抓取标准协议下的MOD和I/O_6波形,作为你编写直接模式驱动程序的参考。此外,直接模式下天线匹配和滤波器的设计可能需要调整,因为芯片内部的某些自动处理被旁路了。
4.3 寄存器配置的通用流程与示例
一个典型的TRF796x初始化配置流程如下,以操作ISO/IEC 14443A Type A标签为例:
- 硬件上电与复位:确保EN引脚经历一个低到高的跳变,完成芯片硬件复位。
- 软复位:通过SPI/I2C接口发送软复位命令(0x0F)。
- 设置基本工作模式:
- 写寄存器0x00=
0x21。解释:rf_on=1(开启RF场),vrs5_3根据供电设为1(5V)或0(3.3V),其他位默认。假设5V供电,全功率,则为0010 0001=0x21。
- 写寄存器0x00=
- 选择通信协议:
- 写寄存器0x01=
0x08。解释:iso_4-iso_0=01000,即ISO/IEC 14443A 106kbps模式。 - 注意:这一步会自动配置好0x02到0x0B等寄存器的默认值,如RX等待时间、调制深度等。
- 写寄存器0x01=
- (可选)微调参数:如果默认参数在特定硬件(如天线)下不理想,可以进行微调。
- 例如,觉得通信距离近,可以尝试增加发射功率(寄存器0x00的B4位设为0)或增大ASK调制深度(寄存器0x09的
Pm[2:0],如设为110对应30%)。 - 如果误码率高,可以调整接收带宽(寄存器0x0A)或检查RSSI值。
- 例如,觉得通信距离近,可以尝试增加发射功率(寄存器0x00的B4位设为0)或增大ASK调制深度(寄存器0x09的
- 开启射频场并开始询卡:
- 确保寄存器0x00的
rf_on位已为1。 - 按照ISO/IEC 14443A的防碰撞流程,组织REQA(0x26)或WUPA(0x52)命令数据。
- 清空FIFO(发送复位命令0x0F)。
- 写入TX长度(寄存器0x1D, 0x1E)。
- 将REQA/WUPA命令字节写入FIFO(寄存器0x1F)。
- 等待IRQ中断,读取IRQ状态寄存器(0x0C)判断是收到响应还是超时。
- 如果收到响应,从FIFO中读取标签的ATQA应答。
- 确保寄存器0x00的
5. 常见问题排查与调试心得
在实际开发中,你一定会遇到各种各样的问题。下面是我总结的一些典型故障和排查思路。
5.1 问题排查速查表
| 现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
| 完全无法产生射频场,无电流 | 1. 供电错误或EN引脚未拉高。 2. 晶体未起振。 3. 芯片损坏。 | 1. 测量VIN、VDD_RF等电源引脚电压,确认EN引脚为高电平。 2. 用示波器测量OSC1/OSC2引脚,应有13.56MHz正弦波。检查晶体负载电容。 3. 检查芯片是否发烫,更换芯片尝试。 |
| 有射频场,但无法识别任何标签 | 1. 天线匹配严重失调。 2. 协议配置错误。 3. 接收通道问题。 | 1. 用网络分析仪或VNA测量天线阻抗,调整匹配网络至13.56MHz谐振。 2. 确认ISO控制寄存器(0x01)值是否正确。用逻辑分析仪抓取MOD引脚波形,看是否按协议调制。 3. 测量RX_IN1/2引脚,在标签靠近时应有明显的调制信号。检查RSSI寄存器(0x0F)是否有值。 |
| 识别距离非常近 | 1. 发射功率设置过低。 2. 天线效率低或匹配不佳。 3. 接收灵敏度低。 | 1. 检查寄存器0x00的rf_pwr位,尝试全功率模式。2. 优化天线匹配,增大天线尺寸或使用Q值更高的电感。 3. 检查接收链路增益(寄存器0x0A),避免过度衰减。确认RSSI值在有效范围内(如4-7)。 |
| 通信不稳定,时好时坏 | 1. 电源噪声大。 2. 外部电磁干扰。 3. 定时器设置不当。 | 1. 在电源引脚增加去耦电容(如10uF钽电容+100nF陶瓷电容)。 2. 为天线增加屏蔽罩,远离电机、开关电源等干扰源。 3. 适当增加RX等待时间(寄存器0x08)和RX无响应等待时间(寄存器0x07)。 |
| FIFO溢出或数据错误 | 1. MCU读取FIFO速度太慢。 2. 通信速率不匹配。 3. 奇偶校验或CRC错误。 | 1. 确保使能了FIFO水位中断(75%),并在中断服务程序中及时读取数据。 2. 检查MCU的SPI/I2C时钟频率是否满足芯片要求。 3. 读取IRQ状态寄存器(0x0C),确认错误类型。可能是信号质量差,需优化硬件。 |
| 直接模式无法工作 | 1.direct位写入后立即被清零。2. MOD/I/O信号时序错误。 3. 外部电路不支持。 | 1.最关键:确认写入寄存器0x00(设置direct=1)的命令没有发送停止条件。可能需要修改底层通信驱动。2. 用示波器对比标准模式下的波形,校准直接模式下的时序。 3. 直接模式下可能需要外接额外的滤波或放大电路。 |
5.2 硬件设计要点与调试技巧
- 电源去耦是生命线:TRF796x的模拟和数字部分对电源噪声非常敏感。务必在靠近芯片的VIN、VDD_RF、VDD_A、VDD_X等每个电源引脚放置一个100nF的陶瓷电容,并在电源入口处放置一个10uF以上的钽电容。地平面要完整且低阻抗。
- 天线匹配网络计算与调试:这是射频性能的核心。首先根据芯片输出阻抗(4Ω或8Ω)和天线线圈的等效电阻/电感,计算匹配网络(通常是串联电容+并联电容的L型网络)。计算只是起点,必须使用网络分析仪进行最终调试,将天线阻抗在13.56MHz下匹配到目标值(如50Ω或直接匹配到芯片输出阻抗)。没有VNA的情况下,可以用示波器观察天线两端的波形,一个匹配良好的天线,其波形应该是干净的正弦波,没有明显的畸变或振铃。
- 充分利用SYS_CLK和IRQ:将SYS_CLK输出连接到MCU的时钟输入或定时器,可以实现MCU与RFID芯片的时钟同步,简化软件定时。IRQ引脚配置为边沿触发中断,让MCU可以低功耗休眠,由RFID芯片的事件唤醒,这是电池供电设备的常用技巧。
- 寄存器配置的“快照”法:在调试复杂问题时,可以编写一个函数,将所有重要寄存器的值读出来并打印或显示。将正常工作时的寄存器“快照”与出问题时的“快照”进行对比,往往能快速定位是哪个配置被意外更改了。
- 从评估板开始:如果你对射频电路设计经验不足,强烈建议先从TI官方的TRF7960EVM评估板入手。在其原理图和PCB布局的基础上进行修改,可以避开很多常见的硬件陷阱。评估板配套的软件库和示例代码,也是理解芯片工作流程的绝佳资料。
TRF796x系列芯片就像一位内功深厚、招式开放的老师。它为你处理好了所有复杂的射频模拟信号和标准协议编解码,又把足够多的控制权交到你手上。吃透它的寄存器,你就能不仅知其然(让读写器工作),更能知其所以然(优化性能、解决疑难杂症、甚至实现创新应用)。这份灵活性和透明度,在如今越来越多“傻瓜式”集成模块的市场里,显得尤为珍贵。希望这篇基于手册和实战的详解,能帮你更好地驾驭这颗经典的RFID读写器芯片。