按照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:
如果卡片在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?