DSDA:双卡双通技术详解

6 阅读11分钟

Android DSDA(Dual SIM Dual Active)技术深度解析

目录

  1. DSDA 概述与多 SIM 技术演进
  2. DSDA 的核心原理
  3. 硬件实现:TX-FULL vs TX-Sharing
  4. Android Framework 中的 DSDA 支持
  5. DSDA 的实现方式
  6. 实际应用场景分析
  7. 总结与展望

1. DSDA 概述与多 SIM 技术演进

1.1 什么是 DSDA?

DSDA(Dual SIM Dual Active,双卡双通) 是指一部手机可以同时在两张 SIM 卡上进行语音通话数据传输,两张卡可以真正并发工作,互不干扰。

1.2 多 SIM 技术演进

技术全称特点应用场景
SSSSSingle SIM Single Standby单卡单待传统单卡手机
DSDSDual SIM Dual Standby双卡双待,只能一个活跃早期双卡手机
DSDADual SIM Dual Active双卡双通,两卡可同时活跃现代高端双卡手机
TSTSTriple SIM Triple Standby三卡三待少数特殊市场
DSDS vs DSDA 的核心区别

DSDS(双卡双待):

  • ✅ 两张卡都可以待机(接收网络信号)
  • ❌ 只有一张卡可以处于活跃状态(通话或上网)
  • 当 SIM1 在通话时,SIM2 会暂时失去网络(显示无信号)
  • 举例:正在用 SIM1 打电话时,SIM2 的来电会直接进入语音信箱

DSDA(双卡双通):

  • ✅ 两张卡都可以待机
  • ✅ 两张卡都可以同时活跃
  • 当 SIM1 在通话时,SIM2 仍然可以接听电话上网
  • 举例:正在用 SIM1 打电话时,SIM2 来电仍会响铃,可以选择接听、拒绝或保持通话

2. DSDA 的核心原理

2.1 硬件基础:多 Modem 架构

DSDA 设备通常具有以下硬件特征:

  1. 双 Modem(或逻辑 Modem)

    • 每个 SIM 卡由独立的 Modem 或逻辑 Modem 处理
    • 两个 Modem 可以并行工作
  2. 独立的 RF(射频)链路

    • 每个 Modem 至少需要独立的接收(RX)链路
    • 发射(TX)链路可以独立或共享(见 TX-FULL vs TX-Sharing)
  3. 增强的天线系统

    • 需要处理两个 SIM 卡的同时发射和接收
    • 需要解决天线隔离射频干扰问题

2.2 软件支持

Android Framework 层需要协调两个 Modem 的工作:

// PhoneConfigurationManager.java
public static final String DSDA = "dsda";
public static final String DSDS = "dsds";
public static final String TSTS = "tsts";
public static final String SSSS = "";

// 检测设备是否支持 DSDA
boolean halSupportSimulCalling = mRadioConfig != null
        && mRadioConfig.getRadioConfigProxy(null).getVersion().greaterOrEqual(
                RIL.RADIO_HAL_VERSION_2_2)
        && getPhoneCount() > 1
        && getCellularStaticPhoneCapability().getMaxActiveVoiceSubscriptions() > 1;

关键参数:maxActiveVoiceSubscriptions

  • maxActiveVoiceSubscriptions = 1:DSDS 设备
  • maxActiveVoiceSubscriptions = 2:DSDA 设备(双卡可同时通话)
  • maxActiveVoiceSubscriptions = 3:TSTS 设备(理论上三卡可同时通话)

3. 硬件实现:TX-FULL vs TX-Sharing

DSDA 的硬件实现方式主要分为两种:TX-FULLTX-Sharing,它们的核心区别在于射频发射链路的架构

3.1 TX-FULL(全发射链路)

架构特点
  • 硬件配置:双 TX(发射链路)+ 双 RX(接收链路)
  • 工作原理:每个 SIM 卡拥有完全独立的 RF 发射和接收链路
  • 天线配置:至少需要 2 个独立的发射天线 + 2 个独立的接收天线
优势
  • 真正的并发传输:两个 SIM 可以同时发射和接收信号
  • 性能最佳:没有资源争抢,每个 SIM 都有完整的 RF 资源
  • 通话质量最稳定:不受另一张卡的影响
  • 延迟最低:无需时分复用或切换
劣势
  • 成本高:需要额外的 RF 芯片、功放(PA)、天线等硬件
  • 功耗大:两套 RF 链路同时工作时功耗显著增加
  • 设计复杂:需要处理更复杂的天线隔离和干扰问题
  • 体积较大:需要更多的物理空间容纳硬件
典型应用
  • 旗舰机型
  • 高端商务手机
  • 对通话质量和并发性能要求极高的场景

3.2 TX-Sharing(发射链路共享)

架构特点
  • 硬件配置:单 TX(发射链路)+ 双 RX(接收链路)
  • 工作原理
    • 两个 SIM 卡共享同一条 RF 发射链路
    • 通过 RF 开关(Switch) 在两个 SIM 之间快速切换
    • 每个 SIM 仍然拥有独立的接收链路
工作机制
  1. 接收(RX):两个 SIM 可以同时接收信号(因为有独立的 RX 链路)
  2. 发射(TX)
    • 两个 SIM 不能同时发射
    • 通过 时分复用(Time Division)快速切换 来共享发射链路
    • 切换速度通常在微秒(μs)级别,用户感知不到延迟
  3. 调度策略
    • Modem 会根据业务优先级进行调度
    • 语音通话通常优先于数据传输
    • 在两个 SIM 都需要发射时,会动态分配时隙
优势
  • 成本低:只需要一套发射链路的硬件
  • 功耗较小:相比 TX-FULL,功耗更低
  • 设计简化:硬件复杂度降低
  • 体积更小:节省空间
劣势
  • 发射冲突:当两个 SIM 同时需要发射时,必须调度
  • 性能略低:在极端场景下可能需要动态调度
  • 潜在延迟:虽然切换速度很快,但理论上仍存在微小延迟
典型应用
  • 中端双卡手机
  • 性价比机型
  • 对成本和功耗敏感的产品

3.3 TX-FULL vs TX-Sharing 对比表

特性TX-FULLTX-Sharing
硬件架构双 TX + 双 RX单 TX + 双 RX
发射链路每个 SIM 独立共享,需要切换
接收链路每个 SIM 独立每个 SIM 独立
同时发射✅ 支持❌ 不支持(需要时分复用)
同时接收✅ 支持✅ 支持
通话质量最佳良好(可能有微小延迟)
成本
功耗
典型场景旗舰机、高端 DSDA中端 DSDA

4. Android Framework 中的 DSDA 支持

4.1 核心类:PhoneConfigurationManager

PhoneConfigurationManager 负责管理手机的配置能力,包括 DSDA 能力的检测和管理。

// PhoneConfigurationManager.java
private void maybeEnableCellularDSDASupport() {
    boolean halSupportSimulCalling = mRadioConfig != null
            && mRadioConfig.getRadioConfigProxy(null).getVersion().greaterOrEqual(
                    RIL.RADIO_HAL_VERSION_2_2)
            && getPhoneCount() > 1
            && getCellularStaticPhoneCapability().getMaxActiveVoiceSubscriptions() > 1;
    
    if (halSupportSimulCalling) {
        updateSimultaneousCallingSupport();
        mRadioConfig.registerForSimultaneousCallingSupportStatusChanged(mHandler,
                EVENT_SIMULTANEOUS_CALLING_SUPPORT_CHANGED, null);
    }
}

关键点:

  1. HAL 版本检查:需要 Radio HAL 版本 ≥ 2.2
  2. Phone 数量:至少 2 个 Phone(双卡)
  3. maxActiveVoiceSubscriptions:必须 > 1

4.2 核心类:SimultaneousCallingTracker

SimultaneousCallingTracker 追踪设备是否支持同时通话,并提供查询接口。

// SimultaneousCallingTracker.java
public boolean isDeviceSimultaneousCallingCapable = false;

public Set<Integer> getSubIdsSupportingSimultaneousCalling(int subId) {
    if (!isDeviceSimultaneousCallingCapable) {
        Log.v(LOG_TAG, "Device is not simultaneous calling capable");
        return Collections.emptySet();
    }
    // 返回支持与指定 subId 同时通话的其他 subId
    return mSimultaneousCallPhoneSupportMap.get(phoneId);
}

判断逻辑:

  1. 蜂窝 DSDA:检查 Modem 上报的支持 DSDA 的 slot
  2. IMS DSDA:检查 IMS 是否注册以及 Transport Type
  3. VoWiFi + 蜂窝:如果一个 SIM 通过 VoWiFi,另一个通过蜂窝,也算 DSDA
private boolean phonesSupportSimultaneousCallingViaCellularOrWlan(Phone phone1, Phone phone2) {
    int phone2TransportType = ((ImsPhone) phone2.getImsPhone()).getTransportType();
    return phone2TransportType == AccessNetworkConstants.TRANSPORT_TYPE_WLAN ||
            phonesSupportCellularSimultaneousCalling(phone1, phone2);
}

4.3 Modem 动态上报 DSDA 能力

Modem 可以动态调整 DSDA 能力(基于网络条件):

// PhoneConfigurationManager.java
if (numOfActiveModems > 1) {
    // 当激活的 Modem 数量 > 1 时,检查是否支持蜂窝 DSDA
    // Modem 会根据当前网络条件上报支持 DSDA 的 SIM slot
    maybeEnableCellularDSDASupport();
} else {
    // 只有 1 个激活的 Modem,禁用 DSDA
    mSlotsSupportingSimultaneousCellularCalls.clear();
}

动态调整的原因:

  • 网络拥堵
  • 信号强度
  • 基站能力
  • 运营商策略

5. DSDA 的实现方式

5.1 硬件 DSDA(Hardware DSDA)

定义:通过真实的硬件支持实现 DSDA,包括 TX-FULL 和 TX-Sharing。

特点:

  • ✅ Modem 直接上报 maxActiveVoiceSubscriptions ≥ 2
  • ✅ 可以在所有网络条件下支持同时通话(取决于具体实现)
  • ✅ 性能最佳

检测方式:

boolean halSupportSimulCalling = 
    getCellularStaticPhoneCapability().getMaxActiveVoiceSubscriptions() > 1;

5.2 虚拟 DSDA(Virtual DSDA)

定义:在非 DSDA 硬件上,通过软件优化实现部分 DSDA 功能。

实现原理:

// PhoneConfigurationManager.java
private PhoneCapability maybeOverrideMaxActiveVoiceSubscriptions(
        final PhoneCapability staticCapability) {
    boolean isVDsdaEnabled = staticCapability.getLogicalModemList().size() > 1
            && mVirtualDsdaEnabled;
    
    if (isVDsdaEnabled) {
        // 软件层面将 maxActiveVoiceSubscriptions 提升到 2
        int updatedMaxActiveVoiceSubscriptions =
                Math.max(staticCapability.getMaxActiveVoiceSubscriptions(), 2);
        return new PhoneCapability.Builder(staticCapability)
                .setMaxActiveVoiceSubscriptions(updatedMaxActiveVoiceSubscriptions)
                .build();
    }
    return staticCapability;
}

核心策略:

  1. VoWiFi + 蜂窝:一个 SIM 通过 WiFi Calling,另一个通过蜂窝网络
  2. IMS + CS:一个 SIM 通过 IMS(VoLTE),另一个通过 CS(2G/3G)
  3. 动态切换:根据网络条件动态选择最佳组合

优势:

  • ✅ 成本低:无需额外硬件
  • ✅ 兼容性好:可以在 DSDS 设备上使用

劣势:

  • ❌ 性能受限:取决于网络条件和软件调度
  • ❌ 场景受限:只能在特定组合下工作(如 VoWiFi + 蜂窝)

5.3 混合 DSDA(Hybrid DSDA)

定义:结合硬件能力软件优化,在特定场景下实现 DSDA。

典型场景:

  • 硬件支持 TX-Sharing
  • 当两个 SIM 都需要通过蜂窝网络通话时,启用 TX-Sharing
  • 当一个 SIM 切换到 VoWiFi 时,另一个 SIM 可以独享蜂窝 RF 资源

优势:

  • 平衡了成本和性能
  • 适合大部分用户场景

5.4 向后兼容的 DSDA(Backward Compatible DSDA)

针对老设备,通过 multi_sim_config 属性判断:

// PhoneConfigurationManager.java
boolean isBkwdCompatDsdaEnabled = mFeatureFlags.simultaneousCallingIndications()
        && mMi.getMultiSimProperty().orElse(SSSS).equals(DSDA);

if (isBkwdCompatDsdaEnabled) {
    // 对于老设备,静态设置 DSDA 支持
    for (Phone p : mPhones) {
        mSlotsSupportingSimultaneousCellularCalls.add(p.getPhoneId());
    }
}

6. 实际应用场景分析

6.1 场景 1:两张卡同时打电话(VoLTE + VoLTE)

TX-FULL 设备
  • 工作流程

    1. SIM1 使用 TX1 发射链路,RX1 接收链路
    2. SIM2 使用 TX2 发射链路,RX2 接收链路
    3. 两个 SIM 完全独立,互不干扰
  • 性能表现

    • ✅ 通话质量:最佳
    • ✅ 延迟:无
    • ✅ 稳定性:最高
TX-Sharing 设备
  • 工作流程

    1. SIM1 和 SIM2 共享 TX1 发射链路
    2. 通过 RF 开关在微秒级别快速切换
    3. RX1 和 RX2 仍然独立接收
  • 性能表现

    • ✅ 通话质量:良好(用户通常感知不到差异)
    • ⚠️ 延迟:存在微秒级切换延迟,但通常不影响体验
    • ⚠️ 稳定性:在网络拥堵时可能有轻微影响

6.2 场景 2:一张卡打电话,另一张卡上网(VoLTE + Data)

TX-FULL 设备
  • 工作流程

    1. SIM1 用 TX1 发射语音数据(VoLTE)
    2. SIM2 用 TX2 发射上网数据
    3. 完全并发,互不影响
  • 性能表现

    • ✅ 通话质量:不受影响
    • ✅ 上网速度:不受影响
    • ✅ 最佳用户体验
TX-Sharing 设备
  • 工作流程

    1. SIM1 和 SIM2 共享 TX1 发射链路
    2. Modem 会优先保证语音质量
    3. 数据传输在语音空闲时隙进行
  • 性能表现

    • ✅ 通话质量:优先保证,不受影响
    • ⚠️ 上网速度:可能有 10-30% 的速度下降
    • ⚠️ 在大流量上传时可能更明显

6.3 场景 3:一张卡通过 VoWiFi,另一张卡用蜂窝网络

所有设备(包括 TX-FULL 和 TX-Sharing)
  • 工作流程

    1. SIM1 通过 WiFi 进行 VoWiFi 通话(不占用蜂窝 RF)
    2. SIM2 通过蜂窝网络(独享蜂窝 RF 资源)
    3. 两个传输路径完全独立
  • 性能表现

    • ✅ 通话质量:取决于 WiFi 质量
    • ✅ 蜂窝性能:不受影响
    • ✅ TX-FULL 和 TX-Sharing 没有区别

Android Framework 判断逻辑:

private boolean phonesSupportSimultaneousCallingViaCellularOrWlan(Phone phone1, Phone phone2) {
    int phone2TransportType = ((ImsPhone) phone2.getImsPhone()).getTransportType();
    // 如果 phone2 通过 WLAN,则认为支持同时通话
    return phone2TransportType == AccessNetworkConstants.TRANSPORT_TYPE_WLAN ||
            phonesSupportCellularSimultaneousCalling(phone1, phone2);
}

6.4 场景 4:Virtual DSDA(虚拟 DSDA)

设备条件
  • 硬件:DSDS 设备(maxActiveVoiceSubscriptions = 1
  • 软件:启用 Virtual DSDA
工作流程
  1. 检测到一个 SIM 切换到 VoWiFi
  2. Framework 动态将 maxActiveVoiceSubscriptions 提升到 2
  3. 另一个 SIM 可以通过蜂窝网络进行通话或数据传输
限制
  • ❌ 必须有一个 SIM 通过 VoWiFi
  • ❌ 无法实现两张卡都通过蜂窝网络同时通话

7. 总结与展望

7.1 技术总结

技术硬件需求实现方式成本性能应用场景
TX-FULL双 TX + 双 RX完全独立的 RF 链路最佳旗舰机
TX-Sharing单 TX + 双 RX共享发射 + 快速切换良好中端机
Virtual DSDADSDS 硬件软件优化(VoWiFi 等)受限成本敏感机型
Hybrid DSDATX-Sharing + 软件硬件+软件结合良好平衡方案

7.2 选择建议

对于 OEM 厂商:

  1. 旗舰机型:推荐 TX-FULL,提供最佳体验
  2. 中端机型:推荐 TX-Sharing,平衡成本和性能
  3. 入门机型:可以考虑 Virtual DSDA,降低硬件成本

对于用户:

  1. 重度商务用户:选择 TX-FULL 设备,确保通话质量
  2. 普通用户:TX-Sharing 设备足够使用
  3. 预算有限:支持 Virtual DSDA 的 DSDS 设备也可以满足基本需求

7.3 未来展望

  1. 5G DSDA

    • 5G 网络的更高带宽对 DSDA 提出了新挑战
    • 需要更强大的 RF 链路和更复杂的天线设计
  2. 能效优化

    • DSDA 的高功耗是一个持续需要优化的问题
    • 未来可能通过更先进的功放技术和动态功率管理来改善
  3. 软硬件协同

    • Virtual DSDA 和 Hybrid DSDA 将越来越重要
    • 通过智能调度和网络选择,在非理想硬件上也能实现良好的 DSDA 体验
  4. 多卡场景

    • 未来可能出现 3 SIM 甚至更多 SIM 的场景
    • TSTS(Triple SIM Triple Standby)和更高级的多卡技术

参考代码

关键文件列表

  1. frameworks_opt_telephony/src/java/com/android/internal/telephony/PhoneConfigurationManager.java
  2. frameworks_opt_telephony/src/java/com/android/internal/telephony/SimultaneousCallingTracker.java
  3. frameworks_opt_telephony/src/java/com/android/internal/telephony/Phone.java
  4. frameworks_opt_telephony/src/java/com/android/internal/telephony/HardwareConfig.java
  5. frameworks_opt_telephony/src/java/com/android/internal/telephony/RIL.java

本文档涵盖了 Android DSDA 技术的核心原理、硬件实现、Framework 支持以及实际应用场景,希望能帮助您深入理解这一重要的双卡技术。