UIM驱动程序_服务器

UIM驱动程序和服务器概述

      UIM分为UIM驱动程序和UIM服务器。 UIM用作物理SIM卡和UE之间的唯一接口。 UIM驱动程序负责与组件(例如通用异步接收器/发送器(UART),CLK REG,PMIC,中断控制器和RPM)进行软件交互。

下图是SIM卡中的电气触点,如下图所示:

■ Vcc power enable
■ Ground
■ Reset
■ Clock
■ I/O

     UIM服务器是UIM驱动程序与更高级别客户端(例如多模式通用SIM驱动程序接口(MMGSDI),通用SIM应用程序工具包(GSTK)和非易失性可移动用户标识模块(NVRUIM))之间的逻辑。

卡后视图


在设备上查看


UIM驱动程序软件架构

     UIM支持:带触点的卡-电子接口和传输协议(ISO 7816-3:2006)规范和3GPP规范的SIM卡。 这些SIM卡包括电气特性,物理和逻辑特性,传输协议,文件系统,SIM应用程序工具包以及某些网络特性和网络服务。 UIM功能包括SIM,USIM,RUIM,WIM,UTK和STK。

UIM驱动程序_java_02

UIM软件界面由UIM应用程序服务器和UIM低级驱动程序(LLD)组成。 UIM接口连接物理卡和UE。

UIM驱动程序_服务器_03

下图显示了选择操作条件类别的一般工作流程:

UIM驱动程序_java_04

UIM驱动程序体系结构规范

UIM驱动程序体系结构规范如下:

  • 配套电压
    QTI芯片组支持C级(1.8 V)和B级(3.0 V)工作电压。 芯片组仅不支持B级或A级(5.0 V)工作电压。
  • 上电时的电压切换
    上电期间,终端始终激活1.8 V的Vcc线并发送冷复位。 该卡反过来以包含卡功能的重置应答(ATR)进行响应。

    如果卡是3G UICC,则ATR在ATR的字符TA3或TA4中包含卡支持的电压等级。 如果该卡是2G SIM卡,则ATR不包含支持的电压等级。 在这种情况下,终端必须发送SELECT GSM或SELECT CDMA命令,其中的响应包含支持的电压等级。
  • 上电时的第一类指令:终端发送的第一条命令的指令类由NV 896控制
    1. 0 – 2G SIM指令类
    2.1 – 3G USIM指令类
    3.Not set – 3G USIM指令类
  • 正约定或逆约定
    UE应该在接收ATR之前选择直接约定或反向约定
    UE以直接约定开始,然后根据卡的响应切换为反向约定。

UE以直接约定开始,然后根据卡的响应切换为反向约定。

UIM驱动程序层功能

UIM驱动程序层执行以下功能:

  • 重置UIM(以使其处于已知状态)
  • 上电UIM卡
  • 更新操作参数(即时钟转换率和波特率转换率)
  • 初始化UART,CLK REG和ISR处理
  • 将命令发送到UIM卡
  • 关闭UIM卡的电源
  • 停止UIM卡的时钟
  • 执行UICC存在检测或热插拔
  • 执行错误处理功能:
    1. 在向UIM发送或接收字节时检查奇偶校验错误,并尝试从奇偶校验错误中恢复
    2.检测Rx_break错误
    3.检测UART超限错误
    4.等待卡响应超时
    5. 由于空字节过多而超时


UIM服务器层功能

UIM服务器层执行以下功能:

  • 充当通过协议,GSM,UMTS和CDMA对卡进行所有常规和特定操作的服务器
    1.通用–读取二进制文件,更新二进制文件,写入记录等
    2.特定–执行GSM身份验证,USIM身份验证,CSIM身份验证等
  • 支持目录维护
  • 支持文件选择
  • 缓存选择响应
  • 支持SIM工具包操作,并从卡中提取主动命令。
  • 支持内部恢复机制以重置卡。
  • 处理轮询操作
  • 当UIM卡发回命令的状态字时,设备驱动程序将解释状态字
  • 处理过程字节,例如ACK字节和NULL字节
  • 处理UIM内部加电程序,并充当服务器以不同协议(GSM,CDMA,UMTS,LTE和TD‑SCDMA)对卡进行的所有操作
  • 通过UIM的时钟控制执行内部电源管理,以延长电池寿命
  • 从命令响应的状态字中检测出UIM中何时有待执行的主动命令
  • 使用Fetch命令检索主动命令,然后将命令转发到适当的任务
  • 处理流应用程序协议数据单元(APDU)命令,并通过查看流APDU来更新内部目录结构
  • UIM应用程序服务器接口
    1.对于初始化以外的所有交互,该接口是典型的命令回调接口。
    2.UIM将UIM通电活动通知给GSDI,并向GSTK发出主动命令。
    3.UIM收到的应用程序任务将按顺序处理。
    4.命令级错误处理和错误处理


UIM任务模块

  • UIM服务器任务的接口是一个命令和报告接口,具有一个队列,用于以所有不同的操作模式保存命令。
  • 客户端将命令排队到UIM,UIM通过客户端回调报告响应。
  • 该模块处理与任务相关的活动,例如向DOG报告以及响应来自内核的Start和Stop信号。
  • 该模块还启动UIM卡的加电和断电处理。
  • 该模块为其他应用程序提供请求UIM服务的接口。
  • 该模块执行的某些常规功能和与任务相关的功能如下: 1.启动UIM上电和掉电 2.提供表决界面以指示UIM活动和不活动 3.定期向DOG报告并确认来自内核的任务初始化和任务停止消息。

UIM驱动程序_java_05

UIM驱动程序和服务层功能

UIM驱动程序提供以下服务层:

热插拔

  热插拔允许用户从插槽中交换UICC,而无需重新启动设备。 (仅当无需卸下电池即可访问UICC时,此用例才有效。)从MSM8974开始,可以使用NV 70210启用或禁用热插拔。术语热插拔表示可以从中插入或取出SIM卡。 移动设备,从而无需重新启动设备即可丢失并重新获得服务。

UIM热插拔SIM卡

EFS 70210控制热插拔启用,并且卡检测GPIO配置。 UIM初始化软件配置卡检测GPIO(请参阅表2-1和表2-2)。 这些可在运行时配置的项目是EFS项目70210的一部分。

表2-1卡检测插槽1的GPIO配置

启用UIM1热插拔

True

UIM1热插拔极性

ACTIVE_HIGH

UIM 1卡检测GPIO编号

100

UIM1卡检测GPIO功能选择

0

UIM1卡检测GPIO驱动程序强度

2 mA

UIM1卡检测拉动设置

No pull

表2-2卡检测插槽2的GPIO配置

启用UIM2热插拔

True

UIM2热插拔极性

ACTIVE_HIGH

UIM2卡检测GPIO编号

52

UIM2卡检测GPIO功能选择

0

UIM2卡检测GPIO驱动程序强度

2 mA

UIM2卡检测拉动设置

No pull

UIM控制器硬件对卡检测线进行反抖动。 防反跳时间值设置为三个睡眠时钟(睡眠时钟频率= 32.768 kHz)。 该硬件去抖动时间值不可配置。

该软件还会对卡检测线进行反跳动,以防止由于错误开关引起的多次中断而导致软件进入错误状态。 NV 66050控制去抖动值。

触发热插拔ISR后,防反跳过程开始,UIM以大约0.1 ms的固定时间间隔反复向该插槽发送卡状态查询。 客户端可以通过NV 66050配置该数量的样本。默认值是20个样本以检测卡是否插入,一个样本以检测卡的移除,以及10个样本以用于不稳定情况下的最大反跳重试计数器。

当UIM对该热插拔中断的所有采样计数连续收到相同状态时,防抖动成功结束。 去抖过程中的任何不匹配都会从以下位置重新开始采样计数
1.此过程以成功的结果或UIM达到其最大的反跳重试计数为结束。 卡检测所需的时间取决于样本数量和固定的时间间隔,对于大多数目标而言,大约为0.1 ms。

采样逻辑基于用于卡检测的允许样本数以及此防反跳的重试计数数。 对于插入的卡和检测到的卡,允许的样本计数有一个不同的数字,但是两个查询的最大防反跳重试次数相同。

Recovery(恢复)

 恢复是UIM模块中定义的QTI专有功能,用于在发生意外故障时在内部重置卡。 支持恢复的目的是为卡提供另一种使其可操作的机会,而不是将卡声明为有故障且电话无法使用。 由于卡无响应,奇偶校验错误,Rx_break错误,UART over_run错误和超时将触发恢复过程。

移除卡或电池后,UICC关闭

 UICC关机涉及调用PMIC公开的API,该API会在卸下电池时根据电池警报线上的信号执行Vcc的关机过程。 PMIC通过Batt_alarm通用输入/输出寄存器(GPIO)接收信号以执行Vcc关断,并停用UIM LDO。 当您实际卸下卡或电池或电池完全耗尽时,将执行此步骤。