XCP协议-命令代码篇

所有不支持的CMD都用 ERR_CMD_UNKNOWN做返回,实现了 GET_SEED,则需要UNLOCK,实现了 SET_CAL_PAGE,则需要GET_CAL_PAGE

  • 1)基础命令(STD)

  • 2)标定命令(CAL)
3) 页面切换命令(PAG) - 可选支持
  • 4)DAQ与STIM命令
  • 5) 非易失性存储器编程命令(PGM)
         
  • 6)命令详细说明
  • 6.1)基础命令(CMD)- 必选命令
    • 6.1.1)主从建立连接 - CONNECT
该命令用于主从建立一个连续的、逻辑的、点对点连接。若已处于CONNECTED状态,则对从机应像是新的连接一样处理该CONNECT。未连接时不做其他命令处理
    
Mode = Normal,主设备可与从设备启动XCP通信。Mode=user defined,主设备可与从设备启动XCP通信同时告知从服务器进入特殊模式(user defined)
从机响应:
RESOURCE - 掩码标识资源可用性,若某资源可用则必须支持其资源必选的命令:
注:资源标志被标识不能完全标识XCP程序能访问该资源,不可访问时从服务器返回错误  ERR_RESOURCE_TEMPORARY_NOT_ACCESSIBLE
COMM_MODE_BASIC
BYTE_ORDER:0 - Intel,1- Motorola
ADDRESS_GRANULARITY: 地址粒度,单个地址中包含的元素大小, 主机需要计算地址时使用。
00 - BYTE(1) 01 - WORD(2) 02 - DWORD(4) 11 - 保留
SLAVE_BLOCK_MODE:标识从机块模式是否可用
OPTIONAL:标识是否有支持通信模式类型的附加信息可用,主设备可通过 GET_COMM_MODE_INFO获取相关信息
MAX_CTO: CTO数据包最大大小(Unit:Byte)
MAX_DTO : DTO数据包最大大小(Unit:Byte)
必须满足以下条件:
     MAX_CTO mod AG = 0
   MAX_DTO mod AG = 0
所有涉及从机本身地址范围的长度信息都基于AG (ELEMENTS)。如果长度信息指的是数据流(XCP协议),则以字节为单位 ????待研究
XCP Protocol Layer Version Number协议层规范的主要版本号
XCP Protocol Layer Version Number传输层规范的主要版本
  •  6.1.2)主从断连 - DISCONNECT
错误的回应:
ERR_CMD_BUSY - 标识当前不可断开
  •        6.1.3)获取从设备当前会话状态 - GET_STATUS
获取当前从设备状态,包含保护资源状态,待处理存储请求和DAQ/STIM基本状态
从设备响应:
Current Session Status :当前从设备会话状态
标志位
描述
STORE_CAL_REQ
请求存储校准数据 0 - 该模式可用, 1 - 该模式正在使用。从设备可根据EV_STORE_CAL通知主设备是否完成存储
STORE_DAQ_REQ
请求存储DAQ列表  0 - 该模式可用,1 - 该模式正在使用。从设备可根据 EV_STORE_DAQ通知主设备是否完成存储
CLEAR_DAQ_REQ
请求清除DAQ配置  0 - 该模式可用,1 - 该模式正在使用。从设备可根据 EV_CLEAR_DAQ通知主设备是否完成重置
DAQ_RUNNING
数据传输  0 - 该模式可用, 1 - 该模式正在使用。
RESUME
恢复模式 0 - 从设备不是恢复模式,1 - 从设备为恢复模式
注:如果从设备不支持请求的模式,则返回ERR_OUT_OF_RANGE。
Current Resource Protection Status:当前资源保护状态, 所有基础命令都不受保护
标志位
保护命令
CAL/PAG
标定/分页命令 0 - 不受SEED &KEY保护,1 - 受保护
DAQ
DAQ列表命令(DIRECTION = DAQ)  0 - 不受SEED &KEY保护,1 - 受保护
STIM
DAQ列表命令(DIRECTION = STIM)  0 - 不受SEED &KEY保护,1 - 受保护
PGM
编程命令  0 - 不受SEED &KEY保护,1 - 受保护
所有受保护的命令未经授权( G ET_SEED/UNLOCK)都返回 ERR_ACCESS_LOCKED错误码
Session configuration id: 会话配置ID
会话配置id必须先通过SET_REQUEST命令设置STORE_DAQ_REQ。这允许主设备验证自动启动的DAQ列表是否包含预期的数据传输配置
  • 6.1.4) 命令超时后同步执行命令 - SYNCH
每个命令超时后都会执行该同步命令,并且从设备端使用 ERR_CMD_SYNCH做否定回应。
  • 6.2)基础命令(CMD)- 可选命令
    • 6.2.1) 获取通信模式信息命令 - GET_COMM_MODE_INFO
从设备响应:
COMM_MODE_OPTIONAL:
MASTER_BLOCK_MODE标识主设备是否可用块模式传输命令。
可用 -  MAX_BS表示允许的最大块大小,作为块序列连续数据包 (DOWNLOAD_NEXT) 的数量;
          MIN_ST标识M->S最小间隔时间,单位100ms
INTERLEAVED_MODE标识交错模式是否可用。
可用 -  QUEUE_SIZE表示主设备连续发送命令报文到从设备接收队列的最大数量
XCP Driver Version Number:XCP驱动版本号
主版本在高位,副版本在低位。
  • 6.2.2)  获取从设备标识码 命令 - GET_ID
通过该命令可以获取到A2L文件的名称或者完整路径等信息
该命令用于自动配置会话和用于从设备标识,可请求以下Type的识别号:
类型
描述
0
ASCII文本
1
没有路径和扩展名的ASAM-MC2文件名
2
带有路径和扩展名的ASAM-MC2文件名
3
可以找到ASAM-MC2文件的URL
4
ASAM-MC2文件上传
128....255
用户定义的
从设备回应:
Length : 参数指定标识的字节数,= 0标识请求类型不可用。适用以下规则:Length mod AG = 0
Mode
TRANSFER_MODE :  1 -  则在响应的剩余字节中传输
0 -  则 从设备将内存传输地址(MTA)使用一个或多个upload命令上传所请求数据到主设备。
对于初始的UPLOAD命令,遵循以下规则:
Number of Data Elements UPLOAD [AG] = (Length GET_ID [BYTE]) / AG
COMPRESSED_ENCRYPTED:1 - 表示传输的数据被压缩或加密,此时只支持Type 4, XCP主机必须使用特定于实现的算法(在外部计算的函数中实现)来解压缩和/或解密数据
标识字符串是纯ASCII文本的字节流,它没有0终止
  • 6.2.3) 请求保存到非易失性存储器 - SET_REQUEST
Mode:
标志位
描述
STORE_CAL_REQ
请求存储校准数据 0 - 不设置, 1 - 设置。从设备可根据EV_STORE_CAL通知主设备是否完成存储
STORE_DAQ_REQ_NO_RESUME
请求存储DAQ列表 非RESUME  0 - 不设置, 1 - 设置 从设备可根据 EV_STORE_DAQ通知主设备是否完成存储,不会设置从机为RESUME模式,主机可在任何时间启动DAQlist
STORE_DAQ_REQ_RESUME
请求存储DAQ列表 RESUME  0 - 不设置, 1 - 设置 从设备可根据 EV_STORE_DAQ通知主设备是否完成存储, 隐式地将从服务器设置为RESUME模式
CLEAR_DAQ_REQ
请求清除DAQ配置  0 - 不设置, 1 - 设置 从设备可根据 EV_CLEAR_DAQ通知主设备是否完成重置
STORE_DAQ_REQ_X设置请求后,从设备 START_STOP_DAQ_LIST(Select)选择的所有DAQ列表到非易失性存储器中,同时必须存储会话配置ID。并且需先清除DAQlist 配置
从设备不支持请求模式时回应 ERR_OUT_OF_RANGE
  • 6.2.4) 获取受保护资源的种子 -GET_SEED
资源参数开启保护时使用该命令获取种子
当Mode = 0时,主设备请求从设备传输第一部分种子,从设备携带总长度和第一部分种子内容,Mode = 1,获取种子剩余部分长度(当总长度 > MAX_CTO-2)
主设备必须在发送Mode = 1前已发送了Mode = 0 ,否则从设备直接返回 ERR_SEQUENCE
一个GET_SEED只能请求一个资源,不支持不带资源请求或者多个资源请求若出现从设备返回错误 ERR_OT_OF_RANGE
Resource:与CONNECT - RESOURCE关联
从设备回应:
Length:表示剩余的种子字节数,当Length = 0,表示资源不受保护,不需要UNLOCK命令
主设备收到SEED后基于算法算出KEY通过UNLOCK命令发送到从设备,每个资源CAL/PAG,DAQ,STIM,PGM都有一种算法。
主设备从A2L描述文件中获取用于该从服务器的外部函数文件的名称。用于与外部函数文件通信的API在XCP协议-Part4“接口”中指定
  • 6.2.5)  发送被保护资源解锁密钥  -UNLOCK
使用前先通过SEED命令获取seed,主设备计算出KEY之后通过该命令发送,若未按顺序从设备发送 ERR_SEQUENCE
Length:表示(剩余的)密钥字节数,若KEY > MAX_CTO-2,则主设备必须使用密钥剩余长度的连续UNLOCK命令发送剩余密钥字节。
若密钥错误则从设备返回 ERR_ACCESS_LOCKED,从设备进入断开连接状态。
从设备回应:
响应包中包含与CONNECT - RESOURCE关联值
  • 6.2.6)设置从设备“内存传输地址”- SET_MTA
命令将为下面的内存传输命令初始化一个指针(32位地址+ 8位扩展)。 MTA用于命令BUILD_CHECKSUM, UPLOAD, DOWNLOAD, DOWNLOAD_NEXT, DOWNLOAD_MAX, MODIFY_BITS, PROGRAM_CLEAR, PROGRAM, PROGRAM_NEXT和PROGRAM_MAX
  • 6.2.7)从设备上传到主设备 - UPLOAD
将返回指定长度的数据块,从当前MTA开始。MTA将按给定的数据元素数量进行后增量
从设备回应:
根据AG 的不同,必须使用1、2或3个对齐字节来满足对齐要求。
元素是BYTE、WORD或DWORD,取决于AG。
若从设备不支持块模式则所有数据将在一个响应中回应,且请求的数据元素必须在[1 ... MAX_CTO/AG - 1],若超出长度返回错误 ERR_OUT_OF_RANGE
若支持块模式传输,则在同一个请求报文中多次响应请求,主设备端没有块个数限制,数据元素个数n范围在[1-255],分为次数 (n*AG-1)/(MAX_CTO -AG) + 1次传输
举例:
  • 6.2.8) slave上传到master(简短版本) -  SHORT_UPLOAD
返回指定长度的数据块, 元素是BYTE、WORD或DWORD,取决于AG。 该命令不支持块模式传输,不能在块模式传输序列中使用
  • 6.2.9)  在内存范围内构建校验和 -  BUILD_CHECKSUM ???待研究 (校验和如何计算)
返回由MTA和块大小定义的内存块的校验和结果。MTA将按块大小进行后增量。
从设备回应:
定义了以下校验和类型:
  • 0x01: XCP_ADD_11 将BYTE添加到BYTE校验和中,忽略溢出
  • 0x02: XCP_ADD_12 将BYTE添加到WORD校验和中,忽略溢出
  • 0x03: XCP_ADD_14 将BYTE添加到DWORD校验和中,忽略溢出
  • 0x04: XCP_ADD_22 将WORD添加到WORD校验和中,忽略溢出,块大小必须mod2
  • 0x05: XCP_ADD_24 将WORD添加到DWORD校验和中,忽略溢出,块大小必须mod2
  • 0x06: XCP_ADD_44 将DWORD添加到DWORD校验和中,忽略溢出,块大小必须mod4
  • 0x07: XCP_CRC_16 参见CRC错误检测算法
  • 0x08: XCP_CRC_16_CITT 参见CRC错误检测算法
  • 0x09: XCP_CRC_32 参见CRC错误检测算法
  • 0xFF: XCP_USER_DEFINED 用户自定义算法,在外部计算函数
不管校验和类型是什么,结果总是以DWORD形式给出。
使用校验和类型XCP_USER_DEFINED时,从设备可以指示主设备为了计算校验和,必须使用在外部计算函数(例如win32 DLL, UNIX共享目标文件),对象获取的名称在此从机的外部函数文件中
若块大小超过了从设备能出合理的范围返回错误,错误码ERR_OUT_OF_RANGE,并在块大小字段携带最大块大小:
CRC算法由以下参数指定:
Name:这是给定算法的名称,以“XCP_”开头的字符串值
Width: 这是用比特表示的算法宽度,这比多边形的宽度小1
Poly:该参数为多项式。这是一个二进制值,应该指定为十六进制数。多边形的顶部应该被省略。
例如,如果多边形是10110,你应该指定0x06。该参数的一个重要方面是它表示未反射多边形;无论是否反映算法,该参数的底部始终是除法时除数的LSB。
Init:算法启动时寄存器的初始值。这是在直接表算法中分配给寄存器的值。
在表算法中,我们可以认为寄存器总是从值0开始,并且在第N位迭代之后将该值xor到寄存器中。此参数应指定为十六进制数
Refin:这是一个布尔参数。如果为FALSE,则处理输入字节时,第7位将被视为最高有效位(MSB),第0位将被视为最低有效位。如果此参数为TRUE,则在处理之前反射每个字节
Refout:这是一个布尔参数。如果它被设置为FALSE,寄存器中的最终值将被直接送入XORout阶段。如果此参数为TRUE,则首先反映最终寄存器值
XORout:这是一个宽度位值,应该指定为十六进制数。在将值作为正式校验和返回之前,它被xor到最终寄存器值(在Refout阶段之后)
有关CRC算法的更多详细信息,请参阅: http://www.repairfaq.org/filipg/LINK/F_crc_v34.html
  • 6.3)辅助命令
    • 6.3.1)描述传输层特定命令 -  TRANSPORT_LAYER_CMD
举例:
该命令在传输层规范中定义。它用于执行传输层特定的动作
  • 6.3.2) 描述 用户定义的命令 - USER_CMD
该命令由用户自定义。它不是必须被用来实现其他功能服务
  • 6.4)标定命令(CAL) - 必选命令
    • 6.4.1)下载(主设备->从设备) -  DOWNLOAD
若AG为DWORD则按照2字节对齐, 元素是BYTE, WORD或DWORD取决于AG。
Number of data elements:标识标定元素的个数
如果从设备不支持Block传输模式,则下载为单笔传输,Number of data elements必须在[1 ... MAX_CTO/AG -2 ]范围内,若大于MAX_CTO/AG -2 反馈错误 ERR_OUT_OF_RANGE
从设备收到Download后必须先检查是否有足够资源来处理下载请求,没有返回 ERR_MEMORY_OVERFLOW,且不在继续执行单个下载请求,且此时从设备 内存内容不发生没有改变
如果支持Block传输模式,Download数据将以多个命令报文的形式传输,同时从设备存在 数据包的最大数量(块大小MAX_BS)的限制,
Number of data elements 可以在[1..min(MAX_BS*(MAX_CTO-2)/AG,255)]的范围内。
AG=1,主设备传输[ ((n*AG)-1) / (MAX_CTO-2) ],超过限制需使用连续的 DOWNLOAD_NEXT命令数据包。 ???待研究算法
如果AG>1, 主设备必须传输[((n*AG)-1) / (MAX_CTO-AG)]额外的、连续的DOWNLOAD_NEXT命令数据包  ???待研究算法
如果没有错误从设备只回应最后一个 DOWNLOAD_NEXT命令包
如果从设备在传输期间出现任何内部错误,马上反馈否定响应。若没有猪狗的资源则可以在收到第一个DOWNLOAD命令做否定响应代码
  • 6.5)标定命令(CAL) - 可选命令
    • 6.5.1)从主机下载到从机(块模式) -  DOWNLOAD_NEXT
如果AG=4,则必须使用2字节对齐,以满足对齐要求, 元素是BYTE, WORD或DWORD,取决于AG。
DOWNLOAD中以块模式传输方式时使用。该命令是对 DOWNLOAD剩余字节的补充下载;
从设备通过收该命令对快模式下的传输进行检查,序列错误返回错误码  ERR_SEQUENCE
从设备错误回应:
  • 6.5.2) 从主服务器下载到从服务器(固定大小) -  DOWNLOAD_MAX
根据AG的不同,必须使用1或3个对齐字节来满足对齐要求. 元素是BYTE, WORD或DWORD,取决于AG.
CMD中包含的MAX_CTO/AG-1元素的固定长度n的数据块将被复制到内存中,从MTA开始。MTA将由MAX_CTO/AG-1进行后增量。
在收到DOWNLOAD_MAX命令后,如果XCP从设备没有足够的资源,它必须发送 ERR_MEMORY_OVERFLOW,并且不执行任何单个下载请求。
如果DOWNLOAD_MAX请求将被拒绝,则slave的内存内容根本没有变化。 该命令不支持块传输,不能在块传输序列中使用。
  • 6.5.3) 从主服务器下载到从服务器(简短版本)  -  SHORT_DOWNLOAD
元素是BYTE, WORD或DWORD,取决于AG,写入指定长度的地址块,元素数量不超过(MAX_CTO-8)/AG,超过返回错误 ERR_OUT_OF_RANGE
如果 SHORT_DOWNLOAD请求将被拒绝,则slave的内存内容根本没有变化。 该命令不支持块传输,不能在块传输序列中使用。不适用于传输层为CAN
  • 6.5.4) 修改Bits - MODIFY_BITS
MTA引用的32位内存位置A将使用以下公式进行修改:  A = ( (A) & ((~((dword)(((word)~MA)<<S))) )^((dword)(MX<<S)) )
  • 6.6) 切换页面命令(PAG) - 可选命令
    • 6.6.1) 设置标定页面 -  SET_CAL_PAGE
如果从设备支持标定数据页面切换(GET_STATUS中 资源可用掩码中的PAG FLAG),则设置标定数据段的访问模式。
标定数据段及其页面由逻辑数字指定。
Mode:
标志
描述
ECU
从设备应用程序将使用给定的页面
XCP
从设备XCP驱动程序将访问给定的页面
ALL
忽略逻辑段号。该命令适用于所有段
标志ECU和XCP可以同时设置,也可以单独设置.若给定的模式不能被设置吧,从设备返回错误 ERR_MODE_NOT_VALID
如果标定数据页不可用,将返回 ERR_PAGE_NOT_VALID ERR_SEGMENT_NOT_VALID
  • 6.6.2) 查询 定页面 - G ET_CAL_PAGE
该命令返回当前为指定访问模式和数据段激活的标定数据页的逻辑编号。
模式可能为0x01 (ECU访问)或0x02 (XCP访问),其他值无效。
从设备响应:
  • 6.6.3)  获取PAG程序的基本信息  -   GET_PAG_PROCESSOR_INFO
该命令返回页的基本信息,从设备回应:
MAX_SEGMENT :是从设备的段总数
PAG_PROPERTIES :页的基本属性
0- 段不能设置为冻结(FREEZE)模式, 1- 段能设置为冻结(FREEZE)模式
  • 6.6.4)  获取段的特定信息  -   GET_SEGMENT_INFO
获取段的特定信息,若不支持则返回 ERR_OUT_OF_RANGE
Mode参数:
  • 0 :获取此段的基本地址信息
  • 1 :获取该分段的标准信息
  • 2 :获取这个SEGMENT的地址映射信息
INFO参数:
  • Mode=0:INFO=0:地址
  • Mode=0:INFO=1:长度
  • Mode=1:INFO参数不关心
  • Mode=2:INFO=0:源地址
  • Mode=2:INFO=1:目标地址
  • Mode=2:INFO=2:地址长度
INDEX参数:
  • Mode=0:INDEX参数不关心
  • Mode=1:INDEX参数不关心
  • Mode=2:INDEX:MAPPING_INFO所属的地址映射范围标识符
返回指令(Mode = 0)获取此段的基本地址信息
  • 响应包含这个SEGMENT的地址信息。
  • 如果SEGMENT_INFO = 0,该命令将在BASIC_INFO中返回该SEGMENT的地址。
  • 如果SEGMENT_INFO = 1,该命令将在BASIC_INFO中返回该SEGMENT的长度。
返回指令(Mode = 1)获取该分段的标准信息
  • 响应包含关于这个SEGMENT的标准信息。
  • MAX_PAGES:表示该SEGMENT可用的page数量。
  • EXTENSION:用于SET_MTA, SHORT_UPLOAD和SHORT_DOWNLOAD访问该SEGMENT内的PAGE时。
  • MAX_MAPPING:表示该SEGMENT内地址范围的数量应用地址映射。
返回指令(Mode = 2):
  • 如果Mode = 2, SEGMENT_INFO表示所请求的映射信息在MAPPING_INDEX的范围。
  • 如果SEGMENT_INFO = 0,该命令将返回MAPPING_INFO中MAPPING_INDEX的源地址。
  • 如果SEGMENT_INFO = 1,该命令将返回MAPPING_INFO中MAPPING_INDEX的目的地址。
  • 如果SEGMENT_INFO = 2,该命令将返回MAPPING_INFO中MAPPING_INDEX的长度
    • 6.6.5)  获取页面的特定信息  -  GET_PAGE_INFO
返回特定页面的信息,若不支持则返回 ERR_OUT_OF_RANGE,从设备回应:
PAGE_PROPERTIES:页的一般属性
ECU_ACCESS_x标志表示ECU是否以及如何访问该页面
如果ECU可以访问该页,则ECU_ACCESS_x标志表示是否只有当XCP主控器未同时访问该页时ECU才能访问该页,
是否只有当XCP主控器同时访问该页时ECU才能访问该页,或者ECU不在乎XCP主控器是否同时访问该页
00 - ECU不允许访问 01 - 不含XCP访问时允许 10 - 含XCP访问时允许,11 - 不关心
XCP_x_ACCESS_y标志指示XCP主机是否以及如何访问该页。这些标志根据XCP主机对该页面的访问类型(可读和/或可写)来区分XCP_ACCESS_TYPE
00 - ECU不允许访问 01 - 不含XCP访问时允许 10 - 含XCP访问时允许,11 - 不关心
00 - ECU不允许访问 01 - 不含XCP访问时允许 10 - 含XCP访问时允许,11 - 不关心
INIT_SEGMENT :一个页面的INIT_SEGMENT的第0页包含该页面的初始数据
  • 6.6.6)  设置一个SEGMENT模式  -  SET_SEGMENT_MODE
Mode:
FREEZE标志通过STORE_CAL_REQ选择要冻结的段
  • 6.6.7)  获取 一个SEGMENT模式  - G ET_SEGMENT_MODE
如果指定的段不可用,则返回 ERR_OUT_OF_RANGE
从设备回应:
Mode:
  • 6.6.8)  拷贝页  -  COPY_CAL_PAGE
该命令强制从设备将一个标定页复制到另一个标定页, 此命令仅在定义了多个标定页时可用。
原则上,任何段的任何页都可以复制到任何段的任何页。然而,限制可能是可能的。
如果标定数据页不能复制到给定的目标,例如,因为目标位置是一个闪存段,将返回ERR_WRITE_PROTECTED。在这种情况下,必须执行Flash编程程序。
如果标定数据页不可用,将返回ERR_PAGE_NOT_VALID或ERR_SEGMENT_NOT_VALID
  • 6.7) DAQ与STIM命令基础命令- 必选命令
    • 6.7.1)设置指向ODT表项的指针命令 - SET_DAQ_PTR
WRITE_DAQ或READ_DAQ操作初始化DAQ列表指针,指定列表不可用则返回错误 ERR_OUT_OF_RANGE
DAQ_LIST_NUMBER:DAQ-LIST号
ODT_NUMBER DAQ列表中的相对ODT数
ODT_ENTRY_NUMBERODT中的相对ODT-Entry号
  • 6.7.2)写入ODT-Entry中的元素命令 - WRITE_DAQ
将一个ODT条目写入由DAQ列表指针定义的DAQ列表。WRITE_DAQ只适用于可配置的DAQ列表中的元素,在SET_DAQ_PTR中必须满足 [MIN_DAQ, MIN_DAQ+1,..MAX_DAQ-1],否则返回 RR_WRITE_PROTECTED做回应。
BIT_OFFSET: 允许传输代表位状态的数据刺激元素, 对于在DIRECTION = DAQ列表中的MEASUREMENT,关键字BIT_MASK描述了要应用于测量数据以找出单个位的状态的掩码。对于DIRECTION = STIM的DAQ列 表中的测量,关键字BIT_MASK描述了必须被刺激的位的位置。Master必须将BIT_MASK转换为BIT_OFFSET ???待研究
e.g Bit7 BIT_MASK = 0x80 BIT_OFFSET = 0x07
BIT_OFFSET = FF则忽略该字段。 WRITE_DAQ适用于大小以AG表示的普通数据元素。如果BIT_OFFSET从0x00到0x1F,则ODT表项描述一个表示位状态的元素。 在这种情况下,DAQ元素的大小必须始终等于GRANULARITY_ODT_ENTRY_SIZE_x。如果该元素的值为0,则该位的值为0。如果元素 的值大于  0,则该位的值为1。
ODT-Entry必须满足颗粒度和最大值规则,命令 GET_DAQ_RESOLUTION_INFO描述。
DAQ-LIST-PTR自动后置递增到同一ODT中的下一个ODT-ENTRY。在写入ODT的最后一个ODT-ENTRY之后,DAQ指针的值是未定义的。当向下一个ODT写入DAQ列表时,主设备必须确保DAQ指针的正确位置
  • 6.7.3)设置DAQ-LIST模式命令 -  SET_DAQ_LIST_MODE
该命令可用于预定义的和可配置的DAQ-LIST,因此DAQ_LIST_NUMBER的范围为[0,1,..MAX_DAQ-1]
如果指定的列表不可用,则返回ERR_OUT_OF_RANGE
Mode:
FLAG
描述
ALTERNATING
0 =禁用交替显示模式;1= 启动交替显示模式,DIRECTION=DAQ方向才能设置, TIMESTAMP不能共存
DIRECTION
0 = DAQ设置为数据采集模式(从->主)1 = STIM设置为数据刺激模式(主->从)
TIMESTAMP
0 =禁用时间戳1 =启用时间戳 。 DIRECTION=DAQ/STIM方向都支持设置 ALTERNATING 不能共存,
GET_DAQ_RESOLUTION_INFO的TIMESTAMP_MODE中的TIMESTAMP_FIXED标志表示Master不能使用SET_DAQ_LIST_MODE关闭时间戳,若此时从设备收到设置返回 ERR_CMD_SYNTAX
PID_OFF
0 =发送带标识字段的DTO 1 =发送不带标识字段的DTO, DIRECTION=DAQ/STIM方向都支持设置
绝对ODT号时才允许关闭该标志位,没有标志位则必须在传输成体现,如can为其每一个DAQ-LIST分配CANID,
每个DAQ-LIST只有一个ODT,则允许传输
Event Channel Number: 有效地确定数据传输时序的通用信号源
transmission rate prescaler:降低期望传输速率 如果不进行缩减,预分频器的值必须等于1。为了简化,预标量必须大于1.仅用于具有DIRECTION = DAQ的DAQ-List
DAQ-Priority: 指定DAQ-list优先级,0-0XFF,数字越大优先级越高,优先处理,ECU不支持优先级设置时,若被设置>0则返回 错误 ERR_OUT_OF_RANGE
  • 6.7.4) Start /stop/select DAQ list 命令 -  START_STOP_DAQ_LIST
命令可用于预定义的和可配置的DAQ列表,因此DAQ_LIST_NUMBER的范围为[0,1,..MAX_DAQ-1],列表不可用返回 错误 ERR_OUT_OF_RANGE
Mode: 用于标识启动,停止,选择DAQ-LIST同步
Select模式用于选中某个DAQ-LIST,但不启动动数据传输,启动/停止使用 START_STOP_SYNCH,要求ECU保存到 非易失性内存中使用 SET_REQUEST,
一旦 START_STOP_SYNCH与 SET_REQUEST被处理,从服务器必须在t GET_DAQ_LIST_MODE 重置SELECTED
当由一个或以上DAQ-LIST正在传输时,则GET_STATUS DAQ_RUNNING必须被置位
从设备端响应:
FIRST_PID: 如果PID为绝对IDT号,则该值为绝对IDT号,如若不是则可通过一下公式计算:
Absolute_ODT_number(ODT i in DAQ list j) = FIRST_PID(DAQ list j) + relative_ODT_NUMBER(ODT i)
如果DTO报文的标识字段类型为“相对ODT号和绝对DAQ列表号”,则可以忽略FIRST_PID
  • 6.7.5) 启动/停止DAQ列表(同步) 命令 - START_STOP_SYNCH
该命令用于同步启动/停止DAQ列表的传输
Mode:启动选中的DAQ-LIST进行数据传输,可停止选中的DAQ-LIST或者停止所有。配合START_STOP_DAQ_LIST(select)使用,停止后必须重置S ELECTED标志
  • 6.8) DAQ与STIM命令基础命令- 可选命令
    • 6.8.1)ODT中写入多个元素 -  WRITE_DAQ_MULTIPLE
命令用于将连续的ODT-Entry写入由DAQ列表指针定义的DAQ列表,由该命令SET_DAQ_PTR先指定ODT-NUMBER与DAQ-LIST NUMBER。
NoDAQ :连续写入DAQ元素的数量,受MAX_CTO限制
Dummy: 每个DAQ元素末尾的虚拟字节必须用于对齐,即使是最后一个元素。
一个WRITE_DAQ_MULTIPLE必须在一个ODT上写入ODT-ENTRY,不能用作ODT边界写入
错误处理和WRITE_DAQ相同,无法检测到哪一个条目错误,出现错误标识整个配置都无效,使用该命令的前提MAX_CTO >=10
  • 6.8.2)ODT中读取元素 -  READ_DAQ
读取由DAQ列表指针定义的DAQ列表的一个ODT条目, DAQ列表指针在同一个ODT中自动后置递增
从设备回应:
ODT条目的大小必须满足粒度和最大值的规则。 (ref GET_DAQ_RESOLUTION_INFO)
  • 6.8.3)获取从设备DAQ时钟 -  GET_DAQ_CLOCK
该命令用于同步从设备空闲的数据采集时钟与主设备的数据采集时钟。如果从设备不支持时间戳数据采集,则该选项为可选选项
从设备回应:
    
返回的接收时间戳具有由GET_DAQ_RESOLUTION_INFO命令指定的格式。
当接收到GET_DAQ_CLOCK命令包时,它包含数据采集时钟的当前值。主从设备时间同步的准确性取决于该值的准确性。
在基于CAN的系统上,主设备将能够确定何时发送了GET_DAQ_CLOCK命令包。
该值对应于从设备接收到的时间点。根据返回的时间戳,主设备可以计算出主设备和从设备时钟之间的时间偏移。
补偿主设备和从设备时钟之间的时间漂移是主设备的责任。
  • 6.8.4)获取DAQ-LIST基本信息 -  GET_DAQ_PROCESSOR_INFO
从设备回应:
DAQ_PROPERTIES:daq-list的基本属性
FLAG
描述
DAQ_CONFIG_TYPE
0 - 静态daq-list 配置,1 - 动态daq-list配置
PRESCALER_SUPPORTED
0 - 不支持预调量,1 - 支持预调量 。 以减少传输周期
RESUME_SUPPORTED
0 - DAQ-LIST不能设置为RESUME模式,1 - DAQ-LIST可以设置为RESUME模式
BIT_STIM_SUPPORTED
0 不支持按位数据刺激,1 - 支持 按位数据刺激。 WRITE_DAQ中的 BIT_OFFSET确定 进行逐位数据刺激
TIMESTAMP_SUPPORTED
0 -  不支持时间戳模式, 1 - 支持时间戳模式。 若不支持, TIMESTAMP_MODE和TIMESTAMP_TICKS (GET_DAQ_RESOLUTION_INFO)参数无效
PID_OFF_SUPPORTED
0 - 不能关闭标识字段,1 - 允许关闭标识字段 ,绝对ODT号时才允许关闭PID
OVERLOAD_MSB和OVERLOAD_EVENT:标志表示使用的重载指示方法, ???待研究
00:无过载指示,01:PID的MSB过载指示,10: 事件包的过载指示,11: 不允许
为了指示过载情况,从机可能会设置下一个成功发送报文的PID的最高有效位(MSB)。
当使用MSB of PID时,ODT数的最大数量(绝对或相对)是有限的,并且必须在范围内:0x00 <= ODT_NUMBER(DAQ with overrun_msb) < 0x7C  
从机也可以通过EVENT的形式发送 EV_DAQ_OVERLOAD告诉主机.
MA X_DAQ: 从设备中可用的DAQ列表的总数,包含不可配置的预定义DAQ-LIST( GET_DAQ_LIST_INFO中获取 )或者可配置的DAQ-LIST。
若是 动态DAQ-LIST,则   MAX_DAQ = MIN_DAQ+DAQ_COUNT 
MIN_DAQ 预定义的DAQ列表个数, 对于预定义的DAQ列表,DAQ_LIST_NUMBER的取值范围为[0,1,..MIN_DAQ-1]
DAQ_COUNT: 动态分配的DAQ列表的数量, MAX_DAQ-MIN_DAQ为可配置的DAQ列表个数。
对于可配置的DAQ列表,DAQ_LIST_NUMBER在[MIN_DAQ,MIN_DAQ+1,..MAX_DAQ-1]的范围内
MAX_EVENT_CHANNEL是可用事件通道的数量, MAX_EVENT_CHANNEL = 0x00表示事件数未知
DAQ_KEY_BYTE:
Optimisation_Type: 标志指示主优选使用的优化方法类型  ???待研究
Address_Extension: 标志表示一个ODT或一个DAQ内的所有表项的地址扩展名是否必须相同
00 -  址扩展名在同一个ODT中可以不同 01-地址扩展名对于一个ODT中的所有条目是相同的 
10 -  不允许 11 -  地址扩展在一个DAQ内的所有条目是相同的
Identification_Field_Type 标志表示从设备在向主设备传输数据包时将使用的标识字段类型。
主服务器在向从服务器传输STIM包时必须使用相同类型的标识字段
00 - 绝对ODT号 01 - 相对ODT号+绝对DAQ-LIST号(Byte)
10 - 相对ODT号+绝对DAQ-LIST号(WORD) 11 - 相对ODT号+绝对DAQ-LIST号(word,对齐)
  • 6.8.5)获取DAQ处理器的解析基本信息 -  GET_DAQ_RESOLUTION_INFO
从设备回应:
GRANULARITY_ODT_ENTRY_SIZE_x: ODT条目大小的粒度
O DT元素地址必须满足一下公式:Address mod GRANULARITY_ODT_ENTRY_SIZE_x = 0
对于由ODT表项描述的每个元素的大小,必须满足以下条件:
Sizeof(element described by ODT entry) mod GRANULARITY_ODT_ENTRY_SIZE_x = 0
MAX_ODT_ENTRY_SIZE_x ODT-Enrty的最大大小(DIRECTION = DAQ)
对于由ODT条目描述的每个元素的大小,必须满足以下条件:
Sizeof(element described by ODT entry) <= MAX_ODT_ENTRY_SIZE_x
TIMESTAMP_MODE和TIMESTAMP_TICKS:若从设备支持时间戳模式则该字节有效, 
数据采集时钟是一个自由运行的计数器,它永远不会被重置或修改,并且在发生溢出时自动封装
TIMESTAMP_MODE:
000 -  没有时间戳 001 - 1 010 - 2 011 不允许 100 - 4
TIMESTAMP_FIXED:标志表示Slave总是以时间戳模式发送DTO报文
  • 6.8.6)获取DAQ-LIST模式 -  GET_DAQ_LIST_MODE
返回指定DAQ列表当前模式的信息。
该命令可用于预定义的和可配置的DAQ列表,因此DAQ_LIST_NUMBER的范围为[0,1,..MAX_DAQ-1],命令不可用返回 ERR_OUT_OF_RANGE
从设备响应:
Current Mode:
FLAG
描述
SELECTED
0 =未选择DAQ列表 1 =已选择DAQ列表
DIRECTION
0 =设置DAQ数据采集模式(从->主) 1 =设置STIM数据刺激模式(主->从)
TIMESTAMP
0 - 被禁用 1- 被启动
PID_OFF
0 =发送带有标识字段的DTO。1 =发送没有标识字段的DTO
RUNNING
0 = DAQ列表未激活1 = DAQ列表已激活
RESUME
0 =此DAQ列表不是RESUME模式中使用的配置的一部分。1 =此DAQ列表是RESUME模式中使用的配置的一部分
  • 6.8.7)获取事件通道特定信息 -  GET_DAQ_EVENT_INFO
返回特定事件通道的信息。一个从0到MAX_EVENT_CHANNEL-1的数字表示事件通道的地址。如果指定的事件通道不可用,则返回ERR_OUT_OF_RANGE
从设备响应:
DAQ_EVENT_PROPERTIES:
STIM与DAQ标志位:
00 - 不支持 01 - 只支持DAQ方向 10 -只支持STIM方向 11 - 双向支持
CONSISTENCY_DAQ标志位: 对于这个事件通道,属于同一个DAQ列表的所有数据都被一致地处理,被置位标识不同DAQ之间按照优先级处理
CONSISTENCY_EVENT标志位 :表示此事件通道的所有数据都被一致地处理。 被置位标识不同事件通道之间按照优先级处理,其内部一致处理
MAX_DAQ_LIST: 表示可以分配给此事件通道的DAQ列表的最大数量
  MAX_DAQ_LIST = 0x00表示此事件可用,但当前不能使用。MAX_DAQ_LIST = 0xFF表示没有限制。
此命令自动将内存传输地址(MTA)通过ASSII文本格式 使用一个或多个UPLOAD命令 传输给主设备, UPLOAD初始话应遵循规则:
Number of Data Elements UPLOAD [AG] = (Length GET_DAQ_EVENT_INFO [BYTE]) / AG
EVENT_CHANNEL_NAME_LENGTH:指定名称中的ASCII字节数。不能有0终止。
EVENT_CHANNEL_TIME_CYCLE:指示从属处理此事件通道的采样周期,通俗理解周期上报时间
EVENT_CHANNEL_TIME_UNIT:时间单位
EVENT_CHANNEL_PRIORITY: 指定从服务器处理不同事件通道时该事件通道的优先级。
这个优先级是从属服务器的一个固定属性,因此是只读的。EVENT_CHANNEL_PRIORITY = FF的事件通道具有最高的优先级
  • 6.9) 静态daq-list配置命令(STAT)- 必选命令
    • 6.9.1) 清除DAQ-LIST配置 -  CLEAR_DAQ_LIST
该命令可用于预定义的和可配置的DAQ列表,因此DAQ_LIST_NUMBER的范围为[0,1,..MAX_DAQ-1]
如果指定的列表不可用,则返回 ERR_OUT_OF_RANGE
CLEAR_DAQ_LIST清除指定的DAQ列表。
对于可配置的DAQ列表,所有ODT条目将重置为地址=0,扩展=0和大小=0(如果有效:bit_offset = 0xFF)。
对于预定义和可配置的DAQ-LIST,将停止该列表上正在运行的数据传输,并重置所有DAQ列表状态
  • 6.10) 静态daq-list配置命令(STAT)- 可选命令
    • 6.10.1)获取DAQ列表的具体信息 -  GET_DAQ_LIST_INFO
返回特定DAQ列表的信息, 如果指定的列表不可用,则返回 ERR_OUT_OF_RANGE
从设备响应:
DAQ_LIST_PROPERTIES: DAQ列表的特定属性
FLAG
描述
PREDEFINED
0 = DAQ列表配置可以更改,1 = DAQ列表配置是固定的
EVENT_FIXED
0 =事件通道可修改,1 =事件通道已固定
DAQ and STIM标志位:
00 - 不支持,01 - 支持DAQ方向 10 - 支持STIM方向 11 - 双向支持
MAX_ODT: 表示该DAQ列表的ODT个数
MAX_ODT_ENTRIES: 表示每个ODT中的ODT表项个数
FIXED_EVENT :表示将用于此DAQ列表的固定事件通道的数量
  • 6.11) 动态daq-list配置命令(DYN)- 必选命令
    • 6.11.1) 释放 动态DAQ配置 - FREE_DAQ
清除所有DAQ-LIST并释放所有动态分配的DAQ-LIST,ODT,ODT-ENTRY ,每次ALLOC_DAQ之前都需要释放
  • 6.11.2) 分配DAQ列表 -   ALLOC_DAQ
为从设备分配DAT-LIST,如ECU没有足够的动态内存则返回错误 ERR_MEMORY_OVERFLOW
注意:主设 备严格按照顺序FREE_DAQ->ALLOC_DAQ->ALLOC_ODT->ALLOC_ODT_ENTRY,否则从设备之间返回错 误码 E RR_SEQUENCE
  • 6.11.3) 分配DAQ列表中的ODT -  ALLOC_ODT
为从设备 指定的DAQ列表分配ODT, DAQ_LIST_NUMBER必须在 [MIN_DAQ, MIN_DAQ+1,.. .MIN_DAQ+DAQ_COUNT-1]范围内
从设备不支持返回 ERR_OUT_OF_RANGE。没有足够的动态内存返回错误 ERR_MEMORY_OVERFLOW ,遵循上述 注意
  • 6.11.4) 分配ODT中ODT-Entry -  ALLOC_ODT_ENTRY
为从设备 指定的DAQ列表指定的ODT中分配ODT-ENTRY, DAQ_LIST_NUMBER必须在 [MIN_DAQ, MIN_DAQ+1,.. .MIN_DAQ+DAQ_COUNT-1]范围内
从设备不支持返回 ERR_OUT_OF_RANGE。没有足够的动态内存返回错误 ERR_MEMORY_OVERFLOW ,遵循上述注意
  • 6.12) 非易失性存储器编程(PGM) - 必选命令
    • 6.12.1) 指示编程序列的开始  -  PROGRAM_START
该命令表示非易失性存储器编程序列开始,从设备不支持编程时返回错误 ERR_GENERIC。
必须在 PROGRAM_CLEAR、PROGRAM、PROGRAM_MAX或PROGRAM_NEXT前执行,结束有PROGRAM_RESET命令指示。
内存 编程可能具有实现特定的先决条件(从设备处于安全的物理状态,额外的代码下载,…),并且在编程序列期间其他命令的执行可能受到限制(数据采集可能不运行,标定可能受到限制,…)。在内存编程序列中,下列命令必须始终可用:
SET_MTA
PROGRAM_CLEAR
PROGRAM
PROGRAM_MAX or PROGRAM_NEXT
以下命令是可选的(例如,验证内存内容):
UPLOAD
BUILD_CHECKSUM
如果非易失性内存编程需要下载额外的代码,那么必须在执行PROGRAM_START命令之前完成下载。MTA必须指向已下载例程的入口点。
从设备回应:
COMM_MODE_PGM:
    
MASTER_BLOCK_MODE: 标志表示在编程过程中主块模式是否可用。
INTERLEAVED_MODE: 标志表示在编程过程中是否可以使用交错模式。
SLAVE_BLOCK_MODE: 标志表示从块模式在编程过程中是否可用。
当从设备处于内存编程模式时,通信参数MAX_CTO、MAX_BS、MIN_ST和QUEUE_SIZE可能会改变。
新的通信参数MAX_CTO_PGM, MAX_BS_PGM, MIN_ST_PGM和QUEUE_SIZE_PGM在正向响应中返回。
  • 6.12.2) 清除一部分非易失性内存 -  PROGRAM_CLEAR
此命令用于在重新编程之前清除一部分非易失性内存, 工作流程取决于Mode字节:
Absolute Access mode(绝对访问模式):
Parameter
描述
MTA
MTA指向从设备扇区的开始,扇区在A2L描述文件中描述,如果有多个扇区则按照一定顺序被清除,主设备必须要用一个新的MTA重复PROFRAM_CLEAR服务。在这种情况下,主机必须保留由扇区的清除序列号给出的订单信息。
Clear range
“清除范围”表示需要清除的内存部分的长度。 PROGRAM_CLEAR服务一次清除一个完整的扇区或多个扇区
Functional Access mode(功能访问模式):
Parameter
描述
MTA
MTA对清除功能没有影响
clear range
该参数需要逐位解释:
基本用例:
0x00000001:清除所有标定数据区域
0x00000002:清除所有代码区域(未覆盖引导区域)
0x00000004:清除NVRAM区域
0x00000008 ..0x00000080:保留
项目特定用例:
0x00000100…0xFFFFFF00:用户自定义
举例:
如果项目将标定区域划分为不同的区域,则可以将项目特定的高点定义如下:
0x00000100:清除标定数据区1
0x00000200:清除标定数据区2
0x00000400:清除标定数据区3
在这个用例中,不同的校准区域可以重新编程,而不需要存储器映射和闪存组织的进一步信息。
这些参数必须在项目特定的编程流程控制中指定
  • 6.12.3) 编程一个非易失性存储器段 -  PROGRAM
  • 如果AG= DWORD,必须使用2个对齐字节才能满足需求。
  • 元素是BYTE、WORD或DWORD,取决于AG。
  • 该命令用于对从机内部的数据进行编程。取决于 访问模式(由PROGRAM_FORMAT定义)支持2个不同的概念。
  • 当数据元素的数量为0时,表示内存段的结束。
  • 整个编程序列的结束由PROGRAM_RESET表示。从设备将进入断开连接状态。通常从设备执行硬件复位。
  • 此命令可能支持块传输,类似命令DOWNLOAD和DOWNLOAD_NEXT
Absolute Access mode(绝对访问模式):CTO中包含的指定长度(大小)的数据块将被编程到非易失性存储器中,从MTA开始。
MTA将按数据字节数进行后增量。如果要对多个存储扇区进行编程,主设备必须保留在IF_DATA描述中给出的顺序信息,称为扇区的编程序列号。
Functional Access mode(功能访问模式): CTO中包含的指定长度(大小)的数据块将被编程到非易失性存储器中。ECU软件自动知道新flash内容的起始地址。它取决于PROGRAM_CLEAR命令。ECU期望在一个数据流中获得新的flash内容,ECU自动完成分配。
MTA作为块序列计数器工作,它在主服务器和服务器内部进行计数。块序列计数器允许在多个编程请求序列中编程服务失败的情况下改进错误处理。当接收到一个PROGRAM_FORMAT请求消息时,服务器的块序列计数器应该初始化为1。这意味着在PROGRAM_FORMAT请求消息之后的第一个PROGRAM请求消息以一个1(1)的块序列计数器开始。对于每个后续的数据传输请求,它的值增加1。在最大值时,块序列计数器滚动并从0x00开始处理下一个数据传输请求消息
  • 6.12.4) 指示编程序列的结束 -  PROGRAM_RESET
这个可选命令表示非易失性存储器编程序列的结束, 它可能有反应,也可能没有反应。在任何一种情况下,从设备都将进入断开连接状态。该命令可用于强制从设备复位。
  • 6.13) 非易失性存储器编程(PGM) - 可选命令
    • 6.13.1) 获取PGM处理器的一般信息 -  GET_PGM_PROCESSOR_INFO
该命令返回关于编程的一般信息
从设备回应:
PGM_PROPERTIES
ABSOLUTE_MODE and FUNCTIONAL_MODE:
00 - 不支持,01 - 只支持绝对访问模式,10 - 只支持功能访问模式, 11 - 两种模式都支持
COMPRESSION_x:标志指示slave可以处理传入数据的哪种压缩状态。答案是所有可编程段和/或扇区的摘要(或操作)。
00 - 不支持,01 - 支持,10或者11 - 两种都满足(支持和请求)
ENCRYPTION_x: 标志指示从服务器可以处理传入数据的哪种加密状态。答案是所有可编程段和/或扇区的摘要(或操作)
00 - 不支持,01 - 支持, 10 或者11 - 两种都满足(支持和请求)
NON_SEQ_PGM_x:标志表示从属服务器是否可以处理与传入数据相关的不同类型的序列。答案是所有可编程段和/或扇区的摘要(或操作)
00 - 不支持,01 - 支持, 10 或者11 - 两种都满足(支持和请求)
MAX_ SECTOR: 从设备的扇区总数
  • 6.13.2) 获取扇区的特定信息 -  GET_SECTOR_INFO
GET_SECTOR_INFO返回特定扇区的信息。 如果指定的扇区不可用,则返回ERR_OUT_OF_RANGE。这个可选命令只对编程方法“绝对访问模式”有用
从设备回应:(Mode = 0 获取此扇区的起始地址, = 1 获取扇区长度[BYTE] 
Clear Sequence Number and Program Sequence Number: 在其中的顺序中,主机必须清除和编程闪存扇区,
每个序列号必须是唯一的。不必编程的扇区可以在编程流控制中跳过
例1:在这个例子中,内存必须从小扇区号清除到大扇区号,然后从大扇区号重新编程到小扇区号
例2:在这个例子中,必须交替清除内存扇区并从小扇区数重编程为大扇区数
如果Mode = 0,该命令返回SECTOR_INFO中该扇区的起始地址。
如果Mode = 1,该命令以字节为单位返回SECTOR_INFO中该扇区的长度。
下面的规则适用: Length mod AG = 0
从设备回应:(Mode = 2 获取扇区的名称长度
Mode = 2,该命令自动将MTA通过一个或者多个Upload命令进行上传。对于初始的UPLOAD命令,
适用如下规则:数据元素个数UPLOAD [AG] = (Length GET_SECTOR_INFO [BYTE]) / AG其中SECTOR_NAME_LENGTH指定名称中的ASCII字节数。不能有0终止
  • 6.13.3) 准备非易失性存储器编程 -  PROGRAM_PREPARE
这个可选命令用于指示代码下载的开始,作为非易失性存储器编程的先决条件。MTA指向将存储代码的易失性存储器位置的开始。参数Codesize指定要下载的代码的大小。下载本身是通过使用SET_MTA和download等后续标准命令完成的。
代码大小以BYTE, WORD或DWORD表示,具体取决于AG。
从设备必须确保目标内存区域是可用的,并且处于允许下载代码的操作状态。如果不是,则返回 ERR_GENERIC
  • 6.13.4) 编程前设置数据格式 -  PROGRAM_FORMAT
该命令描述了以下不间断数据传输的格式。数据格式在编程序列开始时直接设置,直到该序列结束时有效。该序列将被其他命令终止,例如SET_MTA。
如果该命令不是在序列的开始传输,则假定使用未修改的数据和绝对地址访问方法
如果从服务器希望传输修改后的数据,并且没有传输PROGRAM_FORMAT命令,那么从服务器将返回 ERR_SEQUENCE
格式化方法说明如下:
Parameter
Hex与描述
Compression method(压缩方法)
0x00 -  未压缩的数据(默认);0x80...0xff - 用户定义
Encryption method(加密方法)
0x00 -  数据未加密 (默认);0x80...0xff - 用户定义
Programming method(编程方法)
0x00 -   序编程(默认);0x80...0xff - 用户定义
Access method(接入方法)
0x00 -  绝对接入方式(默认),MTA使用物理地址
0x01 -  功能访问方式MTA作为新生成的flash内容文件的块序列号
0x80-0xff -  用户定义
可以使用不同的访问模式进行清理和编程
主机不会执行重新格式化。主服务器只是从ASAM MCD-MC2描述文件中获取标识重新格式化方法的值,并将它们传递给从服务器。 
受影响的命令:PROGRAM, PROGRAM_MAX, PROGRAM_NEXT, SET_MTA
  • 6.13.5) 编程一个非易失性存储器段(块模式) -  PROGRAM_NEXT
如果AG = DWORD,必须使用2个对齐字节以满足对齐要求。 元素是BYTE, WORD或DWORD,取决于AG。
该命令用于以块传输方式为PROGRAM命令传输连续的数据字节。
从设备错误回应:
如果数据元素的数量与期望值不匹配,则返回错误码 ERR_SEQUENCE 。否定响应将包含预期数量的数据元素
  • 6.14.6) 编程一个非易失性内存段(固定大小) -  PROGRAM_MAX
根据AG的不同,必须使用1或3个对齐字节来满足对齐要求。 元素是BYTE, WORD或DWORD,取决于AG。
CTO中包含的MAX_CTO_PGM-1元素的固定长度的数据块将被编程到非易失性存储器中,从MTA开始。MTA将被MAX_CTO_PGM-1后加。
该命令不支持块传输,不能在块传输序列中使用。
  • 6.14.7) 程序验证 -  PROGRAM_VERIFY

Verification Mode = 00时,主服务器可以请求从服务器启动内部测试例程,以检查新的FLASH内容是否等于Flash的其余部分。
Verification Mode = 01时 ,主服务器可以告诉从服务器,他将向从服务器发送一个验证值。
Type:
验证类型
描述
0x0001
Flash的标定 区域
0x0002
flash的代码区域
0x0004
完整的flash内容
0x0008...0x0080
保留
0x0100...0xff00
用户自定义
  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: XCP协议是一种用于汽车诊断和调试的通信协议。基础驱动代码是指用于实现XCP协议的驱动程序的代码XCP协议基础驱动代码主要用于两个方面:通信接口和功能实现。 在通信接口方面,基础驱动代码负责与汽车的诊断接口进行通信。这包括与汽车的ECU(Engine Control Unit)或其他诊断设备进行连接,并进行数据的传输和交换。基础驱动代码需要实现与XCP协议规定的通信格式的解析和封装,以便处理来自ECU或其他诊断设备的请求和响应。 在功能实现方面,基础驱动代码需要提供一套接口,供上层应用程序使用。这些接口包括启动、停止、读取、写入等操作函数,用于发起诊断请求和接收诊断响应。基础驱动代码还需要处理与诊断设备之间的通信协议细节,如保持连接、错误处理等。 基础驱动代码的实现需要考虑多种情况和条件,如不同的通信接口类型(例如CAN、Ethernet等)、不同的诊断设备厂商和版本等。因此,为了确保兼容性和可移植性,基础驱动代码通常采用模块化和可配置的设计。 总之,XCP协议基础驱动代码是实现XCP协议的关键部分,它通过提供通信接口和功能实现,使上层应用程序能够与汽车的ECU或其他诊断设备进行通信和数据交换。 ### 回答2: XCP协议基础驱动代码是一种用于汽车诊断和通信的协议XCP(即Universal Measurement and Calibration Protocol)协议可以在汽车电子控制单元(ECU)和诊断测试设备之间进行数据交换。基础驱动代码是实现XCP协议的底层代码,它提供了与ECU通信所需的功能和接口。 XCP协议基础驱动代码通常包括以下几个主要组件。 1. 通信接口:该组件负责与ECU进行物理层通信,如CAN总线、以太网等。它提供了发送和接收数据的功能,以及对通信错误和中断的处理。 2. XCP协议解析器:该组件负责解析XCP协议的数据包,并将其转换为可读的格式。它可以解析命令帧和响应帧,识别XCP协议的各种命令和参数。 3. 数据管理:该组件负责管理从ECU接收和发送的数据。它可以对数据进行存储和处理,以便后续的测量、校准和诊断操作。 4. 错误处理:该组件负责处理通信错误和异常情况。它可以识别和报告错误代码,并采取适当的措施来纠正错误。 5. 接口封装:该组件负责封装和暴露XCP协议的功能和接口,以便上层应用程序可以方便地调用和使用。 XCP协议基础驱动代码的设计和实现需要考虑到效率、可靠性和扩展性等方面的需求。它应该能够满足不同ECU的通信要求,并提供灵活的配置和扩展选项,以适应不同的应用场景。同时,它还应该具备较高的性能和稳定性,以确保在各种条件下能够可靠地与ECU进行通信和数据交换。 ### 回答3: XCP协议基础驱动代码是指用于支持XCP协议的驱动程序代码XCPXCP Communication Protocol)是一种用于汽车电子系统开发和测试的通信协议,它允许在车辆控制单元(ECU)和开发工具之间进行高速数据交换和通信。 XCP协议基础驱动代码的主要功能是实现与ECU之间的通信和数据交换。这些代码通常包括以下方面的功能: 1. 连接管理:驱动代码负责与ECU建立、维护和关闭XCP协议连接。它负责处理连接请求、回应和断开连接。 2. 数据传输:驱动代码负责将数据从开发工具传输到ECU,或从ECU传输到开发工具。它实现了XCP协议中的数据传输机制,包括使用标准的数据帧格式和传输层协议。 3. 通信控制:驱动代码负责处理ECU的通信请求和控制命令。它能够解析和执行来自ECU的命令,并给出相应的回应。 4. 数据读写:驱动代码提供了读取和写入ECU内部数据的接口。它根据XCP协议的要求,实现了对ECU的内存和寄存器的读写操作。 5. 时钟同步:驱动代码负责保证开发工具与ECU之间的时钟同步。它确保双方能够按照相同的时间基准进行数据传输和通信。 总的来说,XCP协议基础驱动代码是一个提供了与ECU进行高速数据交换和通信的软件模块。它实现了XCP协议中的各种功能,包括连接管理、数据传输、通信控制、数据读写和时钟同步等。通过使用这些驱动代码,开发工具可以方便地与汽车电子系统进行交互和控制,加快了汽车电子系统的开发和测试过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值