博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Sim Module Profile
阅读量:5967 次
发布时间:2019-06-19

本文共 2082 字,大约阅读时间需要 6 分钟。

按照AT命令的规范,普通的AT命令在命令发送后到收到应答期间,不能收发其他AT命令.

本实施例中,由于SIM卡数据AT命令的收发时间是不定的,所以另外启用了一个线程(第一线程)专门处理SM卡数据AT命令(SM卡的交互命令),与普通AT命令区分开来,

保证在任何时候都可以处理SM卡数据的AT命令。

具体来讲,SIM卡数据的AT命令由第一线程进行处理,普通AT命令由第二线程进行处理,当第一线程和第二线程同时存在时,将第二线程进行压栈,优先处理第一线程。

当第一线程处理完毕后,再将第二线程出栈以处理第二线程。这样就很好地解决了当第一线程在处理SM卡数据的AT命令和第二线程在处理普通AT命令同时存在时发生的冲突问题。

—般发送给SIM卡命令后,一定会收到SIM卡返回的结果。但是,由于SIM卡和通讯模块不是直接连接的,无论采用其他什么方式,数据的传输都不可能100%成功。

在传输过程中,有可能会出现数据丢失问题,在这种情况下,则就收不到SIM卡返回的结果,为了处理数据在传输时出现丢失的问题,为此,本实施例中,增加了 SIM卡数据的超时重传机制。

当发出SIM卡数据的AT命令后在一设定时间内未收到应答,则重新发送SIM卡数据的 AT命令;当连续发送设定次数仍未收到应答时,则注册网络以对后续的命令不进行响应。

本实施例中,上述设定时间为5秒,设定次数为三次,当然,根据实际需要可对设定时间和设定次数进行调节。

具体来讲,当第一次发出SIM卡数据的AT命令后在5秒内未收到应答, 则重新发送SIM卡数据的AT命令,

当第二次发出SM卡数据的AT命令后在5秒内未收到应答,则重新发送SM卡数据的AT命令,

当第三次发出SM卡数据的AT命令后在5秒内未收到应答,也即连续发送三次仍未收到应答,则表示SIM卡的连接断开,

这时通讯模块去注册网络,告知网络此时SM卡的连接不正常,以对后续的命令不进行响应。

这种超时重传机制解决了传输时可能造成的SIM卡数据丢失问题。

在SIM卡进行复位时,对SIM 卡进行初始化。当SIM卡收到SIM卡复位命令后,SIM卡开始初始化,并进行简化的产生复位应答数据并发送。

本实施例中,复位应答包括ATR(Answer To Reset,复位响应)和PPS (Protocol and Parameter Selection,协议参量选择)。

本实施例中,ATR和PPS数据交互的过程按照将第一格式的数据或命令转换成第二格式的数据或命令的方式进行简化的复位应答的。

例如将远端的ATR数据转换成ATR数据的AT命令,并通过网络将ATR数据的 AT命令传输到近端,在近端将ATR数据的AT命令转换成ATR数据;

将近端的PPS数据转换成PPS数据的AT命令,并通过网络将PPS数据的AT命令传输到远端,在远端将PPS数据的 AT命令转换成PPS数据。

本实施例中,上电复位,原则是先接通SM卡触点,后启动冷复位,若冷复位失败, 启动热复位,若热复位也不成功,则释放触点并报错。

冷复位或热复位成功后,SIM卡应输出 ATR (即复位响应)。ATR是指SIM卡通过一系列的字符串来作出响应的一种行为,也称响应复位,

SM卡在最初被终端复位后,通过一串ATR来做出响应。这些字符包括一个初始字符 TS,然后跟随有最多32个附加字符。

这些字符一起为终端提供如何与SM卡进行后续工作通信的信息。本步骤中,进行ATR过程的数据交互,也就是说当SM卡复位命令后发送ATR。

X技术网 原文链接:http://www.xjishu.com/zhuanli/62/201210445810.html

SIM ATR:

接口字节采用逐层嵌套的方式来表示的,第一层TA1、TB1、TC1、TD1是否存在由T0的高4位决定.
第二层TA2、TB2、TC2、TD2是否存在则由TD1的高4位决定.
依此类推,每层的TDi的高4位都决定了下一层的TA(i+1)、TB(i+1)、TC(i+1)、TD(i+1)是否存在。

如果卡片在ATR里给出的信息表明其可以支持若干种通讯协议,终端该如何和它打交道呢?相当于卡片用默认的“英语”告诉终端“I  can speak English, Chinese, Japanese, French。”

这个时候终端可以进行协议选择(PPS)也可以不选择直接使用默认协议,如果进行协议选择的话,那么PPS就是终端在收到ATR后发出的第一个指令,

相当于终端告诉卡片“OK, Let’s speak in Chinese  !”,然后它们“就可以用中文拉呱了”。

如果不进行协议选择的话,终端则使用默认的协议给卡片发送其他的APDU指令,相当于二者使用默认的英语进行后续对话,

“Could you please bring me  a cup of coffee? ”,“OK, What’s your prefer?

转载于:https://www.cnblogs.com/dongyanxia1000/p/5057366.html

你可能感兴趣的文章
2019-06-02 Java学习日记之多线程上
查看>>
Mysql多表关联删除操作
查看>>
二十四种设计模式:策略模式(Strategy Pattern)
查看>>
统计某个字符串中指定字符串出现的次数
查看>>
asp.net三层结构中,SQL助手类DbHelperSQL
查看>>
scala map和flatMap
查看>>
.Net Core下使用 RSA
查看>>
python 数据库中文乱码 Excel
查看>>
利用console控制台调试php代码
查看>>
递归算法,如何把list中父子类对象递归成树
查看>>
jsf初学解决GlassFish Server 无法启动
查看>>
【Gson】2.2.4 StackOverflowError 异常
查看>>
hdu 1050 (preinitilization or postcleansing, std::fill) ...
查看>>
Form各键盘触发子所对应的“按键”
查看>>
【java IO】使用Java输入输出流 读取txt文件内数据,进行拼接后写入到另一个文件中...
查看>>
Linux系统下安装rz/sz命令及使用说明
查看>>
点击按钮抓不到页面的参数
查看>>
CentOS 6.5 下安装 Redis 2.8.7
查看>>
GridView模板问题
查看>>
利用TextFieldDelegate代理方法 – textField:shouldChangeCharactersInRange:replacementString: 限制输入字符...
查看>>