小猫爪:嵌入式小知识16-XCP协议简介

news2024/11/26 0:32:40

小猫爪:嵌入式小知识16-XCP协议简介

  • 0 目录
  • 1 前言
  • 2 XCP协议简介
    • 2.1 各种包
      • 2.1 CMD
      • 2.2 RES
      • 2.3 ERR
      • 2.4 EV
      • 2.5 SERV
      • 2.6 DAQ
      • 2.7 STIM
      • 2.8 总结
    • 2.2 错误处理
      • 2.2.1 Time-out Error Handling
      • 2.2.2 Error Code Error Handling
  • END

0 目录

  1. 小猫爪:嵌入式小知识15-XCP基础简介
  2. 小猫爪:嵌入式小知识16-XCP协议简介
  3. 小猫爪:嵌入式小知识17-XCP on CAN简介

1 前言

  上一节介绍了一下XCP的相关基础,为我们后续学习打下了坚实的基础,接下来就开始进行枯燥乏味的协议介绍。参考资料:XCP协议规范2003。

2 XCP协议简介

2.1 各种包

  在XCP基础简介文章中,提到了XCP协议包分为CTO和DTO,然后又细分为CMD, RES, ERR, EV, SERV, DAQ, STIM,在上篇文章中已经对XCP协议包的格式进行了简单说明,XCP依靠PID来进行区分协议包类型,具体PID划分如下:
在这里插入图片描述

接下来来看看每一种包的形式和作用。

注:下面的表中出现的MAX_CTO和MAX_DTO,分别表示CTO包和DTO包的最大数据字节长度。

2.1 CMD

在这里插入图片描述
  CMD就是XCP的各种命令,PID的范围是0xC0~0xFF,具体的相关命令有:

  1. Standard commands (STD)
    在这里插入图片描述

  2. Calibration commands (CAL)
    . 在这里插入图片描述

  3. Page switching commands (PAG)
    在这里插入图片描述

  4. Data Acquisition and Stimulation commands (DAQ)
    在这里插入图片描述

  5. Non-volatile memory programming commands (PGM)
    在这里插入图片描述
      每一种命令的作用这里就不一一细说了,具体请参考XCP标准协议的Part2,《ASAM_XCP_Part2_Protocol-Layer-Specification_V1.0》。

2.2 RES

在这里插入图片描述
  RES是CMD的正响应,PID固定为0xFF,具体RES的响应内容根据CMD而变化,具体请参考XCP标准协议的Part2,《ASAM_XCP_Part2_Protocol-Layer-Specification_V1.0》。

2.3 ERR

在这里插入图片描述
  ERR是CMD的负响应,PID固定为0xFE,Error Code如下所示:
在这里插入图片描述

2.4 EV

在这里插入图片描述
  EV就是从节点在连接之后,向主节点发送一些异步事件通知,PID固定为0xFD,Event Code如下:
在这里插入图片描述

2.5 SERV

在这里插入图片描述
  SERV就是从节点在连接之后,向主节点发送一些服务请求,PID固定为0xFC,Service Request Code如下:
在这里插入图片描述

2.6 DAQ

在这里插入图片描述
  DAQ就是从节点给主节点传输数据包,其中PID范围为0x00~0xFB,在上一节中提到过,DAQ的PID包含了绝对或相对ODT编号。

2.7 STIM

在这里插入图片描述
  DAQ就是主节点给从节点传输数据包,其中PID范围为0x00~0xBF,在上一节中提到过,STIM的PID包含了绝对或相对ODT编号。

2.8 总结

  所有的PID看下来后,这里就可以总结一下XCP标定的原理过程了。一般在主节点发起连接CMD并且连接成功后,主节点就可以发送各种花里胡哨的命令进行花里胡哨的操作,配置ODT,配置DAQ_list,如果激活了DAQ_list,那么从节点就会愉快的给你定期发送DAQ进行数据测量,当然主节点也可以周期发送读取数据CMD读取数据进行数据测量,然后还可以发送标定命令修改被标定数据值,慢慢的校准慢慢的标定直到被测量数据值满足期望值,然后马上保存被标定数据值,随后根据需求整理打包成各种PAR数据,然后再用XCP的PGM类命令将PAR下载到ECU目标FLASH区域中完成最终标定。

2.2 错误处理

  再来看看XCP的错误处理方式。首先来看看在错误处理上的一些小点。

  1. Error
      在XCP中定义的错误有两种,第一种就是主节点错误的发送相关命令,从节点发送负响应,这种错误被称为Error Code Error;还有一种就是在主节点发送命令后,从节点未在规定时间内给予正负响应,这种错误被称为Time-out Error。

  2. Pre-action和Action
      当发生错误时,主节点就不能再发送各种花里胡哨的操作了,这个时候主节点只能进行一些特别的操作,这些特别的操作叫做 Pre-action,具体有:
    在这里插入图片描述
      当 Pre-action做完,发现没问题后,这个时候主节点就可以再做另外一些特殊的操作,这些特别的操作叫做Action,具体有:
    在这里插入图片描述

  3. Error Severity
      在上面介绍各种包的时候,发现ERR和EV这两种包比别的包多了一个属性severity,它的值范围是S0~S3,这个玩意其实是XCP给ERR和EV的严重程度排了级,如下:
    在这里插入图片描述
      这个东西有啥用呢,就是为了告诉主节点,糟糕糟糕OMG,魔法怎么失灵啦,别折腾了,这个玩意你搞不定的,快快死心吧。

  介绍完错误处理相关的点后,就来说说XCP的错误处理流程吧!!!XCP的错误处理的核心其实核心就是“再来一次”,多试两次就成功啦。

2.2.1 Time-out Error Handling

  关于Time-out Error的处理呢,就是使用上面的Pre-action和Action,多试几次就好啦,如果好不了的话,主节点可以采取一些必要手段,比如重启从节点。在标准通信模式下的流程如下:
在这里插入图片描述
  从图中可以看出,首先Master发送了一个Request K, Slave正常回复Response K,然后Master发送了一个Request K+1,结果Slave的回复突然超时了,这个时候Master检测到Time-out Error后首先进行了一个Pre-action操作,就是发送了一个SYNCH命令,随后就再次尝试发送Request K,这个时候,哎,Slave又回复正常了,问题成功消失。

  在块传输模式和交互模式下的处理流程也差不多,这里就不做介绍了,感兴趣的可以去参考XCP标准协议的Part2,《ASAM_XCP_Part2_Protocol-Layer-Specification_V1.0》。

2.2.2 Error Code Error Handling

  对于Error Code Error 的处理,那更是把“再来一次”的核心体现的淋漓尽致,这里就不多介绍了,XCP协议规范里面列举了在不同的CMD下回复的不同的Error Code它所建议的操作,这里拿一小部分示例看一下:
在这里插入图片描述
  太随意了,真的太随意了,这里就不做介绍了,感兴趣的可以去参考XCP标准协议的Part2,《ASAM_XCP_Part2_Protocol-Layer-Specification_V1.0》。

  好了,关于XCP的协议介绍,就到这里,祝大家码运滚滚。

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/922644.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

More Effective C++学习笔记(4)

目录 条款16:谨记 80 - 20 法则条款17:考虑使用lazy evaluation(缓式评估)条款18:分期摊还预期的计算成本条款19:了解临时对象来源条款20:协助完成 “ 返回值优化 ”条款21:利用重载…

余压监控在建筑加压送风系统中的应用

安科瑞 华楠 摘 要:从风量、风管和风口的设计、防烟部位正压控制方式等角度,分析了加压送风系统设计中需要注意的几点问题:风量的确定需合理有据;楼梯间风管和风口的设计需考虑均匀送风要求,前室风口设计确保不同楼层…

【地理图库】晨昏线示意图

声明:本资料整理,仅供学习!

JNPF快速开发平台:释放您的创造力,加速企业数字化转型

一、前言 在当今的数字化时代,企业需要快速响应市场变化,不断迭代和优化业务流程,以保持竞争力。然而,传统软件开发方式往往无法满足企业对于快速开发和灵活部署的需求。JNPF快速开发平台旨在解决这一问题,为企业提供高…

CCF HPC China2023 | 盛大开幕,邀您关注澎峰科技

2023年8月24日,以“算力互联智领未来”为主题的第十九届全国高性能计算学术年会(CCF HPC China 2023)在青岛红岛国际会议展览中心拉开帷幕。特邀嘉宾涵盖行业大咖,主持阵容同样是“重量级”——来自国家并行计算机工程技术研究中心…

如何快速打造线上展厅?线上展厅可以用在哪些行业?

引言: 随着科技的迅速发展,线上展厅作为一种创新的营销方式,正逐渐引领着不同行业的营销风潮。线上展厅以其独特的虚拟体验,为企业搭建了一个无界限的展示平台,让用户能够在虚拟空间中感受产品、服务与品牌文化。 一…

Java对象的初始化顺序

对象的初始化顺序(父类永远在子类前面,属性和方法谁写在上边谁先执行): 静态(只执行一次)--->非静态--->构造方法 静态成员和static块-->普通成员和非static块-->构造函数。 存在继承: 父类静态成员和static块-->子类静态成…

Resnet模型详解

1、Resnet是什么? Resnet是一种深度神经网络架构,被广泛用于计算机视觉任务,特别是图像分类。它是由微软研究院的研究员于2015年提出的,是深度学习领域的重要里程碑之一。 2、网络退化问题 理论上来讲,随着网络的层…

干货分享:可证明安全的隐私计算

“隐语”是开源的可信隐私计算框架,内置 MPC、TEE、同态等多种密态计算虚拟设备供灵活选择,提供丰富的联邦学习算法和差分隐私机制 开源项目:github.com/secretflowgitee.com/secretflow 以下文章来源于DataFunTalk ,作者洪澄 D…

【实训项目】易行APP设计(c2c二手交易平台)

1.设计摘要 1.1市场背景 随着经济的迅速发展与科技日新月异的进步,家庭内的各项物品更新换代频率越来越快,人们购买新商品后越来越多旧的商品积压需要处理;在互联网电商的各种营销刺激下,消费者非常容易形成“冲动”消费&#x…

【Spring】一次性打包学透 Spring | 阿Q送书第五期

文章目录 如何竭尽可能确保大家学透Spring1. 内容全面且细致2. 主题实用且本土化3. 案例系统且完善4. 知识有趣且深刻 关于作者丁雪丰业内专家推图书热卖留言提前获赠书 不知从何时开始,Spring 这个词开始频繁地出现在 Java 服务端开发者的日常工作中,很…

leetcode:只出现一次的数字Ⅲ(详解)

题目: 给你一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。 你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题。 示例 1&…

没消费?复购难?不如试试即拼七人拼团模式

在当今的社会环境下,快消品、大健康、美容等行业一直是人们生活中不可或缺的一部分。它们各具特色,不断满足大众的需求,因此受到广泛欢迎。但由于市场品种繁多、竞争激烈,消费者的选择也变得更加多样化。为了提高各行业的竞争性&a…

EPS导出为带cass属性的dwg文件

1、在EPS软件中打开一幅画好的地形图,如下: 2、点击菜单栏里面的工具--运行脚本--数据转换--cass10.具体操作如下: 3、设置输出模式,具体如下图。 4、输出结果如下,在cass中打开输出的dwg文件,结果如下&…

多核异构核间通信Mailbox vs rpmsg

目录 一、关键术语解释 二、Mailbox与rpmsg对比 三、rpmsg传输流程 异构核间数据通过共享内存实现数据传递,通过中断来触发发送、接收。 一、关键术语解释 IPC Inter-Processor Communication MailBox IP which provides queued interrupt mechanism for comm…

压力传感器模拟信号(频率)转数字信号的问题

压力传感器模拟信号(频率)转数字信号的问题 三河凡科科技飞讯教学篇:压力传感器模拟信号(频率)转数字信号是现代控制系统中十分重要的一个问题。在许多工业应用中,压力传感器模拟信号需要被准确地转换成数…

MyBatis进阶:告别SQL注入!MyBatis分页与特殊字符的正确使用方式

目录 引言 一、使用正确的方式实现分页 1.1.什么是分页 1.2.MyBatis中的分页实现方式 1.3.避免SQL注入的技巧 二、特殊字符的正确使用方式 2.1.什么是特殊字符 2.2.特殊字符在SQL查询中的作用 2.3.如何避免特殊字符引起的问题 2.3.1.使用CDATA区段 2.3.2.使用实体引…

微服务中间件--MQ服务异步通信

MQ服务异步通信 MQ服务异步通信a.消息可靠性1) 生产者消息确认2) 消息持久化3) 消费者消息确认4) 消费者失败重试4.a) 本地重试4.b) 失败策略 b.死信交换机1) 初识死信交换机2) TTL3) 延迟队列a) 安装延迟队列插件b) SpringAMQP使用延迟队列插件 c.惰性队列1) 消息堆积问题2) 惰…

redis实战-缓存三剑客穿透击穿雪崩解决方案

缓存穿透 定义 缓存穿透 :缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库,造成数据库压力,也让缓存没有发挥出应有的作用 解决方案 缓存空对象 当我们客户端…

《Go 语言第一课》课程学习笔记(十一)

控制结构 if 的“快乐路径”原则 针对程序的分支结构,Go 提供了 if 和 switch-case 两种语句形式;而针对循环结构,Go 只保留了 for 这一种循环语句形式。 if 语句 if 语句是 Go 语言中提供的一种分支控制结构,它也是 Go 中最常…