天天看点

关于st25系列NFC标签简单介绍及st25TV系列用于门禁读取时的注意事项总结

关于st25系列NFC标签简单介绍及st25TV系列用于门禁读取时的注意事项总结

文章目录

  • ​​关于st25系列NFC标签简单介绍及st25TV系列用于门禁读取时的注意事项总结​​
  • ​​1. 前言​​
  • ​​2. ST25 NFC/RFID系列标签介绍​​
  • ​​3. ST25TV系列选择​​
  • ​​4. ST25TV02K开发相关参考文档​​
  • ​​5. ST25TV02K相关工具​​
  • ​​6. stm32实现读取st25TV02K NFC​​
  • ​​6.1 方案选型​​
  • ​​6.2 基础代码框架​​
  • ​​6.3 结合数据手册实现新接口​​
  • ​​6.4 读写密码需要实现的接口注意事项​​
  • ​​7. 最后​​

1. 前言

由于之前使用的M1卡作为门禁卡时容易被复制的情况,目前选用了st25TV系列NFC来作为门禁卡,并启用其带有的数据区加密功能,读取数据区数据时必须先发送密钥,否则只能读取卡号和0区,因此只要确保加密密钥的不易破解性,那么门禁卡也就不容易被复制了,针对该系列的读写程序已经开发完成,这里总结一下相关坑点,避免后续走弯路。

2. ST25 NFC/RFID系列标签介绍

这个可以通过st官网查看,有中文,目前主要包括:ST25TA、ST25TB、ST25TN、ST25TV几个系列的NFC标签,使用的场景和读写协议存在差异:https://www.st.com/zh/nfc/st25-nfc-rfid-tags.html

ST25TA:该系列产品支持NFC应用如标签、NFC令牌、NFC智能标贴、NFC名片(虚拟卡)。它可用于包括消费电子、计算机外设、游戏设备、家用电器、工业自动化和医疗产品在内的各种应用。(https://www.st.com/zh/nfc/st25ta-series-nfc-tags.html)

ST25TB:ST25TB系列RFID标签兼容ISO14443标准,可以支持公共交通和活动票务等应用。 它们提供了先进的RF性能,包括计数超过40亿次的计数器。(https://www.st.com/zh/nfc/st25tb-series-nfc-tags.html)

ST25TN:ST25TN系列可与Android/iOS NFC手机和NFC Forum兼容读写器通信,为各种消费者参与、产品信息和智能标签场景提供非常广泛的可能性。这种高性价比ST25TN系列面向多种应用,如游戏、服饰鞋类、消费性包装品、运动产业、酒水,并在成本与性能之间取得了良好的平衡。(https://www.st.com/zh/nfc/st25tn-series-nfc-tags.html)

ST25TV:ST25TV Type 5 NFC标签IC是首个结合ISO/IEC 15693标准长距离通信的便利性和篡改检测能力的解决方案。与其他NFC类型标签相比,ST25TV标签更容易被读取,从而改进了产品设计的用户体验。产品设计者和制造商现在可以使用更小的NFC标签和贴纸,这些标签和贴纸更安全且更容易安装,以增强与客户的互动。这种独特的解决方案可以在整个产品生命周期(从制造点到销售点的消费者互动,以及后续阶段)中使用。它赋予了日常消费品数字化生命。ST25TV标签可用于基于云管理的品牌保护,比如葡萄酒和白酒、药品和奢侈品等不同应用领域的防伪/篡改检测。它们还可以与远程HF RFID读写器一起用于产品识别以及物流和可追溯性应用。(https://www.st.com/zh/nfc/st25tv-series-nfc-tags.html)

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协议进行读写。(选择产品可以参考:https://www.st.com/zh/nfc/st25tv-series-nfc-tags.html#products)

4. ST25TV02K开发相关参考文档

直接在文档页面下载数据手册和一些文档:

​​https://www.st.com/zh/nfc/st25tv02k.html#documentation​​

5. ST25TV02K相关工具

​​https://www.st.com/zh/nfc/st25tv02k.html#tools-software​​

关于st25系列NFC标签简单介绍及st25TV系列用于门禁读取时的注意事项总结

有相关的测试软件可供使用,包括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,这块可以直接在网上买相关的开发套件,一般会给到各种协议的示例程序。

如果没有的话可以参考st这里的固件源代码:https://www.st.com/content/st_com/zh/products/embedded-software/st25-nfc-rfid-software/stsw-st25r002.html

是通过st的论坛找到的,但是你可能需要根据自己的情况进行调试:https://shequ.stmicroelectronics.cn/forum.php?mod=viewthread&tid=618387&extra=

关于st25系列NFC标签简单介绍及st25TV系列用于门禁读取时的注意事项总结

根据自己的协议实现即可,15693这里还是能用的,虽然没有实现所有的接口,但是基础的读写之类的都是有的,至少不用自己去整时序直接操作寄存器了:

关于st25系列NFC标签简单介绍及st25TV系列用于门禁读取时的注意事项总结

6.3 结合数据手册实现新接口

这里以st25v02k为例进行说明,如何借助上面st上找到的固件源码实现其它的适用于本产品的接口。

下载datasheet这里不再说了,一般是英文的,但是也有可能是中文的,比如st25v02k这个就是中文的,虽然仍然晦涩:

关于st25系列NFC标签简单介绍及st25TV系列用于门禁读取时的注意事项总结

你需要先看一下对应包括哪些接口(我这里所谓的接口就是指访问设备时的协议实现接口):

关于st25系列NFC标签简单介绍及st25TV系列用于门禁读取时的注意事项总结

从这里可以看到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. 最后