• PD3.1详解 第三章(EPR)扩展消息详解


    PD3.1详解 第三章(EPR)扩展消息详解

    在PD3.0版本中扩展消息用到的比较少,但是在PD3.1中随着要广播EPR的PDO,那么必须要引入扩展数据了;这一部分刚开始比较难以理解,得多看几遍才行;
    我们都知道PD的协议层中包含了3大类的消息类型,控制消息,数据消息还有今天所说的扩展消息;
    扩展消息也就是在消息头中的最高位也就是Extended 这个bit为1的数据类型,如下图:
    在这里插入图片描述

    那么它整体的数据结构如下图:
    
    • 1

    在这里插入图片描述

    那么主要需要关注的是Extended Header和随后的data;也就是扩展消息头和它的数据;扩展消息头如下图所示定义:
    
    • 1

    在这里插入图片描述

    第一个是Chunked 这个bit;翻译过来就是“块”,刚开始怎么翻译都感觉不太对劲,需要结合上下文多看多理解才行;这个bit是1还有0是根据前面的source部分的source cap(PDO)数据中的bit24: Unchunked Extended Messages Supported还有sink端的request数据中的bit23 Unchunked Extended Messages Supported,这俩个bit决定的;对应关系如下图:
    有兴趣的可以加扣扣876275241交流、WX搜索“DSX电源超级快充”
    在这里插入图片描述

    就是说只有source和sink俩端都支持不分块(unchunked),那么后续的扩展数据中的chunked才能为0;但凡有一个为0(不支持不分块,就是仅支持分块),那么这个chunked就要为1;也就是向另外一个端口妥协;另外当我们不分块的时候,data size就表示数据大小了,消息头中的object number就得为0了;
    上面这部分理解了,后面就好搞了;
    Chunked number:表示的是在chunked为1的时候,存在比较多的数据要发送,那么一条扩展数据抛开header和extended header只能负载26个byte,多出来的要进行下次的请求发送,也就是request chunked;这个时候要根据数据量去给这个chunked number赋值;
    Data size:这个就好理解了
    在chunked为1的时候:这个就是扩展数据的有效数据的字节数;不包含消息头和扩展消息头,但是包含了为了凑齐4字节的数据;
    在chunked为0的时候:就不用上面那么麻烦了,直接一次就把所有数据发完了,不用计算为了凑齐4字节的数据;
    凑齐4字节,也就是一个object,如下图去凑,就是往上写0:
    在这里插入图片描述

    在这个图里的B0B1就是凑的0,但是如果你的有效数据刚好加上扩展头的2字节,能够整除4,那就不需要补0了;
    PD协议中也举例子说明了,还有图示,分别讲了chunked为1和chunked为0的情况;首先是chunked为0的情况:
    在这里插入图片描述

    可以看到chunked为0,那就是不分块,主机发出指令,power那边要回复30个字节大小的数据,加上消息头和扩展头,都有了34字节了,这个时候明显超过了一般数据的大小(30字节),但是就是因为不用分块,可以一条消息直接发完;
    接下里就是chunked为1的情况:
    这个时候如果要发送的数据超过了30字节(包含消息头和扩展头),那么就要多次发送了;并且涉及到了request chunked这个扩展消息命令;如下图:
    在这里插入图片描述

    Power端是分俩次才把数据发完;总共需要发送30个字节,第一次抛开消息头和扩展消息头还有凑的0,只能发出去26字节;第二次还需要发送4字节,那么可以看到上图中的第二次发送,必须要有2个object(因为要有2字节的0凑数,以及扩展头的2字节),所以我们看到的是number of data objects是2;其实有效负载的数据只有4字节;
    同时可以看下在chunked为0是的扩展数据结构是如下图所示:
    在这里插入图片描述

    Chunked为1的时候是下面俩张图:
    在这里插入图片描述
    在这里插入图片描述

    兄弟姐妹们,看完的点个赞;
    兄弟姐妹们,看完的点个赞;
    兄弟姐妹们,看完的点个赞;

  • 相关阅读:
    Zookeeper - 本地安装与参数配置
    (64)MIPI DSI LLP介绍(四)
    Mybaits一级缓存和二级缓存分别是什么,区别是什么?
    【Jmeter】安装配置:Jmeter 安装插件管理器 Plugins Manager
    HiveQL
    Rabbitmq—— 从入门到放弃
    IDEA——工程项目的两种窗口开发模式
    idea安装
    Android 创建桌面组件Widget——构建应用微件(二)
    漏洞深度分析|Apache Airflow example_bash_operator DAG 远程代码执行漏洞
  • 原文地址:https://blog.csdn.net/qq_27854611/article/details/127780252