UIM驱动程序和服务器概述
UIM分为UIM驱动程序和UIM服务器。 UIM用作物理SIM卡和UE之间的唯一接口。 UIM驱动程序负责与组件(例如通用异步接收器/发送器(UART),CLK REG,PMIC,中断控制器和RPM)进行软件交互。
下图是SIM卡中的电气触点,如下图所示:
■ Vcc power enable
■ Ground
■ Reset
■ Clock
■ I/OUIM服务器是UIM驱动程序与更高级别客户端(例如多模式通用SIM驱动程序接口(MMGSDI),通用SIM应用程序工具包(GSTK)和非易失性可移动用户标识模块(NVRUIM))之间的逻辑。
卡后视图 | 在设备上查看 |
UIM驱动程序软件架构
UIM支持:带触点的卡-电子接口和传输协议(ISO 7816-3:2006)规范和3GPP规范的SIM卡。 这些SIM卡包括电气特性,物理和逻辑特性,传输协议,文件系统,SIM应用程序工具包以及某些网络特性和网络服务。 UIM功能包括SIM,USIM,RUIM,WIM,UTK和STK。
UIM软件界面由UIM应用程序服务器和UIM低级驱动程序(LLD)组成。 UIM接口连接物理卡和UE。
下图显示了选择操作条件类别的一般工作流程:
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驱动程序和服务层功能
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。 当您实际卸下卡或电池或电池完全耗尽时,将执行此步骤。