好的,我们继续接续上一篇文章,对 3GPP TS 31.102 规范进行深度拆解。


深度解析 3GPP TS 31.102:4.2.33 EFICI & 4.2.34 EFOCI (通话记录仪)

本文技术原理深度参考了3GPP TS 31.102 V18.8.0 (2025-03) Release 18规范中,关于“4.2.33 EFICI (Incoming Call Information)”和“4.2.34 EFOCI (Outgoing Call Information)”的核心章节,旨在为读者深入剖析USIM卡中这对“通话记录仪”,是如何像飞机的黑匣子一样,忠实记录每一次呼入呼出的详细信息,并与电话本功能实现智能联动的。

在现代智能手机中,“通话记录”是一个基础且高频使用的功能。我们每天都会翻看未接来电、已拨电话和已接来电。这些记录不仅告诉我们“谁在何时联系了我们”,还常常与联系人应用深度整合,直接显示来电者的姓名,并提供一键回拨、添加到联系人等便捷操作。

虽然这些通话记录最终大多被手机操作系统存储在内部的大容量数据库中,但3GPP标准从一开始就为USIM卡设计了一套完整的、标准化的通话记录存储机制。这套机制的核心,就是EFICIEFOCI这两个文件。

  • EFICI (Incoming Call Information): “呼入通话信息”记录文件,专门负责记录所有已接未接的来电。

  • EFOCI (Outgoing Call Information): “呼出通话信息”记录文件,专门负责记录所有由本机拨出的电话。

它们就像是USIM卡内置的两个“行车记录仪”,一个对着车头(记录来车),一个对着车尾(记录去车),忠实地为每一次通话会话打下时间的戳印。我们的主角“李想”,每当他查看手机的通话记录时,其背后都离不开这对文件所定义的标准化数据模型。


1. 通话的“黑匣子”:ICI/OCI文件的核心价值

EFICIEFOCI的核心价值在于提供一个独立于手机、安全可靠的通话日志存储标准,并为与电话本等其他功能的智能联动提供了基础。

EFICI: This EF is located within the USIM application. The incoming call information can be linked to the phone book…

EFOCI: … The outgoing call information can be linked to the phone book…

从原文中,我们可以提炼出这对文件的几个关键特性:

  1. 功能专一: EFICI专记呼入,EFOCI专记呼出,职责清晰。

  2. 信息全面: 它们不仅记录了对方的号码,还记录了通话的日期、时间以及通话时长,构成了一个完整的通话事件快照。

  3. 智能联动 (Link to the phone book): 这是其设计的精髓。文件结构中预留了字段,用于存储该条通话记录与USIM电话本(DF_PHONEBOOK)中某个联系人的链接。这使得手机可以直接在通话记录中显示来电/去电人的姓名,而无需在接到电话时再去实时匹配整个电话本。

  4. 循环写入: 这两个文件都被设计为循环文件 (Cyclic),非常适合存储日志类数据。当记录写满时,最新的通话记录会自动覆盖掉最旧的那一条,确保文件中保存的总是最近的通话历史。

场景化举例:

李想的电话本里存有“王教授”的号码。

  1. 呼入场景 (EFICI):

    • “王教授”给李想打来电话,李想接听了3分15秒。

    • 通话结束后,手机会在EFICI中写入一条新记录,包含:对方号码(王教授的号码)、通话日期和时间、通话时长(195秒)、以及一个指向电话本中“王教授”那条记录的链接。记录的状态被标记为“已接电话”。

    • 第二天,李想在通话记录中看到这条记录时,手机可以直接根据链接,显示出“王教授”的姓名,而不是一串冰冷的号码。

  2. 呼出场景 (EFOCI):

    • 李想从电话本中找到“王教授”,点击拨号。

    • 通话结束后,手机会在EFOCI中写入一条新记录,包含:对方号码(王教授的号码)、通话时间、时长,以及同样的电话本链接。


2. 精密的设计:ICI/OCI文件结构与编码剖析

EFICIEFOCI在结构上几乎完全相同,体现了高度的设计复用。我们以EFICI为例进行深入剖析。

2.1 文件结构

表 4.2.33-1: EFICI 文件结构

| 属性 | 值 |

| :--- | :--- |

| Identifier | ‘6F80’ |

| Structure | Cyclic |

| Record length| X+28 bytes |

| Update activity| High |

| Access Conditions| READ: PIN, UPDATE: PIN, … |

记录内容 (X+28 bytes)

| 字节 | 描述 | M/O | 长度 |

| :--- | :--- | :--- | :--- |

| 1 to X | Alpha Identifier | O | X bytes |

| … | (与EFADN类似的号码信息) | M | … |

| X+15 to X+21 | Incoming call date and time (呼入日期和时间) | M | 7 bytes |

| X+22 to X+24 | Incoming call duration (呼入时长) | M | 3 bytes |

| X+25 | Incoming call status (呼入状态) | M | 1 byte |

| X+26 to X+28 | Link to phone book entry (电话本链接) | M | 3 bytes |

关键特性解读:

  • Structure: Cyclic: 循环文件的特性确保了通话记录的“推陈出新”,USIM中永远保存着最近的N条记录。

  • Update activity: High: 通话是高频行为,因此这两个文件会被频繁更新。

  • 核心信息字段 (高亮部分): 除了复用自EFADN的号码信息,ICI/OCI记录的核心在于其独有的通话元数据字段。

2.2 通话元数据的精细编码

2.2.1 日期和时间 (7 bytes)

Coding: it is according to the extended BCD coding from Byte1 to Byte 7. The first 3 bytes show year, month and day (yy.mm.dd). The next 3 bytes show hour, minute and second (hh.mm.ss). The last Byte 7 is Time Zone.

这是一个非常精细的时间戳格式:

  • 字节1-3: 年月日 (YYMMDD),用BCD码表示。

  • 字节4-6: 时分秒 (HHMMSS),用BCD码表示。

  • 字节7: 时区 (Time Zone)。这个字节表示本地时间与GMT时间的差值,单位是15分钟。例如,东八区(+8:00)的差值是32个15分钟,这个字节就会被编码为'32'。它的最高位还表示了符号(0为正,1为负)。

这个7字节的时间戳,不仅记录了通话发生的精确到秒的时间,还记录了当时所在的时区,为跨国漫游时的通话记录提供了准确的时间基准。

2.2.2 通话时长 (3 bytes)

Call duration is indicated by second.

通话时长用3个字节(24位)的二进制整数来表示,单位是。最大可以记录 2^24 - 1 秒,约等于194天,对于任何一次通话都绰绰有余。其编码方式与我们之前在EFACM中学到的完全一致。

2.2.3 呼入状态 (1 byte, 仅EFICI有)

Detail 3 Coding of Call status. Byte X+25: Answered=‘0’/ Not Answered=‘1’

EFICI独有的状态字节,用一个比特位来区分这次呼入是已接电话 ('0') 还是未接来电 ('1')。这使得手机的通话记录能清晰地分类显示。

2.2.4 电话本链接 (3 bytes)

这是实现智能联动的关键。

Detail 4 Link to phone book entry …

Byte X+26: 0 Global Phone Book (DFTELECOM) / 1 Local Phone Book (USIM Specific)

Byte X+27: EFPBR record number

Byte X+28: EFADN record number

这个3字节的链接,像一个三维坐标,精确定位了电话本中的一个条目:

  • 字节1 (电话本位置): 指明这个联系人是存在于“全局电话本”(DF_TELECOM下,可被SIM应用共享),还是“本地USIM电话本”(ADF_USIM下)。

  • 字节2 (EFPBR记录号): USIM电话本支持多文件结构,EFPBR(电话本引用文件)定义了电话本的结构。这个字节指向EFPBR中的某条记录。

  • 字节3 (EFADN记录号): 在确定了是哪个EFADN文件后,这个字节进一步指明了是该文件中的第几条记录。

当手机需要显示通话记录的姓名时,它会解析这个3字节的“坐标”,然后直接跳转到电话本的对应位置,取出姓名(Alpha Identifier),而无需进行耗时的全库号码搜索。

Optionally the ME may store the link to phone book entry in the file, so that it does not need to look again for a match…

规范指出,这个链接的写入是可选的 (Optionally)。如果手机在通话结束后,将这个链接写入,就能为后续的显示提供极大的便利。如果手机选择不写入(例如,为了减少USIM写操作),那么在显示通话记录时,它就必须每次都用号码去实时搜索整个电话本,效率较低。

3. EFOCI的微小差异

EFOCI(呼出通话信息)的结构与EFICI几乎完全相同(Identifier为’6F81’),主要的区别在于:

  • 没有通话状态字节: EFOCI记录的都是主动拨出的电话,因此不需要“已接/未接”的状态。它的总记录长度比EFICI少一个字节。

  • 关联的扩展文件不同: EFOCI的超长号码扩展使用EFEXT5,与EFMSISDN保持一致。

总结:“忠诚”的通话书记员

EFICIEFOCI作为USIM内置的“通话记录仪”,通过其标准化的、信息丰富的记录结构,为通话日志功能提供了坚实的数据模型。

  • 全面的信息记录: 它们不仅记录了“谁”和“何时”,还精确记录了“多久”和“在哪个时区”,为用户提供了完整的通话事件追溯能力。

  • 高效的循环存储: 采用循环文件结构,既满足了日志类数据频繁写入的需求,又保证了USIM中永远保存着最新的通话历史,实现了存储空间的高效利用。

  • 智能的电话本联动: 通过精巧的3字节链接机制,实现了通话记录与联系人信息的预关联,极大地提升了用户体验和手机的处理效率。

  • 持久化与可移植性: 存储在USIM中的通话记录,是独立于手机的。当李想更换手机时,只要将USIM卡插入新手机,他最近的通话记录就能被“无缝迁移”,保证了用户核心数据的连续性。

在今天,尽管手机操作系统接管了大部分通话记录的管理工作,但EFICIEFOCI所奠定的数据结构和设计思想,依然是所有通话记录功能实现的“蓝本”。它们确保了无论技术如何演进,每一次重要的呼叫,都能在USIM这个最可信的载体上,留下其不可磨灭的印记。


FAQ环节

Q1:EFICI/EFOCI文件可以存多少条通话记录?

A1:这取决于运营商在个人化USIM卡时为这两个文件分配的大小。规范本身没有硬性规定记录数量。运营商可以根据卡的容量和目标用户群,配置为存储10条、20条或更多的记录。由于是循环文件,当记录写满后,最新的记录会自动覆盖最旧的记录。

Q2:EFICIEFOCI记录的通话时长,可以用于计费吗?

A2:不可以。这两个文件记录的通话时长是由手机(ME)在通话结束后写入的,主要用于向用户展示。它不具有计费的权威性。真正的计费是由网络侧的核心网(如MSC/IMS)根据信令交互精确计算的。USIM中与计费相关的权威文件是我们之前介绍的EFACM(累计通话计量器),它的值是由网络下发的计费脉冲驱动的。

Q3:如果一个来电号码不在我的电话本里,EFICI中的“电话本链接”字段会是什么内容?

A3:根据规范,如果手机在电话本中找不到匹配的号码,或者手机选择不执行链接操作,这个3字节的链接字段应该被设置为'FFFFFF'。这是一个无效值,手机在读取到这个值时,就知道这条通话记录没有关联的联系人,于是会直接显示对方的号码。

Q4:为什么EFICIEFOCI的读取和更新都需要PIN权限?

A4:通话记录属于用户的个人隐私信息。将其访问权限设置为PIN,可以确保只有在机主本人(或知道PIN码的人)解锁手机后,这些记录才能被应用读取或修改。这可以防止恶意应用在后台偷偷窃取用户的通话历史,是保护用户隐私的一项基本安全措施。

Q5:Missed Call(未接来电)是存储在EFICI的哪里?

A5:未接来电同样存储在EFICI中。当一个呼叫振铃但用户未接听时,手机会在EFICI中创建一条记录。这条记录的“通话时长”字段会被设置为0,而“呼入状态”字节的相应比特位会被标记为“Not Answered”(未接听)。这样,手机的通话记录应用在读取EFICI时,就可以通过检查这两个字段,将这条记录识别并归类到“未接来电”列表中。