本通讯协议为RC500开发商所定义,用户可根据自己的需要可以参考自行定义!
通讯格式:
数据包长度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,04是由扇区号乘4得到的)
-> 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 块60 块61 块62 块63
*/
阅读(1697) | 评论(0) | 转发(0) |