TMP75温度传感器(I2C接口)温度值为-1的故障分析
-
资源ID:454835879
资源大小:484.80KB
全文页数:7页
- 资源格式: DOCX
下载积分:15金贝
快捷下载
账号登录下载
微信登录下载
微信扫一扫登录
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
|
下载须知 | 常见问题汇总
|
TMP75温度传感器(I2C接口)温度值为-1的故障分析
故障现象:平台软件在运行QNX系统的MLU板上每10秒读一次温度传感器,发现调用读温度的驱动接口函数时,偶尔读到的温度值为-1,但是接口函数的返回值为正常。读温度任务睡眠10秒通过sleep实现。该现象只在运行QNX的平台软件上可以复现,其它条件无法复现。故障分析:1在I2C总线驱动程序中添加打印信息,发现从CPU的I2C总线控制器中读回来的数据为OxFFFF(-1)。查看温度传感器芯片TMP75的数据手册,温度值由两个字节组成,根据配置精度,高8位表示整数部分(有符号),低8位中的高4位表示小数部分,低4位固定为0。因此可以断定OxFFFF属于总线上的异常数据。2阅读温度传感器的数据手册,发现有如下描述:TIMEOUTFUNCTIONThsTMP175andTMP75willresettheserialinterfaceifeither3CLorSDAareheldlowfor54ms(typ)betweenaSTARTandSTOPcondition.TheTMP17SandTMP75willreleasethebusifitispulledlowsndwillwaitkirastartcordition.Thstim&outfunotionrequiiir&s.acommunicationspeedofatleast1kHzforSCLoperatingfnequency.如果在一次数据传输过程中(传输start和传输stop之间)出现SCL或者SDA线被持续拉低超过54ms,那么TMP75将释放总线(将SDA置高电平)然后等待下一次传输start。也就是有可能总线上SCL或SDA出现了超过54ms的持续低电平,导致TMP75的TIMEOUTFUNCTION起作用,本应该传输正确数据的SDA线被置为常高,读到了0xFF。3为了验证TMP75的TIMEOUTFUNCTION功能,在I2C总线驱动程序中打桩,在寻址完成后读I2C总线控制器数据寄存器前主动增加延时,通过硬件测试程序观察读温度值是否正常。当延时小于50ms时,读温度正常,当延时增加到50ms以上时,可以稳定复现读到-1的温度值的故障现象。同时让平台软件将调用读温度接口函数前后的时间差打印出来,确认当读到-1时,时间间隔达到了70ms左右,而正常时为12ms左右。因此平台软件读到-1的温度值的故障现象与在I2C驱动程序中主动增加延时造成的故障现象应该一致。4通过示波器抓读温度时I2C总线上的数据传输过程:用例1:如图1所示,正常读温度时从寻址完成到从设备开始传输数据的延时大约为1.1ms左右。以下所有波形,上面为SDA数据,下面为SCL时钟。AcqCompleteMPos:2.20msTRIGGER类型信源斜率IIIII繼合IIIIIIIIitI边沿CH2上升止常触发方式LI.,.J.I*丄CHI2J0DVCH2flOVCH272241V26-May-1712:52<10H;图1正常时一次完整的数据传输以下图2到图5是对图1的传输过程的放大和解析:信源耦合IIIiIIIITRIGGER类型CH2上升正常边沿斜率lekJL.AcqCompleteMPos:14.00ju$Lj_I_I_i_I_I_LCH12.00VI_I_L_IJ_<|_I_I_l_CH22.00V直流M10.0JU5CH2Z2V26-May-1712:51:10Hz融发方式图2startcondition和寻址温度传感器0x90AcqCompleteMPos:103,6jusTRIGGER类型信源斜率耦合IIIIIIIICH2上升正常流电就亠弋fi賞肺旷亠M1O-OjusCH272,24V26-May-1712:51<10Hz触发方式图3寻址温度传感器寄存器0x0026-May-1712:55<10Hz图4向温度传感器0x90发起读命令IfekJL.AcqCompleteMPos:1.330msTFiIGGER类型Ym:Jm=:=:>wvww边沿信漁斜率上升"触发方式正常直流耦合I11丄B,丿IXi二、二丁.二匚由空诚工胞刘诫衲尬ti応t匝了26-May-1712:58<10Hz图5温度传感器传输的两个字节的温度值用例2:在寻址完成到读温度值之间打桩增加延时到40ms时,抓到的总线波形如下图:图6延时40ms时的I2C总线波形此时仍然能读到正确的温度值,如图7:N.DYDtlKflt:SDDmV1MOi:5DnWfZ.DVfdiv1IMQcODMIfn|-1.92V>|-1.02VgWidthHq«eQty:41.423&amAM.DU扣eivzauwias.owiirprFravlewSingleS«q10|ftSv-0Eicq«Rt:*OkAiJldMiy3S-n2Q1iT汨丁:细itt«AnMkiC(«»linto-*%Max工砂S6B|-3.K机01.4iCTlMlnu1fi0>.0wnV敌ifH.'dliO.DwnI.C&Mansi.flTMpgg”36H|3.681.0<?>Mlikdea.OtfnVdG0.naCO9indBO.ihn1.0CBMlnv-二?pz0.0GOMa±b7-D.C1图7延时40ms时可以读到正确的温度值0x3360用例3:在寻址完成到读温度值之间打桩增加延时到50ms时,抓到的总线波形如图8:1EQ.OmV3.6V-fio.amv3ir*gk5«inReqsHX.1«DkdHsfltBQCmVIM£3:3DWT12DVfdiv1MQ务刼WMMMMMM二薰6p.aflDcS|S9.33S?<ni3.5-aMB9flLaoDnncTSinPrflviflYF图8延时50ms时的I2C总线波形此时读到的温度值为-1,如图9,总线SDA上的数据出现异常,读到的数据为0xFFFF。-30DnOCTGiiiVAhiA1EQ.OVT1VD.QfnVMZdH抑协1酗3Oma/pi-1.92VPrflviewSir*ale-S«q-1.Q3VnRCHHL.4D.DhD.OV冒OflBBt:3Q«im¥IM£3:300«O2DWfdiv1UQ«SDDMi二6SEQ"】widthHhh毗;£1.瞿収日個弘图9延时50ms时读温度值异常0xFFFF5总结I2C主控制器在寻址完成并向从设备发送读命令,收到从设备返回的ACK后,不会主动发送SCL时钟信号,而是在驱动程序读主控制器的数据寄存器时触发SCL时钟信号,从设备在检测到SCL时钟后开始传输数据。因此在寻址完成和读数据寄存器之间增加延时会导致SCL的低电平时间延长,当延时时间超过50ms时触发温度传感器TMP75的TIMEOUT功能,TMP75释放SDA不再传输有效数据,转而等待下一次传输重新开始。在QNX和VXWORKS驱动程序中增加延时,都可以复现上述现象。平台软件只在QNX下复现问题,不能在VXW0RKS下复现问题的原因是QNX的I2C驱动程序在轮询ACK时使用了usleep延时,每1ms轮询一次,而VXWORKS下的I2C驱动程序使用CPU定时器sysUsDelay进行延时。使用usleep进行延时会让任务主动进入睡眠态,增加了延时的不确定性,加上平台软件的任务延时也使用sleep,增加了任务调度的不确定性,读温度值为-1时刚好是平台软件任务最繁忙的时刻,而读温度的任务优先级最低,导致了任务延时超过50ms,出现数据异常。解决方案:(1)修改QNX的I2C驱动程序,参考VXWORKS驱动程序,将usleep延时改为使用sysUsDelay进行延时。同时判断读到的温度值的第2个字节低4位是否为0(TMP75明确第2个字节的低4位固定为0),若不为0则数据非法,返回错误。(2)平台软件在读温度时,使用释放信号量的调度方式,在系统任务空闲时调度读温度任务。检查了EEPROM和RTC时钟芯片的数据手册,没有类似的TIMEOUTFUNCTION,同时也进行了延时操作的打桩测试,没有发现读数据错误的情况。