USB-PD 协议解析 - 简单易懂协议详解
目录
1. 简介
2. USB PD3.0 通信流程
2.1 发送数据包
2.2 接收数据包
2.3 双相标记编码(BMC)
2.4 符号编码(4B5B)
3. 数据包格式
3.1 前导码(Preamble)
3.2 SOP*(Start of Packet Sequence)
3.3 有效载荷(Packet Payload)
3.3.1 控制信息
3.3.2 数据信息
3.3.3 扩展信息
3.4 CRC
3.5 EOP
1. 简介
USB PD:英文解释是USB Power Delivery ,翻译过来就是USB功率传输,该协议是基于USB3.1中的type C接口制定的,是基于USB1.0、USB2.0、USB3.0升级产物,USB PD标准分10W、18W、36W、60W和100W五级“规格”,电压采用5V、12V、15V和20V,电流为1.5A、2A、3A和5A,最高可达100W,根据设备间的通讯握手成功,自主协商采用相对应的功率进行充放电,另外它还是双向的,可以相互转化角色就是电力供应,未来大部分的电子设备通过一根Type C电缆就可以完成充电,这就意味着可以把传统的充电接口省掉。
完成USB PD协议的通讯与解析,需要一颗处理器,也就是MCU,另外还能从电气特性上能符合type C物理层的要求,目前cypress的CCG2、CCG3,国内知名电源厂商英集芯的IP2716都是不错的选择。
快速充电技术规范的PPS(Programmable Power Supply)
- USB PD 3.0:同时覆盖高压低电流、低压大电流
- USB PD 3.0:规范了电压输出范围:3.0V~21V,步进调幅电压为20mV。
注意:有 Type-C 输出的,不一定是支持 USB-PD 协议充电器;支持 USB-PD 协议的充电器,一定是 Type-C 输出的。
2. USB PD3.0 通信流程
2.1 发送数据包
(1)接收来自协议层的数据包;
(2)进行CRC校验;
(3)将CRC校验结果编码到数据包上;
(4)将校验后的数据包通过信号线传送出去;
2.2 接收数据包
(5)恢复时钟,并锁定到数据包的前导码上;
(6)检测SOP;
(7)解码接收到的数据,包括CRC;
(8)判断接收到的数据是否是有效数据。
2.3 双相标记编码(BMC)
BMC是有效的DC平衡(每个1是DC平衡的,两个连续的零是DC平衡的,不管中间1的个数是多少)。
2.4 符号编码(4B5B)
除前导码外,线路上的所有通信应使用4B5B线路代码进行编码。发送时将4位数据编码为5位符号以供传输,接收时需将5位符号解码为4位数据以供接收器使用。
4B5B代码提供数据编码和特殊符号,使用特殊符号来表示硬重置,并描绘数据包边界。
3. 数据包格式
数据包格式包括前导码、SOP*、数据包数据(包括消息头、CRC和EOP)。 数据包格式如图3-1所示,并指明数据包的哪些部分应进行4b/5b编码。一旦4b/5b编码,整个包应通过CC使用BMC传输。注意,数据包中的所有比特,包括前导码,都是BMC编码的。
3.1 前导码(Preamble)
前导码由交替“0”和“1”的64位序列组成(以“0”开头,以“1”结尾)。并且,前导码不应被4b/5b编码。接收器应能容错第一个跳变沿丢失。发射机可以通过tStartDrivemin改变前导码的开始(见图5-10)。
tStartDrivemin:发射机驱动线路时,发送前导码首位前的时间。所以,根据tStartDrive及表2-3-2的tUnitInterval,前导码的第一个逻辑位时间范围为 2.03~4.70 us。
3.2 SOP*(Start of Packet Sequence)
K-code NO. | SOP | SOP' | SOP" | SOP'_Debug | SOP"_Debug | Hard Reset | Cable Reset |
1 | Sync-1 | Sync-1 | Sync-1 | Sync-1 | Sync-1 | RST-1 | RST-1 |
2 | Sync-1 | Sync-1 | Sync-3 | RST-2 | RST-2 | RST-1 | Sync-1 |
3 | Sync-1 | Sync-3 | Sync-1 | RST-2 | Sync-3 | RST-1 | RST-1 |
4 | Sync-2 | Sync-3 | Sync-3 | Sync-3 | Sync-2 | RST-2 | Sync-3 |
在表3-2的最后两列,可以看到复位帧(Hard Reset及Cable Reset)。
3.3 有效载荷(Packet Payload)
规范定义了三种类型的消息:
1. 控制短消息:用于管理端口伙伴之间的消息流或交换不需要额外数据的消息,长度:16。
2. 数据信息:长度:48b~240b。数据信息有3种: ①展现功能及谈判力,②用于BIST的, ③供应商定义的。
3. 扩展消息:长度:最多MaxExtendedMsgLen字节。有以下 几种类型:①电源和电池信息;②用于安全的;③固件更新用的;④供应商定义的。
如图3-3-1所示,16-bit 信息头(Message Header )的各位信息如下所示:
15:Extended:扩展字段;为1时为扩展消息,为0时为控制消息或数据消息。
14~12:Number of Data Objects:有效荷载的数据数量,当字段为零时,表示当前为控制信息,否则为数据信息。
4~0:Message Type:数据类型:有效荷载的数据类型。
3.3.1 控制信息
3.3.2 数据信息
0..7 Data Object(s):0..224bit, 1 Object单元为32bit。
3.3.3 扩展信息
- 若Chunked位为1时,此字段为消息中填充到4字节边界的数据数量,包括作为第一 个数据对象一部分的扩展头。
- 若Chunked位为0时,此字段作为保留字段。注意,在这种情况下,消息长度仅由扩展消息头中的数据大小字段确定。
- Chunk Number字段指示返回的块的数目。块数总数为10时,编号从0~9。
- 消息头(图3-3-1)中的 Number of Data Objects 应表示消息中填充到4字节边界的数据对象数,包括扩展头的第一个数据对象。
3.4 CRC
CRC:32bit,计算除帧符号(Preamble,SOP*,EOP)之外的有效载荷的所有字节。
// U8 *pcDataStream:原始数据流
// U32 sNumberOfDataBytes:原始数据流长度
U32 Helpers::CalculateCRC32(U8 *pcDataStream, U32 sNumberOfDataBytes)
{U8 cCurrentData = 0;U32 genPolyCrc32 = 0x04C11DB6; //spec 0x04C1 1DB7U32 sCRC32Result = 0xFFFFFFFF;U32 newbit = 0, newword = 0;for (U32 i = 0; i < sNumberOfDataBytes; i++) {cCurrentData = *(pcDataStream + i);for(int j = 0; j < 8; j++) {newbit = ((sCRC32Result >> 31) ^ (cCurrentData & 1)) & 1;newword = newbit ? genPolyCrc32 : 0;sCRC32Result = ((sCRC32Result << 1) | newbit) ^ newword;cCurrentData = (cCurrentData >> 1);}}// -- sWrapint ret = 0, k = 0, bit = 0;U32 cWrap = ~sCRC32Result;for(int i = 0; i < 32; i++) {k = 31 - i;bit = (cWrap >> i) & 1;ret |= bit << k;}return ret;
}
3.5 EOP
EOP:01101 参考表2-4.
其他详细信息请参考手册:USB_PD_R3_0 V1.1 20170112.pdf
4.USB-PD通信实例实测
本实例使用 Kingst LA5016 usb 逻辑分析仪检测USB-PD协议数据通讯。下图是一个完整的数据包分析截图。从图中可以看到,LA5016的USB-PD解析模块,将协议数据分为6部分:Reset condition(主机复位)、Presence condition(从机应答)、主机发送ROM命令、从机回应ROM命令、主机发送功能命令解析及从机回应功能命令解析。
下图为USB-PD协议设置截图,其中CC为目标数据通道,同时可以设置是否显示Marker点。
USB-PD 协议解析 - 简单易懂协议详解相关推荐
- 温湿度模块 DHT11/12 芯片 协议解析 - 简单易懂协议详解
1.产品概述 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器.它应用专用的数字模块采集技术和温湿度传感技术,确保 产品具有极高的可靠性与卓越的长期稳定性.传感器包括一个电容式 ...
- ISO7816协议深度解析-简单易懂协议详解(一)-- 复位,字符帧,及ATR
1. 摘要 IC卡必须支持T=0或T=1的协议,但不是同时支持这两种协议,而终端则必须同时支持T=0和T=1的协议. • T=0通讯协议是异步半双工字符传输协议: • T=1通讯协议是异步半双工块传输 ...
- SDIO - 1bit / 4bit V2.0 协议深度解析-简单易懂协议详解
1.简介 SDIO接口是在SD内存卡接口的基础上发展起来的接口,SDIO接口兼容以前的SD内存卡,并且可以连接SDIO接口的设备.SDIO1.0标准定义了两种类型的SDIO卡: 全速的SDIO卡,传 ...
- 红外协议 IR Sharp 协议深度解析-简单易懂协议详解
夏普红外协议,网上资料很少,它用在夏普生产的VCRs-(盒式磁带录像机),这是其被称为夏普协议的原因. 1. 调制 使用38K载波对编码后的波形进行调制: 夏普协议依据位时间长度进行解码.每个脉冲都是 ...
- 红外协议 PHILIPS RC5 协议深度解析-简单易懂协议详解
RC5是飞利浦使用较多的一种的红外遥控器协议, 1. 特征 使用双向编码(又称曼彻斯特编码): 使用36K载波对编码后的波形进行调制,RC5的每个bit的半高部分包含32个载波脉冲,周期为(1 / 3 ...
- 最简单易懂二分法详解
二分法和三分法是算法竞赛中常见的算法思路,本文介绍了它们的理论背景.模板代码.典型题目. 二分法的理论背景 在<计算方法>教材中,关于非线性方程的求根问题,有一种是二分法. 方程求根是 ...
- USB CCID类协议中的APDU命令详解
出处:http://blog.chinaunix.net/uid-29124653-id-4573075.html 原文地址:USB CCID类协议中的APDU命令详解 作者:jeffasdasd 最 ...
- 计算机网络中的语法 语义 时序的概念,网络iso协议及语义语法时序详解
网络iso协议及语义语法时序详解 计算机学习 网络协议的三要素 在计算机网路中,通信发生在不同系统的实体之间,,实体(entity)是能够发送和接收信息的任何事物.然而,两个实体间仅发送比特流就指望能 ...
- HTTP协议头部与Keep-Alive模式详解
HTTP协议头部与Keep-Alive模式详解 HTTP协议头部与Keep-Alive模式详解 - 玩命写博客 - 博客频道 - CSDN.NET HTTP协议头部与Keep-Alive模式详解 20 ...
- HTTP协议之http状态码详解 300-305 重定向
HTTP协议之http状态码详解 HTTP状态码,我都是现查现用. 我以前记得几个常用的状态码,比如200,302,304,404, 503. 一般来说我也只需要了解这些常用的状态码就可以了. 如果 ...
最新文章
- 005-Python之列表,元组,字符串,bytes及bytearray共有操作
- java寻找最大的字母_【LeetCode(Java) - 744】寻找比目标字母大的最小字母
- ElementUI之row-click
- 计算机三级 偏软,计算机三级偏软说明
- mysql创建外键的表_Mysql表创建外键报错解决方案
- 使用Statement接口实现增,删,改操作
- BIND_MISMATCH导致过多VERSION COUNT的问题
- h5前端有php,【前端】为什么有些网站的页面地址,没有加上html或者php或者jsp的后辍名?...
- python数据结构-如何统计序列中元素的频度
- Spring事务—方法调用事务回滚
- 联想面试智力题,听说前面三道题必考(有部份解答)
- day09 CDN绕过漏洞回链接口探针全网扫描反向邮件
- 站长之死:互联网界夹心层的梦想反思录
- html如何将设置文本效果,Word2013中通过设置文本效果格式来为文字添加特殊效果...
- word文档打对勾_word文档怎么打勾 word文档方框内打勾六种方法介绍
- cesium 实现雷达波
- 《对比Excel,轻松学习Python数据分析》读书笔记------数据可视化
- 嵌入式 AXD调试经验,使用及问题
- 【AP5904】三功能 2.5-5V 1.8A LED车灯 手电筒驱动芯片
- 转:vue-cli的webpack模板项目配置文件分析