[Datasheet S50卡]NXP S50卡读写细节说明
S50卡也成为M1卡,可以理解为一个带射频功能的EEPROM,可以存储1KByte的卡片,分为16个区;
1、通讯过程
通过射频芯片提供能量给卡片,卡片供电后可以支持读写命令,加减值命令等;框图如下:
2、安全管理
2.1 制造商为每个设备编程了7字节UID或4字节NUID标识符
2.2 随机ID支持
2.3 相互三通身份验证(ISO/IECDIS9798-2)每个扇区单独设置两个密钥,以支持具有密钥层次结构的多应用程序
3、EEPROM
3.1 1kB,由4个块中的16个扇区组成(一个块由16个字节组成)
3.2 每个内存块的用户可定义的访问条件
3.3 数据保留时间为10年
3.4 支持200000次擦写
4、系统框图
5、通讯流程
5.1 防碰撞检测
同时有多张卡靠近读卡器,会检测到多个卡号;
5.2 选卡
选择其中的一个卡号,进行定向通讯;
5.3 三次身份认证
秘钥认证后才能进行卡片的操作,每个存储器有A、B两组秘钥,其中B秘钥的权限能够完全覆盖A秘钥;可以修改A秘钥的内容;
5.4 进行卡的操作,读、写、存储、加值、减值
读写数据与加值和减值的区别,在于卡片协议的定义,读写数据只是对卡片的某个字节进行读写;加减值操作,对存储的格式,卡片会做特殊处理;后续会讲;
6、三次认证秘钥流程
6.1 读取器指定要访问的扇区,并选择键A或B
6.2 从扇区中读取密钥和访问条件。然后卡片发送一个数字给读卡器认证(通过一个)。
6.3 使用密钥和其他输入来计算响应。响应,连同来自阅读器的随机认证,然后被传输到卡(通过两个)。
6.4 卡片通过与自己的认证进行比较来验证读卡器的反应,然后计算对认证的反应并将其传输(通过三次)。
6.5 读卡器器通过将卡片与自己的认证进行比较来验证卡片的响应。
认证完成后,读卡器与卡片之间的通讯会被加密。
7、存储
1024×8位EEPROM内存分为4个块的16个扇区。一个块包含16个字节。
7.1厂商信息块
7.2 数据块
每个扇区有3个数据块,分为读写块和值块;值块用于电子钱包,公交卡等,里面的金额进行加减值操作;
值块只能通过值块格式的写入操作生成值块:
值:表示已签名的4字节值。值的最低有效字节存储在最低地址字节中。负值以标准的2´补体格式存储。由于数据完整性和安全性,一个值存储三次,两次非倒置,一次倒置。
Adr:表示在实现强大的1字节备份管理时,可用于存储块的存储地址。地址字节存储四次,两次倒,非倒。在增量、递减、恢复和传输操作的过程中,地址保持不变。它只能通过写命令来更改。
根据这个图可以看出,值块能够存储的数据最大4个字节;内部存储格式有校验,04存储正常值,47存储取反数据,8~11存储正常值;地址也有存储,上面画横线的就是取反值;
7.3 扇区控制器
每个扇区的块3为整个扇区的秘钥区,存储A、B的秘钥内容;
操作类型主要分为:
访问权限
通过状态位做识别
看着是不是有点晕呢,还有这些状态位如果生成了,如何搞成16进制呢,计算总感觉有点麻烦。这个时候就会想到工具。还真有人做出了这个工具。
8、操作命令
每个命令手册都给出了示例:
比如:读取厂商ID
让读卡器安装这个报文发送,卡片就会返回对应的报文;
还可以通过手机,安装NXP公司的软件taginfo,前提是有NFC功能。
可以读取卡片中的内容做验证,方便开发。
支持文件导出,xml格式
更多linux知识点推荐:
【Linux文件系统】NFS文件系统如何生效
[Linux文件系统]文件系统的反解压操作镜像生产原始目录
[Linux字符驱动] DIDO 74HC595实现遥控遥信功能
[linux字符驱动]Watchdog如何躲过linux的启动时间
[Linux字符驱动] LED点灯试验
[Linux 驱动]模块加载RTX8025驱动
[linux kernel] 内核下RX8025对接系统时钟
[linux kernel]内核启动阶段控制IO口时序输出
[职场吐槽]如何缓解焦虑
[linux kernel] 内核下ksz8081驱动调试
[linux kernel] 内核下ksz9031驱动调试
[linux kernel]内核图形化裁剪配置
[linux kernel]内核移植过程记录
[linux kernel] 内核启动流程梳理
[linux 底层]u-boot EMMC驱动
[linux 底层]u-boot图形化裁剪配置
[Linux 底层]U-boot ksz9031网络驱动调试
[Linux 底层]U-boot调试命令使用技巧
[Linux 底层]U-boot编译移植
[Linux 底层]U-boot烧录脚本介绍SecureCRT
[Linux 底层]bootstrap移植裁剪及编译
[Linux 底层] 平台软件分层介绍
[Linux 驱动] RS485测试程序编写
[Linux 驱动] CAN测试程序编写
推荐阅读:
芯片手册解读 | Linux底层 | 职场吐槽 | C语言视频
关注微信公众号,回复“S50资料”,下载数据手册及工具软件。