T5557 读写卡详解
T5557的基本信息就不在这里详细介绍,不了解的可以去看T5557的收据手册。
一上来直接开始讲操作

存在七种操作,我们重点介绍四种,Standard Write,Protected Write,Direct access(PWD = 0)和Direct access(PWD = 1)。
Standard Write和Direct access(PWD = 0)在T5557卡没有设置密码模式(Page0的Block0的第28位PWD设置为0)的时候使用,此为无密码模式,修改卡内的数据无需任何权限。
Protected Write和Direct access(PWD = 1)在T5557卡密码模式Page0的Block0的第28位PWD设置为1)下使用,此为有密码模式,修改卡内数据需要验证密码的正确性。
下面将详细介绍用白卡完成以上的四种操作。
拿到白卡的第一步是配置Page0的Block0配置寄存器(Mode Register)详见Figure 3,默认值为‘00 08 80 E8’h,表示RF/32、曼彻斯特编码,无密码模式。
需要将模式寄存器的修改为‘00 14 80 00’h,表示RF/64、曼彻斯特编码。如需设置密码求将第28位设置为1。
初始化函数如下:
void Card_initialization()//初始化卡片
{
Start_Gap();
SendOpcode(StandardWrite10); //10 2
SendLock(LOCK00); //0 1
SendByte(InitT55xxDataArr[0]); // 4
SendByte(InitT55xxDataArr[1]); // 4
SendByte(InitT55xxDataArr[2]); // 4
SendByte(InitT55xxDataArr[3]); // 4
SendAddress(BLOCK0);
}

Standard Write:
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
// 函数名: Standard_Write_T5577(uchar lock,uchar opcode,uchar data_arr[4],uchar block)
// 参 数: lock为要发送的锁定位,block为待写入数据的块编号数 ,opcode为待发送的操作码,data_arr[4]为要发送的4字节数据
void Standard_Write_T5577(unsigned char opcode,unsigned char lock,unsigned char data_arr[4],unsigned char block)
{
Start_Gap();
SendOpcode(opcode); //10 2
SendLock(lock); //0 1
SendByte(data_arr[0]); // 4
SendByte(data_arr[1]); // 4
SendByte(data_arr[2]); // 4
SendByte(data_arr[3]); // 4
SendAddress(block); // 3
}
Protected Write:
void Protect_Write_T5577(unsigned char opcode,unsigned char lock,unsigned char data_arr[4],unsigned char block)
{
Start_Gap();
SendOpcode(opcode); //10 2
SendPassword();
SendLock(lock); //0 1
SendByte(data_arr[0]); // 4
SendByte(data_arr[1]); // 4
SendByte(data_arr[2]); // 4
SendByte(data_arr[3]); // 4
SendAddress(block); // 3
}
Direct access(PWD = 0):
void Read_0_Page_block(unsigned char block) //块读0页
{
Start_Gap();
SendOpcode(StandardWrite10); //10 2
SendLock(0X00); //0 1
SendAddress(block);
}
Direct access(PWD = 1):
void Protect_Read_0_Page_block(unsigned char block) //保护读读0页 此时PWD需要设置为1
{
Start_Gap();
SendOpcode(StandardWrite10); //10 2
SendPassword(); //此密码根据卡号匹配数据库获得
SendLock(0X00); //0 1
SendAddress(block);
}
T5557 读写卡详解的更多相关文章
- Linq之旅:Linq入门详解(Linq to Objects)
示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解
前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...
- Java 字符串格式化详解
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
- Android Notification 详解(一)——基本操作
Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...
- Android Notification 详解——基本操作
Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...
- Git初探--笔记整理和Git命令详解
几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
- Node.js npm 详解
一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...
随机推荐
- gulp入门指南
1. 全局安装 gulp: $ npm install --global gulp 2. 作为项目的开发依赖(devDependencies)安装: $ npm install --save-dev ...
- linux服务器,发现大量TIME_WAIT
linux服务器,发现大量TIME_WAIT 今天登陆linux服务器,发现大量TIME_WAIT参考资料:http://coolnull.com/3605.html 酷喃|coolnull| » 大 ...
- HDU5542 BIT优化dp
http://acm.hdu.edu.cn/showproblem.php?pid=5542 题意:求严格递增的长度为M的序列的组数. 当dp的优化方案不那么容易一眼看出来的时候,我们可以考虑先写一个 ...
- Python继承扩展内置类
继承最有趣的应用是给内置类添加功能,在之前的Contact类中,我们将联系人添加到所有联系人的列表里,如果想通过名字来搜索,那么就可以在Contact类添加一个方法用于搜索,但是这种方法实际上属于列表 ...
- GO 中输出打印的常用函数
1.Println 可以打印字符串和变量(任何类型) println函数在输出后自动增加一个换行 例: a:=10 b:=“string” fmt.Println(a) //right fmt ...
- jQuery使用(二):DOM样式操作和属性操作
DOM取值与赋值 .html() .text() .size() 1.html()方法类似原生DOM的属性innerHTML,不传入参数的时候默认为取指定元素内的HTML内容,包含前后空白文本结构,以 ...
- PHP7 网络编程(一)多进程初探
准备 我们都知道PHP是单进程执行的,PHP处理多并发主要是依赖服务器或PHP-FPM的多进程及它们进程的复用,但PHP实现多进程也意义重大,尤其是在后台Cli模式下处理大量数据或运行后台DEMON守 ...
- Golang入门教程(四)变量声明
Go 语言变量名由字母.数字.下划线组成,其中首个字母不能为数字. 一.Go的语言结构 1.Go的语言基础部分由这几个部分组成 包声明 引入包 函数 变量 语句&表达式 注释 比如下面这个简单 ...
- Python Thrift 简单示例
本文基于Thrift-0.10,使用Python实现服务器端,使用Java实现客户端,演示了Thrift RPC调用示例.Java客户端提供两个字符串参数,Python服务器端计算这两个字符串的相似度 ...
- 使用模拟Table解决span重叠问题
<div id="test"> <div > <span>adfafadsfadfa</span> <span style=& ...