1 tm卡简介
tm(touch memory)卡是美国dallas公司的专利产品。它采用单线协议通信,通过瞬间碰触完成数据读写,既具有非接触式ic卡的易操作性,又具有接触式ic卡的廉价性,是当前性价比最优秀的ic卡之一。它的外形类似于一个钮扣(button)电池,可镶嵌于卡片、钥匙扣等物体上。
tm卡通过一个多功能器将数据线、地址线、控制线和电源线合并为1根线,实现单线通信。当主机加电时,tm卡通过500 kω和50 ω阻抗之间的切换来响应主机,用信号被拉低的时长(长或短)来表示数字逻辑(长为1,短为0)。由于阻抗切换的幅度为10 000∶1,因此,触点的接触电阻不会影响数字信号的辨识。
2 1wire通信协议
单总线即只有1根数据线, 系统中的数据交换、控制都由这根线完成。设备(主机或从机)通过一个漏极开路或三态端口连至该数据线, 以允许设备在不发送数据时能够释放总线, 而让其他设备使用总线。单总线通常要求外接一个约为4.7 kω 的上拉电阻, 这样, 当总线闲置时, 其状态为高电平。主机和从机之间的通信可通过3个步骤完成: 初始化1wire 器件;识别1wire 器件;交换数据。由于它们是主从结构,只有主机呼叫从机时, 从机才能应答, 因此主机访问1wire 器件都必须严格遵循单总线命令序列, 即初始化、rom 命令、功能命令。如果出现序列混乱,1wire 器件将不响应主机(搜索rom 命令,报警搜索命令除外)。
smc1990a1是具有工厂激光刻度的64位rom id码,其中包括48位的序列号、1个8位的crc编码和1个8位的产品系列号。数据遵循单总线协议传输,用于读和写的电源由数据线本身提供,而不需要提供外部电源。
3 smc1990a1的等效替换
单总线技术具有节省i/o口线资源,线路简单,硬件开支少,成本低,便于总线扩展和维护等优点。在分布式测控系统中有着广泛的应用。在实际应用过程中,可能会出现tm卡丢失和损坏的情况,如果发生此类情况,往往需要根据一个新tm卡来设置多个采集点的权限。如果采集点设置得很多,将浪费大量的人力。此时,利用单片机来替换已丢失或损坏的tm卡就显得很有必要。
3.1 系统硬件组成
系统采用at89c51作为控制器,并采用24 mhz晶振。为了能尽量适应标准的单总线通信协议,晶振频率应尽量高。考虑到单总线通信协议所有的传输都是由主机发起的,因此为了尽快地响应主机,采用中断处理。选择at89c51的int0(即p3.2)作为smc1990a1等效替换的正极。图1为tm卡的等效替换示意图。
图1 tm卡的等效替换
3.2 系统软件设计
对于smc1990a1的等效替换,主要是对其时序的分析。对于smc1990a1子设备,主要的编程是针对主机而言的,传输都是由主机发起的。现在改为单片机模拟smc1990a1子设备(现称为“从机”)。
图2 初始化时序
首先,初始化时序,如图2所示。主机首先发送一个复位脉冲,历时tretl(最短为480 μs的低电平信号),然后释放总线并进入接收状态。从机在检测到总线的上升沿后,等待tpdh时间后,从机拉低总线发出存在脉冲,历时tpdl(低电平,持续60~240 μs),然后释放总线。释放总线通过拉高总线实现。
对应于从机,初始化时序的中断服务程序流程如图3所示。
图3 初始化时序的中断服务程序流程
下面是主机写0和写1时序。在初始化时序后,当主机总线从高电平拉至低电平时,就产生写时间隙。在开始15 μs之内,应将所需写的位送到总线上,从机在开始后15 ~60 μs间对总线采样。若为低电平,写入的位是0,如图4所示;若为高电平,写入的位是1,如图5所示。连续写多位间的间隙trec应大于1 μs。
图4 主机写0时序
图5 主机写1时序
对应于从机,是等待主机命令。从机等待主机命令的中断服务程序流程如图6所示。
图6 从机等待主机命令的中断服务程序流程
最后是主机读数据时序,如图7所示。主机总线在开始时刻从高电平拉至低电平时,总线只需保持低电平1~7 μs。之后在tlowr时刻释放总线,一般在trdv时刻采样总线(15 μs处),读时间隙在tlowr与trdv之间有效。从机必须在trdv时刻前拉高或拉低总线,主机在trdv时刻采样,并在60~120 μs内释放总线。
图7 主机读数据时序
对从机来说,则为发送64位id处理。程序处理的难点在于从机必须在15 μs之前拉高或拉低总线,以供主机在15 μs处采样总线。程序通过判断位地址00h处的状态来实现此功能。通过判断位地址01h处的状态来确定发送位0或发送位1。从机发送64位id处理的中断服务程序流程如图8所示。
图8 从机发送64位id处理的中断服务程序流程
在完整地实现一次rom功能的过程中,从机首先等待主机发送的复位脉冲,待检测到后发图9实现rom功能的流程送存在脉冲应答。随后,从机开始接收主机发送的rom命令,并将其保存,以判断随后的操作。最后,从机发送tm卡的64位标识码,完成一次rom命令的执行。实现rom功能的流程如图9所示。
单片机的汇编程序如下:
org0000h
ajmpinit//跳到init段
org0003h
ajmpjudge//跳到中断服务程序
init: //初始化
movdptr,#id//id表地址
movr5,#001h
movr7,#000h
clr00h
setb01h
setbp3.2
lcalldelay10s
clrp3.2//拉低总线叫醒主机
lcalldelay100us
setbp3.2
setbea
setbit0
setbex0
main: ajmpmain//主循环
judge:clrex0//判断执行动作,关中断
jnb00h,secondj//跳到二次判断
id_in:jb01h,send1//从机发送tm卡64位标识码
clrp3.2//发送位0
send1:setbp3.2 //发送位1
lcalldelay30us
mova,r5//r5循环左移
rla
movr5,a
mova,#00h
movca,@a+dptr
anla,r5
clr01h//设置01h状态
jzrelease1
setb01h
release1:setbp3.2
mova,r5
anla,#080h//判断字节发送完否
jzintend
incdptr
ajmpintend//跳到中断结束
secondj:mova,r7//二次判断
jzwaitreply//跳到执行应答判断是否命令接收结束
anla,#008h
jzwaitorder//跳到执行接收命令
setb00h
waitorder: lcalldelay15us//接收命令
nop
nop
mova,p3//采样p3.2
anla,#004h
jzsave_r6
mova,#001h
save_r6:
orla,r6 //保存命令到r6
rra
movr6,a
rloop1:
mova,p3//判断主机的发送状态,是否返回
anla,#004h
jzrloop1
ajmpintend//跳到中断结束
waitreply://执行应答
rloop:mova,p3//判断主机的复位信号
anla,#004h
jzrloop
lcalldelay30us
clrp3.2//从机拉低电平应答
lcalldelay150us
setbp3.2//释放总线
nop
nop
nop
nop
intend:
incr7
clrie0
setbex0//开中断
reti//中断返回
id:db001h//id表
db0c3h
db04dh
db057h
db033h
db022h
db000h
db0d2h
本文代码在实际运用中得到了很好的验证,能够稳定地替代smc1990a1实现tm卡的rom功能,极大地方便了权限管理人员用于丢失或损坏的tm卡的权限管理。
AI加速生产力 戴尔推出英特尔移动超能版笔记本Latitude 9510
魅族召开媒体沟通会,探讨未来发展方向
首批沃尔沃XC40纯电动汽车启动交付
中国联通将面向用户开放号码标记清除一站式查询与清除服务
ospf的稳定状态有几种
1-wire系统中TM卡的单片机等效替换
基于CAN/RS485双层网络的远程抄表系统设计
电力行业汽轮机油颗粒度检测的必要性
Xilinx宣布CCIX联盟成员增长3倍并推出相关规范
温度控制器的原理及分类说明
为功能原型系统中添加I/O,应避免哪些问题
芯片制造过程完整流程
回收宝发布“年度最佳理财产品”
量子计算机能否破解比特币密码学的难点
芯耀辉将继续在半导体接口IP领域创新发展
基于TS101S芯片实现雷达信号处理系统的应用设计
MAGMA无人机使用超音速吹气实现“无襟翼飞行”
MIDI接口定义和游戏杆接口定义图
中国移动发布TD-SCDMA制式的Android智能手机锐合X3系列
特斯拉提速自主研发雷达传感器 不惜挖角对手德尔福