WWT:Work Waiting Time

ATR:Answer To Reset,复位应答

etu =F/Df

1.     PSAM概述和应用

PSAM(PurchaseSecure Access Module):销售点终端安全存取模块

SAM(Secure AccessModule):安全存取模块

用于支持消费交易的SAM成为PSAM,用于支持充值交易的SAM成为ISAM

PSAM符合《中国金融集成电路(IC卡)PSAM卡规范》,

包括普通PSAM卡和高速PSAM卡。

PSAM符合以下标准及规范:

识别卡,带触点的集成电路卡标准

《ISO/IEC 7816-1/2/3/4》

《中国人民银行PSAM卡规范》

……….

支持多种通讯协议:接触界面支持T=0(字符传送)和T=1(块传送)通讯协议。

PASM常用于脱机交易的安全认证,比如我们一个客户,在用手持设备读取公交卡的时候,先和PSAM卡通信,以便确认这个手持机是否有资格从公交卡上扣钱,如果吻合才能扣钱

安装PSAM卡以后,该消费终端就获得了系统运营商的许可,有权鉴别卡片的真伪,有权从卡上的钱包扣款

PSAM卡,存放消费安全控制密钥并具有计算功能的特殊接触式CPU卡,此卡放置在收费车道的终端设备中,用于完成消费过程中用户卡和车道终端之间的安全认证功能。

2.     PSAM硬件设计

先来借用一张设计框图:

图1

2.1   TDA8007BHL简介

控制器通过TDA8007BHL的并行接口(D0~D7)

TDA8007BHL满足ISO 7816、GSM 11-11、EMV4.2和EMV2000所有的要求,依靠地址寄存器AD0~AD3,可以对非复用(non-multiplexed)的8位数据总线编址。通过复用访问可以对TDA8007BHL/C3进行编址。内置的ISO UART和超时计数器,就算是非实时限制的高波特率情况下,也便于使用。

主要特性如下:

(1)  通过8位并行接口控制和通讯,兼容复用和非复用的存储器访问。,其中TDA8007BHL/C3可以通过复用内存访问来编址。

(2)  特有的ISO UART和并行访问输入/输出用于自动的常规处理,通过频率或是分频因子的编程,可以获得不同的波特率。对T=0协议进行字符级的错误管理和附加有保护时间寄存器。

(3)  接收模式的FIFO可以接收1到8个字符。

(4)  接收模式和发送模式下都有奇偶校验计数器,在发送模式下可用于重发。

(5)  两个VCC发生器:可以提供5V(A类)、3V(B类)和1.8V(C类)的供电电压(为卡供电)。

(6)  双卡时钟可到10MHz,提供3次同步倍频(with three times synchronous frequency doubling).

(7)  卡断电模式下支持卡时钟停止(高或低电平)或是1.25MHz(内部振荡器)。

(8)  通过独立的序列发生器提供自动激活和停活序列。

(9)  遵循ISO 7816和EMV4.2,支持异步协议T=0和T=1。

(10) 全能的24位超时计数器为复位应答(Answer To Reset:ATR)和等待时间提供处理。

(11) 特定基本时间单元(Specific Elementary Time Unit:ETU)计数器提供块保护时间(Block Guard Time:BGT):22 in T=1和16 in T=0。

(12) 接收模式下两个字符的最小延时。

TDA8007BHL的原理图涉及如下:

图2

应该去掉此图的R816和R818,以便判断卡的插拔这些动作。

2.2   TDA8007BHL主要引脚

(1)  PRES1和PRES2:用于指示是否插入SAM卡,如果插入为高电平,但我们这里没有用到,直接接到VDD-TDA8007B(3.3V)。

(2)  RST1和RST2:卡1和卡2的复位输出引脚,用于复位SAM卡。

(3)  I/O1和I/O2:连接卡的ISO C7引脚,用于和卡进行读写数据。

(4)  CLK1和CLK2:卡1和卡2的时钟引脚,用于为卡提供时钟。

(5)  /RD:读或是写选择,高为读,低为写。

(6)  /WR:使能引脚,和/CS功能一样(低电平选中)。

(7)  /CS:片选,低电平选中。

(8)  ALE:TDA8007BHL/C4 NC,对于TDA8007BHL/C3,如果是复用配置,则为地址锁存使能引脚,如果为非复用配置,直接连接到VDD。

(9)  /INT:NMOS中断输出(低电平有效)。

(10) INTAUX:辅助的中断输入。

(11) D0~D7:数据0~7的输入/输出引脚,对于TDA8007BHL/C3,如果在复用配置,则复用为地址0~7引脚。

2.3   TDA8007BHL读时序图

图3

读操作时,RD=高电平,当CS和WR都为低电平时,根据地址信息被选中的数据在D0~D7总线上有效,此时主控就读取出来了。

2.4   TDA8007BHL写时序图

图4

写操作时RD=低电平,当CS和WR都为低电平时,总线上的数据被写入到TDA8007BHL芯片中。

2.5   控制寄存器

TDA8007BHL有两个完整的可以驱动卡1和卡2的模拟接口,这两个卡数据的读写共享相同的ISO UART,卡3数据的读写需要外部接口(比如使用一个TDA8020或是TDA8004),也可以共享这个ISO UART。也就是说TDA8007和卡实际上是通过UART来通讯的,而且是只有一个I/O,所以在同一时刻,只能往卡写数据,或是从卡读取数据。

图5

卡1、卡2和卡3有专门的用于设置ISO UART参数的寄存器,如下图:

图6

这些寄存器如下:

ProgrammableDivider Register(PDR):可编程分频器寄存器

Guard TimeRegiser(GTR):保护时间寄存器

UART ConfigurationRegister1(UCR1):UART配置寄存器1

UART ConfigurationRegister2(UCR2):UART配置寄存器2

ClockConfiguration Register(CCR):时钟配置寄存器

由上图可以看出卡1和卡2也有自己专用于控制它们电源和时钟配置的寄存器,卡3的PCR(Power Control Register)由外部控制,PCR寄存器也用于读或是写辅助卡触点C4和C8的值。

卡1、卡2或是卡3通过CSR(Card Select Register)选中,当一个卡被选中,ISO UART就可以使用相应的参数(比如CSR寄存器的SC1~SC3)。CSR寄存器还包含了用于复位ISO UART的位/RIU(=0复位ISO UART)。上电之后这位被复位,而且在开始任何一个卡之前这位必须被设置为1,在需要的时候软件可以设置它。

当卡具体的参数被编程后,UART可能使用下列的寄存器:

UART ReceiveRegister(URR):UART接收寄存器

UART TransmitRegister(UTR):UART发送寄存器

UART StatusRegister(USR):UART状态寄存器

Mixed StatusRegister(MSR):混合状态寄存器

在接收模式下,一个支持1到8个字符的FIFO可以被使用,这可通过FCR(FIFO Control Register)来配置FIFO的具体长度。在发送模式下,FCR也可用于NAK(无应答)字符的自动发送。

HSR(HardwareStatus Register)给出电源电源的状态、硬件保护的状态和卡是否有移除的状态。HSR和USR在它们一些位改变时,通过/INT引脚发出中断。

MSR寄存器不能产生中断但可以使用查询模式来做一些操作,在这种情况下,USR和HSR寄存器的一些中断源将被屏蔽。

在往TOR1(Time-Out Register)、TOR2和TOR3寄存器写入一些ETU(Elementary Time Unit),超时后一个24位超时计数器就给出一个中断,这可帮助主控在处理不同实时任务(ATR、WWW1、BWT等等)时比较有用。这个计数是通过配置TOC(Time-Out Configuration)寄存器来完成的。可以用作一个24位计数器或是一个16位的外加一个8位的计数器。一旦计数输入被写入,或是检测到I/O的START位,或是作为自动装载,都可使每个计数器就开始计数。

图7

2.6   ISO7816Security(安全性)

两个特定序列发生器确保卡激活(activation)和失活(deactivation)正确的顺序(sequence),时钟通过内部振荡器的分频因子(division ratio)来定义。

只有在卡存在(PRES引脚为高电平,通过寄存器MSR的PR1和PR2可以判断)和供电正确(voltage supervisor not active)的情况下,才有可能激活卡(通过设置PCR的START=1来激活)。可以通过寄存器HSR的PRL1和PRL2来通知主控卡插拔的动作

在通讯过程中,如果卡拔出,或是短路(short-circuit),那么序列发生器执行一个自动的紧急失活操作。在电源电压下降(a supply voltage drop)或是过热(overheating)的情况下,两个卡自动失活。这时HSR寄存器被更新和/INT引脚为低电平(低电平触发中断),这样系统主控就可以知道发生了哪些事情了。

2.7   Activationsequence(激活顺序)

卡在没有激活的情况下,引脚VCC、CLK、RST、C4X、C8X和I/O引脚为低电平和对地低阻抗、升压转换器(step-up converter)停止工作。

当所有条件满足(供电电压、卡在位和没有硬件问题),系统主控就可以开始一个在位的卡的激活顺序。在选择卡和离开UART复位模式后,接着配置计数器(counters)和UART所需要的参数,在t0时刻可以设置PCR寄存器的START位

图8

2.8   Deactivationsequence(失活顺序)

当和卡的通讯完成之后,主控在t10时刻重置(reset)PCR寄存器的START位,电路然后就执行一个自动失活序列,如下图:

图9

2.9   涉及的几个频率

图10

fXTAL:晶体振荡器频率,给TDA8007BHL提供时钟,这里为14.785MHz。

fint:内部振荡器频率,给TDA8007BHL的step-up converter(升压转换器)提供时钟。

fCLK:时钟频率,给卡提供时钟。

3.     PSAM驱动实现

3.1   激活的流程图

图11

3.2   复位及复位应答

图12

此过程需要注意几点:

(1)  复位ISO UART

当复位时,会把UART大部分寄存器重置为它们原始的数值。在任何激活之前必须先重置/RIU(=0)引脚,且要保证逻辑0至少10ns以上。任何UART发生操作之前,必须通过软件先设置/RIU=1。

(2)  设置FIFO长度

设置FSR寄存器的FL[2:0]=111,就是说当FIFO有8个字节的数据后就会触发。

(3)  设置奇偶校验统计

对于接收模式,PEC[2:0]决定允许反复接收的次数。PEC[2:0]=000表明发生1次奇偶校验错误后就设置USR寄存器的PE=1,PEC[2:0]=111在发生8奇偶校验错误后就设置USR寄存器的PE=1。

在T=0协议下,如果在编程错误计数达到PEC[2:0]设定的值之前收到一个正确的字符,错误计数器将被重置。

如果PEC[2:0]设定的奇偶校验错误统计值达到之后就设置USR寄存器的PE=1,直到USR寄存器被读取。

对于发送模式,如果一个发送的字符没有收到卡相应的应答,那么TDA8007BHL/4就会自动重发PEC[2:0]规定的次数,这个字符保持有效的时间为15个ETU。

(4)  设置可编程分频寄存器(PDR)

图13

CKU=0,选择fCLK;CKU=1,选择2fCLK。PSC=0,则PRESCALER=31;PSC=1,则PRESCALER=32。

(5)  设置串口配置寄存器2(UCR2)

图14

我们fXTAL=14.745MHz,卡的fclk= fXTAL/4=3.686MHz(CCR寄存器的AC[2:0]=010决定的),结合图13,应该设置PSC=31

(6)  设置UCR1的软件约定设置SS(Software convention Setting)

为了自动约定监测(automatic convention detection)和过早应答的监测(early answer detection),在ATR之前需要先设置SS=1。在接收到初始字符TS(复位应答的第1个字节)后之后的10.5ETU时间点,硬件会自动重置此位。

(7)  获取混合状态寄存器MSR的FE判断是否有接收到数据

只要接收到一个字符到FIFO中,FE就被设置为1。

3.3   停活

图15

此过程需要注意几点:

(1)  卡的选择

复位后默认情况下是没有选择任何卡的,而且每个卡的选择都是一次选择一个,也就是CCR的SC1、SC2和SC3一次只能设置其中一位。

(2)  卡的停活

先选中卡之后,设置PCR寄存器的START=1时,被选中的卡就会停活。在紧急停活的情况下,START自动被设置为1,为了停活选中的卡,只需要设置START。

参考:

PSAMSAM

http://www.cnblogs.com/mfy12/articles/1625991.html

PSAM卡的应用操作方法

http://blog.csdn.net/jilong17/article/details/8766901

PSAM读卡芯片TDA8007BHL开发的更多相关文章

  1. 功耗极低非接触 13.56mhz读卡芯片:SI522

    众所周知13.56mhz是高频,一般用于防伪,做到成品非常薄.在智能门锁以及RFID读卡器是非常多人采用的,不管是在读卡距离.读卡灵敏度都是非常好的.现在智能门锁的竞争性很大,大多厂商及方案商都慢慢往 ...

  2. OBU设备非接触式读卡方案:SI522

    传统收费站将成历史!全部转为ETC系统 当高速人工收费已经成为我们驾驶出行的习惯后,我们发现,高速人工收费带来低效率.长等待以及落后性等缺点逐渐给人们出行带来不便.伴随着我国汽车保有量的逐年递增,高速 ...

  3. 抗干扰性极强非接触式读卡13.56mhz芯片:SI522

    由于智能门锁产品不断地火爆,市场上的不断出现破解的方法.对此中科微联合深圳市动能世纪科技有限公司不断满足市场需求,推出一款抗干扰性极强的13.56mhz芯片. 该芯片出了抗干扰性强以外还直接PIN2P ...

  4. 说说读卡应用那点事儿,以SCL010为例

    前一阵子的项目, 跟读卡应用有关,这篇博客算是我学习智能卡方面知识的而一个总结,也可以看作这个领域的一个很简单的简介,他写得很不书面,更像是沿着我自己认识过程的总结.所以这里面有很多我自己理解的地方, ...

  5. 基于335X平台Linux交换芯片驱动开发

    基于335X平台Linux交换芯片驱动开发   一.软硬件平台资料 1.开发板:创龙AM3359核心板,网口采用RMII形式. 2.Kernel版本:4.4.12,采用FDT 3.交换芯片MARVEL ...

  6. 多功能扫描打印读卡一体手持POS终端

    以往便利店或者超市,前台那个笨重的POS机和站在POS机后的收银员.传统的零售店中,笨重的POS机随处可见. 一个顾客要结账,就需要通过POS机.小票打印机.刷卡器等的配合才能实现.店面需要盘点,整理 ...

  7. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  8. IC卡读卡器web开发,支持IE,Chrome,Firefox,Safari,Opera等主流浏览 器

    IC卡读卡器在web端的应用越来越多,但是早期发布的ocx技术只支持IE浏览器,使用受到了很多的限制.IC卡读卡器云服务的推 出,彻底解决了以上的局限,使得IC卡读卡器不仅可以应用在IE浏览器上,还可 ...

  9. NFC读卡APP

    # 设计文档 ### 简介----------------------------- 这个APP的功能是使用手机的NFC读卡器功能,做到读取卡片支持M1卡和CPU卡. ### 功能列表-------- ...

随机推荐

  1. Tradesy | IT桔子

    Tradesy | IT桔子 Tradesy www.tradesy.com   认领 关注 分享

  2. [置顶] Android的IPC访问控制设计与实现

    3.3.1 IPC钩子函数设计与实现 IPC Binder是Android最重要的进程间通信机制,因此,必须在此实施强制访问控制. 1. 修改secuirty.h 打开终端shell,输入指令“cd ...

  3. openwrt上网配置的一些理解(四)

    这次要解决的问题是3g上网和wan口上往可以随意切换,当然能够叠加也是好事,不过这不是我关心的.下面还是修改3个文件network,firewall,multiwan.首先在network中加入界面配 ...

  4. udp 不需要 listen

    accept()不是监听,accept()是接受新连接.listen()是进入监听状态,表示愿意接收连接请求.listen之后有连接请求就将其放到队列中,accept()时把新连接请求从队列中取出,建 ...

  5. 前端 JavaScript基础

    前言 JavaScript 是属于网络的脚本语言,被数百万计的网页用来改进设计.验证表单.检测浏览器.创建cookies,以及更多的应用. 一.如何编写 1.存在形式 方式一:存在js文件中,即写入j ...

  6. 知问前端--Ajax

    本节课主要是创建一个问题表,将提问数据通过 ajax 方式提交出去.然后对内容显示进行布局,实现内容部分隐藏和完整显示的功能. 一.Ajax 提问创建一个数据表:question,分别建立:id.ti ...

  7. javascript sort 用法

    <html> <head> <title></title> <script type="text/javascript" sr ...

  8. 最全C语言笔记回顾

  9. 《第一行代码》学习笔记34-服务Service(1)

    1.服务是Android中实现程序后台运行的解决方案,适用于执行不需要和用户交互而且要长期运行的任务. 2.服务的运行不依赖于任何用户界面,或切到后台,或用户打开了另外一个应用程序,服务能够保持正常运 ...

  10. Querylayer(查询图层) - 浅谈

    Querylayer(查询图层)是通过 SQL 查询定义的图层或独立表.通过 Querylayer 可将空间信息和非空间信息都存储在DBMS 中,从而使这些信息可以轻松地整合到 ArcMap 中的各 ...