实验目的:
之前做毕设有了解到短距离接触的通信方式RFID(RC522),但因为能力尚浅只做到读取不同卡片的卡号和防冲撞功能。恰巧在面包板社区上看到有ST的NFC比赛,便想学习一下如何读取卡片内存的数据。只读取出卡号能将卡号当成密钥给设备解锁,但是在很多场合下只通过卡号解锁设备,每一张新卡都需要先获取到卡号再将卡号写入到要解锁的设备中然后重新编译设备代码,这一过程非常麻烦而且想添加新卡还得重新编译设备代码,,,,,,,
之前做毕设有了解到短距离接触的通信方式RFID(RC522),但因为能力尚浅只做到读取不同卡片的卡号和防冲撞功能。恰巧在面包板社区上看到有ST的NFC比赛,便想学习一下如何读取卡片内存的数据。只读取出卡号能将卡号当成密钥给设备解锁,但是在很多场合下只通过卡号解锁设备,每一张新卡都需要先获取到卡号再将卡号写入到要解锁的设备中然后重新编译设备代码,这一过程非常麻烦而且想添加新卡还得重新编译设备代码,,,,,,,
而如果能读取到卡片的内存信息,我们可以直接将账户名写入到卡片内存中;而对应的密码可以通过卡号作为加密的私钥对密码加密后再写入到内存防止被直接获取到密码。当需要为设备添加新钥匙卡片时只需要往新卡的内存写入同一账号和经过加密后的密码即可,虽然是同一个账号和密码但是因为密码所使用的加密私钥是不同的所以很难被外人所破解。而其他更多的内存可用于个性化定制,例如:在汽车中通过钥匙解锁了车门后还要调节座椅高度、调节后视镜、调节空调到合适自己的温度等个性化操作;而如果在中控台使用ST25R读取到卡片中储存好的个性化数据,汽车将自动帮我们把座椅后视镜等调整到合适的位置,使汽车变得更加智能。
所需硬件:
所需硬件:
- NFC reader-ST25R3916 Nucleo expansion board
- STM32L476 Nucleo-64
- ISO15693卡片
所需软件:
- Keil5
- 串口助手
- NFC工具专业版
资料获取:
- 向”ST25-NFC.Support@st.com“随意发送一封邮件,即可收到整理好的ST25R3916资料。
- 在”https://www.st.com/zh/embedded-software/x-cube-nfc6.html“可获取STM32L476官方示例代码,邮件内的”参考代码“复制粘贴到对应的芯片目录下即可编译成功。
NFC分类:
- NFCA(ISO14443A)
- Type 1 is based on ISO 14443 A and is currently available exclusively from Innovision Research & Technology (Topaz™). It has a 96-byte memory capacity, which makes it a very cost-efficient tag for a wide range of NFC applications
- Type 2 is also based on ISO 14443 A and is currently exclusively available from Philips (MIFARE UltraLight). It has half the memory capacity of Type 1 tags
- Type 3 is based on FeliCa and is currently exclusively available from Sony. It has a larger memory (currently 2kbyte) and operates at a higher data rate (212kbit/s), which means it is suitable for more complex applications
- Type 4 is fully compatible with ISO 14443A/B and is available from a number of manufacturers, including Philips (typical product example is MIFARE DESFire). It offers large memory-addressing capability with read speeds of between 106kbit/s and 424kbit/s – making it suitable for multiple applications.
- NFCB(ISO14443B)
- NFCF
- NFCV(ISO15693)
- 寻卡:通过发送寻卡命令,默认0x260100(高速)或0x240100(低速),在寻卡范围内的卡接收到寻卡命令后返回各自的ID号,主机接收
- 选卡:主机接收来自卡的ID号之后,选出需要操作的ID号,发送0x2025+ID号,选择相应的卡,发送命令,卡返回0x00
- 读卡寄存器数据:主机完成选卡后发送0x0220xx(高速,低速为0x0020xx)读出地址为xx的寄存器数据
- 写卡寄存器数据:主机完成选卡后发送0x4221xxDDDDDDDD(同上)写入地址为xx寄存器数据DDDDDDDD
- ISO15693卡并没有太多安全性的机制,一般用于物资仓储领域做物资管理使用,相比于ISO14443A等,缺少密码验证机制。但此类型卡具有通信距离远,操作速度快等优点,较多用于货物标签应用
- ST25TB
- AP2P
- 新手建议先学习ISO15693,该协议无需对密码进行加密等操作相对容易上手。买了ISO 14443-3A的卡发现没能读出内存的数据,着实尴尬
研究成果:
简化代码功能,只留下15693协议的内存读写功能(主要是代码太复杂,看不懂)
能实现15693卡片中内存的多条数据读写。
意外收获:
华为电脑的碰一碰将手机画面传到电脑就是通过NFC实现手机电脑配对的,用的就是ISO15693协议。
将WiFi账号和密码写入卡片中保存,碰一碰即可连接,以后再也不担心忘记密码了。
总结:
出于安全性的考虑,如果想用到汽车上作为钥匙还是使用ISO14443A协议会比较安全。后续如有需要再对各类协议进行深入探讨,能读写到内存数据相比于之前算是跟进一步了。另外,可能是个人能力还差点火候,官方例程看得有点懵