YAOTU INSIGHTS

Flipper Zero Unleashed 固件 RFID 功能测试用例全解析:从协议读取到 T5577 写入的完整验证指南

Flipper Zero Unleashed 固件 RFID 功能测试用例全解析:从协议读取到 T5577 写入的完整验证指南
Flipper Zero Unleashed 固件 RFID 功能测试用例全解析从协议读取到 T5577 写入的完整验证指南【免费下载链接】unleashed-firmwareFlipper Zero Unleashed Firmware项目地址: https://gitcode.com/GitHub_Trending/un/unleashed-firmware导读本篇文章以 documentation/testing/rfid_test_cases.md 为核心系统讲解 Flipper Zero Unleashed 固件中低频 RFID125 kHz功能模块的完整测试体系。文档围绕 EM-Marine 4100、Motorola Indala26、HID H10301 以及 Troyka/Podorozhnik 等常见卡型定义了读取 → 仿真 → 保存 → 写入 → 复读校验五大共享操作步骤Shared Steps与九组测试用例。读完本文你将掌握 RFID 应用的场景流转逻辑、各协议在固件源码中的实现原理、T5577 可写芯片的写入与清空操作方式以及如何通过 CLI 命令对读取、写入、仿真和 RAW 数据采集进行交叉验证。1. 测试文档定位与测试方法论rfid_test_cases.md属于仓库 documentation/testing 目录下的功能测试用例集与同目录的nfc_test_cases.md、subghz_test_cases.md等文档共同构成固件的回归测试体系。该文档的定位是黑盒手工测试用例它不描述代码实现而是以操作步骤 预期结果的形式指导测试人员或 QA 自动化脚本逐项验证 RFID 应用在真实硬件上的行为。整个文档建立在两个关键概念之上共享步骤Shared Steps文档用[1]~[5]编号引用五组被反复复用的操作序列——Read、Emulation、Save、Write、Read the written。所有测试用例都由这些共享步骤的不同排列组合而成预期结果Expected result每个步骤后都列出了明确的通过标准例如卡被成功读取仿真出的 ID 与原始 ID 一致保存后场景自动跳转到 Saved 目录等。理解这一点后我们先把五个共享步骤背后的固件实现讲清楚再逐条拆解九组用例。2. RFID 应用入口与主菜单场景流转所有测试用例的第一步都是Go to RFID进入 RFID 应用。在固件中该应用由 applications/main/lfrfid 目录实现主场景的菜单构建逻辑位于 lfrfid_scene_start.csubmenu_add_item(submenu, Read, LfRfidMenuIndexRead, ...); submenu_add_item(submenu, Saved, LfRfidMenuIndexSaved, ...); submenu_add_item(submenu, Add Manually, LfRfidMenuIndexAddManually, ...); submenu_add_item(submenu, Extra Actions, LfRfidMenuIndexExtraActions, ...);菜单索引定义在 lfrfid_i.h菜单项枚举值进入场景对应文档用例ReadLfRfidMenuIndexReadLfRfidSceneRead用例 1/3/4/5/6 的读取步骤SavedLfRfidMenuIndexSavedLfRfidSceneSelectKey用例 9 的仿真选择入口Add ManuallyLfRfidMenuIndexAddManuallyLfRfidSceneSaveType用例 8Extra ActionsLfRfidMenuIndexExtraActionsLfRfidSceneExtraActions用例 7 的 T5577 写入入口数据存储层面所有读到的钥匙保存在 SD 卡的/ext/lfrfid目录下见 lfrfid_i.h 中LFRFID_APP_FOLDER与LFRFID_APP_FILENAME_EXTENSION宏定义普通钥匙文件扩展名为.rfidRAW 原始波形文件使用.ask.raw与.psk.raw后缀。这解释了文档中保存后场景跳转到 Saved 目录的预期结果——保存操作会调用 lfrfid.c 中的lfrfid_save_key()将file_name .rfid拼接到LFRFID_APP_FOLDER路径下完成落盘。3. 五大共享步骤Shared Steps逐项解析文档定义的五个共享步骤构成了所有用例的操作骨架下面结合源码说明每一步在固件内部的真实行为与判定标准。3.1 Shared Step [1]Read读取操作将卡贴近设备背部天线区域Flipper 自动感应并读取。预期结果卡成功读取读到的关键信息与原始卡片一致。固件侧由LFRFIDWorker工作线程驱动读取流程读到的数据进入ProtocolDict协议字典并按协议特征自动识别。主菜单 Read 场景对应LfRfidSceneRead而Extra Actions中还提供了两种受限读取模式见 lfrfid_scene_extra_actions.cRead ASK (FDX, Regular)LFRFIDWorkerReadTypeASKOnly仅按 ASK幅度键控解调Read PSK (Indala)LFRFIDWorkerReadTypePSKOnly仅按 PSK相移键控解调专门针对 Indala 类卡片。自动模式LFRFIDWorkerReadTypeAuto会同时尝试两种解调方式。判定信息与原始一致的依据是读取结果会渲染出FC工厂码与Card卡号等可读字段见下文协议渲染函数测试时需与卡面或读卡器读到的原始编号比对。3.2 Shared Step [2]Emulation仿真操作读取成功后选择 Emulate用另一台 Flipper或其他固件的读卡设备读取仿真信号。预期结果第二台设备能读到同样的 ID仿真出的信息与原始完全一致。固件通过lfrfid_worker_emulate_start()启动仿真将协议编码后的信号经 125 kHz 天线持续发射。文档用例 9 特别强调用第二台 Flipper、且运行另一套固件来验证目的是排除两台设备同固件可能存在的相同解码缺陷确保 ID 是真读出来的而不是两台设备互相自洽。3.3 Shared Step [3]Save保存操作为钥匙命名并保存。预期结果钥匙以指定名称保存成功保存后界面自动切换到 Saved 目录。保存路径与文件名规则见 lfrfid.c文件名长度上限由LFRFID_KEY_NAME_SIZE22 字节约束保存成功后场景管理器切换到LfRfidSceneSavedKeyMenu即文档所说的 Saved 目录视图。3.4 Shared Step [4]Write写入操作将已保存的钥匙通过 write 功能写入另一张空白/可写载体典型目标为 T5577 芯片。预期结果写入成功出现成功提示场景。写入动作由lfrfid_worker_write_start()驱动最终调用各协议的write_data()回调把数据编码成 T5577或 EM4305、Hitag micro 魔术卡的配置块。写入失败时固件会区分三类错误见 lfrfid_cli.c 中对应的 CLI 输出协议本身不可写ProtocolCannotBeWritten、载体芯片不可写FobCannotBeWritten。这一错误区分同样体现在 GUI 场景的LfRfidEventWriteProtocolCannotBeWritten/LfRfidEventWriteFobCannotBeWritten事件上见 lfrfid_i.h。3.5 Shared Step [5]Read the written复读校验操作用读卡器或 Flipper 自身读取刚才写入的载体。预期结果载体信息被成功读出数据与写入前保存的钥匙完全一致。这是闭环校验的关键一步验证保存的钥匙 → 写入载体 → 载体可读整条链路的数据一致性防止出现能写不能读或写入后数据损坏的假成功。4. 九组测试用例逐一拆解4.1 用例 1EM Marine 4100 全流程覆盖 Read → Emulate → Save → Write → Read the written 完整链路。EM4100 是文档测试矩阵中唯一走完全部五个共享步骤的协议适合作为回归测试的基准卡型。4.2 用例 2Motorola Indala26写入优先路径与用例 1 的区别在于操作顺序先用共享步骤 [4] 写入已保存钥匙再执行 Emulate → Save → Write → Read the written。该用例验证两件事Indala26 卡能否被写入 T5577 载体写入后的仿真与二次复读是否一致。从源码看Indala26 的 T5577 写入配置为 PSK1 调制、RF/32 位速率见 protocol_indala26.c这是它与 EM4100Manchester 调制在写入层面最本质的区别。4.3 用例 3HID H10301Picopass文档将 HID H10301 标注为 (Picopass)。该用例同样走标准五步流程。H10301 协议在固件中的名称为H10301、厂商标识为HID特征为 ASK 解调见 protocol_h10301.c采用 FSK 双频振荡器生成 50 kHz 位速率载波T5577 写入使用LFRFID_T5577_MODULATION_FSK2a调制protocol_h10301.c。4.4 用例 4Indala26读取优先路径与用例 2 同一协议、但按标准顺序 Read → Emulate → Save → Write → Read the written 执行与用例 2 形成同一协议两种操作顺序的对照用于排查读写顺序是否影响结果。4.5 用例 5Troyka/Podorozhnik 与 Troika 解析器专项该用例在标准读取流程中插入了一个专项验证点Check the work of the troika parser——读取卡片时应加载此类卡片特有的附加信息列表。Troyka/Podorozhnik 是俄罗斯交通卡体系Troika的常见卡型读取后界面会额外渲染卡片特有信息。测试时需确认读取场景除了基础 ID 外还正确加载了附加信息而不能只校验 ID 本身。4.6 用例 6RFID 多标准批量读取进入 RFID → Reading依次测试indala、em-marine、HID三类标准卡都能被识别然后将所有读到的卡全部保存。此用例是多协议自动识别能力测试——固件自动模式下会遍历协议字典中的解码器decoder从源码看 lfrfid_protocols.h 中注册了 24 种协议EM4100、Electra、H10301、Idteck、Indala26/224、IOProxXSF、AWID、FDX-A/B、HID 系列、Pyramid、Viking、Jablotron、Paradox、PAC/Stanley、Keri、Gallagher、Nexwatch、Securakey、GProxII、Noralsy 等自动识别即遍历这些解码器逐个匹配。4.7 用例 7RFID 写入 T5577操作路径为读取或选择已保存→ Extra Actions/More → Write将选中卡写入 T5577随后连续写入 3 种不同类型卡片并逐一验证读取结果。预期结果读卡器正确识别全部 3 种卡数据完全匹配。这一用例对应 lfrfid_scene_write.c 及 lfrfid_scene_write_success.c 等场景。T5577 是 125 kHz 可编程芯片支持多种调制/速率组合因此可以承载 EM4100Manchester、IndalaPSK、H10301FSK等不同协议的帧。测试中还会涉及密码问题固件内置了一份 T5577 默认密码表default_passwords[]共 128 个常用密码见 lfrfid.c供写入/清除时暴力尝试访问受密码保护的芯片。4.8 用例 8RFID Add Manually手动创建进入 RFID → Add Manually手动创建三种卡EM4100、H10301、I40134然后用另一台 Flipper 或读卡台读取。预期结果三张手动创建的卡都能被正常读取出数据。手动创建走LfRfidSceneSaveType→LfRfidSceneSaveData场景链见 lfrfid_scene_start.c通过 ByteInput 输入协议数据后保存。该用例验证的是手工输入数据 → 编码 → 发射可读链路可用于无实体卡时构造测试样本。4.9 用例 9RFID 仿真跨固件验证在 Saved 目录中依次选择Indala → Emulate、EM-Marine → Emulate、HID → Emulate分别用第二台 Flipper 另一套固件读取。预期结果读卡方显示的 ID 与仿真方完全一致。该用例的三条子步骤结构相同核心目的是对三类主流协议逐一做跨设备、跨固件的仿真一致性验证排除单设备自读自写的假阳性。5. 被测协议源码级原理测试要知其所以然这里补充三个核心协议在 lib/lfrfid/protocols 中的实现要点。5.1 EM4100EM-Marineprotocol_em4100.c 是典型代表数据帧9 位全 1 引导头 10 行 × 5 位数据4 位数据 1 位行校验 4 位列校验 停止位总计 64 位编码帧调制Manchester 编码解码器通过manchester_advance()状态机解析短/长电平源码中EM_READ_SHORT_TIME_BASE/EM_READ_LONG_TIME_BASE定义在 256/512 时间基数protocol_em4100.c支持三种时钟RF/64、RF/32、RF/16分别注册为EM4100、EM4100/32、EM4100/16三个协议条目T5577 写入配置块 0 使用 Manchester 调制 对应位速率数据写入块 1、块 2protocol_em4100.c渲染输出FC: %03u / Card: %05hu / DEZ 8 / DEZ 10等字段protocol_em4100.c这是测试中信息与原始一致的人工比对依据。5.2 Indala26Motorolaprotocol_indala26.c 的关键特征特征LFRFIDFeaturePSK即只能通过 PSK 方式读取protocol_indala26.c这也解释了为什么 Extra Actions 里单独提供 Read PSK (Indala) 入口帧结构33 位前导码 64 位编码数据解码时同时维护正/负极性、以及相位错位corrupted四条数据通道以提高容错率protocol_indala26.cT5577 写入PSK1 调制 RF/32 位速率数据写入块 1、块 2protocol_indala26.c渲染输出FC、Card、Wiegand 校验Parity与 Indala 校验和Checksum状态protocol_indala26.c。5.3 H10301HIDprotocol_h10301.c 的特征特征LFRFIDFeatureASKprotocol_h10301.c通过fsk_demodFSK 解调器识别帧结构0x1D 前导 14 位编码的公司/OEM 码与格式码010、101 双位编码 24 位数据 前后 Wiegand 奇偶校验位T5577 写入FSK2a 调制 RF/50 位速率数据横跨块 1~3protocol_h10301.c渲染输出FC: %hhu / Card: %huprotocol_h10301.c。6. T5577 附加操作与扩展能力在 Extra Actions文档用例 7 提到的 More菜单中固件还提供了 T5577 芯片的维护操作lfrfid_scene_extra_actions.c菜单项功能对应场景Read ASK (FDX, Regular)仅按 ASK 解调读取LfRfidSceneReadRead PSK (Indala)仅按 PSK 解调读取LfRfidSceneReadClear T5577 Password清除 T5577 密码需先输入密码LfRfidSceneEnterPassword→LfRfidSceneClearT5577ConfirmWipe T5577整卡擦除LfRfidSceneWipeT5577ConfirmRead RAW RFID dataRAW 波形采集需开启调试标志LfRfidSceneRawNameEmulate RAW RFID dataRAW 波形仿真需开启调试标志LfRfidSceneSelectRawKey其中 Clear/Wipe 操作同样依赖 lfrfid.c 中的 128 个默认密码表包含0x00000000、0xFFFFFFFF、0x12345678、0xDEADC0DE、0xFEEDBEEF等常见弱密码用于尝试解锁未知密码的 T5577。RAW 采集/仿真入口受FuriHalRtcFlagDebug调试标志门控RAW 文件用于协议开发与波形级调试。7. 用 CLI 命令补充交叉验证GUI 之外的自动化验证手段是rfidCLI 命令注册于 lfrfid_cli.c。该文件开头的用法说明lfrfid_cli.c完整覆盖了文档中的全部核心操作rfid read optional: normal | indala - read in ASK/PSK mode rfid write | emulate key_type key_data - write or emulate a card rfid raw_read ask | psk filename - read and save raw data to a file rfid raw_emulate filename - emulate raw data (helps debug protocols) rfid raw_analyze filename - outputs raw data to cli and tries to decode it各子命令与测试用例的对应关系rfid read对应 Shared Step [1]normal/ask等价于 GUI 的 ASK 模式indala/psk等价于 PSK 模式不传参数则自动模式lfrfid_cli.c读取成功后输出协议名、十六进制数据和渲染信息rfid write key_type key_data对应 Shared Step [4]key_data为协议数据长度的十六进制串如 EM4100 为 5 字节写入结果分Written!/This protocol cannot be written./Seems this fob cannot be written.三种输出lfrfid_cli.crfid emulate key_type key_data对应 Shared Step [2]持续发射直至 CtrlCrfid raw_analyze filename对 RAW 文件逐脉冲输出[pulse duration]对并尝试自动识别协议lfrfid_cli.c是排查读取失败/误识别问题的重要诊断工具。例如手动构造并仿真一张 EM4100 卡数据 5 字节的完整命令为rfid emulate EM4100 0102030405这些 CLI 通道让测试人员无需进入 GUI 即可验证同一张卡在两种入口下的读取/写入一致性与文档用例形成互补。8. 测试执行要点与通过标准汇总综合全文执行rfid_test_cases.md时建议遵循以下要点测试前置准备两类硬件——被测 Flipper安装 Unleashed 固件、第二台 Flipper 或独立读卡器建议运行不同固件以增强仿真验证可信度准备空白 T5577 空白卡与各协议的原厂卡各一张数据一致性是核心判定所有用例的通过标准最终都归结为读取信息 / 仿真 ID / 写入后复读数据 / 手动创建数据四方一致比对字段以协议渲染出的 FC、Card 等字段为准按序覆盖三协议EM-Marine 4100Manchester/ASK、Indala26PSK、HID H10301FSK/ASK覆盖了三种主流调制方式是固件解码/编码/写入能力的基本盘T5577 多协议混写验证同一张 T5577 上连续写入 3 种不同类型卡片并全部可读可有效暴露调制配置或块布局错误失败定位手段GUI 复现失败时用rfid raw_read采集 RAW 波形再用rfid raw_analyze检查解调器能否识别可快速区分天线/硬件问题与协议解码问题。上述测试体系与 documentation/testing 目录下其他模块的测试用例如subghz_test_cases.md、nfc_test_cases.md保持相同的共享步骤 预期结果方法论可作为 Flipper Zero 固件回归测试的标准化模板。【免费下载链接】unleashed-firmwareFlipper Zero Unleashed Firmware项目地址: https://gitcode.com/GitHub_Trending/un/unleashed-firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考