电平触发和边沿触发 && ACCDET模块耳机检测

电平触发,就是只有高电平(或者低电平)的时候才做指定的处理;边沿触发,就是有高电平向低电平转换,或者从低电平向高电平转换,这个转换过程触发一个动作。比如:
 _______

__/ ,这个图中,0到1变换,/部分就是上升沿,


        /_____  ,这个图中,1到0变换,/部分就是下降沿。双边沿触发即上升沿和下降沿都触发。

  和电平触发的差别:

(1)电压的要求。不管是高电平触发还是低电平触发,对电压是有要求的,比如说高到一定程度或者低到一定程度才可以。但是对于边沿触发,要求的仅仅是跳变的动作。

(2)触发动作的次数。边沿触发只会产生动作一次;如果是电平触发,如果电平不改变,产生的触发动作应该是一直会存在的。也就是时间轴上的差别,前者是瞬态,后者则是常态。基于这个区别:如果用电平触发在一段时间内会一直响应中断,比如发数据开始会拉低,直到发完后才会拉高,这个低电平触发会不断执行,但其实只想它发数据时触发一次,将其改成低的边沿触发即可。

=====================================================================================

   ACCDET内部有两个比较器,会根据传入的电压判断并产生中断。ACCDET的输入电压即耳机 MIC PIN 的电压,内部比较器的输出分别对应A/B两个寄存器。ACCDET内部两个比较器的Vref分别是1.77V和0.4V(硬件决定的,不能修改),所以,对应的电压有3个范围:

1.77V-1.9V:未插入耳机的状态(AB=B11)
0.4V-1.77V:插入4段式(有Mic)耳机时的状态(AB = B01)
0-0.4V:插入3段式耳机时的状态,或者4段式按键按下时的状态(AB = B00)
耳机的状态会保存到ACCDET的寄存器中,当电压在任意2个范围间切换时,状态发生变化,ACCDET产生中断,中断处理中读取状态寄存器的值,并根据状态的变化做相应的处理。

参考原文:http://blog.csdn.net/tanxs001/article/details/8279185
————————————————
版权声明:本文为CSDN博主「zhandoushi1982」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhandoushi1982/article/details/5396926

Feature Phone主要有三种耳机检测方式:
(1) EINT+AuxADC
【检测原理】
(1) 耳机检测方式为EINT+AuxADC。

(2) EINT HISR为AUX_EINT_HISR,在aux_task_main中注册中断。插入耳机,若是高电平触发中断,需要保证AUX_EINT_STATE为1,否则为0。

(3) hook key的检测采用ADC。当耳机plug in,trigger AUX_EINT_HISR,此时turn on micbias, double check plug in state后,再发送msg AUX_ID_EARPHONE给UEM。

   然后turn off micbias。当aux收到来电消息,也会turn on micbias,检测SENDKEY ADC,直到挂断电话,才turn off micbias。

【软件配置】ACCDET_SUPPORT=FALSE
【典型平台】MT6236,MT6252

(2) ACCDET
【检测原理】
(1) 耳机检测方式为ACCDET only。

(2) HISR为ACCDET_HISR,在ACCDET_INIT注册。

(3) hook key的检测采用ACCDET。

(4) 耳机状态与accdet处的电压对应关系如下表:

                          表(一)

在这里插入图片描述

Earphone state

Accdet voltage

Comparator AB state

Plug out

1.9V

A=1,B=1

Plug in

0.4V~1.7V

A=0,B=1

Hook key pressed

0V

A=0,B=0

【软件配置】ACCDET_SUPPORT=TRUE
【典型平台】MT6276,MT6250D/MT6250

(3) EINT_ACCDET
【检测原理】
(1) 耳机检测方式为EINT+ACCDET。

(2) EINT HISR为AUX_EINT2_HISR,在ACCDET_INIT注册。插入耳机,若是高电平触发中断,需要将AUX_EINT_STATE置为1,否则置为0。

(3) hook key的检测采用accdet。

(4) 耳机状态与accdet处的电压对应关系同表(一)。

(5) 耳机插入,触发eint之后,enable ACCDET,耳机拔出之后会disable ACCDET。

【软件配置】ACCDET_SUPPORT=EINT_ACCDET
【典型平台】MT6255,MT6250/MT6250D

ps:
在这里插入图片描述
耳机驱动调试(插拔检测与按键检测)
耳机类型判断
三段和四段、欧标和美标
现在许多设备的耳机接口都采用3.5mm的耳机接口,其中终端就是,终端可以兼容三段和四段耳机;三段和四段耳机,单从外观上就比较好区分,顾名思义,三段耳机的接头由绝缘环分为三段(如图1所示),从接头头部开始依次对应左声道—右声道—接地;四段耳机接头由绝缘环分为四段。

在这里插入图片描述

三段式和四段式耳机

三段耳机接头

三段耳机和四段耳机的区别在于,四段耳机相对于三段耳机多了mic功能,三段耳机仅能从设备输出声音,而四段耳机除了声音的输出外,同时还可以录入声音,用在终端中可以直接用耳机mic通电话、录音等。

欧标和美标

四段耳机从外观上看好像都相同,其实不然;根据接头上mic的位置不同分为欧标和美标,欧标又称为国家标准(OMTP标准:开放移动终端平台标准),美标又称为国际标准(CTIA标准:移动通信行业协会标准)。美标耳机与欧标耳机从插座头部开始每一段对应的通道不一样

欧标耳机:左声道—右声道—mic—接地;

美标耳机:左声道—右声道—接地—mic(如图2所示);

在这里插入图片描述

欧美标四段耳机接头原理图

图2 欧美标四段耳机接头原理图

以上是从外观分辨不出来的特点,在实际中要向确认一个四段耳机是欧标还是美标,一般通过万用表测量左/右声道与第三段/第四段之间的阻抗 (大约为35Ω) 来确认;除了测量阻抗来确定耳机标准外,我们还可以通过判断耳机接口上绝缘体的颜色来确认,欧标耳机与美标耳机通常情况下绝缘体颜色是不同的,美标为白色,欧标为黑色(绝缘体颜色非行业或国家标准,不能作为绝对的判断依据,不排除有特殊情况,所以最好的判断方式是用万用表测耳机阻抗)。

如果把美标的耳机接到欧标的接口上,就会出现音乐输出只有背景声的情况,按住麦克风上的通话键才正常出现声音。如果欧标的耳机接到美标的接口上,就会出现地线接触不良,耳机输出音量很小,按住麦克风上的通话键才正常出现声音的现象。

2.耳机座的标准

耳机座标准分为NC和NO两种,如图3所示(以美标耳机的耳机座为例);

在这里插入图片描述

从上图可以看出,无论是NC还是NO标准,MIC、GND(接地)、R(右声道)、L(左声道)4个触点线路均一致,不一致的地方为HS-DET,全称为headset-detective,是用以检测耳机是否插入的触点。

以NC为例,为耳机未插入的情况下,HS-DET和L是连接在一起的,为接地低电压。当耳机插入时,HS-DET会和L分离开来,HS-DET不再接地,突变为高电压。当电路检测到该电压突变的时候,就会认为耳机已经插入,从而进入下一步操作。拔出耳机时,HS-DET高电压突变为低电压,则识别为耳机拔出。

NO和NC相反,HS-DET在耳机未插入时为高电压,在耳机插入后为低电压。

耳机检测原理
耳机插拔检测
耳机检测中断上报与gpio中断上报类似,插入前后PIN脚电平状态发生突变,触发中断,以下图为标准耳机部分原理图(图中R602/NC)与 芯片datasheet:

在这里插入图片描述

在这里插入图片描述

由原理图可以判断这是一个美标、NC类型耳机座,耳机插入前HP_DET与HP_L闭合,HP_DET默认电平为低。耳机插入后HP_DET与HP_L断开,HP_DET电平被拉高,触发中断信号。

结合datasheet 选用headset L-INT 作为 HP_DET 触发耳机检测,设置完 耳机检测的阈值(例如350mV),插拔耳机就可以正常触发中断。

耳机按键检测
下图是一个耳机内部的电路图与检测耳机按键的datasheet

在这里插入图片描述

由耳机内部电路图分析得知,

当我们没有按下按键时,耳机MIC 与 上面提到耳机电路原理图中 的 电阻(R608)串联,HEADMIC_BIAS 2.8V HP_GND 0V, 所以 耳机MIC 与 R608 串联 分压。HEADSET_BOTTON_DET 处电压 为 耳机MIC 两端电压,HEADSET_BOTTON_DET处电压 应当大于 1V,因为寄存器 _RG_AUDHEDET_BDET_REF_SEL 最大为 1V(视不同平台 datasheet 确定)。
当我们按键耳机中间按键时,耳机MIC被短路 ,R608 直接 接到 HP_GND ,HEADSET_BOTTON_DET处电压 应当为 0V。所以 当我们将 _RG_AUDHEDET_BDET_REF_SEL 检测 阈值设置 为 1V 时,按键按下 和 抬起 电压值 正好在 _RG_AUDHEDET_BDET_REF_SEL 设置阈值的两侧 ,HEADSET_BOTTON_DET 引脚就会触发中断。
同理 当 我们 按下 左 右 两个 按键 时,221Ω和 391 Ω会 分别和 R608 串联, 两个按键按下时 都 要保证 HEADSET_BOTTON_DET 处 的 电压低于 1V(_RG_AUDHEDET_BDET_REF_SEL 检测 阈值设置 为 1V 时)用来触发中断,也就是说 耳机 三 个的按键 按下时 ,可以触发中断后,读取 HEADSET_BOTTON_DET 处 的 电压。根据读取电压的不同,就可与区分 三个按键。
上诉必须保证 没有按键按下时,读取 HEADSET_BOTTON_DET 处 要大于 _RG_AUDHEDET_BDET_REF_SEL 设置 阈值,按键按下时,读取 HEADSET_BOTTON_DET 处 要小于 _RG_AUDHEDET_BDET_REF_SEL 设置 阈值,用来触发中断。再根据 三个 按键 按下时接入电路的电阻阻值不同,根据分压值的大小来区别三个按键。
耳机检测与按键检测问题拓展
常开与常闭耳机问题
由耳机插拔检测中提到的NC 与 NO 耳机座。耳机的实际插拔与耳机插拔检测结果正好相反时,及耳机拔出软件报出的结果是耳机插入。

出现这个问题,如果没有 dts 或者 其他什么参数配置,直接找芯片平台解决问题,简单的改一下耳机插拔反向逻辑不一定能解决问题,还设计datasheet中相关寄存器修改(基本确定是要修改寄存器初始化参数)。

耳机类型检测
具体复杂的耳机类型判断,可以自己看一下驱动自己平台的驱动代码,我本次的检测比较粗暴,有文章张贴的图片可以我用的是美标耳机,所以 在驱动加载的时候(耳机按键未按下)检测 HEADSET_BOTTON_DET 处的电压, 如果该电压小于 1V 直接判断为 三段耳机 没有MIC功能。反之,判断耳机为正常的 四段 美标耳机。

该判断的逻辑在于,平台只支持 美标耳机,所以 三段耳机 和 欧标耳机 在 耳机按键没有按下时 检测 HEADSET_BOTTON_DET 处的电压 都为 0V,具体逻辑可以分析我前面 原理图 和 耳机按键检测解释 。

关于特殊耳机的支持
以poc 专用耳机举例 ,一下为 poc 专用耳机图解

在这里插入图片描述

HEADSET_BOTTON_DET 与 HEADMIC IN DET 为同一PIN脚。

由上图 我们可知,按键没有按下时耳机MIC 没有接入电路,按键按下时耳机MIC 和 2.2K电阻并联后 和 R608 串联 接入电路。我在 耳机按键检测中提到的 必须要保证耳机 没有按键按下时,读取 HEADSET_BOTTON_DET处电压 要大于 _RG_AUDHEDET_BDET_REF_SEL设置 阈值,按键按下时,读取 HEADSET_BOTTON_DET 处 要小于 _RG_AUDHEDET_BDET_REF_SEL设置 阈值,用来触发中断。所以说 这类 耳机 如果 没有 检测到耳机按键按下与抬起 直接 用万用表 测量一下按键按下和抬起时HEADSET_BOTTON_DET处电压 是否 符合 我提到的电压变化。如果不符合,请硬件 同事 调整 电路中的电阻阻值,使按下和抬起按键时电压变化正好处于设置阈值两侧。

更多类型的耳机,可以根据耳机检测原理灵活调整。
————————————————

PS:耳机检测原理
在这里插入图片描述

原文链接:https://blog.csdn.net/liweicheng123/article/details/108050613

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值