• 229查看
  • 0回复

[测试标定] 汽车标定技术--关于XCP里ADDRESS_GRANULARITY的理解

[复制链接]

  • TA的每日心情
    无聊
    1-7-2015 18:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 18-4-2024 21:50:12 | 显示全部楼层 |阅读模式

    汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


    目录

    1.AG的理解

    2.不同指令的填充方式

    2.1 Connect指令

    2.2 Upload指令

    2.3 Download指令

    3.小结


    最近和朋友聊到一个XCP中关于ADDRESS_GRANULARITY的问题,主要分歧点在各指令基于AG对于数据帧的填充方式,因此记录下来,方便后续查找。1.AG的理解

    关于ADDRESS_GRANULARITY,资料其实很少,仅仅只在XCP协议里简单提了两句。原文如下:
    An entry in an ODT references a data element by its address, the address extension, the size of the element in ADDRESS_GRANULARITY (AG) and for a data element that represents a bit, the bit offset.
    本想着一两句描述,但自己都有点迷糊了,因此这还得从ODT和ODT Entry开始说起。首先我们先看一个DAQ的Log数据:
    汽车标定技术--关于XCP里ADDRESS_GRANULARITY的理解w1.jpg
    在该log中,上位机(CANape)选择了DAQ LIST之后开始进行测量,下位机自动就将数据返回;那么这个数据到底从ECU的memory哪个位置来的? 这就必须再来一个图。
    汽车标定技术--关于XCP里ADDRESS_GRANULARITY的理解w2.jpg
    在XCP的世界里,每一个观测量都称为Element,它在ECU Memory中的地址和长度的描述信息按照固定格式存放到ODT(Object Descriptor Table)中,这个描述信息叫做ODT Entry。以CAN为例,根据这个Entry的描述到ECU memory的目标地址取出数据,组成返回给上位机的数据帧,这个帧叫做DAQ-DTO;从代码实现角度如下:
    汽车标定技术--关于XCP里ADDRESS_GRANULARITY的理解w3.jpg
    那么这跟今天要聊的AG有啥关系呢?首先我们明确AG字面意思为地址粒度,表示一个地址里面element的数据长度,单位为Byte,可能的值为{1,2,4};其次在协议里要求,ODT_Entry指向的数据长度与AG有如下关系:
    ODT_Entry指向元素Size必须大于等于AG(最小数据长度要求);
    Address[AG] mod (GRANULARITY_ODT_ENTRY_SIZE_x[BYTE] / AG[BYTE])= 0 (地址对齐要求)

    SizeOf(element described by ODT entry)[AG] mod (GRANULARITY_ODT_ENTRY_SIZE_x[BYTE] / AG[BYTE]) = 0(数据对齐要求)

    这意味着如果AG为2,那么ODT_Entry关联的数据元素的大小就至少为2,并且数据的地址、长度必须进行对齐。因此AG在整个XCP的数据通信上是非常关键的基础单位信息。一旦AG固定后,那么上下位机通信的数据长度单位就确定了,但是回过头来,一般来讲我们用的MCU最小单位通常都是Byte,如果AG是2,意味着下位机软件势必要对通信数据做填充处理,因此有了下面的议题。2.不同指令的填充方式

    2.1 Connect指令

    在0xFF连接指令里,下位机回根据底层代码的配置将AG的预设值返回给上位机,上位机拿到信息后做好后续数据处理的准备。
    汽车标定技术--关于XCP里ADDRESS_GRANULARITY的理解w4.jpg
    AG的不同,影响的是上下位机element地址计算,如下图:
    汽车标定技术--关于XCP里ADDRESS_GRANULARITY的理解w5.jpg
    在不同AG值,同样的地址所包含的数据个数是不一样的,所以在实际操作中,假设上下位机双方约定AG=2,那么上位机就认为下位机的一个地址包含是一个WORD,而实际上我们接触的MCU都基本是按byte编址(一个地址一个Byte),如果此时观测量在MCU内部只有1个Byte,那么为了保证上位机获取数据的正确性,就必须在下位机软件里对数据做填充处理,如下:
    汽车标定技术--关于XCP里ADDRESS_GRANULARITY的理解w6.jpg
    2.2 Upload指令

    Upload指令主要是获取ECU 指定memory的数据,指令格式如下:
    汽车标定技术--关于XCP里ADDRESS_GRANULARITY的理解w7.jpg
    响应格式如下:
    汽车标定技术--关于XCP里ADDRESS_GRANULARITY的理解w8.jpg
    以AG = 1、标准CAN为例,常见的时序如下:
    汽车标定技术--关于XCP里ADDRESS_GRANULARITY的理解w9.jpg
    那如果AG = 2,那这时候MCU就要做格式填充考虑了,具体如下(没有考虑大小端):
    汽车标定技术--关于XCP里ADDRESS_GRANULARITY的理解w10.jpg
    如果AG=4,这时候其实一帧报文就只能传一个数据了,如下图所示:
    汽车标定技术--关于XCP里ADDRESS_GRANULARITY的理解w11.jpg
    这就解释了协议了这句话(用1、2、3等填充字节对数据帧进行填充):
    Depending on AG 1, 2 or 3 alignment bytes must be used in order to meet alignmentrequirements.
    2.3 Download指令

    该指令主要用于标定,如下:
    汽车标定技术--关于XCP里ADDRESS_GRANULARITY的理解w12.jpg
    协议里表示:If AG = DWORD, 2 alignment bytes must be used in order to meet alignment requirements.ELEMENT is BYTE, WORD or DWORD depending upon AG

    汽车标定技术--关于XCP里ADDRESS_GRANULARITY的理解w13.jpg
    因为上位机下发的肯定是DWORD,不会存在byte或者word情况 ,因此这里的填充主要是针对指令的填充。
    与AG相关的指令还有DAQ测量、编程等等,搞懂原理,这里就不一一例举。3.小结

    从实际代码来看,基本不存在对AG的配置,定死AG=Byte,如下:
    汽车标定技术--关于XCP里ADDRESS_GRANULARITY的理解w14.jpg

    汽车标定技术--关于XCP里ADDRESS_GRANULARITY的理解w15.jpg
    那至于为啥要提出AG,个人认为应该还是和标定的memory介质的编址方式\位宽有关,如果大家有这方面的经验,欢迎讨论。



    往期回顾:

    1.汽车标定精选
    汽车标定技术--标定概念详解
    汽车标定技术--Bypass的前世今生
    万字长文:汽车标定技术--XCP概述

    2.AUTOSAR精选
    AUTOSAR CryptoStack--CSM Job夹带了哪些私货
    AUTOSAR 诊断栈分析(一)
    AUTOSAR OS概述(一)

    3.汽车网络安全精选
    汽车信息安全--MCU启动常用密码算法
    汽车网络安全方案需求分析
    汽车信息安全--常见车规MCU安全启动方案
    车载信息安全场景概述

    4.汽车功能安全精选

    5.汽车虚拟化精选

        汽车ECU虚拟化技术初探(一)

        汽车ECU虚拟化技术(二)--U2A虚拟化功能

    6.杂七杂八

        Flash模拟EEPROM原理浅析

        征途漫漫:汽车MCU的国产替代往事

        车规MCU应用场景及国产替代进展

    快速发帖

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

    GMT+8, 27-12-2024 10:16 , Processed in 0.300974 second(s), 30 queries .

    Powered by Discuz! X3.5

    © 2001-2013 Comsenz Inc.