您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 诊断仪器DIY--大众轿车诊断协议分析
第一行为来自网络的原始文字第二行为翻译的文字TheBaudratesaregenerallybetween1kand10,4kbit/s.通讯波特率通常为1200BPS到10400BPS之间。Commontodayare4800,9600and10400(formostOBD-IIequippedECUs).比较常用的波特率是4800,9600以及10400BPS(用于OBDII兼容的ECU)。howevertheycouldbeanynon-standardbaudrate.虽然如此,也不排除使用其他任意的不寻常的波特率。withaninterbytetimeofapproximately10ms.字节与字节之间的时间差异大概为10ms左右。Somedefinitionsfirst:首先声明几个术语:ThesmallestrepeatabletransmissionunitisaBLOCK.通常最小的交换单位称之为“数据包”。ThesumofallblockstransmittedwithintheframeworkofcommunicationwithacontrolunitisaTELEGRAM.所有在控制单元和诊断设备之间交换的数据包都包含一个“包计数器”。Theunit(ECUortester),whichisauthorizedtooutputablock,istermedMASTER.Correspondingly,thereceiverofablockiscalledaSLAVE.在控制单元和诊断设备之间,数据包的发送者称之为“主设备”,反之,数据包的接受者称之为“从设备”。BLOCKTransfer:数据包交换:Thebytesofablockthataretransmittedbythemasterarereturnedbytheslavecomplementedinbytes主设备发送的数据包中的每一个字节,从设备都返回一个字节作为响应。返回的字节为接收字节的反码。原码XorFF=反码Xor:按位加法,不进位10110110+11111111=--------01001001B6+FF=--49i.e.the1stbyteofthemasterleadstothecomplemented1stbyteoftheslave,例如:主设备发送的第一个字节,紧跟从设备的响应的字节反码。uponwhichthemastertransmitsthesecondbytetotheslave,andsoon.主设备接着发送第二字节,从设备紧跟着响应。如此反复。。。Withthisformoftransmissionthemasterwillalwaysknowaftereverybytewhetherthetransmittedbytehasbeencorrectlyreceived.通过这种格式,主设备可以确定发送的字节是否被从设备正确的接受。Thelastbyteoftheblockisnotreturnedbytheslave,itanswersbytransmittingtheBlockend$03(ifyoulikepascal)or0x03(ifyourmoreCinclined);-)数据包的最后一个字节,没有响应。它只是作为一个数据包的结束标志。在Pascal语言中表示为:$03;在C语言中为:0x03。Blocksarebuiltupoffiveparts.(Pleasenote:Fortheprotocol,Iwillalwaysbeusinghexadecimalvalues!)数据包有五部分组成(注意:在这个协议当中,我将使用十六进制表示数据)。TypeAcronymdescription1.Blocklength包长度numberofbytesinblock-excludingtheBlockendbyte数据包的字节数目,不包括包结束标志字节0x032.Blockcounter包计数器incby1witheveryblock-wrapsfromFFto00每传递一个数据包其值增加一。如果等于FF,回到00。3.Blocktitle包类型thisisthecommand-type命令包的命令类型,数据包的数据类型4.data包数据ablockcouldhaveNOdata,i.e.theACKblock包的具体数据,可能不包含数据,例如ACK包。5.Blockend包结束标志valueof03hex标志一个数据包的结束。十六进制0x03example:AnAcknowledgeblockwouldlooklikethis:举一个例子说明:一个响应包看起来像这样:Note:theBlocktitle(command)fortheAcknowledgeblockis09注意:ACK包的包类型为09valuecomment03Blocklength包长度ZZBlockcounter包计数器09Blocktitle(Acknowledge)包类型(ACK包)03Blockend包结束标志Nowthatwe'vecoveredthebasics,youshouldeasilyunderstandthefollowingcommunication.在我们掌握了这些基本协议之后,我们比较容易理解下面描述的通讯协议!ThisisanexampleofalogI'vetakenfromenteringtheEngineController(address01)ofaVWPoloClassic.这个例子的数据来自VWPolo的发动机控制单元。地址码为01。TheonlydeviationfromwhatIhavedescribedabove,isthe5bpsinitialization.当控制单元被初始化的时候,不采用正常的通讯波特率。首先使用5BPS进行初始化。Itworksasfollows:初始化流程如下:thetesterissuesthe5baudaddressofthecontrolleritwouldliketoinitiatecommunicationwith.诊断设备在5BPS的通讯速度发送控制单元的地址码。所以这时候速度比较慢。数据格式:1/7/ODD/1一个开始数据位,7位地址码,一个奇校验位,一个停止位。所以地址只能在00-7F之间。其中00用于所有系统的故障查询。shouldtheECUrecognizeitsaddress,itwillreplywithasyncbyte(55)如果与地址码对应的ECU查询到地址码,它将返回字节55。whichisusedbythetestertodeterminethebaudratethattheECUwouldliketocommunicateat.字节55用于告诉诊断设备ECU使用的波特率。55看是来像这样:(稍后,我们会插入一个图片说明)followingashortdelay,theECUwillsendaKeyword(consistingof2Keybytes,firsttheLeastSignificatByte,followedbytheMSB)大于10ms之后,ECU将会发送KeyWord关键字(有两个字节组成,首先是低字节,然后是高字节,两个字节组成一个字)。关键字协议:KeyWordProtocol以前大众公司使用KWP1281,例如大部分发动机/变速器控制单元现在开始使用KWP2000,例如MK-60ABS已经有CAN诊断协议开始使用,比如GolfV,AudiA8。。。如何计算一个关键字?例如:018A其中01为低字节8A为高字节。去掉最高为的校验位之后得到0A01==〉10*128+1==〉1281。所以称之为KWP1281。KWP2000与此类似。其中高字节固定为8F。低字节随着使用的协议细节不同而不同。例如:6B8F==〉2027==〉KWP2027。其中8F--〉F=15,15*128=1920。然后与6B相加即可。thetesterreplieswiththecomplementoftheKeyMSBbyte.诊断设备发送关键字的高字节的反码作为响应。ThishandsmastermodetotheECU,anditstartsoutputtingtheECUinfo.现在开始,初始化成功。ECU将向诊断设备发送它的信息,例如零件号码。。。fromPCfromECUcomments015bpsaddressoftheEngineController1start,7data,oddparity,1stop5BPS发送控制单元地址码,1/7/ODD/155thisisthesyncbytetodeterminethebaudrate(01010101)1start,8data,1stop同步字节,用于检测波特率,1/8/N/101KeywordLSB1start,7data,oddparity,1stop关键字字节11/7/ODD/18AKeywordMSB1start,7data,oddparity,1stop关键字字节21/7/ODD/175ComplementofKeywordMSB关键字字节2的反码诊断设备发送原码XorFF=反码Xor:按位加法,不进位10001010+11111111=--------011101018A+FF=--75HerefollowsthefirstECUinfoBlock.ThefirstoneistheControllerID#:''RSU906258?ECU开始发送第一个数据包,一般来说是它的零件号码。fromPCfromECUcomments0FBlocklength-ECUismaster长度15字节,不包含03结束标志F0诊断设备发送的反码01Blockcounter包计数器FEF6Blocktitle-ASCIItextfollows包类型:数据类型:ASCII文本流0952'R'AD53'S'AC55'U'AA39'9'C630'0'CF36'6'C932'2'CD35'5'CA38'8'C73F'?'C020''DF20''DF03Blockend包结束了NowmastermodeishandedtotheTester(PCinourcase)anditreplieswiththeAckBlock.接着,诊断设备发送一个响应数据包到控制单元。fromPCfromECUcomments03Blocklength-PCismaster包长度FC控制单元发送的反码02Blockcounter包计数器FD09Blocktitle-ACKcommand包类型:命令包:响应F603Blockend包结束了NowtheECUreplieswiththeComponent#:2.0MP9.0控制单元接着发送他的组件描述信息,一般需要两个包才能发送完成。fromPCfromECUcomments0FBlocklength-ECUismasterF003BlockcounterFCF6Blocktitle-ASCIItextfollows0920''DF32'2'CD2E'.'D130'0'CF20''DF4D'M'B250'P'AF39'9'C62E'.'D130'0'CF20''DF20''DF03BlockendNowmastermodeishandedtotheTesteranditreplieswiththeAckBlock.诊断设备再次响应。fromPCfromECUcomments03Blocklength-PCismasterFC04BlockcounterFB09Blocktitle-ACKcommandF603BlockendNowtheECUreplieswiththeSoftwareCoding
本文标题:诊断仪器DIY--大众轿车诊断协议分析
链接地址:https://www.777doc.com/doc-2067271 .html