小白一枚,欢各位大佬指出错误
现在许多设备的耳机接口都采用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
由耳机内部电路图分析得知,
由耳机插拔检测中提到的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处电压 是否 符合 我提到的电压变化。如果不符合,请硬件 同事 调整 电路中的电阻阻值,使按下和抬起按键时电压变化正好处于设置阈值两侧。
更多类型的耳机,可以根据耳机检测原理灵活调整。
附:
文章部分内容引用https://mini.eastday.com/a/190613011041476.html?qid=02263&vqid=qid02650