XCP学习笔记(2)-指令详解

标准(STD)指令

必实现指令

0xFF:CONNECT

0xFE:DISCONNECT

0xFD:GET_STATUS

0xFC:SYNCH

可选实现指令

0xFB:GET_COMM_MODE_INFO

0xFA:GET_ID

0xF9:SET_REQUEST

0xF8:GET_SEED

0xF7:UNLOCK

0xF6:SET_MTA

0xF5:UPLOAD

0xF4:SHORT_UPLOAD

0xF3:BUILD_CHECKSUM

0xF2:TRANSPORT_LAYER_CMD

0xF1:USER_CMD

标定(CAL)指令

必实现指令

0xF0:DOWNLOAD

可选实现指令

0xEF:DOWNLOAD_NEXT

0xEE:DOWNLOAD_MAX

如果AG = WORD/DWORD,则必须使用1/3个对齐字节以满足对齐要求。 元素是BYTE,WORD或DWORD取决于AG。 此命令不支持块传输,并且不能块传输序列中使用。

将被下载数据到内存中,从MTA开始。MTA将增加MAX_CTO / AG-1。

0xED:SHORT_DOWNLOAD

元素是BYTE,WORD或DWORD取决于AG。 此命令不支持块传输,并且不能块传输序列中使用。 该命令将没有效果(没有数据字节可以传输),如果MAX_CTO = 8

从Address开始写入指定长度的数据块。MTA指针设置为第一个数据元素。如果是元素个数超过(MAX_CTO-8)/AG,则返回错误码ERR_OUT_OF_RANGE。

0xEC:MODIFY_BITS

A = ( (A) & ((~((dword)(((word)~MA)<<S))) )^((dword)(MX<<S)) )

MTA不会受到影响。

Example:

页面切换(PAG)指令

必实现指令

0xEB:SET_CAL_PAGE

Mode参数:

  • ECU:给定的页面将使用从机的设备应用。
  • XCP:从设备XCP驱动将访问给定的页面。
  • ALL:逻辑段号被忽略。该命令适用于所有段。
  • ECU和XCP标志可以同时设置,也可以单独设置。
  • 如果校准数据页不能设置为给定的模式,则返回ERR_MODE_NOT_VALID。
  • 如果校准数据页不可用,则返回ERR_PAGE_NOT_VALID或ERR_SEGMENT_NOT_VALID。

0xEA:GET_CAL_PAGE

此命令返回当前激活的逻辑编号指定的访问模式的数据段的校准数据页。模式可以是0x01 (ECU)或0x02 (XCP)。所有其他值无效。

可选实现指令

0xE9:GET_PAG_PROCESSOR_INFO

PROPERTIES参数:

  • FREEZE=1:段可以设置为冻结模式。反之不能设置为冻结模式。

0xE8:GET_SEGMENT_INFO

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所属的地址映射范围标识符

GET_SEGMENT_INFO返回特定SEGMENT的信息。如果指定的SEGMENT不可用,则返回ERR_OUT_OF_RANGE。

返回指令(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的长度。

0xE7:GET_PAGE_INFO

GET_PAGE_INFO返回特定PAGE的信息。如果指定的PAGE不可用,则返回ERR_OUT_OF_RANGE。

PROPERTIES参数:

  • ECU_ACCESS_x:
  • 标志表示ECU是否以及如何访问该页。
  • ECU_ACCESS_WITH_XCP、ECU_ACCESS_WITHOUT_XCP = 00:不允许访问ECU
  • ECU_ACCESS_WITH_XCP、ECU_ACCESS_WITHOUT_XCP = 01:没有XCP
  • ECU_ACCESS_WITH_XCP、ECU_ACCESS_WITHOUT_XCP = 10:只有XCP
  • ECU_ACCESS_WITH_XCP、ECU_ACCESS_WITHOUT_XCP = 11:不关心
  • XCP_READ_ACCESS_x:
  • 标志表示XCP主机可以访问这个页面。
  • XCP_READ_ACCESS_WITH_ECU、XCP_READ_ACCESS_WITHOUT_ECU = 00:不允许XCP读访问。
  • XCP_READ_ACCESS_WITH_ECU、XCP_READ_ACCESS_WITHOUT_ECU = 01:没有ECU。
  • XCP_READ_ACCESS_WITH_ECU、XCP_READ_ACCESS_WITHOUT_ECU = 10:只有ECU。
  • XCP_READ_ACCESS_WITH_ECU、XCP_READ_ACCESS_WITHOUT_ECU = 11:不关心。
  • XCP_WRITE_ACCESS_x:
  • 标志表示XCP主机可以写入这个页面。
  • XCP_WRITE_ACCESS_WITH_ECU、XCP_WRITE_ACCESS_WITHOUT_ECU = 00:不允许XCP写访问。
  • XCP_WRITE_ACCESS_WITH_ECU、XCP_WRITE_ACCESS_WITHOUT_ECU = 01:没有ECU。
  • XCP_WRITE_ACCESS_WITH_ECU、XCP_WRITE_ACCESS_WITHOUT_ECU = 10:只有ECU。
  • XCP_WRITE_ACCESS_WITH_ECU、XCP_WRITE_ACCESS_WITHOUT_ECU = 11:不关心。

0xE6:SET_SEGMENT_MODE

如果指定的SEGMENT不可用,则返回ERR_OUT_OF_RANGE。

Mode参数:

  • FREEZE=1: 使能冻结模式。反之关闭冻结模式。

0xE5:GET_SEGMENT_MODE

如果指定的SEGMENT不可用,则返回ERR_OUT_OF_RANGE。

0xE4:COPY_CAL_PAGE

  • 该命令强制从机将一个校准页复制到另一个校准页。此命令仅在定义了多个校准页时可用。
  • 原则上,任何段的任何页都可以复制到任何段的任何页。
  • 如果校准数据页不能复制到给定的目的地,例如,由于目标是一个flash段,则返回ERR_WRITE_PROTECTED。
  • 如果校准数据页不可用,则返回ERR_PAGE_NOT_VALID或ERR_SEGMENT_NOT_VALID。

参考文献:

XCP指令详解 - fzxhub docs

相关推荐
菜鸡儿齐5 小时前
Unsafe方法学习
java·python·学习
留白_10 小时前
MySQL学习(7)——存储过程
学习
小酒丸子11 小时前
AD学习笔记之异形焊盘
笔记·学习
renhongxia111 小时前
如何对海洋系统进行知识图谱构建?
人工智能·学习·语言模型·自然语言处理·自动化·知识图谱
知识分享小能手12 小时前
Redis入门学习教程,从入门到精通,Redis 数据操作:知识点详解与代码实战(2)
数据库·redis·学习
red_redemption12 小时前
自由学习记录(138)
学习
夏日听雨眠12 小时前
文件学习8
学习
炽烈小老头14 小时前
【每天学习一点算法 2026/03/17】括号生成
前端·学习·typescript
似水明俊德14 小时前
01-C#.Net-泛型-学习笔记
java·笔记·学习·c#·.net