Apple线控的研究

500 views
Skip to first unread message

Toni

unread,
Oct 25, 2012, 5:28:42 AM10/25/12
to sz...@googlegroups.com
好久没和大家分享了~

最近在学Verilog HDL,一时找不到合适的实验项目练习,就随便选了手上iphone的耳机线控来研究一下。研究了一下才发现这个小小的线控其实还是有点复杂的。


以下是苹果线控的功能说明:
(1) 播放/暂停键:在播放音乐时,按此键可暂停播放,再按此键则继续播放。
(2) 快进:连续按二次播放/暂停键,第二次长按不松开。
(3) 快退:连续按三次播放/暂停键,第三次长按不松开。
(4) 上一歌曲:连续按三次播放/暂停键,就是上一歌曲功能。
(5) 下一歌曲:连续按二次播放/暂停键,就是下一歌曲功能。
(6) 音量加键:增强音量。
(7) 音量减键:减低音量。
(8) 语音控制:长按播放/暂停键,进入语音控制界面。
(9) iPhone来电话时,按(play/pause) 播放/暂停键接听。通话结束按(play/pause) 播放/暂停键断开电话。
(10) iPhone来电话时, 不想接听,长按(play/pause) 播放/暂停键3秒。挂断来电。

事实上,这些功能只能过三个按键就完成了:
Inline image 2

所以我相信线控里面只需要实现这三个按键的基本功能就行了,其它的组合功能应该是手机本身软件来实现的。

好的,破解第一步当然是强拆,把线控拆了,分析线控的电路结构。 拆开后发现线控里一共有4根线:
1. GND 地线
2. L phone 左声道
3. R  phone 右声道
4. MIC 麦克风

并没有专门的控制信号线,所有的按键都直接的连到了MIC麦克风的线上,看来控制信号是通过麦克风来发送的。 既然和左右声道无关,以下只画出MIC的电路结构:
Inline image 3

可以看到,苹果耳机里专门使用了一颗6pin的芯片来生成控制信号。开始我也觉得有点小题大作,但后面我们会知道原因。

初步分析:
1. PLAY/PAUSE键很容易理解,把MIC线对地短路即可。我做了一下实验,用镊子短路一下MIC线,果然可以播放和暂停。
2. VOL+和VOL-键直接连到的芯片的输入上,但输出只有一个pin1,且通过R4,C4交流耦合输出。我猜想应该是发出一个特定编码格式的信号来控制。

第二步,信号测量来验证之前的想法。
1. 正常连上耳机,示波器接在MIC线上。
2. 静态时,示波器显示MIC线保持1.8V左右的直流电压。
3. 按下PLAY/PAUSE键时,电压变为0V。这个没什么可说的。
4. 但当我按下VOL+ VOL-键时,神奇的事情发生了,示波器上什么也没有发生,但音量却的确变了。

当然不可能有这么神奇的事,看来信号比较微弱,需要放大一点来看。经过反复调整和放大,终于看到一点东西了,如下图:
Inline image 4

按下按键后,MIC线上出现了约20mV 2.9ms长的一段信号,现在还看不清,但可以大致看出这段信号的前1/3和后2/3两个不同的频率组成。进一步放大后,发现只是两段固定频率的正弦波。以下是放大到最大的波形:
Inline image 5

很明显,控制信号就是通过不同的频率来区分不同的命令的。

进一步测量发现,当按键按下和放开时,都有信号产生,以下是测量结果:

1. 所有信号总长都是2.9ms,前1/3是一个固定的频率260Khz,后2/3的频率和按键动作相关。所以很明显前1/3是一个前导波形(pilot waveform),后2/3才是真正的控制信号。
2. VOL+ 按下时频率165Khz, 放开时频率95Khz
3. VOL- 按下时频率125Khz, 放开时频率95Khz

【注】这些信号频率都远大于人耳听力范围(20hz~20Khz),属于超声波,所以对麦克风的正常工作不会造成影响。苹果用很巧妙的方式就实现了MIC和控制线共用线路独立工作,简化了线控的硬件电路。

信号分析大致有结论了,现在到了第三步模拟阶段了,我的Verilog HDL终于可以用上了 ^-^
【注】在这儿要说明一下,这么简单的波形完全没有必要动用Verilog HDL这么大动作,用这个纯属练手,杀鸡用牛刀,用Arduino完全可以一样做到的哈。

我用的是Altera Max V 5M160ZE64,160门的CPLD。这个芯片内部有集成的时钟源,所以不需要其它的时钟信号,只用到4个脚就够了:
K_UP: 接外接轻触开关,模拟VOL+
K_DOWN:接外接轻触开关,模拟VOL-
Wave_out:输出信号
BUSY:状态指示(可选)


程序过程不表,附在最后给大家参考。以下是调试后的仿真波形,和测量结果一致。
Inline image 6


第四步,接入线路验证。

CPLD产生的是1.8V的数字方波信号,需要滤波符合测量出来的信号格式。用面包板简单搭了一个带通滤波电路,只保留50Khz~300Khz范围控制信号频率。

然后把iphone的耳机通过CPLD的板后再转接到iphone上,方便切换原装耳机控制和自制电路控制。面包板飞得很乱,随便看就好了哈。

Inline image 7Inline image 8

经过一番很无趣的反复调试后,终于成功实现了原装线控的功能。CPLD产生的波形工作得很好。

【最终的问题】
但最后还有一个问题,我发现必须要先把原装的耳机接上以后,再切换到我的手动控制整个电路才会工作,如果直接不连接原装耳机,只连接CPLD板到iphone上的话,即使控制信号波形发送正常,还是无法实现控制。
看来原装耳机接入的时候和iphone之间还有一个握手信号,通知iphone耳机接上了,iphone才会接受后续的信号。
接上示波器,仔细观察开机波形,果然,发现了特别的信号:
>> 在开机上电后大约5~10ms后,控制器发向主机发出一个长度6.4ms的信号。其中前930us为260Khz的pilot频率,后接232Khz频率。看来这个信号就是开机握手信号了。
Inline image 11
Inline image 12

【大功告成】
修改程序,在开机后加上这段握手信号。哈,离开原装耳机也能正常控制了。



--
Toni
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
iphone_remote.v

Anders Ma

unread,
Oct 25, 2012, 7:02:29 AM10/25/12
to sz...@googlegroups.com
有图有真相!不错! 怎么想起学习Verilog了?想转ASIC?

Anders Ma

unread,
Oct 25, 2012, 7:22:43 AM10/25/12
to sz...@googlegroups.com
经过大家分析,你买了iPhone5,低调啊!!!

2012/10/25 Anders Ma <xueji...@gmail.com>
有图有真相!不错! 怎么想起学习Verilog了?想转ASIC?



--
-Anders

Jactry

unread,
Oct 25, 2012, 7:16:24 AM10/25/12
to sz...@googlegroups.com
Cool! 太棒了! 谢谢Toni分享~

Toni Chen

unread,
Oct 25, 2012, 7:27:51 AM10/25/12
to sz...@googlegroups.com
DIYer 什么都要学呀^_^



在 2012-10-25,下午7:02,Anders Ma <xueji...@gmail.com> 写道:

有图有真相!不错! 怎么想起学习Verilog了?想转ASIC?

--
You received this message because you are subscribed to the Google
Groups "Shenzhen DIY Lab" group.
To post to this group, send email to sz...@googlegroups.com
To unsubscribe from this group, send email to
szdiy+un...@googlegroups.com
For more options, visit this group at
http://www.szdiy.org
http://groups.google.com/group/szdiy?hl=zh-CN

夏青

unread,
Oct 25, 2012, 8:10:38 AM10/25/12
to sz...@googlegroups.com, sz...@googlegroups.com
这个教程写的太好了,值得学习,可否转发至in...@xinchejian.com?

发自我的 iPad

在 2012-10-25,下午5:28,Toni <fly...@gmail.com> 写道:

好久没和大家分享了~

最近在学Verilog HDL,一时找不到合适的实验项目练习,就随便选了手上iphone的耳机线控来研究一下。研究了一下才发现这个小小的线控其实还是有点复杂的。


以下是苹果线控的功能说明:
(1) 播放/暂停键:在播放音乐时,按此键可暂停播放,再按此键则继续播放。
(2) 快进:连续按二次播放/暂停键,第二次长按不松开。
(3) 快退:连续按三次播放/暂停键,第三次长按不松开。
(4) 上一歌曲:连续按三次播放/暂停键,就是上一歌曲功能。
(5) 下一歌曲:连续按二次播放/暂停键,就是下一歌曲功能。
(6) 音量加键:增强音量。
(7) 音量减键:减低音量。
(8) 语音控制:长按播放/暂停键,进入语音控制界面。
(9) iPhone来电话时,按(play/pause) 播放/暂停键接听。通话结束按(play/pause) 播放/暂停键断开电话。
(10) iPhone来电话时, 不想接听,长按(play/pause) 播放/暂停键3秒。挂断来电。

事实上,这些功能只能过三个按键就完成了:
<image.png>

所以我相信线控里面只需要实现这三个按键的基本功能就行了,其它的组合功能应该是手机本身软件来实现的。

好的,破解第一步当然是强拆,把线控拆了,分析线控的电路结构。 拆开后发现线控里一共有4根线:
1. GND 地线
2. L phone 左声道
3. R  phone 右声道
4. MIC 麦克风

并没有专门的控制信号线,所有的按键都直接的连到了MIC麦克风的线上,看来控制信号是通过麦克风来发送的。 既然和左右声道无关,以下只画出MIC的电路结构:
<image.png>

可以看到,苹果耳机里专门使用了一颗6pin的芯片来生成控制信号。开始我也觉得有点小题大作,但后面我们会知道原因。

初步分析:
1. PLAY/PAUSE键很容易理解,把MIC线对地短路即可。我做了一下实验,用镊子短路一下MIC线,果然可以播放和暂停。
2. VOL+和VOL-键直接连到的芯片的输入上,但输出只有一个pin1,且通过R4,C4交流耦合输出。我猜想应该是发出一个特定编码格式的信号来控制。

第二步,信号测量来验证之前的想法。
1. 正常连上耳机,示波器接在MIC线上。
2. 静态时,示波器显示MIC线保持1.8V左右的直流电压。
3. 按下PLAY/PAUSE键时,电压变为0V。这个没什么可说的。
4. 但当我按下VOL+ VOL-键时,神奇的事情发生了,示波器上什么也没有发生,但音量却的确变了。

当然不可能有这么神奇的事,看来信号比较微弱,需要放大一点来看。经过反复调整和放大,终于看到一点东西了,如下图:
<image.png>

按下按键后,MIC线上出现了约20mV 2.9ms长的一段信号,现在还看不清,但可以大致看出这段信号的前1/3和后2/3两个不同的频率组成。进一步放大后,发现只是两段固定频率的正弦波。以下是放大到最大的波形:
<image.png>

很明显,控制信号就是通过不同的频率来区分不同的命令的。

进一步测量发现,当按键按下和放开时,都有信号产生,以下是测量结果:

1. 所有信号总长都是2.9ms,前1/3是一个固定的频率260Khz,后2/3的频率和按键动作相关。所以很明显前1/3是一个前导波形(pilot waveform),后2/3才是真正的控制信号。
2. VOL+ 按下时频率165Khz, 放开时频率95Khz
3. VOL- 按下时频率125Khz, 放开时频率95Khz

【注】这些信号频率都远大于人耳听力范围(20hz~20Khz),属于超声波,所以对麦克风的正常工作不会造成影响。苹果用很巧妙的方式就实现了MIC和控制线共用线路独立工作,简化了线控的硬件电路。

信号分析大致有结论了,现在到了第三步模拟阶段了,我的Verilog HDL终于可以用上了 ^-^
【注】在这儿要说明一下,这么简单的波形完全没有必要动用Verilog HDL这么大动作,用这个纯属练手,杀鸡用牛刀,用Arduino完全可以一样做到的哈。

我用的是Altera Max V 5M160ZE64,160门的CPLD。这个芯片内部有集成的时钟源,所以不需要其它的时钟信号,只用到4个脚就够了:
K_UP: 接外接轻触开关,模拟VOL+
K_DOWN:接外接轻触开关,模拟VOL-
Wave_out:输出信号
BUSY:状态指示(可选)


程序过程不表,附在最后给大家参考。以下是调试后的仿真波形,和测量结果一致。
<image.png>


第四步,接入线路验证。

CPLD产生的是1.8V的数字方波信号,需要滤波符合测量出来的信号格式。用面包板简单搭了一个带通滤波电路,只保留50Khz~300Khz范围控制信号频率。

然后把iphone的耳机通过CPLD的板后再转接到iphone上,方便切换原装耳机控制和自制电路控制。面包板飞得很乱,随便看就好了哈。

<image.png><image.png>

经过一番很无趣的反复调试后,终于成功实现了原装线控的功能。CPLD产生的波形工作得很好。

【最终的问题】
但最后还有一个问题,我发现必须要先把原装的耳机接上以后,再切换到我的手动控制整个电路才会工作,如果直接不连接原装耳机,只连接CPLD板到iphone上的话,即使控制信号波形发送正常,还是无法实现控制。
看来原装耳机接入的时候和iphone之间还有一个握手信号,通知iphone耳机接上了,iphone才会接受后续的信号。
接上示波器,仔细观察开机波形,果然,发现了特别的信号:
>> 在开机上电后大约5~10ms后,控制器发向主机发出一个长度6.4ms的信号。其中前930us为260Khz的pilot频率,后接232Khz频率。看来这个信号就是开机握手信号了。
<image.png>
<image.png>

【大功告成】
修改程序,在开机后加上这段握手信号。哈,离开原装耳机也能正常控制了。



--
Toni

--
You received this message because you are subscribed to the Google
Groups "Shenzhen DIY Lab" group.
To post to this group, send email to sz...@googlegroups.com
To unsubscribe from this group, send email to
szdiy+un...@googlegroups.com
For more options, visit this group at
http://www.szdiy.org
http://groups.google.com/group/szdiy?hl=zh-CN
<iphone_remote.v>

Toni Chen

unread,
Oct 27, 2012, 12:35:46 PM10/27/12
to sz...@googlegroups.com
随便转啊,呵呵

Sent from iPhone

哥伦布

unread,
Oct 29, 2012, 2:27:42 AM10/29/12
to sz...@googlegroups.com
Toni
可以把这文章转给无线电或者Linux Pilot的编辑吗?
我觉得你大概或许会同意哈哈

Kermit

unread,
Oct 29, 2012, 2:30:39 AM10/29/12
to sz...@googlegroups.com
On Mon, Oct 29, 2012 at 02:27:42PM +0800, 哥伦布 wrote:
> Toni
> 可以把这文章转给无线电或者Linux Pilot的编辑吗?
> 我觉得你大概或许会同意哈哈

据说新的ip 9针接口里面又融入了苹果自己的芯片,以后几乎这些外设
是没得玩的:)

B.R
Kermit

Toni Chen

unread,
Nov 1, 2012, 3:45:10 AM11/1/12
to sz...@googlegroups.com
耳机的线控没有加密的,而且加密芯片已经被强大的深圳山寨破解了

Sent from iPhone

Toni Chen

unread,
Nov 1, 2012, 3:46:17 AM11/1/12
to sz...@googlegroups.com
当然没问题,不过写得这么乱应该不合格吧

Sent from iPhone

Reply all
Reply to author
Forward
0 new messages