UID卡细节操作介绍

概述:STM32端口模拟SPI驱动RC522模块,对S50卡进行读、写、加、减操作。该处仅介绍操做卡操作的理论知识,细节操作。

M1卡的理论介绍:

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

2.第 0 扇区的块 0(即绝对地址 0 块),它用于存放厂商代码,已经固化,不可更改。

3.每个扇区的块 0、块 1、块 2 为数据块,可用于存贮数据。

   数据块可作两种应用

   *用作一般的数据保存,可以进行读、写操作

   *用作数据值,可以进行初始化值、加值、减值、读值操作

4.每个扇区的块 3 为控制块,包括了密码 A、存取控制、密码 B。具体结构如下

   

 

5.每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取
控制。存取控制为 4 个字节,共 32 位,扇区中的每个块(包括数据块和控制块)的
存取条件是由密码和存取控制共同决定的,在存取控制中每个块都有相应的三个控
制位,定义如下:
块 0: C10 C20 C30
块 1: C11 C21 C31
块 2: C12 C22 C32
块 3: C13 C23 C33
三个控制位以正和反两种形式存在于存取控制字节中,决定了该块的访问权限(如
进行减值操作必须验证 KEY A,进行加值操作必须验证 KEY B,等等)。三个控制
位在存取控制字节中的位置,以块 0 为例:

 


6、数据块(块 0、块 1、块 2)的存取控制如下:

例如:当块 0 的存取控制位 C10 C20 C30=1 0 0 时,验证密码 A 或密码 B 正确后可读;
验证密码 B 正确后可写;不能进行加值、减值操作。

注1:数据的读写,在设置方式下,密码正确的情况下,就可以进行正常的读写操作。

注2:要实现数据块数据的自动增减操作,则该数据块中的数据必须满足以下格式。

这里需要注意的是,当前值里面放的数据是小端模式,比如说你的当前值为0x00000123,在数值块里面就得写为 23 01 00 00 。以这种格式存放数据。后面的地址值表示你当前块的地址。

 假设:扇区1块4的控制位C10 C20 C30=0 0 0 时,验证密码 A 或密码 B 正确后可读,验证密码 A 或密码 B 正确后可进行加值、减值操作;为当前值0x00000123。需要对块4中数据进行加值、减值操作。块4中的数据为:

假如我们对块4的数据进行加1操作,操作完成后的数据为:

对值0x00000123进行加1操作后,数据变为了0x00000124.在满足块数据加减格式的情况下,系统自动完成了数据的更改,不是自己去计算写入的。

假如块4中的数据不满足加减的数据格式,但是我们需要对块4从0或者其他数进行加减的操作,那么我们需要先将块4中的数据更改为加减操作的格式,否则,加减操作是不会成功的。

我们从0开始对块4进行增加操作,而块中数据不是加减格式的,我们加需要写入数据为0的格式,然后再进行加操作。数据格式如下


7、控制块块 3 的存取控制与数据块(块 0、1、2)不同,它的存取控制如下:

例如:当块 3 的存取控制位 C13 C23 C33=1 0 0 时,表示:
密码 A:不可读,验证 KEYA 或 KEYB 正确后,可写(更改)。
存取控制:验证 KEYA 或 KEYB 正确后,可读、可写。
密码 B:验证 KEYA 或 KEYB 正确后,可读、可写。

 

posted @   碧霄长博  阅读(1592)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示