RC500通讯协议.c
资源名称:MFRC500.rar [点击查看]
上传用户:mz19810230
上传日期:2018-04-30
资源大小:8527k
文件大小:4k
源码类别:
电子政务应用
开发平台:
C/C++
- 通讯格式:
- 数据包长度L(1byte) 命令字C(1byte) 数据包D(L-1bytes)
- 通讯方向:
- -> 下位机送给上位机
- <- 上位机送给下位机
- IC卡读写器Demo程序:
- 1) 启动
- <- 02 0B 0F (02为长度,0B为命令字,测试凤鸣器,0F凤鸣器响的时间)
- -> 01 00 (01为长度,00为测试成功)
- 2) 寻卡
- <- 02 02 26 (02为命令字,26为RegMfOutSelect)
- -> 03 00 04 00 (00为命令成功代码,04表示Mifare One卡)
- <- 02 0B 0F
- -> 01 00
- 3) 防冲突
- <- 01 03 (03为命令字)
- -> 05 00 52 00 75 7A (52 00 75 7A为卡号CardSerialNo)
- <- 02 0B 0F
- -> 01 00
- 4) 选择
- <- 01 04 (04为命令字)
- -> 03 00 80 00
- <- 02 0B 0F
- -> 01 00
- 5) 终止
- <- 01 01 (01为命令字)
- -> 01 00
- <- 02 0B 0F
- -> 01 00
- 6) 参数设置
- <- 01 0C (0C为命令字)
- -> 01 00
- 7) 密码下载(扇区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
- 8) 数据读(扇区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
- 9) 数据写(扇区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
- 10) 块值操作(初始化)
- <- 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
- 11) 块值操作(读出)
- <- 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
- 12) 块值操作(加值)
- <- 08 0A C1 04 22 22 22 22 04 (0A为命令字,C1为PICC_INCREMENT,04为块号,4个字节的22是要加值的数据,04为块号)
- -> 01 00
- <- 02 0B 0F
- -> 01 00
- 13) 块值操作(减值)
- <- 08 0A C0 04 11 11 11 11 04 (0A为命令字,C1为PICC_DECREMENT为块号,4个字节的11是要减值的数据,04为块号)
- -> 01 00
- <- 02 0B 0F
- -> 01 00
- 14) 修改密码
- <- 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
- /*
- 扇区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 块19 块20 块21 块22
- 扇区6 块23 块24 块25 块26
- 扇区7 块27 块28 块29 块30
- 扇区8 块31 块32 块33 块34
- 扇区9 块35 块36 块37 块38
- 扇区10 块39 块40 块41 块42
- 扇区11 块43 块44 块45 块46
- 扇区12 块47 块48 块49 块50
- 扇区13 块51 块52 块53 块54
- 扇区14 块55 块56 块57 块58
- 扇区15 块59 块60 块61 块62
- */