1. USIM卡与APDU指令基础认知
第一次接触USIM卡开发时,那些十六进制字符串组成的APDU指令让我头皮发麻。直到在某个物联网项目中不得不直接与运营商卡片交互,才真正理解这套通信协议的精妙之处。AT+CSIM作为最基础的SIM卡指令,实际上是GSM/3GPP标准中规定的透传通道,它像一位翻译官,把终端设备的请求原封不动地转交给USIM卡处理。
USIM卡本质上是个微型计算机,APDU(Application Protocol Data Unit)则是它与外界对话的语言。每条APDU指令都包含明确的CLA(类别)、INS(指令)、P1P2(参数)和Data字段。比如读取ICCID的典型指令A0A40000022FE2,拆解来看:
A0表示GSM应用环境A4是SELECT FILE指令码0000表示当前目录02是后续数据长度2FE2指定要访问的EF_ICCID文件
注意:不同运营商卡片对APDU的支持程度差异很大,某些定制卡片会修改标准文件标识符
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. AT+CSIM指令深度解析
2.1 指令语法与参数说明
标准AT+CSIM格式如下:
code复制AT+CSIM=<length>,<command>
其中:
<length>:十六进制命令的字节长度(不是字符长度!)<command>:完整的APDU指令十六进制字符串
常见误区:
- 长度计算错误:
A0A40000022FE2实际是7字节(A0 A4 00 00 02 2F E2),但字符长度为14 - 未处理响应状态码:正常响应应包含9000状态码,其他如6982表示安全条件不满足
2.2 典型操作流程实录
读取IMSI示例:
-
选择DF_GSM目录:
code复制AT+CSIM=10,"A0A40000027F20"响应:
+CSIM: 18,"6F10840D6F07A0000000871002FF459000"(成功返回9000) -
选择EF_IMSI文件:
code复制AT+CSIM=10,"A0A40000026F07" -
读取二进制内容:
code复制AT+CSIM=5,"A0B0000
