M1卡一共16个字节;
EE 03 11 30 00 00 00 43 69 01 00 00 00 00 99 5A
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
第9个字节标识新老卡,高4字节的BCD码是abcdef,标识新卡,BCD码小于"A",即小于10,即为老卡,老卡的卡内金额以及卡号都是BCD码,新卡,全部为十六进制。
9-12字节为卡号,新卡的处理方式(高端模式),第9字节除去高4位(高4位标识新卡类型),剩下的转十进制即为卡号;
1-3字节为卡内金额,第1字节只取低4位,即2个半字节(新旧卡一样),差别在于:老卡最大600元,新卡最大9999元
区域码:使用第0,第1字节(高4位),第4字节构成区域码。
描述一个卡,属性:黑白卡,区域码,卡类型,卡号,金额
刷卡板数据说明:(发送到上位机)
AA 00 0F 42 40 00 EA 60 00 00 00 00 00 00 00 A0
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
1-4字节即为卡号(新旧卡十六进制标识)
5-7字节即为卡内金额(新旧卡十六进制表示,单位分)
8-9字节十六进制区域码
区域码在M1卡以及读卡器中的存储方式是另外一种形式描述,在一定区间采用加值描述。
区域码0-99 BCD;一个字节
100-199 +2556;一个半字节
200-9999 +51000;二个字节
上位机发送到刷卡板也是一样,不过此时帧头和帧尾颠倒过来。
BB 00 0F 42 40 00 EA 60 00 00 00 00 00 00 00 AA
修改AB密码:CC XX XX XX XX XX XX CC(十六进制)
0xcc开头,0xcc结束(波特率115200)xx都是密码;(ab密码一样)
升级版
指令 | 说明 |
AA 00 0F 42 40 00 EA 60 00 00 00 00 00 00 00 A0 | 单片机->上位机,正常卡读卡数据 |
AA 00 0F 42 40 00 EA 60 00 00 00 00 00 00 00 A3 | 单片机->上位机,卡区间(管理卡操作) |
BB 00 0F 42 40 00 EA 60 00 00 00 00 00 00 00 B0 BB 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B0 | 上位机->单片机,开始初始化 停止初始化 |
BB 00 0F 42 40 00 EA 60 00 00 00 00 00 00 00 B1 | 上位机->单片机,区域码,充值等 |
BB 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B2 | 上位机->单片机,恢复出厂设置,写白卡 |
BB 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B3 | 上位机->单片机,管理卡设置 1-4起始;5-8截止 |
BB 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B4 | 上位机->单片机,密码设置 1-6 十六进制 |
4567(第一扇区)46数据块,7密码块, 密码块组成 a密码+控制字+b密码 = 6+4+6 ,控制字通常是FF078069,A|B密码都可以可读可写数据块。
关于区域码的说明:3个区间,0-99,100-199,200-9999
服务器下发十六进制区域码,单片机解析并保存,刷卡时判断是否是解析后的区域码,如果是,继续使用,如果不是,判断是否是零卡,如果是零卡,写区域码到卡。
1.设备端获取区域码:解析区域码--判断区域码区间---进行解密保存;
2.刷卡对比区域码:卡内区域码拼接对比解析后的区域码---都是加密的区域码进行对比(不同区间,取卡内不同的字节);
3.写零卡区域码:把刷卡板内的区域码拆解写到卡中---首先判断区间,确定写哪几个卡内字节;
0-99:使用0字节,1(高半字节)与4不用;
100-199:使用0-1(高半字节),4字节不使用;
200-9999:使用0与4字节,1(高半字节)不使用;
测试指令 :
AA 27 0F BB 区域码:9999
AA 00 C7 BB 区域码:199
AA 00 63 BB 区域码:99