深入浅出:CAN通信之CCP协议 |
您所在的位置:网站首页 › odt课程 › 深入浅出:CAN通信之CCP协议 |
CCP(CAN Calibration Protocol) CAN标定协议(用于标定系统与ECU之间的通信) CCP协议在应用层,使用CAN的数据帧来传输命令 CRO报文:CCP报文帧格式为CMD + CTR + DATA,即Command、Counter、Data,其中Command是一些列的命令标号,为人为规定,Counter计数用,Counter根据发送消息的先后顺序进行赋值,例如第一条发送的CRO其CTR为01,相对应的,从机对其进行应答的相应报文的CTR值也应该为01,第二条的CTR值为02,以此类推。CCP协议共规定了28条命令。 DTO报文:分为三种类型报文,分别是CRM-DTO(命令返回消息),EVENT-DTO(事件消息),DAQ-DTO CRM类型:用于反馈CRO命令的报文CRM-DTO发生在Polling模式下,是针对主设备发送的CRO消息的应答 第一个字节为PID,表示类型,CRM类型为0xff 第二个ERR字节,表示错误类别,命令返回码表一共有18条命令,0x00是无错误,CRM类型就对应0x00 第三个CTR字节,表示回答的哪条CRO命令,两者的CTR要对应起来 剩余的五个字节为参数 EVENT-DTO事件消息发生在ECU内部错误时由ECU主动发送,这类DTO不需要事先收到主设备的CRO,一旦ECU发生内部错误,会主动向主设备发生这一消息,报告内部情况。 第一个字节为PID,表示类型,EM类型为0xfe 第二个ERR字节,表示错误类别,命令返回码表一共有18条命令,0x00是无错误,EM类型对应命令返回码表除0x00的剩余17条命令 第三个CTR字节,表示回答的哪条CRO命令,两者的CTR要对应起来 剩余的五个字节为参数 CRM-DTO和EVENT-DTO共用上一种报文结构,第一个字节PID(data packet ID)用于判断报文属于那一类型,PID = 0xFF为CRM(正常命令的被动响应),PID = 0xFE(错误事件的主动响应)为EVENT,其它的都是DAQ,第二个字节ERR(error code),第三个字节为代码指令计数器CTR,其它字节为指令代码相关的返回参数和数据 DAQ类型:用于定期反馈数据DAQ-DTO(数据采集)报文除了第一个字节为PID外,其余字节都是返回数据 ECU Electronic Control Unit(电子控制单元):一种具有中央处理单元的电子装置,其外围电路可执行编程功能。 CRM Command Return Message(命令返回消息) : 从从设备发送到主设备的一种消息,包含命令/错误代码和命令计数器。 CRO Command Receive Object(命令接收对象) :从主设备发送到从设备的消息。 DTO Data Thansmission Object (数据传输对象):从设备发送到主设备的消息(命令返回消息或事件消息或数据采集消息)。 DAQ Data Acquisition:从从设备向主设备发送的用于从ECU快速数据采集的过程和消息的定义。 ODT Obiect Descriptor Table: 元素(变量)列表,用于组织数据采集。 DAQ列表按照不同的上传周期,ECU内部需要多个DAQ列表。例如有三个信号,上传周期分别为10ms、20ms、30ms,那么就需要3个DAQ列表,而同一上传周期的数据/变量(OTD)都被归类在同一个DAQ列表内,这些ODT被称作ODT列表。 ODT列表每一个ODT的最大元素数目为7,可以存放7个单字节数据变量的信息,其内容包括数据变量的存放地址,数据长度及其偏移地址。ODT列表需要通过DAQ-DTO方式才能向主设备发送,由于每一个ODT都有唯一的绝对编号,该编号即为DAQ-DTO的PID,排在最前面的ODT相对编号为0。绝对编号是对于所有ODT来说的,每一个ODT的绝对编号都不相同。相对编号是相对于当前DAQ列表而言,不同DAQ列表的ODT,其相对编号可能会相同。正是因为单帧有八字节数据,而ODT编号需要占用一字节,因此在DAQ-DTO中只剩下7字节来用于ODT的传输,而又因为CCP无法进行跨帧的数据/命令传输,所以一个ODT最大只能存储7字节数据。又因为PID的长度为8位,因此ODT的总数不能超过254个(0~0xFD)(通过修改PID长度可以增加ODT总数,但会减少单个ODT的长度) 命令编号功能0x01CONNECT——建立连接0x02SET_MTA——设置内存传输地址0x03DNLOAD——数据下载0x04UPLOAD——数据上传0x06STOP_START——开始/停止/准备数据传输0x07DISCONNECT——断开连接0x08STSRT_STOP_ALL——开始/停止数据传输0x0CSET_S_STATUS——设置Session状态0x0DGET_S_STATUS——获取Session状态0x0EBUILD_CHECKSUM——计算校验和0x12GET_SEED——获取被请求资源的种子0x13UNLOCK——解锁保护0x14GET_DAQ_SIZE——获取DAQ list大小0x15SET_DAQ_PTR——设置DAQ list指针0x16WRITE_DAQ —— 写DAQ list入口0x1BGET_CPP_VERSION——获取CCP版本 流程介绍1.随机读取ECU中RAM和ROM中的数据 2.测量数据采样 3.标定数据的采样和传输 4.同时处理多个ECU系统 5.flash编程技术 ECU地址(Intel格式,低字节在前) 错误等级: C0:警告 C1:伪错误 C2:可修复错误 C3:不可修复 0x31:命令句法错误,与传输命令信息有误相关 使用CCP协议的意义:在我们对板卡下载烧录完程序后如果我们要更改参数,则需要再次编辑编译烧录会使工作变得更加繁琐,引入CCP协议后我们可以通过CCP中的相关操作指令对RAM、PORTS、ROM、FLASH读取,写RAM、PORTS、FLASH DAQ下的定期传输需要用到ODT(Objetc Descriptor Table,元素变量列表) 在使用DAQ通信前,主设备需要对DAQ列表及ODT列表进行配置 获取ECU内部DAQ列表数量和ODT数目,DAQ列表数量由上传的数据周期决定,每个不同周期对应一个DAQ列表。ODT列表数则由每个周期下上传的数据个数及长度决定 向相应的ODT填入数字,及数据的存储地址和数据长度,随后根据类型和上传周期被写在不同DAQ的不同ODT中 上传周期由事件通道(Event Channel)和预分频值(Prescaler)决定.事件周期可以理解为ECU每多少ms触发一次,若为10,则说明ECU每10ms触发一次该事件。预分频值可以理解为:以事件通道的时间为基准进行分频,我们以此来复用事件通道。若预分频值设定为2,则将某一事件以20ms的周期进行触发,但使用的仍然是同一个DAQ列表。 启动DAQ,进行数据采集 DAQ Initlize and Start data transmission CommandDescriptionRemarkCONNECT (0x01)ConnectBypass, if already connectedGET_DAQ_SIZE (0x14)Get the number of ODTS in DAQ(loop )nSET_DAQ_PTR (0x15)Set DAQ List number,ODT List number,ODT Element(Id) numberWRITE_DAQ (0x16)Set DAQ transfer bytes,extension address(DAQ element),Address of DAQ ElementSTART_STOP (0x06)Set Mode select,DAQ list number,last ODT number(the current DAQ list should be transmission the last ODT number),Event channel number ,transmission prescalerprepare data tranmissionSTART_STOP_ALL (0x08)start data transmission SHORT_UP(Short Upload)实例视图 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |