你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
STMCU小助手 发布时间:2023-2-7 17:00
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的。

bee9538d521f463c8224be55b869ae4f.png


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

2e5f522c848247029e3a99f3faf708ce.png

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

d8391e7becdf43ec91d4992bdb17c9c3.png

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

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

9a14c67b58bc4f2ebae4fc61d0d654b8.png

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

19976178df1f41f4bdc5bffd38a69f7d.png

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


收藏 评论0 发布时间:2023-2-7 17:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版