M1卡做电子钱包

M1卡做电子钱包使用时,要将某个块按规定格式初始化为数值块

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

数值

数值

数值

Adr

Adr

Adr

Adr

0字节是数值最低字节。

初始数值块是用写命令把数据写到块,例如第8块初始化为数值块,数值为0,用写块命令写入

0x00 0x00 0x00 0x00 0xff 0xff 0xff 0xff 0x00 0x00 0x00 0x00 0x08 0xf7 0x08 0xf7

然后可以用DECREMENT INCREMENT TRANSFER RESTORE命令对数值块进行操作。

INCREMENT 对存储在数值块中的数值做加法操作,并将结果存到临时数据寄存器

DECREMENT 对存储在数值块中的数值做减法操作,并将结果存到临时数据寄存器

TRANSFER 将临时数据寄存器的内容写入数值块

RESTORE 将数值块内容存入临时数据寄存器

电子钱包增值函数流程

询卡-防冲突-选卡-密码验证-增值-传送-挂起

电子钱包减值函数流程

询卡-防冲突-选卡-密码验证-减值-传送-挂起

RESTORE命令是在一个扇区内数值块进行拷贝时用的,一般钱包数据需要备份在同一扇区的不同块中,则备份和恢复时都要用到RESTORE命令。

数值时一个带符号4字节值,这个值的最低一个字节保存在最低的地址中,所以增加1时,4字节增加的值数组应该是0x01 0x00 0x00 0x00,不是0x00 0x00 0x00 0x01

© 版权声明
THE END
喜欢就支持以下吧
点赞0
分享
评论 共2条
    • yw912
    • 水梦痕0

      数据格式一定要0×00 0×00 0×00 0×00 0xff 0xff 0xff 0xff 0×00 0×00 0×00 0×00 0×08 0xf7 0×08 0xf7 ?
      如果数据格式是0xaa 0x55 0×00 0×00 0×00 0×00 0xff 0xff 0xff 0xff 0×00 0×00 0×00 0×00 0×08 0xf7
      其中0xaa 0x55 是数据格式头标志位,例如是存放次数而不是金额的标志呢?

      9年前回复
    • yw912
    • yw912作者0

      电子钱包格式是M1卡规定的,必须按照规定的格式,才能用INC,DEC命令,存放次数和存放金额是一个道理。在电子钱包里写头标志位不合适,头标志位会被当作数值加减。

      9年前回复