
1. 前言 由于之前使用的M1卡作为门禁卡时容易被复制的情况,目前选用了st25TV系列NFC来作为门禁卡,并启用其带有的数据区加密功能,读取数据区数据时必须先发送密钥,否则只能读取卡号和0区,因此只要确保加密密钥的不易破解性,那么门禁卡也就不容易被复制了,针对该系列的读写程序已经开发完成,这里总结一下相关坑点,避免后续走弯路。 2. ST25 NFC/RFID系列标签介绍 这个可以通过st官网查看,有中文,目前主要包括:ST25TA、ST25TB、ST25TN、ST25TV几个系列的NFC标签,使用的场景和读写协议存在差异 ST25TA:该系列产品支持NFC应用如标签、NFC令牌、NFC智能标贴、NFC名片(虚拟卡)。它可用于包括消费电子、计算机外设、游戏设备、家用电器、工业自动化和医疗产品在内的各种应用。 ST25TB:ST25TB系列RFID标签兼容ISO14443标准,可以支持公共交通和活动票务等应用。 它们提供了先进的RF性能,包括计数超过40亿次的计数器。 ST25TN:ST25TN系列可与Android/iOS NFC手机和NFC Forum兼容读写器通信,为各种消费者参与、产品信息和智能标签场景提供非常广泛的可能性。这种高性价比ST25TN系列面向多种应用,如游戏、服饰鞋类、消费性包装品、运动产业、酒水,并在成本与性能之间取得了良好的平衡。 ST25TV:ST25TV Type 5 NFC标签IC是首个结合ISO/IEC 15693标准长距离通信的便利性和篡改检测能力的解决方案。与其他NFC类型标签相比,ST25TV标签更容易被读取,从而改进了产品设计的用户体验。产品设计者和制造商现在可以使用更小的NFC标签和贴纸,这些标签和贴纸更安全且更容易安装,以增强与客户的互动。这种独特的解决方案可以在整个产品生命周期(从制造点到销售点的消费者互动,以及后续阶段)中使用。它赋予了日常消费品数字化生命。ST25TV标签可用于基于云管理的品牌保护,比如葡萄酒和白酒、药品和奢侈品等不同应用领域的防伪/篡改检测。它们还可以与远程HF RFID读写器一起用于产品识别以及物流和可追溯性应用。 3. ST25TV系列选择 主要根据需要的存储空间进行选择,比如你需要1k左右的空间来存储门禁数据扩展也不会太多,则可以使用ST25TV02K,其工作频率为13.56 MHz的2-Kbit EEPROM标签IC,具有64位UID和密码,基于ISO/IEC 15693和ISO/IEC 18000-3模式1,即2k字节的数据区空间,8字节的UID,可以基于ISO/IEC 15693协议进行读写。 4. ST25TV02K开发相关参考文档 5. ST25TV02K相关工具 有相关的测试软件可供使用,包括Windows PC、ios、Android等,对应的SDK是Java的。 ![]() 6. stm32实现读取st25TV02K NFC 6.1 方案选型 还是老问题了,之前我就说过,门禁这块其实可以Android直接读卡,但是原有方案使用stm32单片机来读取,然后再通过串口发送给Android端,这个历史缘由我也找到了,因为这部分的卡读取方案是由一个没有Android的stm32做的刷卡touch来的,为了快速在Android门禁机上实现,直接把这个touch的stm32通过Android上的串口连接起来了,Android端就不用再开发这块了,直接定义协议和stm32交互就可以了(实际上Android端开发的话相关的sdk之类的更多更方便),真是个悲伤的故事。 6.2 基础代码框架 stm32读取该NFC我们使用的15693协议,上面看到也可以使用18000-3,这块可以直接在网上买相关的开发套件,一般会给到各种协议的示例程序。 ![]() 根据自己的协议实现即可,15693这里还是能用的,虽然没有实现所有的接口,但是基础的读写之类的都是有的,至少不用自己去整时序直接操作寄存器了: ![]() 6.3 结合数据手册实现新接口 这里以st25v02k为例进行说明,如何借助上面st上找到的固件源码实现其它的适用于本产品的接口。 下载datasheet这里不再说了,一般是英文的,但是也有可能是中文的,比如st25v02k这个就是中文的,虽然仍然晦涩: ![]() 你需要先看一下对应包括哪些接口(我这里所谓的接口就是指访问设备时的协议实现接口): ![]() 从这里可以看到Inventory、Select、Read Single Block、Write Single Block、Read Multiple Blocks、Get System information这些指令接口在搜到的固件源码中已经有了,我们接下来实现新的接口就可以了,比如:Write Password、Present Password、Read Configuration、Write Configuration、Set Untraceable mode、Get Random Number。 但是有个问题,我们该实现哪些接口,这些接口如何组合使用,目前没有好的方法,除非你买一个官方的开发板,里面有现成的示例demo,否则你可能就得试了。 6.4 读写密码需要实现的接口注意事项 接下来就是我们要实现的读写密码这块了,固件代码中没有这块,我们要实现对st25v02K NFC的加密该如何做,读数据前解密又如何做?根据数据手册,看起来write password是比较像写密码的,反正中间花了很多时间啃datasheet和尝试,最终总算理清了整个处理过程,这里总结一下。 写密码:初始化->选卡->获取随机数->发送密钥->写密码->写配置。 读数据:初始化->选卡->获取随机数->发送密码->读数据。 注意点: 1、present password相当于发送密码进行校验,出厂密码为全0; 2、写完密码后需要调用写配置的接口修改卡状态为加密状态,卡不会自动根据密码是不是全0修改自身状态为加密状态,需要自己修改配置,否则密码写进去了,下次判断卡还是未加密状态; 3、每次读数据前都需要发送密码进行校验,校验通过才能调用读取多块数据的接口读到数据,否则读不到数据; 4、判断卡是否已加密可以通过读配置这个接口来判断; 7. 最后 目前主要用到的NFC卡大部分都是符合14443a、14443b、15693协议的,包括公交卡、身份证、门禁卡、手环手表手机的NFC等等,所以找一个开发板研究一下这几个协议对于NFC这块的开发会比较有帮助;此外,封装库和sdk以及提供demo和帮助文档对于芯片推广是非常有必要的,否则直接去操作芯片恐怕大家集成起来会比较困难,持续性的提供维护和帮助服务也是非常重要的,比如Android开发和stm32开发的官方帮助文档就比较全面,很多时候在官网中就可以找到很好的解决方案。 ———————————————— 版权声明:xiaoyaoyou.xyz |
【STEVAL-25R200SA评测】测评总结
【STEVAL-25R200SA评测】在不同工作负载下的功耗表现,如DPO动态功率输出的性能
【STEVAL-25R200SA评测】天线开发注意事项
【STEVAL-25R200SA评测】多天线切换性能测试
【STEVAL-25R200SA评测】低功耗捡卡(LPCD)检测性能
【STEVAL-25R200SA 测评】功耗测试
【STEVAL-25R200SA 测评】资源介绍
【STEVAL-25R200SA评测】DPO动态功率输出的性能
【STEVAL-25R200SA评测】低功耗捡卡(LPCD)检测性能
【STEVAL-25R200SA评测】功耗测试