首页 > 学院 > 开发设计 > 正文

一种奇葩耳机与喇叭互斥的实现方式

2019-11-09 16:43:15
字体:
来源:转载
供稿:网友

一种奇葩耳机与喇叭互斥的实现方式

所谓耳机与喇叭的互斥,是指当耳机插入时,喇叭通道自动关闭,声音从耳机中输出;当耳机拔出时,喇叭通道打开。

Android平台标准的实现「耳机与喇叭互斥」的方式是:标准耳机接口硬件(带的插入检测) -> 连接到CPU的GPIO -> 内核检测到GPIO变化后改变/sys/class/switch/h2w/state中的值 -> Android上层系统读取该文件以判断当前耳机状态 -> 系统将新的耳机状态以广播方式发送给APP。

当我要在一个指定的板子上实现录音功能时,手上这个块板没有引出外置Mic,只好从耳机插座入手。我在耳机插入时,让系统仍然认为是未插入状态,这样以保证外置喇叭能正常出声,即「打破耳机与喇叭的互斥」。我开始测试这个主板「耳机与喇叭互斥」的实现方式时发现有些许不同: 1. /sys/class/switch/h2w/state中的值并不会随着耳机插拔而变化; 2. Android上层不能收到耳机插拔的广播或者消息; 3. 将耳机接口硬件上的检测插拔功能禁用后(用摄子短接两个检测脚)仍然可以切换通道;

这里写图片描述

以上三条说明该主板并未按照Android平台标准方式实现,介于主板厂家不给提供原理图,只能从硬件电路一点一点测试推导。经反复测试,耳机插座在插拔耳机时另外一个不同之处是Mic脚与GND脚的压差会变化,如下:

耳机状态 压差 备注
拔出 2.5V
插入 1.8V

而从喇叭处倒推出来的差异时,耳机的插拔会导致功放IC的使能脚电平被拉低为0。手绘出的电路图如下: 这里写图片描述 经测试最接近功放的一个三极管经去掉后,插入耳机时,使能脚电平不再被拉低了,这样就实现了「打破耳机与喇叭的互斥」的目的了。这里简单补充一下纯硬件实现声道切换的坏处:系统(APP)无法得到耳机的插拔事件,会导致对应耳机插拔的事件无法进行处理,比如拔出耳机时一般的音乐播放器会暂停插入音乐等等。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表