单片机直接读写SIM卡的软件设计中文写代码软件
高继森;刘春华
【摘 要】讨论了不通过中间模块,直接采用单片机对SIM卡进行操作的方式;并在某些关键环节给出了部分函数的源代码,读者可以根据这些源代码,稍作修改后应用于实际工程.
【期刊名称】《五邑大学学报(自然科学版)》
【年(卷),期】2010(024)004
【总页数】4页(P24-27)
【关键词】单片机;SIM卡;ISO 7816标准;GSM11.11标准
【作 者】高继森;刘春华
【作者单位】兰州交通大学,电子与信息工程学院,甘肃,兰州,730070;兰州交通大学,电子与信息工程学院,甘肃,兰州,730070
【正文语种】中 文
【中图分类】TP331
随着信息社会的高速发展,用户识别模块(Subscriber Identity Module,SIM卡)越来越多地应用于日常生活,其与外界的通信遵循 GSM11.11规定的通信协议. 外界可以通过发送一定时序限制下的指令串,对SIM卡进行控制,如读出、写入、查数据等. 常用的方式是将GSM设备与SIM卡连接,再通过微处理器(如单片机、ARM等)向GSM设备发送AT指令以实现对SIM卡的操作.但在有些场合出于对空间、成本或其他因素的考虑,需要以更加“底层”的方式,如微处理器直接对SIM卡进行读写. 本文将对基于单片机的SIM卡读卡设备的软件设计进行分析和研究,重点介绍如何通过微处理器编程来实现对SIM卡的操作,并列出了一些笔者经过实验验证的函数模块源代码.
本文用到的STC12LE5A60S2单片机是深圳宏晶科技生产的单时钟(机器周期1 T)单片机,其指令代码完全兼容传统的 8051,速度快 8~12倍,内部集成了 AD转换、PWM、独立波特率发生器等. ISO 7816中定义了SIM卡各个触点[1]的作用,如表1所示.
表1中的C6触点(编程电压VPP)暂时不用. 为了方便控制,我们加一个电源电压控制端,使SIM卡的上电受单片机I/O引脚信号的控制. 图1给出了单片机I/O引脚示意图,图1中的“接××引脚”只是示意单片机的4个I/O接口分别连到SIM卡的哪个触点,并非说明在真实的电路图中这些连接是直连的. 在实际实验中,还需要诸如电压电平转换器等外围电路.
SIM卡上电之前,连接SIM卡RST、I/O、CLK的3个触点的单片机的I/O引脚均保持低电平. 根据ISO 7816的规定:先接通SIM卡电源,然后延时一段时间待电压稳定下来;再在CLK端为SIM卡提供稳定的时钟信号,稍早于CLK的开通,或在CLK开通后不晚于200个时钟周期(etu)内,将I/O置为高电平;RST复位信号需在提供CLK信号后400个时钟周期内保持低电平,之后才可置为高电平;提供复位信号后400~40 000个时钟周期内,I/O接口将会有复位应答[2].
etu为SIM卡的“基本时间单元”,1 etu = (F/D)×(1/f). 其中,F和D的缺省值分别为372和1[3](要注意的是,并非所有的 SIM卡的 F和 D都为默认的缺省值),f为 SIM卡提供的工作频率,f的最小值为 1 MHz,缺省最大值是 5 MHz. 本文的实验工作频率为 2.764 8 MHz,则 1个 etu为372/2.764 8 (MHz)-1=134.55 μs.
实验中对 SIM卡提供工作频率的是 STC单片机,它带有一个独立波特率发生器,可以对外提供时钟频率,也可以不使用单片机内部时钟输出,而采用以外部独立元器件产生时钟信号的方式供SIM卡使用.
3.1 对SIM卡进行1 Byte数据的接收与发送
一个字符包括10个连续的时刻(如图4所示):第1个时刻为低电平,称为起始时刻,2~9这8个时刻传送1 Byte,最后1个时刻传送奇偶校验位[4],确保字符奇偶校验. 根据以上的协议规律,我们可以写出接收SIM卡1 Byte的函数[5].
read_SIM_byte()函数经过了简化,没有考虑奇偶校验错误数据重发的问题,仅仅是向单片机缓冲区内写入了一个标志字节0xbb,提醒单片机这里出现了接收错误. 同样道理,向SIM卡发送1 Byte的函数write_SIM_byte的代码也可仿照写出,这里不再赘述.
3.2 以SELECT命令为例向SIM卡发送指令
SELECT命令是SIM卡操作中一个较为常用的指令,表2列出了GSM11.11中定义的SELECT命令的编码,除了这5 Byte外,我们还需要将选中的文件的标示符(2 Byte)一并发送给SI
M卡;因此向SIM卡下达一个SELECT命令,需要发送的总共有7 Byte.
下面是本文实验中具体实现SELECT函数的源代码:
本文主要以ISO 7816和GSM11.11协议为指导,探讨了不通过GSM模块和AT指令,直接使用单片机读写SIM卡的软件实现方法,并给出了必要步骤的函数源代码. 该软件在实际测试时已成功实现对SIM卡的文件读写,读者可以较为方便地根据自己需要,做少许改动或者不改动,即可应用于自己的实际工程,同时可以仿照文中的代码,实现其他更为复杂的SIM卡操作功能.
【相关文献】
[1] International Organization for Standardization(ISO). ISO/IEC 7816-3 Cards with contacts: electrical interface and transmission protocols [S]. Switerland: Published in Switerland, 2006.
[2] 劼周 男,石江宏,王洪. SIM卡读卡器的研究与设计[J]. 现代电子技术,2007, 30(8): 51-55.
[3] International Organization for Standardization(ISO). ISO/IEC 7816-4 Smart CardStandard Part 4: interindustry commands for interchange [S]. Switzerland: Published in Switerland, 1995.
[4] 欧洲电信标准化协会特别移动组技术委员会. 数字蜂窝电信系统(PHASE 2)个人身份鉴别模块:移动设备(SIM-ME)接口规范(GSM 11.11)[S]. Valbonne: ESTL(欧洲电信标准化协会),1996.
[5] 黄智,魏苑琦. ST7267单片机与SIM卡的接口设计[J]. 单片机与嵌入式系统应用,2007, 7(3): 72-73.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。