- 主题:芯片温度传感器的一个问题
是一个ARM芯片,里面有两个温度传感器,一个在PLL旁边,一个在DDR旁边。这两个都提供了中断调用,能够在温度超过一定的阈值(或者低于)就通知CPU进行可能的操作,比如,可以减少频率等,进行降温。
现在的问题是,这个传感器提供了4对阈值,就是同一个温度传感器可以设置4对不同的范围,或者可以看做是8个独立的阈值。那么我想问,厂方这样设计有什么好处呢?设置一对不够吗?中断发生,CPU转入中断服务,就改设下一个范围不就行了?是不是硬件的设计者不了解软件的设计啊?
--
FROM 72.197.247.*
对啊,用来产生中断的是ADC之后的数字化的设置的阈值,这样的阈值有8个。这个传感器把温度转换成数字信号,然后同时跟8个数字阈值进行比较。软件把温度传给驱动程序,驱动程序负责转换成寄存器的阈值。但是,仍然是电路层只需要上下两个阈值,并不会需要8个。为啥需要8个寄存器?驱动程序得到中断调用后设置新的阈值即可,可以重用同一对寄存器。
【 在 lxku 的大作中提到: 】
: 你们软件看到的是温度值,芯片电路里面没有绝对的温度值。一般电路里是一个ptat的电流转成电压,随温度升高,这个电压过了第一档,再过第二档,第三档...直到过了第8档。没有前面几档,这一档就没有意义。
: 你觉得我们不懂软件,我们觉得你的想法好幼稚。
:
--
FROM 72.197.247.*
现在驱动程序要设计接口,所以需要理解他们为什么要开放8个不同的阈值寄存器。对我们来说,一个上限一个下限不就够了吗
【 在 AndreZheng 的大作中提到: 】
: 正常的中断都是可以开关的,用户层不用就是了,内核层反正去去就回来,不伤大雅
--
FROM 72.197.247.*
多个有问题。比如,设定寄存器1低于35度,寄存器5超过41度,寄存器6超过43度。
那么现在温度42度,寄存器5的阈值导致中断发生。后来温度44度了,那么寄存器6导致中断发生。这个时候注意,寄存器5干啥呢?需要把它的中断发生屏蔽掉,因为温度超过41度了,如果不屏蔽掉它就一直产生中断。既然要屏蔽掉,那要那么多寄存器干啥?
另一个问题,以安卓为例,系统要根据温度决定7个不同的级别,然后可以影响运行状态,比如关掉一些程序,降低频率等。
这些温度的范围都是一个上限加一个下限,又可以理解为磁滞现象,就是说当温度超过40度,设为第一档,但是温度降低低于40度不能马上降为第0档,而是要温度降到39.5。这样的话,一开始温度在39度,设上限40, 当温度超过40度之后,设[39.5,41],当温度超过41度,设为[40.1, 42]。
这样的话,同时开启多个寄存器是会影响判断的,因为当温度超过40度之后,假设到了40.2,到达第一档,然后如果降低到40,那么是会引起中断的。但是这个时候我们并不希望这个多余的中断通知,因为离开第一档需要低于39.5度。所以,驱动程序是要关掉多余的寄存器。所以我们就不理解为什么这个芯片要这么多阈值寄存器。
【 在 PrimeTime 的大作中提到: 】
: 同时多个中断源不挺好的么
: 比如你软件需要>85度的时候触发中断1做些事情,>105度的时候触发中断2做另一些事情
: 这不就需要多对阈值了么,相当于帮你做了多个monitor
--
修改:bihai FROM 72.197.247.*
FROM 72.197.247.*
浪费CPU?
如果有一对,当温度超过上阈值,发生中断,服务程序屏蔽中断,设置新的阈值,允许中断;重复
如果有四对,温度超过第一对上阈值,发生中断,服务程序屏蔽中断,屏蔽第一个上阈值,允许中断。
当温度超过第二个上阈值,发生中断,服务程序屏蔽中断,屏蔽第二个上阈值,允许中断,
...
有啥好处?
温度,只有上下两个方向,只能超过两个阈值。如果不同的应用程序有不同的需求,仍然可以在驱动程序这个层次构造一个链表,或者二叉树,每个应用插入阈值->应用回叫函数入口是按阈值排好序的,某个阈值触发中断就设置下一个大的阈值。
如果要利用硬件的不同的寄存器,驱动程序仍然好把不同的应用(比如是函数调用的入口)映射到每一个阈值驱动器。
温度的变化是很慢的,一般需要CPU的运行才能积累热量。估计在10毫秒内不会升温1度。所以驱动程序有足够时间来反应,就是设置一个新的寄存器而已。
【 在 salsalover 的大作中提到: 】
: 跟低电压检测一样
: 多个阈值是为了应对应用的复杂性
: 如果就设一对,需要多个温度值时就要分时查询了,浪费cpu的处理资源
: ...................
--
FROM 72.197.247.*
对CPU而言,一个传感器只有一个中断。然后,根据传感器的一个寄存器可以了解到哪个阈值触发了中断,比如是TH0-TH7的哪一个。其中TH0-TH3是向下,TH4-TH7是向上。这8个阈值可以单独屏蔽。
假定TH4=40, TH5=42。两个都有效,那么当温度超过40度之后发生了中断后,不许屏蔽TH4,否则中断会一直发生。
【 在 PrimeTime 的大作中提到: 】
: 我觉得不是你理解的这样
: 每个中断不是有俩阈值么,一个上限一个下限
: 那中断1就可以设置温度在30~35度触发,中断5在41~42度触发,中断6在43~45度触发
: ...................
--
FROM 72.197.247.*
芯片是Amlogic A311D,我想问一下有没有类似的测温度并能产生中断的其他例子?最好不是Amlogic的。
【 在 ericking0 的大作中提到: 】
: 硬件只是需要足够灵活,能尽可能兼顾;
: 具体到你这里,由于你对于这个feature描述的很不清晰,只能随便猜几种可能;
: 1. 别人打算做分级,每个阈值触发的debounce时间不一样,超过60摄氏度debounce时间
: ...................
--
FROM 72.197.247.*
不是,是一个采样,多个比较造成多个中断源(对CPU来说是一个,但是可以细分看到来自哪一个比较器)
【 在 db16122 的大作中提到: 】
: 有没有可能是校准用的,差分采样计算误差之类的,单个传感器可能采样不是很准确
: 这个应用场景和功能安全有关系吗?
:
--
FROM 72.197.247.*