☰
315MHz与125kHz射频入门:Arduino解析RKE/PKE原理
2026/10/5 1:15:20 网站建设 项目流程

玩射频的人,肯定绕不开315MHz和125kHz这两个频率:一个是远距离遥控的代表,一个是近距离识别的代表。当它们同时出现在同一个场景里,绝大多数情况下说的就是汽车钥匙——RKE(遥控无钥匙进入)走315MHz或433MHz,PKE(被动无钥匙进入)则用125kHz低频做唤醒和定位,再用UHF高频做双向认证。最近又有读者私信问我,到底能不能用Arduino模拟汽车钥匙的RKE/PKE信号?这个问题我必须先把话说清楚:现代汽车钥匙不是简单发一串码就能打开的,而且任何针对他人车辆的信号模拟、重放行为都越过了法律和道德的底线。但把RKE/PKE背后的物理层原理、协议设计拆开来看,再用Arduino对自有设备做合法实验,这不仅是安全的,而且是非常有价值的射频入门路径。这篇文章就把从315MHz到125kHz的完整逻辑讲清楚。

1. RKE和PKE的高下之分:从远程锁车到被动解锁

1.1 一句话搞清楚RKE和PKE

RKE(Remote Keyless Entry)就是我们熟知的遥控钥匙。按下钥匙上的按钮,钥匙内置的射频发射器在315MHz(美洲、亚洲部分地区常用)或433MHz(欧洲常用)频段发送一串编码,车身接收器收到后校验,执行落锁或开锁。整个链路是单向的:钥匙发,车收,没有任何确认机制。这个模型其实也被大量后装遥控报警器、遥控车库门沿用至今,所以你在网上看到的"Arduino复制车库遥控器"用的就是同一个套路。

PKE(Passive Keyless Entry)则是后来出现的体验升级:驾驶员带着钥匙走近车门,手搭上门把手,车就解锁;坐进驾驶座,按一下启动按钮,车就点火。整个过程完全不用掏钥匙。PKE的核心技术难点不在"能不能远程控制",而在"怎么确定钥匙真的就在车附近,并且不是伪造的"。两个系统的差异可以从交互姿势、通信方向、典型频率和核心诉求四个维度对比:

维度RKEPKE
交互姿势按钥匙按钮走近/拉门把手自动触发
通信方向单向(钥匙→车)低频唤醒 + UHF双向认证
典型频率315MHz / 433MHz125kHz(唤醒)+ 315MHz/433MHz(认证)
核心诉求远距离遥控锁车/开锁无感进入与防伪验证

很多人以为PKE是RKE的简单升级,把遥控距离做大了而已。实际上PKE多出来的不只是距离,而是"身份判断"和"位置判断"两个能力,因为自动解锁的前提是系统必须知道:钥匙是合法的,而且钥匙在车外而非车内、在驾驶门旁而非后备厢里。这个需求直接决定了125kHz在PKE里的位置。

1.2 PKE为什么需要两套频率配合

如果只用UHF单向通信,汽车永远无法区分"车钥匙在你手里"和"车钥匙在五十米外的沙发上"。UHF信号穿透力强,你在楼上按遥控器都能锁楼下的车,这是它的优点,也是致命缺点——系统没有任何办法判断钥匙到底离车多远。

PKE的低频通道就是为了解决"定位"问题引入的。125kHz信号在空气中的衰减很快,而且金属车身基本能屏蔽它,所以车内的低频天线只能在车内唤醒钥匙,车门外的低频天线最多覆盖门口一两米。这样一来,系统就能靠"哪个天线收到了钥匙的低频响应"来判断钥匙的大致位置:主驾门把手天线收到响应,允许解锁;后备厢天线收到响应,允许感应开门;车内天线收到响应,才允许一键点火。低频和高频各司其职,一个管"在哪里",一个管"你是谁",缺一不可。这个物理层分工思想,是理解整个PKE工程的关键,也是后面所有实验的底层逻辑。

2. 315MHz与125kHz的物理层逻辑:波长、天线和覆盖范围

2.1 先算一下波长:频率决定了通信距离

为什么汽车钥匙的高频段选了315MHz或433MHz,而不是随便一个频率?因为它们是ISM免许可工业频段,各国法规都允许小功率设备使用,而且在这个频率附近做小尺寸天线非常合适。用公式 c = fλ 算一下:315MHz对应的波长约0.95米,1/4波长天线大约24厘米,正好能缩进钥匙壳或者车顶天线里;433MHz的1/4波长天线更短,约17厘米。

再看125kHz:波长约2400米,1/4波长天线理论长度600米,这在汽车钥匙上根本不可能实现。所以低频设备从来不走"辐射天线"路线,而是用带有铁氧体磁芯的大电感线圈,在近距离形成磁场耦合。这不是传统意义的"发无线电波",更像变压器原理:发射端线圈产生交变磁场,接收端线圈感应出电压,距离一远磁场强度就急剧下降。

可以用一个生活化类比帮助理解:315MHz相当于你在操场喊话,声音能传到远处;125kHz相当于两个人隔着一块玻璃贴着耳朵说话,只有贴得够近才听得清。前者是远场辐射,后者是近场耦合,物理机制完全不同。把常用频段拉出来看会更清楚:

频段频率波长1/4波长天线通信机制典型场景
LF125kHz约2400m理论约600m近场磁场耦合RFID门禁、宠物芯片、PKE唤醒
HF13.56MHz约22m约5.5m近场耦合NFC刷卡、公交卡
UHF315/433MHz0.95m/0.69m24cm/17cm远场电磁辐射遥控钥匙、无线门铃、车库门
微波2.4GHz0.125m约3cm远场电磁辐射蓝牙数字钥匙、WiFi

2.2 近场与远场:125kHz如何判断钥匙在不在车内

远场电磁波传播距离远,但很难用来做"位置判断";近场磁场耦合天然距离短,反而成了PKE定位的利器。PKE系统在车内和车外布置多根低频天线,每根天线按顺序发射一个低频挑战帧。如果车钥匙确实在车内,它只会收到车内天线发出的帧;如果钥匙在车外门口,只有门把手天线能唤醒它;要是钥匙掉在车外远处,任何低频天线都够不着,系统就不会解锁。

这其实也是中继攻击能被利用的物理基础。攻击者在车旁放一个低频转发器,把车周围天线发出的低频信号通过无线链路传给远处的另一个转发器,放在受害人钥匙旁边;钥匙以为收到了车的唤醒帧,于是启动UHF链路响应,车辆也以为钥匙就在旁边,车门就开了。整个过程没有破解任何加密算法,只是在"延长信号的距离"。我在这里不展开具体实现细节,公开讲清楚它的原理,是为了帮大家理解低频定位的价值,以及为什么物理层的设计对整车安全如此重要。

顺便说一句,有些新车开始用蓝牙(2.4GHz)数字钥匙,蓝牙也需要先建立连接再做相对距离测量(通过RSSI、UWB等方式),但精度和安全性都不如专用低频天线加加密认证的组合。为什么很多厂商还在坚持保留125kHz低频通道?就是因为"近场物理定位"这个能力,现有高频方案还替代不了。

3. Arduino实战:315MHz遥控信号的解码与重放

3.1 硬件清单与接线:Uno加两对315MHz模块

如果你只是想看懂RKE的原理,纸上谈兵就够了;想真正动手,我建议准备这些:

  • Arduino Uno或Nano(Nano更便宜,Uno调试更方便)
  • 315MHz接收模块(推荐RXB6超外差接收,灵敏度比简易超再生模块好很多)
  • 315MHz发射模块(常见的FS1000A/XD-FST即可,短时间测试够用)
  • 一个315MHz的无线遥控开关套装(接收板加遥控器,作为合法信号源)
  • 面包板、杜邦线、一根约24厘米的单股导线(做天线)

接线方式如下:

模组引脚连接到Arduino
315MHz RXB6DATAD2
VCC5V
GNDGND
315MHz XD-FSTDATAD4
VCC5V
GNDGND

接收模块的数据脚为什么接D2?因为后面要用的RCSwitch库依赖Arduino的外部中断,Uno上只有D2和D3支持外部中断,enableReceive(0)对应的就是D2。发射端用D4是因为发射不需要中断,任意数字口都行。

3.2 用RCSwitch库抓取自己遥控器的编码

RCSwitch(rc-switch)是解码ASK/OOK信号最常用的Arduino库,支持几十种常见编码协议,很适合用来学遥控器和入门射频。安装好库之后,把下面的程序烧进Arduino:

#include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); void setup() { Serial.begin(9600); mySwitch.enableReceive(0); // 0 对应 Uno 的 D2 外部中断 } void loop() { if (mySwitch.available()) { unsigned long value = mySwitch.getReceivedValue(); unsigned int bitLen = mySwitch.getReceivedBitlength(); unsigned int proto = mySwitch.getReceivedProtocol(); if (value == 0 || bitLen == 0) { mySwitch.resetAvailable(); return; } Serial.print("Code: "); Serial.print(value); Serial.print(" , bits: "); Serial.print(bitLen); Serial.print(" , protocol: "); Serial.println(proto); mySwitch.resetAvailable(); } }

烧好程序后给Arduino接上电,按下你那个315MHz遥控器的按键。串口监视器里会出现类似Code: 783731, bits: 24, protocol: 1的输出。代码里最关键的三个参数分别是编码值、码长、协议类型。同一个遥控器上不同的按键,Code不同;不同品牌的遥控器,protocol可能不同。RCSwitch库的protocol对应的是它内置的一套时序表,比如脉宽、短/长电平怎么映射到0和1。

到这里,你已经完成了一次典型的"固定码遥控器解码"实验。再次强调:这个实验的对象必须是你自己购买的设备。如果拿这套装置去抓别人的遥控器信号,哪怕只是"看一看",也已经踩到了法律红线。真正让我推荐这个实验的原因,是它能直观回答"固定码遥控器为什么能被复制"这个问题——理解了这个,后面滚动码的价值就清楚了。

3.3 重放与踩坑:天线和供电

解码之后,自然想试试重放。把315MHz发射模块接好,代码改成这样:

#include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); void setup() { mySwitch.enableTransmit(4); // 发射模块数据脚接D4 mySwitch.send(783731, 24); // 用串口监视器里抓到的值替换 } void loop() { }

运行后,你的315MHz遥控开关应该会接收到发射的信号并执行相同动作。这个小实验能非常直观地展示固定码设备的天生缺陷,而这也是汽车厂商后来上滚动码的核心原因。

实操中几个高频坑,我全部踩过:

  • 天线问题。315MHz模块出厂时很多不带天线或只带一小段弹簧。直接插面包板,接收距离可能只有一两米;给模块焊一根约24厘米(315MHz的近似1/4波长)的单股导线后,距离能明显提升。发射端也建议加天线,否则你一直以为是代码问题,其实是信号根本没发出去。
  • 发射瞬态掉电。FS1000A这类模块发射瞬间电流较大,如果用电脑USB口供电,可能出现一发射Arduino就复位的现象。解决办法是给模块单独供5V,或者在模块VCC和GND之间并一个大电容(100µF到470µF),再不行就换一个供电更稳的USB口。
  • 面包板接触不良。315MHz频率不高,面包板勉强能用,但杜邦线松动会导致解码时好时坏。先用手把模块按紧排除接触问题,再去怀疑代码。

另外,官方Arduino IDE我用了很久,但写这种带库依赖的工程,我更习惯用VS Code配PlatformIO插件,编译报错信息更友好,库版本管理也不容易乱。要是手头没有实物模块,还可以先在Wokwi这种仿真平台上搭Arduino环境跑一遍代码,熟悉逻辑后再转入实物调试,能省不少时间。

4. Arduino实战:125kHz低频RFID读取与EM4100协议

4.1 RDM6300与EM4100标签接线

低频侧的实验,我推荐从125kHz RFID读取器入手,因为它便宜、稳定、原理直观。RDM6300是常见的125kHz读卡模块,配合EM4100兼容的ID卡、钥匙扣或者宠物芯片就能用。实验对象同样是自己手里的门禁卡或宠物芯片,不要拿别人的卡去刷。

接线方式如下:

RDM6300Arduino
VCC5V
GNDGND
TXD3(软串口RX)
RX悬空(本实验不写标签)

RDM6300默认通过串口以9600波特率输出ASCII十六进制字符。Arduino Uno只有一个硬件串口,需要用来接调试器,所以用SoftwareSerial把D3作为软串口RX。接收端代码:

#include <SoftwareSerial.h> SoftwareSerial rfid(3, 11); // RX = D3, TX = D11(未用) void setup() { Serial.begin(9600); rfid.begin(9600); } void loop() { if (rfid.available() >= 14) { byte buf[14]; for (int i = 0; i < 14; i++) { buf[i] = rfid.read(); } // 帧格式: 0x02 + 10位卡号ASCII + 2位校验 + 0x03 for (int i = 1; i < 11; i++) { Serial.print((char)buf[i]); } Serial.println(); } }

把EM4100卡靠近读卡器线圈,串口会打印类似0102A1B3C4这样的10位十六进制ID。如果换成同一品牌的其他卡,ID会不同。读卡距离一般只有2到5厘米,这是125kHz近场耦合的典型表现,也正好印证了前面物理层逻辑里说的"低频近场通信距离天然受限"。

模块到手先别急着接线,看下丝印。RDM6300常见的是TTL电平版本,可以直接和Arduino连;但网上也能买到带RS232电平的工业版,那种需要转换电路,直接接Arduino很容易烧引脚。这也是新手最容易忽略的地方。

4.2 读卡背后的协议:曼彻斯特与校验位

RDM6300帮你完成了解调工作,但如果只知道"读卡号"就收工,还是没理解125kHz的精髓。EM4100的空中帧格式非常经典:

  • 9位连续1作为前导码;
  • 10组4bit的数据载荷(共40bit),存放40位的ID信息;
  • 每组4bit后接1个行校验位(偶校验);
  • 10组数据对应的列方向还有4位列校验位;
  • 最后是停止位。

这个帧结构既能把ID发出来,又能让接收端在磁场不稳定时发现错误。RDM6300模块内部把125kHz载波上携带的曼彻斯特编码解调出来,再按EM4100协议解析出卡号,最后通过串口输出文本帧。

PKE的低频通道在物理层做的事情和这个非常像:车载低频天线发出一个用某种调制方式编码的唤醒帧,钥匙里的低频接收器解调、解码,然后才启动后面的加密认证流程。区别在于,PKE的低频帧内容是车企私有协议,而且不会像EM4100这样把ID明文广播出来——它更像一个"敲门暗号",暗号对了,才开始正儿八经的身份认证。

这里再提醒一个坑:125kHz不是EM4100的专利,市面上还有HID Prox、T55x7、Hitag等多种低频卡方案,频率相近但协议完全不通。你在淘宝随手买一套门禁读卡模块,可能只支持EM4100。做项目之前先确认你手里的卡属于哪个协议家族,能省掉大量"为什么读不到卡"的排查时间。

5. 为什么模拟汽车钥匙没那么简单:滚动码与双向认证

5.1 从固定码到滚动码:为什么重放无效

前面315MHz实验里,我们用Arduino成功解码并重放了一个遥控开关,这说明固定码方案天生怕"录制-重放"攻击:攻击者只要在目标附近用接收模块记录下一段有效信号,回头再发一遍,设备就照单全收。早期很多遥控钥匙和车库门用的就是这个方案,所以市面上才有各种"一键复制遥控器"的产品,原理和刚才的Arduino实验一模一样。

汽车厂商早就意识到这个漏洞,所以从20世纪90年代开始推广滚动码方案,代表是Microchip的Keeloq、HCS系列。核心思想并不复杂:钥匙里有一个计数器,每次按键后计数器加一,计数器值经过密钥加密后和固定ID一起发出去;车身接收端保存着上次收到的计数器值,只接受比它更新、且差值在一定范围内的码。攻击者录到一段旧码之后原样重放,计数器早已过期,车自然不会响应。

这也是为什么你搜索"Arduino复制汽车钥匙"会看到两种完全不同的结果:能成功的,基本都是老掉牙的固定码车型或者工程车、遥控器类设备;对着现代车钥匙折腾的,要么是摆拍,要么只是在演示物理层接收,根本没有生成合法认证数据。要想真正与车身模块完成认证,必须有密钥、算法和随机数挑战,这些东西不在射频信号里,而在钥匙的安全芯片里。

5.2 挑战-应答机制与现代PKE攻击面

现代PKE的认证链路是双向的,典型流程大致是:车辆先通过125kHz低频天线发送一个随机数挑战;钥匙收到后,用内部密钥对挑战做运算,生成一个响应;钥匙通过315MHz/433MHz UHF链路把响应发回;车身用自己存储的同一密钥验证响应是否匹配。因为有随机数和密钥参与,每次通信的响应都不同,录制-重放这条路被彻底堵死。

与之配套的还有硬件安全模块(HSM),密钥直接存在安全芯片里,物理上不容易被读取,也很难通过电压扰动、故障注入等方式提取。也就是说,想"模拟"一把现代车钥匙,难点根本不是315MHz或者125kHz的频率问题,而是密钥和密码算法问题。很多教程把你带到物理层就戛然而止,其实后面这一大段才是真正有价值、也真正让"模拟"变得不可能的部分。

那现代PKE被攻击的案例是怎么发生的?公开研究里常见的方向是:中继攻击(前面提到过,延长低频信号距离)、CAN总线注入(从车内网络直接发解锁指令)、以及物理接触钥匙后的密钥提取。这些都是系统级攻击,不是拿Arduino发一段射频信号能做到的。安全研究人员做这类实验,基本都在车主书面授权、封闭场地、合规设备的前提下进行。对我们普通射频爱好者来说,了解攻击原理的意义在于知道"为什么越新的车越难被复制",而不是去实践。

6. 学习射频的合法边界与后续路线:从Arduino到SDR

6.1 推荐路线:从超外差模块到RTL-SDR

如果你看完文章已经对射频产生了兴趣,建议按这条路走:先吃透Arduino加超外差收发模块,把OOK/ASK这类基带调制玩明白;然后可以尝试RadioHead库或者LoRa模块,掌握FSK、扩频通信;再往后可以上一台RTL-SDR接收棒,在电脑上用GQRX或者HDSDR观察真实的频谱和瀑布图。RTL-SDR本身只接收不发射,用来做频谱观察和学习调制识别非常合适,基本不涉及发射法规问题。

315MHz和125kHz不只是汽车钥匙的频段。智能家居里大量无线门铃、窗帘电机、遥控插座都在315/433MHz附近;125kHz则广泛用在门禁、员工卡、宠物芯片、动物溯源上。把这两套技术吃透,你可以做宠物自动喂食器(识别猫咪芯片后开门)、书房门禁改造、遥控器整合网关,甚至可以设计一套基于低频定位的室内物品查找系统。这些都是可以公开分享、能拿到社区里讨论的合法项目,成就感一点不比折腾汽车钥匙少。

6.2 动手之前必须知道的边界

最后说几句不太好听但必须说的话。射频和无线电领域有一套严格的法律边界:多数国家对未授权的信号发射、对他人通信信号的截获与解调、对门禁和车辆系统的未授权访问都有明确的处罚规定。实验发射请使用正规渠道购买的ISM频段模块,不要自行加大功率或改装天线超规格使用;接收实验请远离他人隐私场景;所有解码和重放实验的对象,只限于你拥有所有权或获得明确书面授权的设备。

我见过不少刚入门的爱好者,因为一时好奇越了界,技术生涯还没开始就结束了。这个圈子真正的长期主义者,从来不靠踩红线展现技术,而是靠扎实的基本功和高质量的开源项目赢得尊重。射频学习最迷人的地方在于,你手里那一块小小的Arduino开发板,能同时触摸到电磁场理论、通信协议和密码学三个领域,把这套基础打牢,能走的路远比"复制一把钥匙"要长得多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询