【IoT】NFC 之 RC522 通信协议包

举报
产品人卫朋 发表于 2021/10/29 23:38:02 2021/10/29
【摘要】 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、扇区划分


  
  1. 扇区0    块0  块1  块2  块3
  2. 扇区1    块4  块5  块6  块7
  3. 扇区2    块8  块9  块10 块11
  4. 扇区3    块12 块13 块14 块15
  5. 扇区4    块16 块17 块18 块19
  6. 扇区5    块20 块21 块22 块23
  7. 扇区6    块24 块25 块26 块27
  8. 扇区7    块28 块29 块30 块31
  9. 扇区8    块32 块33 块34 块35
  10. 扇区9    块36 块37 块38 块39
  11. 扇区10   块40 块41 块42 块43
  12. 扇区11   块44 块45 块46 块47
  13. 扇区12   块48 块49 块50 块51
  14. 扇区13   块52 块53 块54 块55
  15. 扇区14   块56 块57 块58 块59
  16. 扇区15   块60 块61 块62 块63

4、IC 卡读写器数据包

1) 寻卡


  
  1.  <-  02 02 26    ( 02 为命令字,26RegMfOutSelect )
  2.    ->  03 00 04 00 ( 00 为命令成功代码,04 表示 Mifare One 卡 )
  3.    <-  02 0B 0F
  4.    ->  01 00

2) 防冲突


  
  1.  <-  01 03             ( 03 为命令字 )
  2.    ->  05 00 52 00 75 7A ( 52 00 75 7A 为卡号 CardSerialNo )
  3.    <-  02 0B 0F
  4.    ->  01 00

3) 选择


  
  1.  <-  01 04             ( 04 为命令字)
  2.    ->  03 00 80 00
  3.    <-  02 0B 0F
  4.    ->  01 00

4) 终止


  
  1.  <-  01 01             ( 01 为命令字)
  2.    ->  01 00
  3.    <-  02 0B 0F
  4.    ->  01 00

5) 参数设置


  
  1.    <-  01 0C             ( 0C 为命令字 )
  2.    ->  01 00

6) 密码下载 ( 扇区 1 密码为 12 个 F )


  
  1.  <-  09 06 60 01 FF FF FF FF FF FF (06为命令字,60PICC_AUTHENT1A(61PICC_AUTHENT1B),01为扇区号,12F为密码)
  2.    ->  01 00
  3.    <-  02 0B 0F
  4.    ->  01 00

7) 数据读(扇区1块0块1块2)


  
  1.  <-  02 02 52          ( 02 为命令字,52PICC_REQALL )
  2.    ->  03 00 04 00       ( 04RegFIFOLength )
  3.    <-  01 03             ( 03 为命令字 )
  4.    ->  05 00 52 00 75 7A ( 52 00 75 7A 为卡号 )
  5.    <-  01 04             ( 04 为命令字 )
  6.    ->  03 00 08 00 
  7.    <-  04 05 60 01 04 (05为命令字,60PICC_AUTHENT1A(61PICC_AUTHENT1B),01为扇区1,04RegFIFOLength)
  8.    ->  01 00
  9.    <-  02 08 04          ( 08 为命令号, 04 为块号 )
  10.    ->  11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (1600为数据)
  11.    <-  02 08 05          ( 08为命令号, 05 为块号 )
  12.    ->  11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (1600为数据)
  13.    <-  02 08 06          ( 08 为命令号, 06 为块号 )
  14.    ->  11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (1600为数据)
  15.    <-  02 08 07          ( 08 为命令号, 07 为块号 )
  16.    ->  11 00 00 00 00 00 00 00 ff 07 80 69 ff ff ff ff ff ff (第一个00为返回代码,后面600为密码A,ff 07 80 69为控制位,后面6个ff为密码B)
  17.    <-  02 0B 0F
  18.    ->  01 00

8) 数据写(扇区1块0块1块2)


  
  1.  <-  12 09 04 12 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ( 09 为命令字, 04 为块号, 12 开始的 16 个字节为要写的数据 )
  2.    ->  01 00
  3.    <-  02 0B 0F
  4.    ->  01 00
  5.    <-  12 09 05 45 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ( 09 为命令字, 05 为块号, 45 开始的 16 个字节为要写的数据 )
  6.    ->  01 00
  7.    <-  02 0B 0F
  8.    ->  01 00
  9.    <-  12 09 06 78 90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ( 09 为命令字, 06 为块号, 78 开始的 16 个字节为要写的数据 )
  10.    ->  01 00
  11.    <-  02 0B 0F
  12.    ->  01 00
  13.    <-  12 09 07 11 11 11 11 11 11 ff 07 80 69 11 11 11 11 11 11 ( 09 为命令字, 07 为块号, 把密码 A 和密码 B 都修改成 1 )
  14.    ->  01 00
  15.    <-  02 0B 0F
  16.    ->  01 00

9) 块值操作 ( 初始化 )


  
  1.    <-  12 09 04 11 11 11 11 EE EE EE EE 11 11 11 11 04 FB 04 FB ( 09 为命令字, 04 为块号, 11 开始的 16 个字节为要写的数据 )
  2.    ->  01 00
  3.    <-  02 0B 0F
  4.    ->  01 00

10) 块值操作 ( 读出 )


  
  1.    <-  02 08 04 ( 08 为命令字, 04 为块号 )
  2.    ->  11 00 11 11 11 11 EE EE EE EE 11 11 11 11 04 FB 04 FB ( 11 后面的 16 个自己是读出来的数据 )
  3.    <-  02 0B 0F
  4.    ->  01 00

11) 块值操作 ( 加值 )


  
  1.  <-  08 0A C1 04 22 22 22 22 04 ( 0A 为命令字, C1PICC_INCREMENT, 04 为块号, 4 个字节的 22 是要加值的数据, 04 为块号 )
  2.    ->  01 00
  3.    <-  02 0B 0F
  4.    ->  01 00
  5.    

12) 块值操作 ( 减值 )


  
  1.  <-  08 0A C0 04 11 11 11 11 04 ( 0A 为命令字, C1PICC_DECREMENT 为块号, 4 个字节的 11 是要减值的数据, 04 为块号 )
  2.    ->  01 00 
  3.    <-  02 0B 0F
  4.    ->  01 00

13) 修改密码


  
  1.  <-  02 02 26 ( 02 为命令字, 26RegMfOutSelect )
  2.    ->  03 00 04 00 
  3.    <-  01 03    ( 03 为命令字 )
  4.    ->  05 00 52 00 75 7A (52 00 75 7A为卡号)
  5.    <-  01 04    ( 04 为命令字 )
  6.    ->  03 00 80 00 
  7.    <-  04 05 60 01 04 ( 05 为命令字, 60PICC_AUTHENT1A (61PICC_AUTHENT1B), 01 为扇区号,04RegFIFOLength )
  8.    ->  01 00
  9.    <-  12 09 07 33 33 33 33 33 33 ff 07 80 69 33 33 33 33 33 33 ( 09 为命令字, 07 为块号, 33 后面的 12 个字节为新密码 )
  10.    ->  01 00
  11.    <-  02 0B 0F
  12.    ->  01 00

  

文章来源: blog.csdn.net,作者:简一商业,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/liwei16611/article/details/90265745

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。