【IoT】NFC 之 RC522 通信协议包
【摘要】
1、通讯格式
数据包长度 L(1byte) + 命令字 C(1byte) + 数据包 D(L-1bytes)
2、通讯方向
-> 下位机送给上位机 <- 上位机送给下位机
3、扇区划分
扇区0 块0 块1 块2 块3扇区1 &nb...
1、通讯格式
数据包长度 L(1byte) + 命令字 C(1byte) + 数据包 D(L-1bytes)
2、通讯方向
-> 下位机送给上位机
<- 上位机送给下位机
3、扇区划分
-
扇区0 块0 块1 块2 块3
-
扇区1 块4 块5 块6 块7
-
扇区2 块8 块9 块10 块11
-
扇区3 块12 块13 块14 块15
-
扇区4 块16 块17 块18 块19
-
扇区5 块20 块21 块22 块23
-
扇区6 块24 块25 块26 块27
-
扇区7 块28 块29 块30 块31
-
扇区8 块32 块33 块34 块35
-
扇区9 块36 块37 块38 块39
-
扇区10 块40 块41 块42 块43
-
扇区11 块44 块45 块46 块47
-
扇区12 块48 块49 块50 块51
-
扇区13 块52 块53 块54 块55
-
扇区14 块56 块57 块58 块59
-
扇区15 块60 块61 块62 块63
4、IC 卡读写器数据包
1) 寻卡
-
<- 02 02 26 ( 02 为命令字,26 为 RegMfOutSelect )
-
-> 03 00 04 00 ( 00 为命令成功代码,04 表示 Mifare One 卡 )
-
<- 02 0B 0F
-
-> 01 00
2) 防冲突
-
<- 01 03 ( 03 为命令字 )
-
-> 05 00 52 00 75 7A ( 52 00 75 7A 为卡号 CardSerialNo )
-
<- 02 0B 0F
-
-> 01 00
3) 选择
-
<- 01 04 ( 04 为命令字)
-
-> 03 00 80 00
-
<- 02 0B 0F
-
-> 01 00
4) 终止
-
<- 01 01 ( 01 为命令字)
-
-> 01 00
-
<- 02 0B 0F
-
-> 01 00
5) 参数设置
-
<- 01 0C ( 0C 为命令字 )
-
-> 01 00
6) 密码下载 ( 扇区 1 密码为 12 个 F )
-
<- 09 06 60 01 FF FF FF FF FF FF (06为命令字,60为PICC_AUTHENT1A(61为PICC_AUTHENT1B),01为扇区号,12个F为密码)
-
-> 01 00
-
<- 02 0B 0F
-
-> 01 00
7) 数据读(扇区1块0块1块2)
-
<- 02 02 52 ( 02 为命令字,52 为 PICC_REQALL )
-
-> 03 00 04 00 ( 04 为 RegFIFOLength )
-
<- 01 03 ( 03 为命令字 )
-
-> 05 00 52 00 75 7A ( 52 00 75 7A 为卡号 )
-
<- 01 04 ( 04 为命令字 )
-
-> 03 00 08 00
-
<- 04 05 60 01 04 (05为命令字,60为PICC_AUTHENT1A(61为PICC_AUTHENT1B),01为扇区1,04为RegFIFOLength)
-
-> 01 00
-
<- 02 08 04 ( 08 为命令号, 04 为块号 )
-
-> 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (16个00为数据)
-
<- 02 08 05 ( 08为命令号, 05 为块号 )
-
-> 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (16个00为数据)
-
<- 02 08 06 ( 08 为命令号, 06 为块号 )
-
-> 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (16个00为数据)
-
<- 02 08 07 ( 08 为命令号, 07 为块号 )
-
-> 11 00 00 00 00 00 00 00 ff 07 80 69 ff ff ff ff ff ff (第一个00为返回代码,后面6个00为密码A,ff 07 80 69为控制位,后面6个ff为密码B)
-
<- 02 0B 0F
-
-> 01 00
8) 数据写(扇区1块0块1块2)
-
<- 12 09 04 12 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ( 09 为命令字, 04 为块号, 12 开始的 16 个字节为要写的数据 )
-
-> 01 00
-
<- 02 0B 0F
-
-> 01 00
-
<- 12 09 05 45 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ( 09 为命令字, 05 为块号, 45 开始的 16 个字节为要写的数据 )
-
-> 01 00
-
<- 02 0B 0F
-
-> 01 00
-
<- 12 09 06 78 90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ( 09 为命令字, 06 为块号, 78 开始的 16 个字节为要写的数据 )
-
-> 01 00
-
<- 02 0B 0F
-
-> 01 00
-
<- 12 09 07 11 11 11 11 11 11 ff 07 80 69 11 11 11 11 11 11 ( 09 为命令字, 07 为块号, 把密码 A 和密码 B 都修改成 1 )
-
-> 01 00
-
<- 02 0B 0F
-
-> 01 00
9) 块值操作 ( 初始化 )
-
<- 12 09 04 11 11 11 11 EE EE EE EE 11 11 11 11 04 FB 04 FB ( 09 为命令字, 04 为块号, 11 开始的 16 个字节为要写的数据 )
-
-> 01 00
-
<- 02 0B 0F
-
-> 01 00
10) 块值操作 ( 读出 )
-
<- 02 08 04 ( 08 为命令字, 04 为块号 )
-
-> 11 00 11 11 11 11 EE EE EE EE 11 11 11 11 04 FB 04 FB ( 11 后面的 16 个自己是读出来的数据 )
-
<- 02 0B 0F
-
-> 01 00
11) 块值操作 ( 加值 )
-
<- 08 0A C1 04 22 22 22 22 04 ( 0A 为命令字, C1 为 PICC_INCREMENT, 04 为块号, 4 个字节的 22 是要加值的数据, 04 为块号 )
-
-> 01 00
-
<- 02 0B 0F
-
-> 01 00
-
12) 块值操作 ( 减值 )
-
<- 08 0A C0 04 11 11 11 11 04 ( 0A 为命令字, C1 为 PICC_DECREMENT 为块号, 4 个字节的 11 是要减值的数据, 04 为块号 )
-
-> 01 00
-
<- 02 0B 0F
-
-> 01 00
13) 修改密码
-
<- 02 02 26 ( 02 为命令字, 26 为 RegMfOutSelect )
-
-> 03 00 04 00
-
<- 01 03 ( 03 为命令字 )
-
-> 05 00 52 00 75 7A (52 00 75 7A为卡号)
-
<- 01 04 ( 04 为命令字 )
-
-> 03 00 80 00
-
<- 04 05 60 01 04 ( 05 为命令字, 60 为 PICC_AUTHENT1A (61为PICC_AUTHENT1B), 01 为扇区号,04 为 RegFIFOLength )
-
-> 01 00
-
<- 12 09 07 33 33 33 33 33 33 ff 07 80 69 33 33 33 33 33 33 ( 09 为命令字, 07 为块号, 33 后面的 12 个字节为新密码 )
-
-> 01 00
-
<- 02 0B 0F
-
-> 01 00
文章来源: blog.csdn.net,作者:简一商业,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/liwei16611/article/details/90265745
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)