网页网站建设的步骤流程图,投放广告网站,学it什么培训机构好,长春网站建设方案服务《UDS协议从入门到精通》系列——图解0x35#xff1a;请求上传 一、简介二、数据包格式2.1 服务请求格式2.2 服务响应格式2.2.1 肯定响应2.2.2 否定响应 三、通信示例 Tip#x1f4cc;#xff1a;本文描述中但凡涉及到其他UDS服务的#xff0c;将陆续提供链接跳转方式以便快… 《UDS协议从入门到精通》系列——图解0x35请求上传 一、简介二、数据包格式2.1 服务请求格式2.2 服务响应格式2.2.1 肯定响应2.2.2 否定响应 三、通信示例 Tip本文描述中但凡涉及到其他UDS服务的将陆续提供链接跳转方式以便快速了解他们。各服务介绍持续更新中… 学习UDS基础知识以及其他相关内容 返回专栏总目录 《UDS协议从入门到精通UDS速查手册》 一、简介
Tip该服务跟34使用方式上服务几乎一致推荐先阅读《UDS协议从入门到精通》系列——图解0x34请求下载 与0x34服务相反该服务用于启动数据上传服务传输方向是目标ECUServer→ TesterClient向目标ECU发送该请求的主要作用就是告知目标ECU“我Tester想要你存储的数据请你目标ECU发送给我”。
二、数据包格式
2.1 服务请求格式 该服务不支持sub-function。部分参数的含义如下所示 dataFormatIdentifier1Byte这个单字节里面标识了数据格式相关的信息每半个字节分别编码高半字节指定 “数据压缩方法”而低半字节则指定“数据加密方法”。如果该字节取值为0x00则表示既不使用加密方法也不适用压缩方法其他取值情况有整车制造商或者供应商决定可以用约定好用不同的取值代表数据是否有压缩是否有加密用的又是什么算法等等。 addressAndLengthFormatIdentifier1Byte该参数含义在图中标识的已经比较清晰不再赘述。比如memoryAddress参数占用m个字节memorySize参数占用n个字节则该参数取值为0x(nm)。 memoryAddressmByte对于即将启动的数据传输该参数指明了从目标ECU内存读取数据的逻辑地址。比如Tester请求将数据写入ECU内存地址为0x12345678的地方该地址占4个字节则memoryAddress值为0x12345678对应addressAndLengthFormatIdentifier参数低4Bits值为0x04。 memorySizenByte对于即将启动的数据传输该参数指明了从ECU内存读取数据的字节数。比如Tester请求读取目标ECU数据的字节数为0x01234567即memorySize占4字节则memorySize值为0x01234567对应的addressAndLengthFormatIdentifier高4Bits值为0x4。
2.2 服务响应格式
2.2.1 肯定响应 lengthFormatIdentifier1Byte该字节每半个字节单独编码高4Bits为maxNumberOfBlockLength有效字节长度低4Bits保留为0。 maxNumberOfBlockLength字节长度不定取值长度取决于lengthFormatIdentifier的高半字节表示0x36服务一次传输一个block的最大的字节数。比如该参数取值为0x202则使用0x36服务时一次最多发送字节数为0x202字节数0x202 36 1Byte parameterx个Bytes。 这些参数确保了Tester和目标ECU之间的数据传输能够高效和安全地进行。通过maxNumberOfBlockLength参数Tester可以预先知道目标ECU将发送的数据块的最大长度从而可以适当地调整自己的接收缓冲区以避免数据丢失或溢出。
2.2.2 否定响应 可能出现的NRC及其含义如下
NRC含义0x13消息长度错误0x22当前条件不满足0x31请求参数不受支持参数错误0x33未通过安全访问0x70由于某些故障导致无法上传目标ECU的数据到Tester中 NRC的处理流程如下所示即推荐的错误情况检查顺序
三、通信示例 基于对本服务以及0x36、0x37三个服务的学习这里举一个完整的例子该示例实现将数据从目标ECU上传到Tester中。数据从目标ECU上传到Tester的过程分三步
Tester通过0x35-请求上传服务向目标ECU发送请求该请求消息中将包括数据的格式信息是否压缩、加解密信息、要从目标ECU的哪个地址获取数据、要获取多少字节的数据。目标ECU收到该请求后将通过响应告诉Tester“我目标ECU每次最多能传输多少自字节”即目标ECU会表明自己每次的上传能力。Tester得知目标ECU每次上传能力后将按照目标ECU上传能力做适配目标ECU将通过0x36-数据传输服务将数据一块块的上传到Tester。Tester端收到期望的数据后通过发送0x37-退出传输服务请求来终止数据上传过程。 在钥匙电开启发动机关闭车速为0的背景下Tester和目标ECU间的通信过程如下图所示 #mermaid-svg-GDqGJU8qWj6Ekeip {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GDqGJU8qWj6Ekeip .error-icon{fill:#552222;}#mermaid-svg-GDqGJU8qWj6Ekeip .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-GDqGJU8qWj6Ekeip .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-GDqGJU8qWj6Ekeip .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-GDqGJU8qWj6Ekeip .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-GDqGJU8qWj6Ekeip .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-GDqGJU8qWj6Ekeip .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-GDqGJU8qWj6Ekeip .marker{fill:#333333;stroke:#333333;}#mermaid-svg-GDqGJU8qWj6Ekeip .marker.cross{stroke:#333333;}#mermaid-svg-GDqGJU8qWj6Ekeip svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-GDqGJU8qWj6Ekeip .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-GDqGJU8qWj6Ekeip text.actortspan{fill:black;stroke:none;}#mermaid-svg-GDqGJU8qWj6Ekeip .actor-line{stroke:grey;}#mermaid-svg-GDqGJU8qWj6Ekeip .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-GDqGJU8qWj6Ekeip .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-GDqGJU8qWj6Ekeip #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-GDqGJU8qWj6Ekeip .sequenceNumber{fill:white;}#mermaid-svg-GDqGJU8qWj6Ekeip #sequencenumber{fill:#333;}#mermaid-svg-GDqGJU8qWj6Ekeip #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-GDqGJU8qWj6Ekeip .messageText{fill:#333;stroke:#333;}#mermaid-svg-GDqGJU8qWj6Ekeip .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-GDqGJU8qWj6Ekeip .labelText,#mermaid-svg-GDqGJU8qWj6Ekeip .labelTexttspan{fill:black;stroke:none;}#mermaid-svg-GDqGJU8qWj6Ekeip .loopText,#mermaid-svg-GDqGJU8qWj6Ekeip .loopTexttspan{fill:black;stroke:none;}#mermaid-svg-GDqGJU8qWj6Ekeip .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-GDqGJU8qWj6Ekeip .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-GDqGJU8qWj6Ekeip .noteText,#mermaid-svg-GDqGJU8qWj6Ekeip .noteTexttspan{fill:black;stroke:none;}#mermaid-svg-GDqGJU8qWj6Ekeip .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-GDqGJU8qWj6Ekeip .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-GDqGJU8qWj6Ekeip .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-GDqGJU8qWj6Ekeip .actorPopupMenu{position:absolute;}#mermaid-svg-GDqGJU8qWj6Ekeip .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-GDqGJU8qWj6Ekeip .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-GDqGJU8qWj6Ekeip .actor-man circle,#mermaid-svg-GDqGJU8qWj6Ekeip line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-GDqGJU8qWj6Ekeip :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Tester 目标ECU 通过0x35-请求上传服务向目标ECU发送请求 35 11 33 20 10 00 00 01 FF 1 发起上传数据的请求 34Service ID 11标识数据压缩及加解密算法信息 33表明地址和大小信息占用几个字节 高低四位都是3即地址和大小信息都占3字节 20 10 00取目标ECU中地址0x201000的数据 00 01 FF要获取数据大小是0x0001FF(511字节) 75 20 00 81 2 目标ECU通过响应表明自己的上传能力 74Service ID 40 20高四位表示每次最大传输长度2字节低四位默认0 00 81每次最多传输0x0081(129字节)数据 通过36服务传输每个数据块共计要传输511➗1275次4次不能传完要再来一次 36 01 3 请求第一块数据 36Service ID 01标识请求的数据块序号 76 01 (xx xx ... xx 实际数据共127字节) 4 通过0x36服务响应发送数据 76Service ID 0x40 01标识这是第几个数据块block 剩下的127字节实际数据 前面目标ECU回复的最大 接收能力是包括36和01两个字节的 ... ...传输第2块数据 ... ...传输第3块数据 ... ...传输第4块数据 36 05 5 请求最后一个数据块 36Service ID 05最后一个数据块的序号 76 05 (xx xx xx 实际数据还剩511 - 127*4 3字节) 6 通过0x36服务响应发送数据 76Service ID 0x40 05标识这是第几个数据块block 最后剩下3字节实际数据 通过0x37-退出传输服务来终止数据传输过程 37 7 发送退出传输请求 不跟其他参数也可以由制造商决定 77 8 给出正响应 不跟其他参数也可以由制造商决定 Tester 目标ECU 返回专栏总目录 《UDS协议从入门到精通UDS速查手册》