本文档介绍了uicc的分类以及卡的文件架构与命令格式。
首先我们来看一个结构体:
typedef enum{
UIM_NO_SUCH_MODE = 0,
UIM_ICC = 1,
UIM_CDMA = UIM_ICC,
UIM_GSM = UIM_ICC,
UIM_UICC = 2,
UIM_WCDMA = UIM_UICC,
UIM_MAXIMUM_MODE = 3
}uim_protocol_type;
从上述结构体可以看出,UICC分为两类卡,UIM_ICC与UIM_UICC,也就是我们正常所说的SIM(Subscriber Identification Module 客户识别模块)与USIM(Universal Subscriber Identity Module 全球用户识别卡)。SIM卡支持两种制式分别为移动2G的GSM与电信3G的CDMA。USIM也叫升级版SIM卡则支持联通3G制式WCDMA同时也支持4G制式。
无论是sim还是usim,说白了就是一个小的存储盘存放了一个文件夹外加加密(用于鉴权等)计算功能。
sim与usim的文件架构如下所示:
sim部分文件架构示意图
usim文件架构示意图
从上述两个示意图可以看出usim的文件架构上使用了ADF应用文件夹的概念,这样一个卡能同时支持多种运营商制式。
sim与usim的收发命令格式如下所示:
request
rsp
命令码如下所示:
命令码
其中SIM卡GSM制式的CLA为A0,USIM卡的CLA为00(从协议上来说不只00,WCDMA使用的是00)。
SIM卡与USIM卡的命令上区别还是挺大的,就比如SELECT命令,在SIM(GSM制式)中就是定死的A0 A4 00 00 02 +两字节的FID。而在USIM中P1值相对目录(根据你所选定文件或者文件目录相对于当前的文件目录)与绝对目录会有不同的值,P2也有多种不同定义,P3也就是数据长度也不固定的2字节。
sim卡与usim的区别想了解更多的可以自己去ETSI上下载相关协议文档(ts_102221与ts_100977)。