
简介这份资源是三星电子于2020年1月发布的《Samsung Proprietary Power Delivery Extension Specification》1.0.2版官方英文规范共9页面向无线充电方案工程师、协议栈开发者与硬件测试人员用于解决三星无线快充私有扩展协议在设备端实现与兼容性验证中的参考缺失问题。内容以Qi无线输电系统Power Class 0为基础依次覆盖私有包结构PRX的ASK报文与PTX的FSK报文含ACK、Request PP_TX、PP_SET及调制深度、包时序要求、协议栈分层与收发流程、错误处理与恢复机制并给出增强功率配置、自适应快充、电池充电管理等功率扩展细节同时说明与Qi标准的合规性及共存方式最后落到硬件要求、软件架构与认证测试注意事项。资源包为1个PDF文件约847KB保留原始目录与版本、修订历史便于按章节检索查阅。目前已有185人学习下载适合需要快速核对三星无线快充协议细节、对照开发或撰写技术文档的读者。1. 从 WPC 5W 到三星 PPDE私有扩展协议的边界与适用场景三星手机从 2015 年开始在旗舰机型上落地无线充电但当年标配的 WPC Basic Power Profile 只给到 5W跟有线快充的体验差距肉眼可见。三星没有等 WPC 的 Extended Power Profile 慢慢铺开而是在 BPP 之上自定义了一层私有协议——Samsung Proprietary Power Delivery Extension也就是 PPDE品牌名就叫 Samsung Wireless Fast Charge。这份 Ver 1.0.2 规范 2020 年 1 月发布整份文档只有 9 页但把 PRX 侧 ASK 包、PTX 侧 FSK 包、以及功率传递阶段的完整交互时序全部写死了。它适合三类人做无线充电器固件的 PTX 端工程师、在手机侧做兼容适配的 PRX 端开发者、以及需要让产品通过 WPC 认证的合规负责人。如果你之前只看过 WPC 公开的 EPP 流程第一次翻 PPDE 会有一个明显的感受——它跟 EPP 完全是两套逻辑是一组独立定义在 BPP 之上的私有状态机和私有包。往下按协议定位、包结构、时序实现、联调排错逐层拆。2. 三星 PPDE 的协议定位与 WPC BPP/EPP 的分层关系2.1 为什么三星做私有扩展而不是等 EPP三星在 2015 年把无线充电塞进手机时遵循的是 WPC BPP 规范功率上限 5W同时也兼容 Power Matters AlliancePMA的标准。但 5W 只够做涓流补电用户期望的是接近有线快充的体验。WPC 后来推出的 EPP 把功率往上抬但三星选择在 BPP 之上自己做一层私有扩展也就是 PPDE把功率挪到 5W 以上。这里有个必须记住的结论PPDE 与通用 WPC EPP 不兼容。一个只按 EPP 开发的充电器接到支持 PPDE 的三星手机上大概率只能以 BPP 的 5W 运行快充协商根本不会发起。反过来说支持 PPDE 的充电器也不保证能走通 EPP。这是两个平行世界。规范版本演进很简短1.0.02019 年 8 月首版1.0.12019 年 10 月补概述、面向三星开发者网站发布1.0.22020 年 1 月修订概述。三版之间协议核心没动改的只是文档表述。2.2 PPDE 在功率传递阶段中的嵌入位置WPC 无线充电的基础流程是数字 Ping → 信号强度 → 识别 → 配置 → 功率传递。PPDE 的介入点固定在功率传递阶段起点。在这之前的所有阶段照 WPC 走PRX 完成识别和配置后进入持续供电此时 PRX 通过 ASK 链路发私有包探测 PTX 是否支持 PPDE。方向头部字节序列消息名功能PRX→PTX0x180x18 0xFFACK确认收到 FSK 包PRX→PTX0x280x28 0x0C 0x00Request PP_TX探测 PPDE 可用性PRX→PTX0x280x28 0x06 0x2CPP_SET切到专有功率传递模式PRX→PTX0x280x28 0x06 0x05PP_SET切回标准功率传递模式PTX→PRX0x020x02 0x01PP_TXPPDE 可用握手链路是三步PRX 发 Request PP_TXPTX 在收到第一个控制误差包之后延迟一个 tfsk_delay 窗口回 PP_TX消息 0x01PRX 收到后回 ACK。三步走完PRX 发 PP_SET 携带 0x2C双方进入专有功率传递模式RPP 缩放规则随之切换。2.3 合规认证与商用边界规范里有一段硬性要求任何部署 PPDE 技术的厂商必须让无线充电器产品拿到 WPC 认证并在指定 ATLAuthorized Test Labs完成 PPDE 合规测试。WPC 会员站点上有一个专有模式安全测试的信息页面文档给出了具体入口地址。这一条不是建议是前置条件——没有认证就不能对外宣称支持 PPDE。另一个容易被忽略的边界规范明确禁止开发者使用三星的 Logo 或品牌名。产品可以支持 PPDE 协议但不能贴 Samsung Wireless Fast Charge 标识三星也不对开发者无线产品引起的索赔和损失负责。做产品定义的时候这两条要提前跟法务过一遍。3. PRX 端 ASK 私有包0x18 与 0x28 帧的构造与解析3.1 ACK 包0x18 0xFF的确认语义PRX 收到 PTX 发来的 FSK 包之后必须回一个 ACK包体是0x18 0xFF。这个包没有任何协商信息纯粹是链路层的到达确认。它的存在意义在于让 PTX 知道专有包已被 PRX 解析可以继续后续的状态切换。用 Python 做一个最小解析器把原始 ASK 字节流映射到已知包名上# Samsung PPDE Ver 1.0.2 PRX ASK proprietary packet parser # 头部定义来自 WPC ASK proprietary packet PRX_PACKETS { (0x18, 0xFF): ACK, (0x28, 0x0C, 0x00): Request PP_TX, (0x28, 0x06, 0x2C): PP_SET_proprietary, (0x28, 0x06, 0x05): PP_SET_standard, } def parse_prx_ask(raw: bytes) - str: 把原始 ASK 负载匹配到 PPDE 已知包签名 for sig, name in PRX_PACKETS.items(): if tuple(raw[:len(sig)]) sig: return name return UNKNOWN匹配时要注意长度Request PP_TX 是 3 字节ACK 是 2 字节PP_SET 也是 3 字节。前两字节相同、第三字节不同的 PP_SET 必须按完整 3 字节匹配否则会把 0x2C 和 0x05 误判成同一个包。3.2 Request PP_TX0x28 0x0C 0x00的探测机制PRX 进入功率传递阶段后立即发0x28 0x0C 0x00向 PTX 询问是否支持 PPDE。这个包本身不携带任何参数就是个能力探测请求。PTX 如果支持就准备回 PP_TX0x02 0x01如果不支持什么都不回PRX 就停在标准功率传递模式。有一个细节容易写错PTX 收到 Request PP_TX 后不能立刻发 PP_TX而要等后面的第一个控制误差包。控制误差包是 WPC 功率传递阶段的常规包PRX 会周期性发送PTX 把它当作同步基准。一旦收到那一帧PTX 再延迟 tfsk_delay目标 5ms把 PP_TX 发出去。PRX 端的超时判断建议写成发 Request PP_TX 之后启动一个 15ms 的定时器若期间没收到 0x02 0x01就认定 PTX 不支持 PPDE不再重试。这个 15ms 不是文档规定的是我按 tfsk_delay 最大 10ms 加 5ms 余量留的工程值。3.3 PP_SET 包的双模式切换0x2C / 0x05PP_SET 是真正切换功率模式的控制包同样走0x28头第三个字节决定目标模式/* PRX 侧 PP_SET 发送逻辑伪代码状态机片段 */ #define PP_SET_PROPRIETARY 0x2C /* 切到专有功率传递模式 */ #define PP_SET_STANDARD 0x05 /* 切回标准功率传递模式 */ typedef enum { STATE_PPDE_PROBE, /* 已发 Request PP_TX等 PP_TX 回复 */ STATE_PPDE_REQUESTED, /* 已收 PP_TX 并回 ACK */ STATE_PPDE_ACTIVE, /* 已发 PP_SET 0x2C专有模式运行 */ STATE_PPDE_STANDARD /* 已发 PP_SET 0x05标准模式运行 */ } ppde_state_t; void prx_send_pp_set(ppde_state_t *st, uint8_t mode) { uint8_t frame[3] {0x28, 0x06, mode}; ask_send(frame, sizeof(frame)); /* 同步写入 ASK 发送缓冲 */ if (mode PP_SET_PROPRIETARY) { *st STATE_PPDE_ACTIVE; /* 同时把本地 RPP 缩放切成 50% */ } else { *st STATE_PPDE_STANDARD; /* 同时把本地 RPP 缩放切回 100% */ } }关键点PP_SET 发出后PRX 本地发 RPP 的缩放系数要同步切换。发 0x2C 之后 PRX 用 50% 缩放上报 RPP发 0x05 之后回到 100%。这个切换必须是原子的——包和缩放系数不能分成两步改否则 PTX 会收到一帧误差被放大或缩小一倍的 RPP触发异物检测误报。4. PTX 端 FSK 响应调制深度、时序窗口与 RPP 缩放实现4.1 PP_TX 包的格式与校验和PTX 回复的 PP_TX 只有两个字节的消息体0x02头加0x01消息表示 PPDE 可用。但这个包必须携带校验和字节形式上就是 WPC FSK 私有包的标准结构——头、消息、校验和。校验和跟 WPC 公开协议一致用简单累加取反即可/* PTX 侧构造 PP_TX FSK 包0x02 0x01 checksum */ uint8_t build_pp_tx(uint8_t *out) { uint8_t msg[2] {0x02, 0x01}; /* header message */ uint8_t csum 0; for (int i 0; i 2; i) { csum msg[i]; } csum (uint8_t)(~csum 1); /* 补码形式校验和 */ out[0] msg[0]; out[1] msg[1]; out[2] csum; return 3; /* 返回帧长度 */ }校验和算错是初版固件最常见的失败点——PRX 会静默丢弃整帧表现为 Request PP_TX 发出去没有响应然后超时退回 BPP。调试时优先用示波器抓 FSK 波形把校验和字节逐一核对。4.2 FSK 调制深度与 tfsk_delay 的约束规范对 FSK 调制深度只有一句要求必须采用 WPC 规格里的「Positive depth 0」。这个约束决定了 PTX 发 FSK 时载波的幅度调制方向硬件上通过调整调制电路实现。调错方向的直接后果是 PRX 解调失败看不到任何 PP_TX 到达。时序参数只有一项但范围卡得比较窄参数符号最小目标最大单位FSK 延迟时间tfsk_delay3510ms触发条件是「Request PP_TX 之后收到的第一个控制误差包」然后在这个 CE 包之后再等 tfsk_delay 才发 PP_TX。用一个简单的调度器实现/* PTX 侧 PP_TX 发送调度等第一个 CE 包 tfsk_delay */ #define FSK_DELAY_MIN_MS 3 #define FSK_DELAY_TARGET_MS 5 #define FSK_DELAY_MAX_MS 10 static uint32_t req_ts; /* 收到 Request PP_TX 的时间戳 */ static uint8_t ce_seen; /* 第一个 CE 包是否已到 */ void on_request_pp_tx(uint32_t now_ms) { req_ts now_ms; ce_seen 0; /* 重置同步标志 */ } void on_control_error(uint32_t now_ms) { if (ce_seen) return; /* 后面的 CE 包忽略 */ ce_seen 1; uint32_t elapsed now_ms - req_ts; if (elapsed FSK_DELAY_MIN_MS) { schedule_fsk_send(FSK_DELAY_MIN_MS - elapsed); } else if (elapsed FSK_DELAY_MAX_MS) { send_pp_tx_packet(); /* 直接构造并发送 0x02 0x01 csum */ } /* elapsed 10ms 则握手失败保持 BPP不再发 PP_TX */ }参数说明FSK_DELAY_MIN_MS和FSK_DELAY_MAX_MS是规范硬约束超出即视为不合规FSK_DELAY_TARGET_MS是推荐值实际实现里取 5ms 是因为多数 PTX 主控的定时器精度在这个量级取 3ms 容易因中断抖动掉到边界以下。4.3 RPP 50%/200%/100% 缩放规则这是 PPDE 最容易被写错的地方。两条规则PRX 发 PP_SET 0x2C 进入专有模式后PRX 以50% 缩放发 RPPPTX 以200% 缩放反算。PRX 发 PP_SET 0x05 退回标准模式后双方都以100% 缩放。原因在于专有模式功率比 BPP 高得多PRX 上报的 RPP 如果按原值编码会超出 WPC 包的取值范围所以 PRX 先除以 250%PTX 收到后乘 2200%还原做功率损耗和异物检测计算/* PTX 侧 RPP 缩放根据当前 PPDE 模式还原真实接收功率 */ typedef enum { MODE_BPP 0, MODE_PPDE } ppde_mode_t; static ppde_mode_t g_mode MODE_BPP; uint32_t scale_rpp(uint32_t rpp_raw) { switch (g_mode) { case MODE_PPDE: return rpp_raw * 2; /* 专有模式PTX 应用 200% */ case MODE_BPP: default: return rpp_raw; /* 标准模式100%不做缩放 */ } }切换时序上有一点必须卡住g_mode的更新必须发生在收到 PP_SET 并完成 sync-in 之后不能提前。图 2 里标记的「Sync-in incoming PP_SET / Scaling RPP x 200%」就是这个意思——先把 PP_SET 同步进状态机再切换缩放系数。提前切会把切换瞬间那一帧标准模式的 RPP 放大一倍超过阈值触发 FOD异物检测功率瞬间掉下来。5. PPDE 联调排错时序偏差与模式切换失败的定位方法联调阶段的两个高频故障一是 Request PP_TX 发出后收不到 PP_TX二是 PP_SET 后模式没切过去。分两条线定位。先说第一条。用手边能拿到的 FSK 解调设备先确认 PTX 是否真的发出了 PP_TX。如果没发回到 4.2 的调度逻辑在on_control_error里打日志确认 CE 包是否被识别。很多 PTX 固件把控制误差包的解码放在独立中断里主循环的on_control_error根本不会被调用这种情况需要在中断回调里加一个标志主循环轮询。如果 PTX 发了 PP_TX 但 PRX 收不到先查调制深度是不是 Positive depth 04.1 节再查校验和。一个实操技巧把 PRX 的 FSK 解码阈值临时放宽到正常值的 60%如果能收到说明调制深度不够或信号链增益不足属于硬件调参问题而不是协议问题。第二条线是 PP_SET 后模式没切。先确认 PRX 发出的 PP_SET 第三字节到底是 0x2C 还是 0x05用 ASK 侧的包解析器3.1 节的parse_prx_ask打一个抓包日志。然后确认 PTX 收到 PP_SET 后有没有把g_mode切换过去。常见坑是PRX 把 PP_SET 和 RPP 缩放分开两步改中间夹了一帧旧缩放的 RPPPTX 拿那一帧算出来功率对不上触发保护直接退回 BPP。验证方法上我给一个最小可跑的检查清单数字 Ping 阶段正常 → 信号强度、识别、配置阶段完整 → 进入功率传递后 5ms 内 PRX 发 Request PP_TX → 下一个 CE 包后 3~10ms 内 PTX 发 PP_TX → PRX 回 ACK → PRX 发 PP_SET 0x2C → PTX 的 RPP 计算乘 2 → 连续 100 帧 RPP 误差在 ±5% 以内。任何一步断掉就停在那一步往上查。最后提一个容易忽略的合规细节规范里所有包长度都是定长且 FSK 侧必须带校验和ATL 测试会逐帧校验。调试阶段可以临时去掉校验和加快迭代但提交认证前记得恢复——我见过有团队因为调试分支没合回来认证被打回重测。本文还有配套的精品资源点击获取