








有图有真相!不错! 怎么想起学习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
好久没和大家分享了~
最近在学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, 放开时频率95Khz3. 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>
Sent from iPhone
Sent from iPhone