M1(高频卡)卡的存储结构
1、卡分为16个扇区,每个扇区由4块(块0、块1、块2、块3)组成,(我们也将16个扇区的64个块按绝对地址编号为0~63,存贮结构如图 10- 60所示.

2、第0扇区的块0(即绝对地址0块),它用于存放厂商代码,已经固化,不可更改。
3、每个扇区的块0、块1、块2为数据块,可用于存贮数据。
数据块可作两种应用:
l 用作一般的数据保存,可以进行读、写操作。
l 用作数据值,可以进行初始化值、加值、减值、读值操作。
4、每个扇区的块3为控制块,包括了密码A、存取控制、密码B。具体结构如下:

图 10- 61结构图
5、图 10- 61每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取控制。存取控制为4个字节,共32位,扇区中的每个块(包括数据块和控制块)的存取条件是由密码和存取控制共同决定的,在存取控制中每个块都有相应的三个控制位,定义如下:
| 块0: | C10 | C20 | C30 |
| 块1: | C11 | C21 | C31 |
| 块2: | C12 | C22 | C32 |
| 块3: | C13 | C23 | C33 |
三个控制位以正和反两种形式存在于存取控制字节中,决定了该块的访问权限(如进行减值操作必须验证KEY A,进行加值操作必须验证KEYB,等等)。三个控制位在存取控制字节中的位置,以块0为例:
对块0的控制:
bit 7 6 5 4 3 2 1 0
| 字节6 | C20_b | C10_b | ||||||
| 字节7 | C10 | C30_b | ||||||
| 字节8 | C30 | C20 | ||||||
| 字节9 |
( 注: C10_b表示C10取反 )
存取控制(4字节,其中字节9为备用字节)结构如下所示:
bit 7 6 5 4 3 2 1 0
| 字节6 | C23_b | C22_b | C21_b | C20_b | C13_b | C12_b | C11_b | C10_b |
| 字节7 | C13 | C12 | C11 | C10 | C33_b | C32_b | C31_b | C30_b |
| 字节8 | C33 | C32 | C31 | C30 | C23 | C22 | C21 | C20 |
| 字节9 |
( 注: _b表示取反 )
6、数据块(块0、块1、块2)的存取控制如下:
| 控制位(X=0..2) | 访 问 条 件 (对数据块 0、1、2) | ||||||
| C1X | C2X | C3X | Read | Write | Increment | Decrement, transfer, Restore | |
| 0 | 0 | 0 | KeyA|B | KeyA|B | KeyA|B | KeyA|B | |
| 0 | 1 | 0 | KeyA|B | Never | Never | Never | |
| 1 | 0 | 0 | KeyA|B | KeyB | Never | Never | |
| 1 | 1 | 0 | KeyA|B | KeyB | KeyB | KeyA|B | |
| 0 | 0 | 1 | KeyA|B | Never | Never | KeyA|B | |
| 0 | 1 | 1 | KeyB | KeyB | Never | Never | |
| 1 | 0 | 1 | KeyB | Never | Never | Never | |
| 1 | 1 | 1 | Never | Never | Never | Never | |
(KeyA|B 表示密码A或密码B,Never表示任何条件下不能实现)
例如:当块0的存取控制位C10 C20 C30=1 0 0时,验证密码A或密码B正确后可读;验证密码B正确后可写;不能进行加值、减值操作。
7、控制块块3的存取控制与数据块(块0、1、2)不同,它的存取控制如下:
| 密码A | 存取控制 | 密码B | ||||||
| C13 | C23 | C33 | Read | Write | Read | Write | Read | Write |
| 0 | 0 | 0 | Never | KeyA|B | KeyA|B | Never | KeyA|B | KeyA|B |
| 0 | 1 | 0 | Never | Never | KeyA|B | Never | KeyA|B | Never |
| 1 | 0 | 0 | Never | KeyB | KeyA|B | Never | Never | KeyB |
| 1 | 1 | 0 | Never | Never | KeyA|B | Never | Never | Never |
| 0 | 0 | 1 | Never | KeyA|B | KeyA|B | KeyA|B | KeyA|B | KeyA|B |
| 0 | 1 | 1 | Never | KeyB | KeyA|B | KeyB | Never | KeyB |
| 1 | 0 | 1 | Never | Never | KeyA|B | KeyB | Never | Never |
| 1 | 1 | 1 | Never | Never | KeyA|B | Never | Never | Never |
例如:当块3的存取控制位C13 C23 C33=1 0 0时,表示:
密码A:不可读,验证KEYA或KEYB正确后,可写(更改)。
存取控制:验证KEYA或KEYB正确后,可读、可写。
密码B:验证KEYA或KEYB正确后,可读、可写。

