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 正确后,可读、可写。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了