一文读懂Android/iOS手机如何通过音频接口与外设通信


  • 0 背景
  • 1 音频口通信特点
    • 1.1 通用性强
    • 1.2 速率低
    • 1.3 小信号
  • 2 手机音频口通信原理
    • 2.1音频接口
    • 2.2音频通信模型与信号组成
    • 2.2.1通信模型
    • 2.2.2音频通信使用的信号
  • 3 手机音频口全双工通信方案
    • 3.1设备→手机
    • 3.2 手机→设备
  • 4 案例分析(以2FSK信号调制为例)
    • 4.1 2FSK信号调制
    • 4.1.1 Android下实现2FSK软件调制
    • 4.2 2FSK信号解调
    • 4.2.1解调电路
    • 4.2.2解调原理分析
  • 5 音频口通信关键技术与问题分析
    • 5.1 从手机获取电能
    • 5.2 不同手机音频口驱动能力
    • 5.3 不同手机对音频信号的处理
    • 5.4 调制信号处理
    • 5.5编码与速率问题
    • 5.6 通信协议制定
  • 6 现有的解决方案
    • 6.1 Hijack Project
    • 6.2手机刷卡器(拉卡拉)
    • 6.3 其他产品
  • 7 开发需要考虑的几点
  • 参考文献及网页链接

0 背景

-> 随着移动互联网技术的迅猛发展,两大主流智能移动设备iOS 和Android占据了绝对的市场,除了基本的通话、娱乐功能之外,这些移动设备已经成为新时代中重要的信息终端设备节点。
-> 目前智能移动设备主要集成了Wi-Fi、蓝牙无线通信标准接口,然而在外设应用领域中,由于受成本、功耗等因素的限制,许多传感器、控制设备往往采用传统的串行通信、USB通信等技术,但是有些智能手机或平板电脑缺乏这些通信接口,因此未来应用手机和传统设备之间统一的通信接口–音频接口,有着极大的市场。
-> 目前手机外设+ 手机APP模式已是未来产品的一个新导向。因此,解决跨平台下手机与外设的通信也是未来的移动技术的重点。
下图是市面上现有的几种基于音频口通信的设备:


图1 红外遥控器

图2 心率测试仪

图3 手机刷卡器


1 音频口通信特点

1.1 通用性强

在智能手机普及的今天,手机的对外通信接口多种多样,而其中以3.5mm的音频接口通用性最强,基本所有的手机、平板电脑都会有这个接口,所以在一些要求通用性的设备上,音频接口成为首选。

1.2 速率低

由于手机音频部分的采样频率一般为44.1KHZ(部分国产山寨为8KHZ
),这极大的限制了音频通讯的速率。
我们都知道如果是44.1KHZ的采样频率,那么最高的信号频率只能为20KHZ左右,而信号周期也不可能只有2个采样点,通常要到10个以上,这样层层下来通讯速率可想而知。

1.3 小信号

音频通信的信号都是毫伏级的,各个手机厂商略有不同,但通常最大不超过200mv。
通常我们通信使用的信号强度也就100mv左右,这导致信号比较容易受干扰,且在开发阶段对工具有着种种限制。


2 手机音频口通信原理

2.1 音频接口


图4 音频接口(国际标准和国内标准)
首先,音频接口上传输的是音频信号,如耳机听音乐、打电话;如今使用的耳机大多是3.5mm的四芯座,分别是地、左声道、右声道和麦克风MIC(线控开关)。
如上图,左边是国际标准,右边是国内标准。因此可以看出,手机向外部发送数据是通过左右声道,接受数据是通过MIC口作为信号通道;这为手机与外设全双工通信建立了硬件基础。

2.2音频通信模型与信号组成

2.2.1通信模型

所有的音频信号都是模拟信号,所以手机的音频口通信实际上就是对音频信号的调制和解调。
调制有模拟调制和数字调制之分,模拟调制就是把模拟信号(比如人说话的声音)直接加载到电磁波上,使得电磁波的某一特性随着声源的变化而变化;而数字调制是近现才发展起来的,特别是DSP(数字信号处理)技术的发展,数字调制中的调频FM有2FSK(2进制调制)、4FSK(4进制调制)、8FSK(8进制调制)等等

图5典型的 音频通信系统模型
可以看出由设备→手机是用MIC,手机→设备用左、右声道中的任意一个。实际产品中,最终手机解析信号是需要的是频率和幅值。另外说明实际应用中两个声道一般只用一个,剩下的一个通常被用来帮助设备进行上电识别或者供电。

2.2.2音频通信使用的信号:

1、方波:方波通常使用的是曼彻斯特编码方式,它的好处是可以用单片机直接输出方波,经过衰减后即可使用,方便简单。缺点是兼容性不好,因为手机音频部分有这样一个特性,它只识别变化的电平信号,当麦克输入的信号长时间保持在某一非零电平时,手机会将其视为零,而强行拉回零电位。这就是采用方波通讯方式的兼容性不好的最大原因了,并且方波也容易受干扰。
2、正弦波:正弦波不会出现上面所说的方波的问题,故正弦波的兼容性和稳定性更好一些。通常采用方案有FSK、DTMF、信号发生器、或方波转正弦波等。


3 手机音频口全双工通信方案

要实现手机音频口的全双工通信,必须满足2个条件:
- 1.信号必须在音频频率之内
- 2.需要是低功耗的
第一个条件限制了信号带宽,第二个条件限制了成本和功率。在这2种限制条件下,目前主要有2种方式实现这种同时的双向通信:FSK调制和基于曼彻斯特编码的直接数字通信。

3.1设备→手机

1、曼彻斯特编码(Manchester Encoding):是一个同步时钟编码技术;在诸多通信方式中,曼彻斯特编码是最灵活简便的一种方法,编码信号可由单片机直接产生,经衰减电路衰减后便可直接使用。注意事项:曼彻斯特编码信号的生成有两种方式,一种是用PWM生成,一种是用定时器中断翻转IO。

曼彻斯特编码可以直接进行数字传输,编码将1变成01,而将0变成10,在每位编码中有一跳变,同时将时钟同步信息一起传输到对方。虽然这种编码方式将传输速率降低了一半,但是在编码后0和1的数量完全相等,不存在直流分量,因此具备自同步能力和良好的抗干扰能力。


图6 曼彻斯特编码后的波形

2、 FSK(Frequency-shift keying)编码方式:FSK使用时通常都是用集成的芯片来生成的,而这些芯片通常都是遵守固定的通信协议的的要求(FSK为Bell202或V.23协议)。这两种通信方式的优点是采用正弦波通信、稳定性好且使用简便。但由于固定通信协议的限制导致通信速率、比特率也受到限制而缺乏灵活性。

FSK的原理很简单:用一个频率表示1,另一个不同的频率表示0。在这里我们使用1200Hz的信号代表0,2400Hz的信号代表1。如图所示,1(高电平)所在的频率高,0(低电平)所在的频率低,这样就完成了FSK调制。


图7 FSK调制后的信号

3、 信号发生器、锁相环方式:这种方式用信号发生器或者锁相环来产生方波或正玄波,由单片机来控制波形的输出,也可以实现音频通信,且十分灵活。但缺点是电路较复杂,且不同频率信号之间衔接不好掌握。

3.2 手机→设备

由于手机输出的音频信号很小,无法直接使用,因此现有方案是用运放发大到合适的范围,与用电压比较器转换成TTL方波。

1、 放大电路方式:将手机输出信号经放大电路放大到合适的幅值,然后有锁相环或者通过FSK、DTMF芯片进行解析。
2、 电压比较器方式:将手机输出的交流信号经电路强行拉到Vcc/2级别,然后加到电压比较器一端,另一段接比较电压Vcc/2,这样交流信号即被转化为TTL方波信号,再进行解析就容易了。


4. 案例分析(2FSK信号调制)

4.1 2FSK信号调制

2FSK按字面的英语全称是:2 (binary system) Frequency-shift keying(二进制频移键控),就是用二进制里的0、1来控制载波的频率,从而达到通信的目的。
例如:我们用1ms长、1KHz的正弦信号来代表二进制里的1;用1ms长、2KHz的正弦来代表二进制里的0;那一连串的1KHz、2KHz的信号解调出来就是一连串的0和1。


图 8二进制调频示意图

4.1.1 Android下实现2FSK软件调制

要实现2FSK,首先需要在Android系统下面获得一个基准的正弦信号发生器,有了这个基准的正弦信号发生器,只要给一个二进制量(0 or 1),就可改变输出频率,从而达到我们想要的信号调制目的。
如下图,经过调制后的信号输出波形图:(黄色的是实际输出波型、红色方波是对应二进制数据)
传送的数据是定义的通信协议头:0x5AA5


图9经过调制后的信号输出波形图
然后设计Android程序,步骤如下:
• 获取对应音频采样率下的最小缓冲区的大小
• 新建Audio Track(音频数据输出Class)
• 将缓冲区中的音频数据写入音频播放线程并设置左右声道音量等
注:若需要其中一个声道对外部扩展头供电,可以设置该声道为循环播放。

4.2 2FSK信号解调

4.2.1解调电路

解调端使用MSP430的单片机,主要是因为TI的单片机功耗较低,休眠状态下,电流可达到uA级,正常工作下电流也可以保持在几个mA级左右,适合手机音频口通信。

图10 MSP430 解调电路
案例中P2.3脚接手机音频口的右声道,
在单片机代码里设置并激活此引脚的第二功能(比较器0)的正向输入端,并将比较器0的反向输入端配置成内部VCC/2参考电压,如图,在手机右声道上用两个100K的电阻对VCC进行分压,所以只要右声道的电压在比较器导通的范围内变化时,比较器就能捕获到手机右声道上的信号了。下图是比较器的输出特性:


图11 比较器的输出特性
调制信号经过比较器之后的输出波形图如下:

图12 调制信号经过比较器之后的输出波形图

4.2.2解调原理分析

既然前面的调制信号是用不同频率的波形来表示的,经过比较器之后,输出的波形如上图所示,这些宽窄有续的方波里就携带了我们想要的信息,然后再通过MSP430单片机里的捕获器来捕获这些方波信号。

同时用定时器来计算这些方波的时间,从而解调出我们前面调制的信号,最终获得码元。

解调过程方框图如下:


图13 解调过程方框图


5 音频口通信关键技术与问题分析

5.1 从手机获取电能

如果外设没有电池供电,要实现音频口通信,首先就需要从音频口获取电能来驱动单片机或者传感器等设备,然后才能将数据转换成音频数据通过音频口传输出去,或者将传感器收集到的数据通过单片机转换成音频数据后通过mic口传入手机。
一般的音频口取电电路都是一个通用的升压电路,因此升压电能转换效率和是非常关键的。

5.2 不同手机音频口驱动能力


图14 不同手机音频口驱动功率对比
如图14所示,iPhone音频口可以输出16mw的功率,而其他的安卓手机只有几mw的输出能力;对于iPhone手机强大的音频口驱动能力,足以驱动常见的单片机及传感器

5.3 不同手机对音频信号的处理

在个别手机上,接收到的音频波形跟其他手机相比,是反相的。即高电平的波峰变成了低电平的波谷。这个问题可以在解码的时候,根据特定的前导码来判断。
手机Mic采样到的音频信号电平可能会不一样。例如同一段音频信号,使用A手机Audio Record采样出来,波峰的值大概是32000;另外找一个手机可能是3200。
考虑到人耳能听到的音频信号一般都是在100Hz——10KHz左右的范围内,各别手机自带的降噪音等能力,会自动对音频信号进行处理、滤波。

5.4 调制信号处理

传输上使用什么样的调制方式,采用什么样的波特率、频率。如何对调制信号完成数据的组帧和解帧,才能手机音频口和外设之间可以实现高效的双向全双工通信。

5.5编码与速率问题

编码上如何编码表示数据,如何校验和纠错,如何滤波和解码数据。还需要进行简单的纠错编码,这样在出现少量错误的时候可以进行校正,进一步的降低误码率。
在保证误码率的同时,还要考虑传输速率,目前至少要达到2k~4kbps的传输速率才能满足系统需求。

5.6 通信协议制定

通讯上如何制定合适的协议,包括如何判断信号开始、如何握手建立连接。

6 现有的解决方案

6.1 Hijack Project

Hijack是一个硬件和软件平台,用来在小型、低耗电周边设备和iOS设备之间建立通信。
该系统采用22kHz音频信号,将其转换为7.4mW电能(转化效率47%),可以带动一个TI MSP430微控制器和其它电子元件,并实现Hijack和iOS应用进行通信。


图15 现有的Hijack 开发板

图16 Hijack音频口取电电路
取电电路分析:
Right接耳机右声道输出,之后是一个升压变压器T1,因为输出的音频电压很低,甚至不能触发后面的场效应晶体管FET导通,所以需要先升压。升压完了之后经过FET组成的桥整流电路,再经整流二极管D1调整以后就得到直流输出。

图17 Hijack App测试

6.2手机刷卡器(拉卡拉)

手机音频刷卡器是一种转账工具,用于个人支付和转账支付。它必须包括一个超低功耗微控制器(MCU)、支付卡插槽、安全访问模块、篡改检测脚、音频接口。

图18 音频口刷卡器框架图
拉卡拉就是一个手机刷卡器;拉卡卡、智能手机、拉卡拉软件、网络,构成了一个完整的、更强大的POS系统。

图19 拉卡拉示意图
芯片处理输入信号和转换刷卡数据处理模块,它是整个系统的核心。在手机应用里点击刷卡时,音频信号通过L或R从手机发送到电路板,通过A\D模块转换成数据信号。刷卡时电路板拿到银行卡6,再通过A\D模块转换成音频传输给手机。当然手机APP应用里在信号出入的时候,也需要做相应的A\D编解码工作,这也是手机APP里最重要的工作。

图20手机与拉卡拉音频通讯示意图

手机与拉卡拉的音频通讯过程大致如下:
• 先在手机上打开拉卡拉的应用。点击刷卡。
• 手机应用会调用Android Api的Audio Track,通过L和R线路给拉卡拉手机刷卡设备发送一段通知信号(L和R表达的信息是一样的,只是波形是反相的,L的高电平对应于R的低电平,还没搞清楚拉卡拉为什么这么设计)。
• 芯片上的通讯模块拿到音频信号,解码后发现是刷卡通知,就等待刷卡层传来刷卡信息。
• 在刷卡槽刷卡后,卡的信息传递给芯片。
• 芯片拿到卡的信息,编码成音频信号,同M线路发送给手机。
• 手机APP通过Audio Record对音频信号进行采样,拿到数字信号。
• 手机APP程序通过对数据信号进行解码,拿到实际的数据信息,即卡的信息。
• 如果刷卡失败,则手机APP拿到的是一段失败提示信息。
• 至此手机与刷卡器的通讯完成,手机APP再使用此卡的信息与拉卡拉的服务器端后台通讯,处理后续支付操作。

6.3 其他产品


图 21Quick-Jack评估测试板

图22 智能手机温湿度监控产品

图23 音频-串口转换模块


7 开发需要考虑的几点

  • 1、 手机录音软件,最好能在手机上直接看到波形的。
  • 2、 建议用笔记本电脑进行开发,而非台式机。因为音频信号很小,容易受干扰,而台式机干扰较大,笔记本还有一个好处是必要时可将外接电源拔掉,用电池供电。
  • 3、 录音笔,有时需要得到纯净的音频信号,方便更加准确的分析。
  • 4、 音频转接板,一边接音频母座,一边接音频公头,将MIC、地、左、右声道4跟线用排阵引出,方便录音。
  • 5、 需要信号衰减电路,可将设备电路产生的信号衰减至音频接口能承受的范围内。前期调试时,我们可以用该电路将信号录进电脑进行信号分析

参考:

[1].Verma S, Robinson A, Dutta P. AudioDAQ: turning the mobile phone’s ubiquitous headset port into a universal data acquisition interface[C]//Proceedings of the 10th ACM Conference on Embedded Network Sensor Systems. ACM, 2012: 197-210.
[2].Kuo Y S, Verma S, Schmid T, et al. Hijacking power and bandwidth from the mobile phone’s audio interface[C]//Proceedings of the First ACM Symposium on Computing for Development. ACM, 2010: 24.
[3].赵文景, 封化民. 智能手机音频通信的实现[J]. 北京电子科技学院学报, 2014(4):64-67.
[4].张佳进, 陈立畅, 张超,等. 智能移动设备的音频通信接口设计与实现[J]. 自动化与仪器仪表, 2015(4):149-152.
[5].何江山.基于智能手机的家用人体生理参数检测终端设计[D]. 浙江大学, 2015.
[6].国外Hijack 的项目网站、源码、购买链接:
http://web.eecs.umich.edu/~prabal/projects/hijack/
https://code.google.com/p/hijack-main/
http://www.seeedstudio.com/depot/hijack-development-pack-p-865.html
https://github.com/taweili/hijack/tree/master/iPhone
[7].国内Android方案Git(基于Hijack)
https://github.com/ab500/hijack-infinity
[8].安卓手机和单片机音频通信
http://blog.csdn.net/raoqin/article/details/9797131
[9].手机的音频口通信方案
http://blog.csdn.net/guang09080908/article/details/43405051
[10].拉卡拉手机刷卡器音频通讯技术原理初步分析
http://blog.csdn.net/kimmking/article/details/8712161
[11].一种智能手机获取监测环境温度、湿度的实现方法
http://www.eepw.com.cn/article/274760.htm
[12].Android音频口通信(一)——2FSK信号调制
http://blog.csdn.net/wocao1226/article/details/8773348
[13].手机音频口双向通信模块 (3P)
http://www.taskcity.com/users/20225-kuangjiu/portfolios/154338?locale=en
[14].iOS开发之音频口通信-通过方波来收发数据
http://www.jianshu.com/p/649e2c341c00
[15].通过手机耳机口和外设之间传输数据
http://www.zhihu.com/question/26918431
[16].在安卓系统中使用音频接口用于数据传输
https://software.intel.com/zh-cn/android/articles/using-the-audio-jack-as-data-interface-on-android-systems?language=it

更多相关文章

  1. Android再添新功能 支持汉语语音指令
  2. Android重力感应基础
  3. android绘制播放音频的波形图
  4. 四极管: 微软的移动战略:抽血Android实现三国杀
  5. Android(安卓)手机蓝牙 (普通蓝牙篇)
  6. Google125亿美元收购摩托罗拉,移动领域三足鼎立
  7. Android开机广播无效问题(手机Root后)
  8. android audio/linux alsa音频-硬件
  9. 电脑通过豌豆荚连接手机或者平板不成功,豌豆荚版本6.8.*

随机推荐

  1. Android作为客户端,采用Netty与服务器通信
  2. ListView中item点击的时候颜色变化
  3. Android开发录音和播放音频的步骤(动态获
  4. android 问题归纳
  5. error: resource android:attr/dialogCor
  6. 转载]android 实现qq聊天对话界面效果
  7. 调用图灵机器人API实现Android智能机器人
  8. textView自动滑动
  9. Android开发学习笔记:圆角的Button
  10. 安卓开发09:常用控件-TextView文本展示