本帖最后由 孟某人 于 2020-10-8 23:57 编辑

0.前言
最近工作又忙起来了,导致节前完成前两篇文章后就一直没有动了,本计划这个十一完成,结果,十一期间孩子又生病了,假期就变成了医院6日游,所以就只完成部分功能,如下,目前只完成了NFC和身份证来开车门的操作。就要交作业了,只好在此基础上做一个临时的完结,等后面有时间了再将后面的完成吧。
无标题.png
之前已经在part1和part2 中将方案和UI的开发历程进行了介绍,详见:
【2020意法半导体开发大赛】智能车锁开发--part 1
【2020意法半导体开发大赛】智能车锁开发--part 2 UI开发
1.    卡钥匙功能
在板子中附赠了几个st25t的nfc卡,里面可以保存一些数据,我们就在这里保存密码数据了,我们通过车身号和卡的UID加上一个独立算法生成一个加密数据放在其中,这样一是可以一定程度的防止卡复制,同时也可以在车厂的数据中保存相关的数据已被后续配钥匙使用,当然因为这是个demo,我就简单写了一个自创算法,用uid加和做补码再乘上车身号来做数据校验的。增加后就可以看到在使用正常的钥匙卡就可以开门了,而使用错误的卡则会提示错误。
微信图片_20201008172741.jpg 微信图片_20201008172757.jpg
2.    身份证作为开门卡
之前有提到过,由于读取身份证中的数据需要去备案处理,所以这里就只用身份证的uid作为卡识别了,二代证是应答标准的REQB指令的,但Attrib指令是非标的,二代证的唯一UID可以通过下面的步骤简单读取,
1. PCD发送REQB命令: 0x05 0x00 0x00 二代证收到后会发送ATQB(12 bytes)应答。  例:50  00 00  00  00 d1  03  86 0c  00  80 80   
2.PCD发送非标Attrib命令 1d 00 00 00 00 00 08 01 08二代证返回应答:08 //这里返回08不能认为是错误的,ISO14443标准返回为00
3.PCD发送读取UID命令 00 36 00 00 08 二代证返回应答:xx xx xx xx xx xx xxxx 90 00,此处的xx就是你的身份证UID了  
增加后就可以看到在使用正常的身份证就可以开门了,而使用错误的卡则会提示错误。
微信图片_20201008185746.jpg 微信图片_20201008185755.jpg
3.总结
最近比较忙,所以就只完成了这些,问题还是很多的,欢迎大家拍砖。
我此前一直没有接触过NFC的相关东西,一直以为NFC是一个类似于UART或者SPI之类的简单协议,这次才发现,NFC是一个比较复杂的协议,后续也是需要继续深入研究。
此前,在论坛中看到在讨论NFC是否有必要做到十米的问题,我也对NFC的未来畅想了一下,我想,天下武功为快不破,NFC向着更高速、更低功耗也是一个不错的发展方向,想想我们回到家,把手机向PC边一放,就可以实现高速的数据同步,或是在移动硬盘中可以通过NFC读取数据,不需要再插入数据线了,这样岂不是很方便。
4.代码
由于时间较紧,所以写的比较乱,有什么问题,欢迎讨论
ST25R3916_DISCO_test1.part01.rar (10 MB, 下载次数: 5)