PN532实现卡模拟功能

这篇具有很好参考价值的文章主要介绍了PN532实现卡模拟功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

使用Android手机和pn532进行通信,此时,PN532应完全模拟一张NFC标签,本文使用PN532模拟NFC Forum Type 2标准的标签

如何实现

此时使用了之前说的libnfc的demo-examples\nfc-emulate-forum-tag2.c,此功能就是使用PN532模拟一张NFC Forum Type 2标准的标签

1、编译安装

见libnfc源码编译与使用_让我来敲的博客-CSDN博客

2、打开调试开关

# Allow device auto-detection (default: true)
# Note: if this auto-detection is disabled, user has to set manually a device
# configuration using file or environment variable
#allow_autoscan = true

# Allow intrusive auto-detection (default: false)
# Warning: intrusive auto-detection can seriously disturb other devices
# This option is not recommended, user should prefer to add manually his device.
#allow_intrusive_scan = false

# Set log level (default: error)
# Valid log levels are (in order of verbosity): 0 (none), 1 (error), 2 (info), 3 (debug)
# Note: if you compiled with --enable-debug option, the default log level is "debug"
##############################      HERE!!!!!!!!!!!!!!!!!!!!!!!#############
log_level = 3

# Manually set default device (no default)
# To set a default device, you must set both name and connstring for your device
# Note: if autoscan is enabled, default device will be the first device available in device list.
device.name = "microBuilder.eu"
device.connstring = "pn532_uart:/dev/ttyUSB0"

3、执行生成物

执行之后,使用安卓手机靠近PN532,控制台会出现如下输出:

debug	libnfc.chip.pn53x	Diagnose+SAMConfiguration
debug	libnfc.bus.uart	TX: 55 55 00 00 00  00 00 ff 03 fd d4 14 01 17 00 

debug	libnfc.chip.pn53x	SetParameters
debug	libnfc.bus.uart	TX: 00 00 ff 03 fd d4 12 14 06 00 
debug	libnfc.bus.uart	RX: 00 00 ff 00 ff 00 
debug	libnfc.chip.pn53x	PN53x ACKed
debug	libnfc.bus.uart	RX: 00 00 ff 02 fe 
debug	libnfc.bus.uart	RX: d5 13 
debug	libnfc.bus.uart	RX: 18 00 

debug	libnfc.chip.pn53x	WriteRegister
debug	libnfc.bus.uart	TX: 00 00 ff 08 f8 d4 08 63 02 80 63 03 80 59 00 
debug	libnfc.bus.uart	RX: 00 00 ff 00 ff 00 
debug	libnfc.chip.pn53x	PN53x ACKed
debug	libnfc.bus.uart	RX: 00 00 ff 02 fe 
debug	libnfc.bus.uart	RX: d5 09 
debug	libnfc.bus.uart	RX: 22 00 

debug	libnfc.chip.pn53x	RFConfiguration
debug	libnfc.bus.uart	TX: 00 00 ff 04 fc d4 32 01 00 f9 00 
debug	libnfc.bus.uart	RX: 00 00 ff 00 ff 00 
debug	libnfc.chip.pn53x	PN53x ACKed
debug	libnfc.bus.uart	RX: 00 00 ff 02 fe 
debug	libnfc.bus.uart	RX: d5 33 
debug	libnfc.bus.uart	RX: f8 00 

debug	libnfc.chip.pn53x	SetParameters
debug	libnfc.bus.uart	TX: 00 00 ff 03 fd d4 12 10 0a 00 
debug	libnfc.bus.uart	RX: 00 00 ff 00 ff 00 
debug	libnfc.chip.pn53x	PN53x ACKed
debug	libnfc.bus.uart	RX: 00 00 ff 02 fe 
debug	libnfc.bus.uart	RX: d5 13 
debug	libnfc.bus.uart	RX: 18 00 

debug	libnfc.chip.pn53x	WriteRegister
debug	libnfc.bus.uart	TX: 00 00 ff 05 fb d4 08 63 05 04 b8 00 
debug	libnfc.bus.uart	RX: 00 00 ff 00 ff 00 
debug	libnfc.chip.pn53x	PN53x ACKed
debug	libnfc.bus.uart	RX: 00 00 ff 02 fe 
debug	libnfc.bus.uart	RX: d5 09 
debug	libnfc.bus.uart	RX: 22 00 

debug	libnfc.chip.pn53x	TgInitAsTarget
debug	libnfc.chip.pn53x	No timeout
debug	libnfc.bus.uart	TX: 00 00 ff 27 d9 d4 8c 01 04 00 00 b0 0b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e0 00 
debug	libnfc.bus.uart	RX: 00 00 ff 00 ff 00 
debug	libnfc.chip.pn53x	PN53x ACKed
debug	libnfc.bus.uart	RX: 00 00 ff 05 fb 
debug	libnfc.bus.uart	RX: d5 8d 
debug	libnfc.bus.uart	RX: 00 30 00 
debug	libnfc.bus.uart	RX: 6e 00 

debug	libnfc.chip.pn53x	TgResponseToInitiator
debug	libnfc.chip.pn53x	No timeout
debug	libnfc.bus.uart	TX: 00 00 ff 12 ee d4 90 00 00 00 00 00 00 00 00 00 00 00 00 e1 10 06 0f 96 00 
debug	libnfc.bus.uart	RX: 00 00 ff 00 ff 00 
debug	libnfc.chip.pn53x	PN53x ACKed
debug	libnfc.bus.uart	RX: 00 00 ff 03 fd 
debug	libnfc.bus.uart	RX: d5 91 
debug	libnfc.bus.uart	RX: 00 
debug	libnfc.bus.uart	RX: 9a 00 

debug	libnfc.chip.pn53x	TgGetInitiatorCommand
debug	libnfc.chip.pn53x	No timeout
debug	libnfc.bus.uart	TX: 00 00 ff 02 fe d4 88 a4 00 
debug	libnfc.bus.uart	RX: 00 00 ff 00 ff 00 
debug	libnfc.chip.pn53x	PN53x ACKed
debug	libnfc.bus.uart	RX: 00 00 ff 05 fb 
debug	libnfc.bus.uart	RX: d5 89 
debug	libnfc.bus.uart	RX: 00 30 04 
debug	libnfc.bus.uart	RX: 6e 00 

debug	libnfc.chip.pn53x	TgResponseToInitiator
debug	libnfc.chip.pn53x	No timeout
debug	libnfc.bus.uart	TX: 00 00 ff 12 ee d4 90 03 21 d1 02 1c 53 70 91 01 09 54 02 65 6e 4c 69 4d 00 
debug	libnfc.bus.uart	RX: 00 00 ff 00 ff 00 
debug	libnfc.chip.pn53x	PN53x ACKed
debug	libnfc.bus.uart	RX: 00 00 ff 03 fd 
debug	libnfc.bus.uart	RX: d5 91 
debug	libnfc.bus.uart	RX: 00 
debug	libnfc.bus.uart	RX: 9a 00 

debug	libnfc.chip.pn53x	TgGetInitiatorCommand
debug	libnfc.chip.pn53x	No timeout
debug	libnfc.bus.uart	TX: 00 00 ff 02 fe d4 88 a4 00 
debug	libnfc.bus.uart	RX: 00 00 ff 00 ff 00 
debug	libnfc.chip.pn53x	PN53x ACKed
debug	libnfc.bus.uart	RX: 00 00 ff 05 fb 
debug	libnfc.bus.uart	RX: d5 89 
debug	libnfc.bus.uart	RX: 00 30 08 
debug	libnfc.bus.uart	RX: 6a 00 

debug	libnfc.chip.pn53x	TgResponseToInitiator
debug	libnfc.chip.pn53x	No timeout
debug	libnfc.bus.uart	TX: 00 00 ff 12 ee d4 90 62 6e 66 63 51 01 0b 55 03 6c 69 62 6e 66 63 2e b2 00 
debug	libnfc.bus.uart	RX: 00 00 ff 00 ff 00 
debug	libnfc.chip.pn53x	PN53x ACKed
debug	libnfc.bus.uart	RX: 00 00 ff 03 fd 
debug	libnfc.bus.uart	RX: d5 91 
debug	libnfc.bus.uart	RX: 00 
debug	libnfc.bus.uart	RX: 9a 00 

debug	libnfc.chip.pn53x	TgGetInitiatorCommand
debug	libnfc.chip.pn53x	No timeout
debug	libnfc.bus.uart	TX: 00 00 ff 02 fe d4 88 a4 00 
debug	libnfc.bus.uart	RX: 00 00 ff 00 ff 00 
debug	libnfc.chip.pn53x	PN53x ACKed
debug	libnfc.bus.uart	RX: 00 00 ff 05 fb 
debug	libnfc.bus.uart	RX: d5 89 
debug	libnfc.bus.uart	RX: 00 30 0c 
debug	libnfc.bus.uart	RX: 66 00 

debug	libnfc.chip.pn53x	TgResponseToInitiator
debug	libnfc.chip.pn53x	No timeout
debug	libnfc.bus.uart	TX: 00 00 ff 12 ee d4 90 6f 72 67 00 00 00 00 00 00 00 00 00 00 00 00 00 54 00 
debug	libnfc.bus.uart	RX: 00 00 ff 00 ff 00 
debug	libnfc.chip.pn53x	PN53x ACKed
debug	libnfc.bus.uart	RX: 00 00 ff 03 fd 
debug	libnfc.bus.uart	RX: d5 91 
debug	libnfc.bus.uart	RX: 00 
debug	libnfc.bus.uart	RX: 9a 00 

debug	libnfc.chip.pn53x	TgGetInitiatorCommand
debug	libnfc.chip.pn53x	No timeout
debug	libnfc.bus.uart	TX: 00 00 ff 02 fe d4 88 a4 00 
debug	libnfc.bus.uart	RX: 00 00 ff 00 ff 00 
debug	libnfc.chip.pn53x	PN53x ACKed
debug	libnfc.bus.uart	RX: 00 00 ff 05 fb 
debug	libnfc.bus.uart	RX: d5 89 
debug	libnfc.bus.uart	RX: 00 50 00 
debug	libnfc.bus.uart	RX: 52 00 

debug	libnfc.chip.pn53x	InRelease
debug	libnfc.bus.uart	TX: 00 00 ff 03 fd d4 52 00 da 00 
debug	libnfc.bus.uart	RX: 00 00 ff 00 ff 00 
debug	libnfc.chip.pn53x	PN53x ACKed
debug	libnfc.bus.uart	RX: 00 00 ff 03 fd 
debug	libnfc.bus.uart	RX: d5 53 
debug	libnfc.bus.uart	RX: 00 
debug	libnfc.bus.uart	RX: d8 00 

debug	libnfc.chip.pn53x	PowerDown
debug	libnfc.bus.uart	TX: 00 00 ff 03 fd d4 16 f0 26 00 
debug	libnfc.bus.uart	RX: 00 00 ff 00 ff 00 
debug	libnfc.chip.pn53x	PN53x ACKed
debug	libnfc.bus.uart	RX: 00 00 ff 03 fd 
debug	libnfc.bus.uart	RX: d5 17 
debug	libnfc.bus.uart	RX: 00 
debug	libnfc.bus.uart	RX: 14 00 

开发者需自定义卡片的内容,demo中的卡片数据为

static uint8_t __nfcforum_tag2_memory_area[] = {
  0x00, 0x00, 0x00, 0x00,  // Block 0
  0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0xFF, 0xFF,  // Block 2 (Static lock bytes: CC area and data area are read-only locked)
  0xE1, 0x10, 0x06, 0x0F,  // Block 3 (CC - NFC-Forum Tag Type 2 version 1.0, Data area (from block 4 to the end) is 48 bytes, Read-only mode)

  0x03, 33,   0xd1, 0x02,  // Block 4 (NDEF)
  0x1c, 0x54, 0x70, 0x91,
  0x01, 0x09, 0x54, 0x02,
  0x65, 0x6e, 0x4c, 0x69,

  0x62, 0x6e, 0x66, 0x63,
  0x51, 0x01, 0x0b, 0x55,
  0x03, 0x6c, 0x69, 0x62,
  0x6e, 0x66, 0x63, 0x2e,

  0x6f, 0x72, 0x67, 0x00,
  0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00,
};

格式解析如下:

pn532读取cpu模拟卡,PN532,安全,嵌入式硬件

 第4快的0x06表示Data区总共有6*8=48个字节,实际开发需要修改此字段,从第5块的第3个字节开始就是一个NDef消息,需自己填入内容,可参考NDEF协议格式,33是NDEF的长度,这种模拟情况下,最多传递250个字节的数据,理论上应该是251个,但是最终有问题,如果有了解的童靴可以一起交流哈。

pn532读取cpu模拟卡,PN532,安全,嵌入式硬件

是 JIS-X-6319-4-2019-ENG.pdf 中定义的该卡的数据组织方式,详见https://www.docin.com/p-2074660216.html

备注:若开发者需要高度定制,需参考demo和PN532的交互流程实现前置流程

最后,本人仅对这种模式初步探究,如何传递更大的数据,以及安卓如何写入未探索,欢迎大家一起分享学习文章来源地址https://www.toymoban.com/news/detail-516753.html

到了这里,关于PN532实现卡模拟功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • linux文件比较工具diff-关于参数-pN的设置方法

    非纯文本文件比较可用cmp命令 第一:利用diff创建分析文件,处理补丁(patch)功能的文件 案例:多数用于同一软件的不同版本之间,比如比较配置文件和源文件的区别,生成补丁文件,执行更新,或者恢复操作 以’行‘为单位进行比较,多数用在同一文件新旧版本的比较上

    2024年01月19日
    浏览(52)
  • 使用MATLAB生成任何需要的伪随机码(PN码)

    目录 一. 引言 二. 用matlab生成伪随机序列                 伪随机码(PN码),只包含0和1,是一种人为随机创造的随机序列。应用范围广,通信中经常使用到,比如伪码测距等。为了验证所给的生成函数是否正确,经常需要使用matlab仿真查看所生成的随机序列。         下

    2024年02月11日
    浏览(48)
  • 【C++系列Pn】引用——背刺指针的神秘刺客“吃我一棍”

    前言 大家好吖,欢迎来到 YY 滴 C++系列 ,热烈欢迎! 如标题所示,本章主要内容主要来侃侃“ 引用 ”这个刺客!如下就是大纲啦~ 引用,即 取别名 。它的最大特点是编译器 不会为引用变量而开辟空间 ,他们 共用同一块 空间。   1. 引用使用时必须要 初始化 。 2. 引用在初

    2024年02月06日
    浏览(40)
  • CMOS与TTL(上):PN结、MOS管、三极管

    如果只看一个芯片的外观,是无法区分TTL和CMOS的。因为它们是按照芯片的制作工艺来分类的。 CMOS内部集成的是MOS管,而TTL内部集成的是三极管。 P型半导体是在纯净的硅晶体中掺杂了三价硼,此时硼原子最外层缺少了一个电子,我们用空穴代替这个缺少的电子。空穴吸引电

    2023年04月15日
    浏览(42)
  • V90伺服驱动器设置IP地址和PN设备名称的具体方法(2种)

    1. 通过V-ASSISTANT软件进行配置 首先下载并安装V-ASSISTANT软件,然后将V90通过网线连接到电脑上,注意此时电脑使用的网卡,不能选择无线网卡, SINAMICS-V90伺服调试软件V-ASSISTANT_V1.07.01 打开V-ASSISTANT软件,点击Ethernet连接,会自动刷新当前连接的V90伺服, 如下图所示,软件自动

    2024年02月06日
    浏览(197)
  • 手机手环用PCR532模拟加密门禁卡

    首先我们需要准备PN532读卡器,PCR532软件,门禁卡和可复制的中介卡(中介卡必须提前格式化)。  软件下载地址:http://www.rfidfans.com/thread/9  最左侧为我在立创开源硬件平台上找的工程,并自行焊接的pn532读卡器,也可以在淘宝上购买。 第一步我们安装PCR532软件,然后电脑接

    2024年02月11日
    浏览(135)
  • 【操作系统实验6】CPU调度程序模拟实现

    加深对操作系统CPU调度以及调度算法的理解 1) 单处理器环境下,针对最短作业优先算法(SJF)和优先级调度算法(Priority),分别模拟实现抢占调度和非抢占调度的调度程序 设计使用三个队列,分别为就绪队列(readyQueue)、运行队列(runningQueue)、等待队列(waitingQueue) 进程状态三种,

    2024年02月06日
    浏览(47)
  • 【嵌入式】HC32F定时器PWM捕获+APC芯片实现模拟AD采样

    目录 一 项目背景 二 原理说明 三 设计实现——定时器初始化 四 设计实现——PWM捕获 五 梳理总结         目前使用了TI的ADC采样芯片 ADS1018实现模拟量4-20mA/0-20mA的采样 ,原理是 将外部输入的模拟量信号4-20mA,经由并联的两个100Ω电阻,转换为0.2-1V的电压信号传递到模数转

    2023年04月24日
    浏览(47)
  • 使用 C++23 从零实现 RISC-V 模拟器(1):最简CPU

    👉🏻 文章汇总「从零实现模拟器、操作系统、数据库、编译器…」:https://okaitserrj.feishu.cn/docx/R4tCdkEbsoFGnuxbho4cgW2Yntc 本节实现一个最简的 CPU ,最终能够解析 add 和 addi 两个指令。如果对计算机组成原理已经有所了解可以跳过下面的内容直接看代码实现。 完整代码在这个分支

    2024年02月20日
    浏览(35)
  • lv6 嵌入式开发-Flappy bird项目(信号机制、定时器功能实现)

    目录 1 信号(signal) 2 设置信号响应方式 – signal 3 设置定时器 4 示例 问题: getch()阻塞获取键盘按键输入, 怎么操作才能不影响小鸟下落和管道移动? getch如果阻塞,下面的程序都是无法执行。通过信号机制方式实现。 在Linux中,软中断信号(signal,简称为信号)是在软件层

    2024年02月07日
    浏览(83)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包