当前位置: 首页 > article >正文

别再只认M1卡了!沁恒CH58x读取NDEF Type2标签的完整数据解析指南

沁恒CH58x深度解析NDEF Type2标签从字节到可读信息的完整指南当你第一次用沁恒CH58x系列芯片成功读取到NFC Forum Type2标签的原始数据时面对那44个数据块和一堆十六进制数字是否感到无从下手本文将带你深入Type2标签的数据结构掌握NDEF消息的解析方法让你不仅能读取数据更能理解数据。1. Type2标签与M1卡的差异解析许多开发者对M1卡Mifare Classic已经非常熟悉但Type2标签却有着完全不同的存储结构和访问方式。我们先来看看它们的关键区别特性NFC Forum Type2 TagMifare Classic 1KUID长度7字节4字节或7字节ATQA值0x44000x0004或0x0400存储结构44个块每块4字节16个扇区每扇区4块认证方式通常无需认证需要密钥认证NDEF支持原生支持需要模拟提示ATQA值是识别标签类型的重要指标CH58x读取时需要注意字节序转换问题。Type2标签的7字节UID读取过程也较为特殊第一次防冲撞读取返回0x88和前3个UID字节执行PcdSelect()选择卡片第二次防冲撞读取后4个UID字节再次执行PcdSelect()完成选择// CH58x读取Type2标签UID的示例代码片段 uint8_t uid[7]; uint8_t atqa[2]; PcdRequest(PICC_REQALL, atqa); // 获取ATQA值 if(atqa[0] 0x44 || atqa[1] 0x44) { // 检测Type2标签 PcdAnticoll(0, uid[0]); // 第一次防冲撞 PcdSelect(uid[0]); // 第一次选择 PcdAnticoll(1, uid[3]); // 第二次防冲撞 PcdSelect(uid[0]); // 第二次选择 }2. Type2标签的内存布局详解Type2标签的44个数据块每个块4字节构成了完整的存储空间其布局遵循NFC Forum的严格规范块0包含厂商信息不可写入块1容量容器CC指示存储容量和访问权限块2-43用户数据区存储实际内容最后块通常包含校验信息CC块的结构如下以块1为例字节偏移内容说明00xE1魔术数字标识为Type2标签10x10版本信息20x6D数据区大小109字节30x00访问控制注意实际解析时需要验证CC块的内容错误的CC值可能导致后续解析失败。3. NDEF消息的TLV格式解析Type2标签中的数据以TLVType-Length-Value格式存储NDEF消息。TLV结构是理解数据的关键TType字节标识数据类型0x03NDEF消息TLV0xFE终止TLVLLength字节后续数据长度可能为1字节或3字节格式VValue实际数据内容解析流程示例扫描数据块寻找0x03类型读取长度字节如果长度字节为0xFF则使用后续2字节表示长度根据长度提取NDEF消息uint8_t* find_ndef_message(uint8_t* data, uint32_t size) { for(uint32_t i 0; i size - 2; i) { if(data[i] 0x03) { // 找到NDEF TLV uint32_t length data[i1]; if(length 0xFF) { // 扩展长度 length (data[i2] 8) | data[i3]; return data[i4]; } else { return data[i2]; } } } return NULL; }4. NDEF记录解析实战NDEF消息本身也由记录组成每个记录包含记录头类型、长度、标志位等类型名称格式TNF有效载荷类型有效载荷数据常见的NDEF记录类型包括文本记录TNF0x01NFC论坛标准类型类型为T文本第一个字节包含语言编码和文本长度URI记录TNF0x01类型为UURI第一个字节为URI前缀标识符智能海报组合多个记录文本URI等下面是一个解析URI记录的示例代码void parse_uri_record(uint8_t* payload, uint32_t length) { if(length 2) return; uint8_t prefix_code payload[0]; const char* prefix get_uri_prefix(prefix_code); // 获取预定义URI前缀 char uri[256]; snprintf(uri, sizeof(uri), %s%s, prefix, payload[1]); printf(发现URI: %s\n, uri); } const char* get_uri_prefix(uint8_t code) { static const char* prefixes[] { , http://www., https://www., http://, https://, tel:, mailto:, ftp://anonymous:anonymous, /* 更多前缀... */ }; return (code sizeof(prefixes)/sizeof(prefixes[0])) ? prefixes[code] : ; }5. 完整解析流程与异常处理将上述知识整合我们得到完整的Type2标签NDEF解析流程读取所有数据块使用PcdRead()依次读取44个块注意处理读取错误和重试逻辑验证CC块检查块1是否符合Type2标签规范确认数据区大小与实际读取一致查找NDEF TLV扫描数据区寻找0x03类型正确处理标准长度和扩展长度解析NDEF消息分解NDEF记录头根据TNF和类型分发到特定解析器处理异常情况无效的TLV结构损坏的NDEF记录不支持的记录类型typedef enum { PARSE_OK, PARSE_INVALID_CC, PARSE_NDEF_NOT_FOUND, PARSE_UNSUPPORTED_TNF, } ParseResult; ParseResult parse_type2_tag(uint8_t* data) { // 验证CC块 if(data[4] ! 0xE1 || data[5] ! 0x10) { return PARSE_INVALID_CC; } // 查找NDEF TLV uint8_t* ndef find_ndef_message(data[8], 4*44-8); if(!ndef) return PARSE_NDEF_NOT_FOUND; // 解析NDEF消息 NdefMessage msg; if(!parse_ndef_message(ndef, msg)) { return PARSE_UNSUPPORTED_TNF; } // 处理记录内容 for(int i 0; i msg.record_count; i) { process_record(msg.records[i]); } return PARSE_OK; }6. 高级技巧与性能优化对于需要频繁读取Type2标签的应用可以考虑以下优化策略内存缓存策略首次读取后缓存静态数据如UID、CC块仅当检测到标签移除并重新放置时才完整读取快速检测变更读取版本号或校验和块比较哈希值判断内容是否变化错误恢复机制实现块级重试而非全标签重读对关键块采用多次读取取众数// 优化的块读取函数带重试机制 bool robust_block_read(uint8_t block, uint8_t* output) { uint8_t buffers[3][4]; uint8_t votes[4][256] {0}; for(int i 0; i 3; i) { if(!PcdRead(block, buffers[i])) { continue; } for(int j 0; j 4; j) { votes[j][buffers[i][j]]; } } for(int j 0; j 4; j) { uint8_t max_votes 0; for(int k 0; k 256; k) { if(votes[j][k] max_votes) { max_votes votes[j][k]; output[j] k; } } if(max_votes 2) return false; // 无明确多数 } return true; }在实际项目中我发现最常遇到的问题是不完整的NDEF消息写入。有些写入工具会在标签中留下无效的TLV结构导致解析失败。一个健壮的解析器应该能够跳过这些无效数据继续寻找有效的NDEF消息。

相关文章:

别再只认M1卡了!沁恒CH58x读取NDEF Type2标签的完整数据解析指南

沁恒CH58x深度解析NDEF Type2标签:从字节到可读信息的完整指南 当你第一次用沁恒CH58x系列芯片成功读取到NFC Forum Type2标签的原始数据时,面对那44个数据块和一堆十六进制数字,是否感到无从下手?本文将带你深入Type2标签的数据结…...

从继电器到模拟开关:用CircuitJS带你搞懂‘开关控制开关’的进化史

从继电器到模拟开关:用CircuitJS带你搞懂‘开关控制开关’的进化史 在电子工程的发展历程中,开关器件从笨重的机械结构演变为集成电路中的微小模块,这一过程不仅是技术的进步,更是设计思维的抽象化革命。当你第一次在CircuitJS仿真…...

从Kaggle到落地:Albumentations在医学影像分割和目标检测中的实战配置指南

从Kaggle到落地:Albumentations在医学影像分割和目标检测中的实战配置指南 医学影像分析和自动驾驶领域的数据增强,远不止是简单地对图像进行旋转或翻转。当处理MRI扫描中的肿瘤分割或CT影像中的器官定位时,每个像素的位移都可能影响诊断结果…...

Android黑屏别慌!手把手教你用dumpsys和Winscope精准定位问题(附实战案例)

Android黑屏问题深度排查:从dumpsys到Winscope的实战指南 当你的Android设备突然黑屏,那种感觉就像在黑暗中摸索——你不知道问题出在哪里,更不知道如何解决。但别担心,今天我要分享的这套排查方法,将为你点亮一盏明灯…...

告别手动敲命令:用Rancher 2.9.2的Web界面,5分钟搞定K8S 1.26集群的Nginx部署

告别手动敲命令:用Rancher 2.9.2的Web界面,5分钟搞定K8S 1.26集群的Nginx部署 在Kubernetes的世界里,部署一个简单的Nginx服务往往需要编写复杂的YAML文件,记忆各种kubectl命令参数,这对于刚接触K8S的开发者或小型运维…...

CANOE进阶:CAPL文件读写实战与数据持久化策略

1. CAPL文件读写在车载测试中的核心价值 第一次接触CAPL文件读写功能时,我正负责一个车载ECU的耐久性测试项目。当时需要连续记录72小时的CAN报文数据,如果仅靠CANoe的Trace窗口查看,不仅效率低下,后期分析更是无从下手。这时我才…...

别再用手机思维做TV App了!Android TV开发必知的模拟器操作与UI焦点设计实战

别再用手机思维做TV App了!Android TV开发必知的模拟器操作与UI焦点设计实战 第一次在65英寸大屏上看到自己开发的TV应用时,那种震撼感至今难忘——直到用户用遥控器操作了五分钟还没找到核心功能按钮。这个尴尬经历让我深刻意识到:TV开发不是…...

4大维度构建高可靠性加密货币自动交易系统

4大维度构建高可靠性加密货币自动交易系统 【免费下载链接】binance-trade-bot Automated cryptocurrency trading bot 项目地址: https://gitcode.com/gh_mirrors/bi/binance-trade-bot 一、价值定位:为什么专业交易者都在用自动化交易工具? 为…...

外文游戏语言障碍如何破解?XUnity.AutoTranslator通过实时文本转换技术实现无缝游戏体验

外文游戏语言障碍如何破解?XUnity.AutoTranslator通过实时文本转换技术实现无缝游戏体验 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 面对喜爱的外文游戏却因语言隔阂无法深入体验&#xf…...

Skills一站式搜索、安装、管理工具,支持一键同步40款AI工具!

文章目录 📖 介绍 📖 🏡 演示环境 🏡 📒 Skill一站式搜索、安装、管理工具 📒 🔍 解决什么痛点 🚀 快速上手 🔄 功能一:迁移整理现有Skill 🔎 功能二:搜索安装Skill 🔔 功能三:同步分发到多工具 📋 支持的工具列表 ⚙️ 配置说明 🤔 优缺点分析 ⚓…...

UVM实战:RAL寄存器测试全流程详解(含代码示例)

UVM实战:RAL寄存器测试全流程详解(含代码示例) 在芯片验证领域,寄存器测试是确保硬件功能正确性的关键环节。UVM(Universal Verification Methodology)作为行业标准验证方法学,其内置的RAL&…...

从零开始:在Ubuntu 18.04上正确配置CUDA 11.7和bitsandbytes 0.38.0的完整指南

从零构建Ubuntu 18.04下的AI开发环境:CUDA 11.7与bitsandbytes 0.38.0深度配置手册 在深度学习领域,环境配置往往是项目推进的第一道门槛。特别是当我们需要使用bitsandbytes这样的高性能量化工具时,CUDA环境的纯净性与版本匹配度直接决定了后…...

即插即用模块-特征增强篇:FEM模块在遥感小目标检测中的实战解析

1. 遥感小目标检测的痛点与FEM模块的诞生 在遥感图像分析领域,小目标检测一直是个让人头疼的问题。想象一下,你要在卫星拍摄的城市图像中找到那些只有几十个像素大小的车辆,或者在广袤的农田中识别出微小的灌溉设备。这些目标不仅尺寸小&…...

别只盯着stkInit!用这个STK MATLAB互联测试脚本,一键验证你的环境是否真的配好了

别只盯着stkInit!用这个STK MATLAB互联测试脚本,一键验证你的环境是否真的配好了 当你第一次成功将STK与MATLAB连接时,那种成就感就像打通了任督二脉。但很快你会发现,仅仅能执行stkInit并不意味着你的环境已经完全配置妥当。就像…...

Magisk Alpha深度隐匿实战:从Momo检测到BL列表的终极配置

1. 为什么需要深度隐匿Root环境? 最近两年,银行类APP和游戏厂商的检测手段越来越严格。我去年用某银行APP时,明明Root已经隐藏得很好,结果转账时突然弹出"设备环境异常"的提示,直接中断交易。后来才知道是新…...

2026最权威的六大降重复率网站实测分析

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 要降低AIGC(人工智能生成内容)的检测率,关键之处在于提升…...

2026届最火的五大AI论文工具解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 可采取如下结构化操作指令来降低文本里的人工智能生成特性, 首先,增添…...

如何用ControlNet-Union-SDXL-1.0实现多条件图像生成?解锁12种创意控制方案

如何用ControlNet-Union-SDXL-1.0实现多条件图像生成?解锁12种创意控制方案 【免费下载链接】controlnet-union-sdxl-1.0 项目地址: https://ai.gitcode.com/hf_mirrors/xinsir/controlnet-union-sdxl-1.0 ControlNet-Union-SDXL-1.0是一款革命性的多条件控…...

Ryujinx模拟器终极指南:在PC上免费畅玩Switch游戏

Ryujinx模拟器终极指南:在PC上免费畅玩Switch游戏 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 想在电脑上体验《塞尔达传说:旷野之息》的震撼画面吗&#xf…...

魔兽争霸3 Windows 11兼容性终极解决方案:让你的经典游戏重获新生

魔兽争霸3 Windows 11兼容性终极解决方案:让你的经典游戏重获新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在Windo…...

博物馆展览门户|基于springboot + vue博物馆展览门户系统(源码+数据库+文档)

博物馆展览门户系统 目录 基于springboot vue博物馆展览门户系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue博物馆展览门户系统 一、前言 博主…...

宠物管理系统|基于springboot+vue的宠物管理系统(源码+数据库+文档)

宠物管理系统 目录 基于springbootvue的宠物管理系统 一、前言 二、系统功能演示 完整操作流程 部署视频已录制完成 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springbootvue的宠物管理系…...

Ni8mare高危漏洞来袭:黑客可远程劫持n8n服务器(CVE-2026-21858)

研究人员最新发现,一项被命名为Ni8mare的最高严重级漏洞(CVSS评分10.0),允许远程未授权攻击者完全接管本地部署的n8n工作流自动化平台。该漏洞编号为CVE-2026-21858。据研究人员披露,互联网上存在超过10万台易受攻击的…...

告别药物研发效率困境:用REINVENT4实现智能分子设计范式突破

告别药物研发效率困境:用REINVENT4实现智能分子设计范式突破 【免费下载链接】REINVENT4 AI molecular design tool for de novo design, scaffold hopping, R-group replacement, linker design and molecule optimization. 项目地址: https://gitcode.com/gh_mi…...

res-downloader:全平台网络资源下载工具的高效使用指南

res-downloader:全平台网络资源下载工具的高效使用指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 当你在微信…...

如何用SillyTavern在5分钟内创建你的第一个AI虚拟伙伴?

如何用SillyTavern在5分钟内创建你的第一个AI虚拟伙伴? 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 你是否曾幻想过拥有一个专属的AI聊天伙伴?一个能理解你情绪、…...

t3mujinpack胶片模拟技术解析:基于Hald CLUT算法的开源胶片仿真实现

t3mujinpack胶片模拟技术解析:基于Hald CLUT算法的开源胶片仿真实现 【免费下载链接】t3mujinpack Collection of film emulation presets for open-source RAW developer software Darktable. 项目地址: https://gitcode.com/gh_mirrors/t3/t3mujinpack t3m…...

终极Windows内存优化指南:用Mem Reduct释放被浪费的RAM资源

终极Windows内存优化指南:用Mem Reduct释放被浪费的RAM资源 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct …...

[技术突破]解决D3D8兼容性困境:d3d8to9的API转换革命

[技术突破]解决D3D8兼容性困境:d3d8to9的API转换革命 【免费下载链接】d3d8to9 A D3D8 pseudo-driver which converts API calls and bytecode shaders to equivalent D3D9 ones. 项目地址: https://gitcode.com/gh_mirrors/d3/d3d8to9 d3d8to9是一款Direct3…...

Anaconda误删预防体系建设:自动化备份脚本与版本控制策略题

Anaconda误删预防体系建设:自动化备份脚本与版本控制策略题 昨天实验室又出事了。同事在清理服务器时顺手把整个/opt/anaconda3给删了,理由是“看着像临时文件夹”。三个项目的环境全挂,依赖冲突排查到半夜。这种剧情每隔几个月就上演一次&am…...