初始化流程
SIM卡的初始化流程涉及到多个步骤,本文中仅列出几个主要的过程并加以说明。如果用户希望了解更多详细内容,可参考3GPP协议文档的对应部分内容,主要涉及下面几个协议:
3GPP TS 11系列
3GPP TS 31系列
3GPP TS 51系列
上电和复位
设备给SIM卡供电,然后通过复位序列激活SIM卡,这个复位序列包括了特定的电平和时序,可以让SIM卡知道设备已经准备好与其通信。
SIM卡的复位分为冷复位(Cold Reset)和热复位(Warm Reset)。
冷复位是完全断开电源然后重新上电,是一个完整的复位过程。
热复位是在SIM卡电源仍然连接的情况下进行的复位,用来重新初始化卡片。
激活和冷复位
激活和冷复位的时许如下:
RST引脚处于低电平状态。
VCC开始供电。
CLK需要提供适当并且稳定的时钟。
ME的I/O应该处于接收状态,并且ME在SIM卡激活期间,应忽略I/O上的状态,这是因为在SIM卡激活期间到冷复位之前这段时间,SIM卡的I/O状态是不定的。
ME将RST置为高电平,等待SIM卡从I/O上返回ATR响应。
上图中的Ta 之后的时序即为冷复位时序。
热复位
当SIM卡激活之后,在SIM卡没有断电的情况下,ME对SIM卡发起的复位叫热复位,其时序图如下:
根据ISO7816-4标准的说明,如果SIM卡正在进行复位响应(ATR)的过程中,发起一个热复位,可能会损坏SIM卡,导致SIM卡出现问题。因此,通常需要等待SIM卡复位响应完全结束后,再进行下一次的复位操作。
ATR
在复位后,SIM卡会返回一个称为ATR(Answer To Reset)的响应,这个响应包含了SIM卡的一些基本信息,如支持的协议、电压等级等。
ATR最多由32字节组成(不包含起始字符TS),其结构如下图所示:
关于ATR响应帧中各字符的详细介绍说明,请参考ISO 7816-4标准文件。
PPS
PPS,全称Protocol and Parameters Selection,中文叫协议和参数选择。这是一个选择和设置通信协议和参数的过程。PPS的主要目标是根据卡和设备的能力,选择最优的协议和参数,以实现最高的通信速度和效率。
在SIM卡初始化流程中,当设备接收到SIM卡的ATR后,就可以开始PPS过程了。ATR中包含了SIM卡支持的协议和参数。设备会根据这些信息和自身的能力,来选择最优的协议和参数。
PPS的基本流程如下:
PPS请求:设备向SIM卡发送一个PPS请求,请求包含了设备选择的协议和参数。
PPS响应:SIM卡收到请求后,会返回一个PPS响应。响应中包含了SIM卡接受的协议和参数。
确认:设备收到响应后,确认协议和参数的选择,并按照这些协议和参数进行后续的通信。
PPS的请求和响应结构,由一个初始字节PPSS、一个格式字节PPS0、三个可选参数字节PPS1、PPS2、PPS3和一个检查字节PCK组成。具体如下所示:
文件选择
SIM卡内部有一套文件系统,其中存储了各种关键的数据和应用信息。在初始化流程中,设备需要选择并读取特定的文件,获取必要的数据。以下是文件选择过程的步骤:
选择MF:设备首先需要选择MF。MF是SIM卡文件系统的根,选择MF是访问其他文件的前提。设备通常通过发送
SELECT
命令并指定MF的文件ID来选择MF。选择DF:在选择了MF之后,设备可以选择一个或多个DF。DF是文件系统的下一级,类似于文件夹,包含了一组相关的EF。例如,一个DF可能包含了所有关于电话簿的EF。选择DF同样是通过发送
SELECT
命令完成的,只是需要指定DF的文件ID。选择EF:在选择了DF之后,设备可以选择具体的EF。EF是文件系统的最后一级,里面直接存储了数据。例如,一个EF可能存储了用户的IMSI,或者存储了一条电话记录。选择EF同样是通过发送
SELECT
命令完成的,只是需要指定EF的文件ID。读取文件:在选择了EF之后,设备可以发送
READ BINARY
或READ RECORD
命令,读取EF中的数据。例如,设备可能读取IMSI,然后用于后续的网络注册和身份验证。
关于SIM卡文件系统说明,请参考下一个章节《SIM卡文件系统》。
身份验证
设备会获取到IMSI后,向网络发送一次注册请求,网络会返回一个随机数,设备会将这个随机数发送给SIM卡,SIM卡使用内部的Ki(认证密钥)和算法生成一个响应值,返回给设备,设备再将这个响应值发送给网络。如果网络验证这个响应值正确,就认为SIM卡是有效的,然后完成注册,否则将拒绝服务。
其他应用的初始化
如果SIM卡上还有其他应用,如STK(SIM Application Toolkit)应用,设备会在身份验证后,继续进行这些应用的初始化。这可能涉及到选择更多的文件,发送更多的命令,或者执行更多的交互。
热插拔功能初始化
当SIM卡初始化完成后,如果模组支持SIM卡热插拔功能,会进行SIM卡热插拔功能的初始化。
热插拔功能实现,大致需以下几点支持:
需硬件上支持插拔SIM卡时会引起GPIO电平变化(硬件设计)。
软件需要对硬件连接的GPIO引脚做电平变化监测(监测手段可以是中断,可以是轮询,一般推荐中断),消除抖动等处理。
软件需支持注册回调函数,当监测到电平变化时,调用注册的回调函数通知上层应用。
当监测到SIM卡插入或者拔出时,软件需做SIM卡掉电和上电流程处理。
Quepcython模组如支持SIM卡热插拔功能,则软件已经对2、3、4步骤做了处理,无需用户关心,仅需用户在硬件设计上进行支持即可。