STM32与PN532构建NFC近场通信指南(二):PN532及恩智浦PN系列产品简介

目录

  1. STM32与PN532构建NFC近场通信指南(一):NFC及相关知识准备
  2. STM32与PN532构建NFC近场通信指南(二):PN532及恩智浦PN系列产品简介
  3. STM32与PN532构建NFC近场通信指南(三):PN532通信协议分析
  4. STM32与PN532构建NFC近场通信指南(四):PN532握手数据流详解
  5. STM32与PN532构建NFC近场通信指南(五):一种适用于STM32的通用串口通信架构及与PN532的通信实践

STM32与PN532构建NFC近场通信指南(二):PN532及恩智浦PN系列产品简介

本章为系列指南第二章,主要介绍恩智浦的PN532和他家的PN系列产品,并对PN532芯片做一个正式开发前的简单认知。

恩智浦

恩智浦(NXP)是荷兰一家半导体公司,目前在半导体领域全球排名前十。这家公司原来隶属于飞利浦,后以80亿欧的价格卖给荷兰一家公司,并在2006年以【恩智浦】的中文名在中国市场经营。在消费市场领域,NXP是全球第一大电视硅芯片厂商,平均出售两台电视机就有一台内部使用NXP的多媒体芯片,NXP同时是RFID解决方案的第一大厂商,其RFID芯片占全球市场的80%以上。NXP同时提供有LPC, i.MX系列ARM Cortex-M0至M7内核通用MCU。

NXP公司的PN系列产品

上面说到NXP公司在射频芯片领域是一骑绝尘的,其NFC产品系列以PN开头,如比较出名的PN532, PN7150, 以及全功能NFC支持的PN5180(这玩意儿甚至支持VISA和万事达信用卡的消费)。

PN532是一个以80C51为内核的单片机,支持ISO14443A/B标准Mifare卡和FeliCa, Jewel等类型的卡的读写,需要上层MCU主控,通信接口可选UART,SPI,I2C。官方报价4.8US每片(4000片),淘宝上售价RMB15-18每片。

PN7150是一个NFC全功能的高性能芯片,支持读卡器模式,卡仿真模式,以及点对点通信模式,几乎支持市面上所有类型的NFC卡片。需要上层MCU主控,通信接口只有I2C。官方售价3.36US每片(490片),淘宝上售价19-25元每片。

PN5180是一个RFID全功能高性能芯片,与前两者不同的是,它不再仅仅是一个NFC芯片,它是一个全功能的RFID芯片,它可以读ISO15693协议的ID卡,以及具有高级安全协议的银行信用卡,比如VISA和MASTER,因此可以用它来开发POS机(开发难度也是巨大的)。同时PN5180不再需要上层MCU主控,直接可以在PN5180内部进行编程,需要配合NXP自家的IDE进行开发。官方售价4.09US每片(490片),淘宝售价60元左右每片。

综合成本、开发难度、产品使用场景等因素考量,我们选择PN532作为NFC芯片。淘宝购买的模组如下,价格30元左右,同时送了两张Mifare S50卡,商家提供的百度网盘中还有一些实用的PC上位机,开发文档等若干,此处不表。

PN532

下面来详细介绍一下PN532,这款芯片在中国的使用度极广,因此网上的资料也很多,在这里我们仍然以一种零基础入门者的心态来理解这颗芯片。

硬件部分我们这里就不表了,因为手上已经购买了开发板,成品设计时让硬件工程师照着官方PCB和原理图进行设计就可以了。我们主要关心使用上位机与PN532进行通信的流程,点击下载PN532的官方手册点击下载PN532应用笔记

软件部分,根据官方手册,我们了解到PN532可以使用UART,SPI,I2C与主控MCU进行通信,具体通信方式根据P16和P17引脚来决定,参考PN532AN.pdf Page7:

这里要说明的是,硬件通信接口只指定通信介质和时序,跟软件通信协议无关,无论何种通信接口,其传输数据时收包和发包的内容都是一致的,由软件层面的通信协议来决定。具体使用时不同的通信接口单双工模式稍有差别,SPI和UART在硬件层面是双工的,I2C则是单工的,软件层面的协议要仔细看手册,PN532所有通信行为都是单工的。

PN532AN Page32列举了一次典型的对于Mifare卡的读写流程:

简而言之,逻辑上就是:

  • 寻卡
  • 认证
  • 读写卡
  • 释放

以上步骤将会依次经历以下流程:

  • InListPassivTarget
  • InDataExchange
  • InSelect, InDeselect, InRelease(这一步其实不重要)

具体的,上面这些流程将涉及什么样的输入输出字节流,我们下一节将详细讲解。

小结

这一章我们对恩智浦NXP公司,以及他们家的产品线有了一个大概的了解,着重对PN532这个芯片产品有了一个认知。下面一节我们将深入PN532的通信协议,罗列一套完整的上位机与PN532进行通信的握手过程,实现Mifare S50卡片的读写。

STM32与PN532构建NFC近场通信指南(一):NFC及相关知识准备

目录

  1. STM32与PN532构建NFC近场通信指南(一):NFC及相关知识准备
  2. STM32与PN532构建NFC近场通信指南(二):PN532及恩智浦PN系列产品简介
  3. STM32与PN532构建NFC近场通信指南(三):PN532通信协议分析
  4. STM32与PN532构建NFC近场通信指南(四):PN532握手数据流详解
  5. STM32与PN532构建NFC近场通信指南(五):一种适用于STM32的通用串口通信架构及与PN532的通信实践

STM32与PN532构建NFC近场通信指南(一):NFC及相关知识准备

本章为系列指南第一章,主要介绍NFC及周边相关的基础知识。我写文章习惯以一个零基础入门者的角度来写,并且尽可能使用通俗易懂的语言来讲解。关于这些知识点,如果需要更详细的介绍,请列为看官自行百度谷歌。

NFC

NFC(Near Field Communication,近场通信)是目前快速兴起的一种无线通信技术,包括身份证、公交卡、食堂饭卡、各类商户会员卡在内的大部分日常使用到的卡片都采用了NFC通信技术。NFC的一个重要特点是其【非接触式】,因此那些【接触式】的并拥有极高安全等级的银行卡不属于NFC范畴。

NFC的【非接触式】特性,带来了另一项技术的快速发展,那就是【无线充电】。一般来讲,PICC(射频卡)中是没有电池或其他供电电源的,PCD(读卡器)要与PICC进行通信的前提是将电能无线传递给PICC,驱动PICC中的电路及芯片工作,芯片控制模拟电路产生电磁波,将数据调制解调成1和0的数字信号,从而进行通信。说起【无线充电】,简单来讲就是中学课本里的电磁感应,通过线圈,让变化的电场产生磁场,在另一端变化的磁场又产生了电场。

近场通信的卡片有太多的名词和英文缩写,这里做个简单的解释:

  • ID卡,这种卡最大的特点就是没有复杂的电路和芯片,内部只携带一个出厂后不可改变的身份ID,最多不超过32bit,读卡器只能读到ID,逻辑处理一般在应用层和数据库中进行操作。ID卡成本低,市面上有些低成本的门禁卡,考勤卡会使用ID卡,安全很低。
  • IC卡,这种卡相对ID卡来说拥有复杂的电路和芯片,因此在光线明亮的地方可以看到卡片内的电路和芯片,其内部携带的数据量也大大增加了,通常都有1K Byte以上的读写空间。所有的NFC卡都是IC卡,内部都有线圈和芯片,以及大容量的存储空间,我们的身份证甚至连个人照片都存在其中。IC卡只是表明卡内部有集成电路和芯片,但并不规定卡片是【接触式】还是【非接触式】。很多银行的【接触式】银行卡,芯片引脚是露在表面的,供ATM进行接触式读写,这种银行卡也属于IC卡。
  • RFID卡,这种卡属于IC卡的一种,有芯片,但规定了必须使用射频技术进行非接触式通信。RFID卡虽然表明了非接触式通信,但对通信时的载波频率并不做任何要求,低至125KHz,高至960M的RFID卡产品都有。
  • NFC卡,这是我们关注的重点,NFC相比RFID卡,规范了通信时的载波频率必须为13.56MHz,同时在又在软件层面规范了众多传输协议,比如NFC传输的WIFI用户名密码、名片、网址等等。
  • Mifare卡,这是NFC卡的一种,市面上最常用,最廉价的NFC卡之一。恩智浦(前身为飞利浦)公司出品,我们后续要讲的PN532芯片,以及其他PN系列芯片均来自这个公司。Mifare卡分为MF0, MF1, MF2, MF3这么几种类型,MF0不带密码控制,使用很少;最常用的是MF1,这种卡带密码控制,分为S50和S70,S50拥有1K存储空间,S70拥有4K存储空间。我们后续的实践使用S50这种卡片。

ISO14443A/B,以及ISO15963

这三个都是射频卡的一种标准,都属于RFID卡的范畴,其中ISO14443A/B属于NFC卡的范畴,而ISO15963不是。

ISO15963标准规定了通信距离长达1m,使用13.56MHz频率载波,通讯速度不超过56Kb/s,不加密。一般ID卡使用ISO15963标准设计。

ISO14443A/B标准规定了通信距离为7-15cm,使用13.56MHz频率载波,通信速度为106Kb/s,支持加密。ISO14443A与ISO14443B的区别主要在于编码方式、防冲撞机制等,这些区别的详细知识应用开发者不需要过多理解,大部分NFC芯片或者模组都是能读写不同类型的卡片的,对于应用开发者来说只需要确切地知道自己产品中使用的卡片类型是哪一种即可。我们后面的实践将采用Mifare S50卡,这种卡属于ISO1443A类型。

Mifare S50卡简介

每张Mifare S50卡拥有1KByte存储空间,片内将1K空间分成了16个扇区,每个扇区64Byte。每个扇区又分成4个数据块,每个数据块16Byte。其中第一扇区第一块数据为厂商出厂数据,内含4Byte全球唯一UUID号,原则上无法修改。

扇区号 块号 数据 块类型
0 0 厂商数据 厂商块
1 用户数据 数据块
2 用户数据 数据块
3 密码A,存取控制,密码B 控制块
15 60 用户数据 数据块
61 用户数据 数据块
62 用户数据 数据块
63 密码A,存取控制,密码B 控制块

每个扇区的最后一个数据块称之为控制块,这一数据块的16Byte数据按照6-4-6分组,前6个Byte为密码A,后6个Byte为密码B,中间4Byte为存取控制数据。这一数据块的作用是用来保护前三块数据块的读写权限的。

Mifare S50在出厂时,每一个控制块的密码A和密码B都为FF FF FF FF FF FF,习惯上我们将密码A和密码B设置为相同,将中间4块存取控制块保持FF 07 80 69不变。要想读写某一数据块的内容,必须使用该块所在片区的最后一块,也就是控制块的密码进行验证才可以。Mifare S50通过密码访问授权机制,具有一定的安全性,但随着越来越广泛的使用,市面上也出现了众多破解方式,最常见的就是使用字典进行暴力破解。如果涉及金额或者其他重要数据,开发者是要进行服务器存储和比对的,一旦发现数据异常应该锁卡,对于造成损失的恶意攻击,应当报警处理。

小结

这一章我们从零开始对NFC有了一个总体的认知,对一些卡片类型的英文缩写也有了一个区分,简要理解了ISO14443A协议以及应用该规范的Mifare S50卡片。后续我们的章节将围绕这张卡片的读写来进行讲解,通信模块为PN532,主要操作平台为STM32,但经过讲解读者可以在任意平台实现NFC读写这类卡片。

Go编译GUI程序时不想让程序出现命令行终端

虽然Go没有官方GUI方案,但今年(2019年)针对Go的GUI方案如井喷般迅速发展。
目前我在用的是:
https://github.com/zserge/webview
这个项目使用类似QT的QWebEngine进行HTML GUI的开发,不需要额外消耗精力学习GUI体系。
跟QWebEngine一样,采用JS注入的形式实现Go Code与JS code的互相访问。当然,你也可以在Go中直接启动一个HTTP服务器,让webview直接用HTTP协议访问APP。

在Windows平台,使用go build编译时,如果不想编译后的可执行程序启动一个命令行终端,可以使用如下命令:

go build -ldflags="-H windowsgui"
丁丁生于 1987.07.01 ,30岁,英文ID:newflydd
  • 现居住地 江苏 ● 泰州 ● 姜堰
  • 创建了 Jblog 开源博客系统
  • 坚持十余年的 独立博客 作者
  • 大学本科毕业后就职于 中国电信江苏泰州分公司,前两年从事Oracle数据库DBA工作,两年后公司精简技术人员,被安排到农村担任支局长(其本质是搞销售),于2016年因志向不合从国企辞职,在小城镇找了一份程序员的工作。
  • 在 Git OSChina 上积极参与开源社区
  •