低功耗NFC刷卡模组 ISO14443A协议 智能锁 uA级刷卡方案

本篇主要描述:广州慧斯佳智能科技有限公司自主研发的一款超低功耗,非接触式NFC刷卡模组HSJ560DL的基本参数、使用方法、功耗检测展示等

        HSJ560DL 读卡模块作为一个 I2C 从设备。当有卡在天线区域时,有卡状态脚  IO3 会由高电平变成低电平,用户必须在 IO3 为低后的 250ms 读走卡号,否则模块会 再次进入低功耗状态,  本次读取的卡号内容会丢失。
        用户需要不断检测 IO3 脚,发现 IO3 为低时,用户就可以通过 发送读卡命令将卡号读取回来。 HSJ560DL 从地址为 0xB2 读取时只需要发送从机地址即可
  • 功耗演示

  • 使用流程

  • 基本参数

  • 产品展示

  • 模块尺寸

  • 模块接线

  • 通信数据帧格式说明

模块与用户 MCU 之间的数据通信,以一帧为单位进行,格式及说明如下表所示

通信数据帧结构
帧长
FrameLen
包号 / 命令类型
SEQNR
命令 / 状态
CMD/Status
数据长度
Length
数据
Data
校验和
BCC
帧结束符
ETX
1-byte1-byte1-byte1-byteLength-byte1-byte1-byte
通信数据帧各字段说明
字段长度说明
FrameLen1-byte
数据帧的长度,包括其本身,包括帧结束符 ETX
SEQNR1-byte
数据帧包序号,从 0 255 循环。可以用来作为通信间的错误
检查,从机(模块)接收到主机发来的信息,在应答信息中发
出一个同样的 SEQ 信息,主机可以通过此信息检查是否发生
的“包丢失”的错误。第一个包的 SEQ 可为任意值。
CMD/Status1-byte
用户MCU——》模块:命令 Command
模块——》用户MCU:状态 Status
Length1-byte
该帧所带数据信息长度
若模块返回状态不为 0x00 ,则 Length=0
DataLength-byte
数据信息 , 长度等于 Length
BCC1-byte
FrameLen 开始到数据(DATA)的最后一字节异或和
ETX1-byte
ETX=0x03 ,是一个帧的结束标志
数据通信规则
无论何时,若接收方在 20ms 内没有接收到一个字节,表示下一接收的字节为一帧数据。数据帧开始字节,即帧长数据。即每发送一条命令,字节间的最大间隔不能超过 20ms
完整一帧数据的结束一定是 ETX ,但接收到 0x03 则不一定是帧结束。帧长必须不小于 6 字节。最大不能超过 31 字节,且帧长必须等于数据长度加 6
BCC 计算必须正确
如果采用模拟 I2C ,如果不判断 SCL 是否冲突,建议向模块发送命令时,每次发送一个字节。延时 20us 以上再发送下一字节
如果向模块发送命令没有应答或者出错,应该重复发送
  • 命令说明

  • 装载密钥

        功能描述:将指定的密钥数据装载到模块内的密钥区,并非改变 Mifare1S50卡内扇区的密钥。后续读 / 写命令均以模块密钥区装载的密钥数据先进行验证,验证通过再执行 读 / 写操作
用户MCU 发送--》模块

FrameLen

帧长

SEQNR

包号

CMD

命令码

Length

应用数据长度

Data

应用数据

BCC

校验码

ETX

结束符

0x0C0xXX0x450x06

KeyData

0xXX0x03

KeyData:装载到模块内部密钥区的数据,长度为6个字节

模块 回复--》用户MCU

FrameLen

帧长

SEQNR

包号

Status

状态码

Length

应用数据长度

Data

应用数据

BCC

校验码

ETX

结束符

0x060xXX0x000x00

-

0xXX0x03
Status:状态码0x00 -- 命令执行成功
通信示例:将6字节0xFF密钥数据装载到模块内部密钥区

用户MCU 发送:0C 00 45 06 FF FF FF FF FF FF 4F 03

模块 回复:06 00 00 00 06 03

  • 激活卡号获取卡号

        功能描述:激活卡片获取卡号数据

用户MCU 发送--》模块

FrameLen

帧长

SEQNR

包号

CMD

命令码

Length

应用数据长度

Data

应用数据

BCC

校验码

ETX

结束符

0x060xXX0x4D0x00

-

0xXX0x03
模块 回复--》用户MCU

FrameLen

帧长

SEQNR

包号

Status

状态码

Length

应用数据长度

Data

应用数据

BCC

校验码

ETX

结束符

0xXX0xXX0x00
0x06
或 0x09
CardType+
CardIDLength+
CardID
0xXX0x03

Status:状态码0x00 -- 读取卡号成功

CardType:卡片类型

                    0x00 - Mifare1 S50 

                    0x01 - UltraLight / NTAG213

CardIDLength:卡号数据长度

                    Mifare1 S50卡卡号长度为4字节

                    UltraLight / NTAG213标签卡号长度为7字节

CardID:卡号数据

通信示例:读取卡号为C0 97 8D 7C的Mifare1S50卡号

用户MCU 发送:06 00 4D 00 4B 03

模块 回复:0C 00 00 06 00 04 C0 97 8D 7C A8 03
通信示例:读取卡号为04 DC 94 22 E9 4C 80的UltraLight 标签卡号

用户MCU 发送:06 00 4D 00 4B 03

模块 回复:0F 00 00 09 01 07 04 DC 94 22 E9 4C 80 4B 03
  • 读取数据

        功能描述:密钥验证通过,读取Mifare1S50卡内部扇区数据块数据

用户MCU 发送--》模块

FrameLen

帧长

SEQNR

包号

CMD

命令码

Length

应用数据长度

Data

应用数据

BCC

校验码

ETX

结束符

0x080xXX0x510x02

KeyType+Block

0xXX0x03

KeyType:验证密钥类型

                 0x60 - A密钥验证; 0x61 - B密钥验证

Block:数据块编号

             Mifare1S50:0-63;Mifare1S50:0-255

模块 回复--》用户MCU

FrameLen

帧长

SEQNR

包号

Status

状态码

Length

应用数据长度

Data

应用数据

BCC

校验码

ETX

结束符

0x160xXX0x00
0x10
Block-Data0xXX0x03

Status:状态码0x00 -- 读取数据成功

Block-Data:读取到的数据块数据,共16个字节

通信示例:验证卡片内部0扇区中的A密钥;读取数据块1中的16字节0xAA

用户MCU 发送:08 00 51 02 60 01 3A 03

模块 回复:16 00 00 10 AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA 06 03
  • 写入数据

        功能描述:密钥验证通过,对Mifare1S50卡内部扇区数据块写入数据

用户MCU 发送--》模块

FrameLen

帧长

SEQNR

包号

CMD

命令码

Length

应用数据长度

Data

应用数据

BCC

校验码

ETX

结束符

0x180xXX0x500x12

KeyType+Block+

Write-Bolck-Data

0xXX0x03

KeyType:验证密钥类型

                 0x60 - A密钥验证; 0x61 - B密钥验证

Block:数据块编号

             Mifare1S50:0-63;Mifare1S50:0-255;

Write-Bolck-Data:写入数据块的数据,共16字节

模块 回复--》用户MCU

FrameLen

帧长

SEQNR

包号

Status

状态码

Length

应用数据长度

Data

应用数据

BCC

校验码

ETX

结束符

0x060xXX0x000x00

-

0xXX0x03
Status:状态码0x00 -- 写入数据成功
通信示例:验证卡片内部0扇区中的A密钥;对数据块1中写入16字节0xAA

用户MCU 发送:18 00 50 12 60 01 AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA AA 3B 03

模块 回复:06 00 00 00 06 03

模块采购链接

https://item.taobao.com/item.htm?spm=a1z10.3-c-s.w4002-24224765324.9.208a2603vlUNNO&id=44994424537

NFC(Near Field Communication,近场通信)是一种短距离无线通信技术,常用于移动设备之间的数据交换和身份验证。在Android应用开发中,使用NFC通常涉及以下几个步骤: 1. **初始化库**:在AndroidManifest.xml中添加NFC权限,并在你的Activity或Fragment中启用NFC功能: ```xml <uses-permission android:name="android.permission.NFC" /> ... <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <!-- 其他NFC相关的ACTION --> </intent-filter> ``` 2. **检测支持**: ```java if (NfcAdapter.getDefaultAdapter(this) != null) { // NFC功能可用 } else { Toast.makeText(this, "NFC not supported", Toast.LENGTH_SHORT).show(); } ``` 3. **设置监听器**: 使用`NfcAdapter`创建一个监听器并注册它,当NFC标签接近设备时会触发回调: ```java NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this); nfcAdapter.enableForegroundDispatch( this, new NdefPushMessageCallback(), null, // 小图标 null // 背景颜色 ); ``` 4. **解析数据**: 当接收到NDEF消息时,需要解析数据: ```java private void onTagDiscovered(NdefMessage message) { for (NdefRecord record : message.getRecords()) { String text = TextUtils.toString(NdefUtil.decode(record)); // 处理解析出的数据 } } class NdefPushMessageCallback implements NfcAdapter.OnNdefPushCompleteCallback { @Override public void onNdefPushComplete(NdefMessage message, Tag tag, int status) { if (status == NfcAdapter.ACTION_NDEF_PUSH_SUCCEEDED) { onTagDiscovered(message); } } } ``` 5. **发送数据**: 可以通过创建`NdefMessage`和`NdefRecord`,将数据封装到NFC标签中,然后尝试推送到另一个设备。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值