Press ESC to close

解锁新姿势!用CH585 NFC模拟卡片-门禁卡和应用启动卡

NFC技术在我们的日常生活中应用越来越多,其中一个最近非常火的应用是“支付宝碰一下”,相比传统的微信/支付宝二维码支付,“碰一下”支付更加便捷,只需要解锁手机屏幕,将手机的NFC感应区域往收款设备上一贴即可完成支付。我最近在超市里使用了几次,体验还不错。

除此之外,NFC还可以用来模拟公交卡、门禁卡、电动车钥匙卡等实体卡片,这样就不用携带各种实体卡片,非常便利。手头刚好有块CH585的板子,心动不如行动,操作起来。

CH585这款芯片,我们之前介绍过,是一款带高速USB PHY的蓝牙SoC,提供NFC近场通信无线接口、段式LCD、LED、防水级触摸按键等外设资源,NFC接口包含了收发器和兼容ISO14443-A的无线解码基带,支持读卡器模式和卡模式,这次主要体验了卡模式的功能。

EVT例程中,卡模式提供了两个例子:PICC_M1和PICC_T2T。

PICC_M1是模拟生活中常用的卡片,能不能用它来模拟门禁卡,实现刷卡开门的功能呢? 答案当然是可以!最终使用CH585开发板轻松实现了该功能。小区门禁卡一般用的是M1卡,M1卡是NXP(原飞利浦)公司生产的一种非接触式IC卡。刷卡开门一种是简单的验证UID,比如门禁读卡器读到特定范围UID的卡时就可以开门。还有一种M1卡是进行了加密,读卡器要通过密钥进行身份验证,通过后才可以开门。

M1卡内部存储空间分为 16 个扇区,每个扇区又细分为4个数据块。每个扇区末尾的数据块是该扇区的密钥块(Sector Trailer),用于存储访问控制位和两个密钥:Key A 和 Key B。

要读写某个扇区的数据,读卡器必须先验证该扇区的密钥。门禁系统中,读卡器内部(或与之相连的门禁控制器中)存储了与该小区授权卡片匹配的密钥(通常是 Key A 或 Key B)。

要想模拟门禁卡,第一步需要先读取已有门禁卡的信息。手机上有很多NFC软件,比如NXP的TagInfo、MFAREClassicTool等工具。

我使用TagInfo软件读取的信息如下:

首先我们先尝试用UID看能否开门,CH585 SDK里提供了M1卡模拟的例程

只修改UID经过测试开不了门。所以还需要去获取这个门禁的加密扇区数据

加密数据需要特殊工具获取,网上资料有很多。获取数据后,将密钥和加密区数据也写入代码中,就可以最终实现刷卡开门了。

卡片的UID通过修改例程中的uid数组就可以实现UID的修改。

数据区通过下面的代码填入到例程中提供的M1卡数据结构体中。

这样可以实现常规的刷卡功能。不过贪心的我已经不满足于一卡一刷了,研究了下,CH585可以通过程序动态修改数据和卡号,这样就可以把好几张卡片都存储到一块板子上了,我在网上搜了搜,发现了类似的产品:

按照M1卡占用内存1K来计算,CH585的448K FLASH能存放400多张卡片,比图中的还要厉害。

CH585带触摸按键功能,还可以优化上述产品中的物理按键,使得产品外观更具科技感。

PICC_T2T是模拟的NFC论坛类型2标签,利用手机NFC APP给它写入信息,可以实现手机刷卡打开指定APP的功能。其实前面提到的支付宝碰一下,手机碰的地方就是一个NFC标签,手机NFC充当Reader作用,建立通信后关联支付宝完成后续的支付过程。

不用修改代码,编译烧录后,通过手机APP NFC Writer软件写入应用启动卡

点击工具-应用启动卡制作

选择支付宝之后,将手机贴到板子上,就写入成功了。

这样之后每次手机NFC贴上板子之后,就可以自动打开支付宝软件。上述NFC卡片体验目前都是通过手机读取的,CH585还支持读卡器模式,后期计划结合智能门锁的应用场景,体验其功能并尝试开发一下,敬请期待。关注我们,

扫码加入嵌入式交流群: