TI各位专家好:
本人在使用LM95071CIMF SPI接口温度传感器时出现一些问题,想求得答案。
下图是我的系统中使用SPI接口的一个原理示意图:
先介绍一下应用背景:
1、U3是一个ARM核的控制器,U1是ST生产的NOR FLASH,U2是TI生产的温度传感器LM95071CIMF。
NOR FLASH与温度传感器都作为Slave通过SPI接口和控制器(Master)进行通讯,NOR FLASH与温度传感器共用时钟线和数据线。
不同的是,当控制器与NOR FLASH通讯时,使用的是控制器真正的SPI接口(SPI_S、SPI_CK、SPI_D、SPI_Q,但把SPI_D和SPI_Q相连成为SPI_D/Q);
但当控制器与SPI温度传感器通讯时,虽然也使用了控制器的SPI_CK以及SPI_D/Q接口,但这几个接口是与Sensor CS一起被配置成了普通的GPIO接口。也就是
说当控制器与温度传感器通讯时,会把控制器原本的SPI接口(SPI_CK和SPI_D/Q)配置成普通GPIO口来模拟温度传感器SPI时序。
2、系统上电后,控制器会首先使用SPI接口操作NOR FLASH读取其中的代码,操作完成后大约500ms控制器会通过模拟SPI接口读取温度传感器的温度数据。
目前出现的问题:
发现上电后读温度传感器数据,读前16次都会读到错误的温度数据FFFF(控制器读温度数据时,SPI_D/Q接口配置为输入上拉),然后再正确读到一次温度传感器
的工厂ID 800F,再读到若干次错误的温度数据FF03,最后再读到正确的数据。
测试波形见下图:
其中绿色为温度传感器的片选信号,蓝色为时钟信号,红色为数据信号。
我的困惑:
1.按道理说,我读取温度传感器的温度数据时已经至少是上电500ms后的事情了,已经远远大于温度传感器中手册中给出的温度转换时间(最大值228ms),
那么为何还会有读错温度的情况?
2.电路的接法、端口的配置、时序的操作可能存在哪些问题?
3.LM95071的数据D/Q配置成输入时,其内部是否有上拉、下拉还是浮空?配成输出时,是推挽还是开漏?若是开漏输出,内部是否有上拉?
谢谢!
谢谢回答
Kailyn Chen:
首先LM95071的SI/O 内部没有上拉下拉,如果有的话,会在接口定义中有指出。
配置为输出时,为推挽,若是开漏的话,也会在数据手册中给出。
Powerer:
回复 Kailyn Chen:
谢谢。
Kailyn Chen:
回复 Powerer:
另外,关于读取错误温度的问题,您读取的周期每次都是500ms是吗?第一次读不是在上电之后立即读取的吧?
Immediately after power up, the LM95071 will output an erroneous code until the first temperature conversion has completed.
Powerer:
回复 Kailyn Chen:
不是的。
上电后先读取NOR FLASH,然后再读取温度数据。
第一次读温度数据大约是上电后500ms左右,远大于手册中给出的228ms左右的最大转换时间。
读错之后,会以大约50us左右的间隔重新再读,直到读到正确数值,再之后会以大约1s的间隔读温度数据。
这个过程中,首先会读到16次错误数值FFFF,然后读到1次正确数值800F(这个值是制造商ID),再读到不定次数的错误数值FF03,然后再读到正确数值,之后再读就一直正确。
现在我无法理解错误数值的产生原因。
另外之前在程序中,还曾把读错误后再读的时间间隔从50us改大成1s甚至10s,可仍会读到16次连续的FFFF。非常奇怪。By the way,D与Q直接短接有什么负面影响?
Powerer:
还有其他TI员工可以回答的吗?
Kailyn Chen:
回复 Powerer:
您好,读的过程我认为是没问题的,怀疑sensor 用GPIO模拟的SPI时序这里出了问题。
Kailyn Chen:
回复 Powerer:
您好,读的过程我认为是没问题的,怀疑sensor 用GPIO模拟的SPI时序这里出了问题。