安卓耳机接口(我读懂了你作文800字)

一文读懂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

大家好,又见面了,我是你们的朋友全栈君。

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


更多技术干货,欢迎扫码关注博主微信公众号:HowieXue,一起学习探讨软硬件技术知识经验,关注就有海量学习资料免费领哦:
在这里插入图片描述



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、 需要信号衰减电路,可将设备电路产生的信号衰减至音频接口能承受的范围内。前期调试时,我们可以用该电路将信号录进电脑进行信号分析

博主热门文章推荐:

一篇读懂系列:

LoRa Mesh系列:

网络安全系列:

嵌入式开发系列:

AI / 机器学习系列:


参考文献及网页链接:

[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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/128718.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • intellij idea 激活码[免费获取]

    (intellij idea 激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.htmlML…

  • 遍历QMAP「建议收藏」

    遍历QMAP「建议收藏」QMap<QString,QString>::iteratoriter=m_map.begin();while(iter!=m_map.end()){qDebug()<<“Iterator”<<iter.key()<<“:”<<iter.value();/…

  • rpm安装和卸载[通俗易懂]

    rpm安装和卸载[通俗易懂]一安装RPM是RedHat公司随RedhatLinux推出了一个软件包管理器,通过它能够更加轻松容易地实现软件的安装。  1.安装软件:执行rpm-ivhrpm包名,如:  #rpm-ivhapache-1.3.6.i386.rpm  2.升级软件:执行rpm-Uvhrpm包名。  3.反安装:执行rpm-erpm包名。  4.查询软件包的详细信息:执行r

  • Random随机数nextInt(n)的使用

    Random随机数nextInt(n)的使用nextInt(intn) 方法用于获取一个伪随机,在0(包括)和指定值(不包括),从此随机数生成器的序列中取出均匀分布的int值。声明以下是对java.util.Random.nextInt()方法的声明。publicintnextInt(intn)参数n–这是结合于该随机数返回。必须为正数。返回值在方法调用返回

  • hibernate中query.uniqueResult()

    hibernate中query.uniqueResult()Queryq=session.createQuery(“selectt,pfromTeachert,Personpwheret.personid=p.id”);得到的两个对象组成的数组

  • 电赛练习之旋转倒立摆PID调节[通俗易懂]

    电赛练习之旋转倒立摆PID调节[通俗易懂]前言:在家准备电赛控制题,第一个选择的旋转倒立摆,结构和电路相对简单,对于新手比较友好。本人今年大二,自学的STM32和PID算法,本文算是对这个题目练习的记录吧,文章和程序有误的地方还请大家多多指教。一、机械结构考虑到正式比赛时需要自己搭建机械结构,我就没有直接购买现成的机械结构。关于机械结构还是平时接触太少了,随便在淘宝上买的不锈钢打孔支架作摆臂和旋转臂,最后发现传感器没法安放,强行用电机支架和胶带固定住。最困难的是怎么把电机和旋转臂连接得牢靠,最开始用的一个联轴器,发现转的猛了就会松动,想尽各种办

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号