手机与设备音频接口通信原理讲解2.docx
《手机与设备音频接口通信原理讲解2.docx》由会员分享,可在线阅读,更多相关《手机与设备音频接口通信原理讲解2.docx(18页珍藏版)》请在冰豆网上搜索。
手机与设备音频接口通信原理讲解2
关于手机音频通信原理
如何从手机音频口获得电能
发布时间:
2013-5-16
如何从手机音频口获得电能
时下手机音频(耳塞)口的外设配件已不是什么新鲜事了。
目前应用最广的就是支付领域了,似乎Square公司在2011年就展开了移动支付业务,推出的刷卡支付方式受到的广泛的使用和好评,在短短的一年时间做出了惊人的成绩。
现在国内也有很多厂商模仿退出类似产品和服务。
Square的产品
国内的类似产品
从图上可以看出,这些个玩意儿只是利用了手机的耳塞插口,所以电源、通信都在一个耳塞插口。
这个项目Hijack http:
//web.eecs.umich.edu/~prabal/projects/hijack/ 是另外一个更好的应用耳塞插口的例子。
Hijack
HiJack是一个硬件和软件平台,用来在小型、低耗电周边设备和iOS设备之间建立通信。
该系统采用22kHz音频信号,将其转换为7.4mW电能(转化效率47%),可以带动一个TIMSP430微控制器和其它电子元件,允许HiJack和iOS应用进行通信。
所有的资料都能在上面给的链接找到,有兴趣的可以自己动手做一个。
本文就单独对如何从手机音频口获得电能做一个介绍。
下面是我的实验过程:
1.手机的耳塞插孔简介
手机耳塞插孔线都是由四根线组成,也就是插头前面分成四部分,1和2是两路音频输出,这个对所有耳机插孔都是兼容的,极个别厂商也许会有例外?
至少我没见过。
因为普通的3根线的耳塞在那款设备上都可以用,普通耳塞的3、4两根线其实只有一根的,也就是上图中的3、4中间是没有隔开的,就是一跟底线GND。
而手机的耳塞插孔3、4有一根是GND,还有一根则是麦克风MIC输入。
这两根线好多厂商都不一样,比如iphone就是3对应GND,4是MIC;而我手头的索爱E15i和诺基亚E63则是3对应MIC,4对应GND,华为C8812则跟iphone一样。
2.电路
这是电路和对应的元器件型号表(价目都列出来了):
J1接耳塞一路输出(另外一路还可以留作他用)。
之后是一个升压变压器T1,因为输出的音频电压很低,甚至不能触发后面的FET导通,所以需要先升压。
升压完了之后经过FET组成的桥整流电路,再经D1调整以后就得到直流输出。
实际做电路的时候发现T1很难买,价格比起这个指导价巨贵,这个指导价是一万片的价格,另外Q1-Q4也不好买,就用了A3401和A3402代替。
做好以后像下面这样,uglybutworks:
3.实验
音频输出找了个Androidsimplefrequencygenerator的软件,它可以调整输出频率和波形,结果发现输出16448HZ的方波的时候输出电压最大。
其实是可以通过最佳匹配输入阻抗来计算这个频率值的,但是不清楚厂商的技术指标,所以直接试也是不错的办法,而且很方便。
华为手机能得到2.2v的电压,发光二接管亮了。
索爱的能得到2.8V。
Hijack的文档上说它在iphone能得到3.5v电压,不曾考究过。
如果电压在2.2V-2.8V,可以加个chargepump来调整到3.3V。
只要最后功率能达到驱动应用电路就可以了。
利用音频线与arduino进行通信音频信号频率计
发布时间:
2013-5-16
前言部分
在多媒体电子设备中,音频设备是不可缺少的。
音频就是指我们人耳正常能听到的机械振动所对应的频率范围,一般在20Hz到20kHz之间。
一般来说,机械振动发声(比如人的喉咙内的空气振动)通过介质传递到声音采集器中,然后使采集器产生相应的模拟信号,这些信号通过音频接口接入一个高质量的数模转换器(就电脑而言是是声卡),转成计算机或其它多媒体设备可以处理数字信号。
而如果这些设备想复原声音,只需要将信号再次返回给数模转换器,重新转换成模拟信号,驱动音响等设备产生相应的机械振动,传到耳朵里就是声音了。
说了这么多,听起来很枯燥。
不过我们换个思路去思考,在这个音频的传递过程中,我们若把那些机械振动的采集和产生设备换成其他的我们想要的信号产生和接受装置,那么原则上我们是可以实现这些装置与电子设备的通信的,例如,电脑上的声卡可以帮助我们实现外部设备的拓展。
我们将两个电子设备通过这一系列装置去连接,进而通信,这也是可能的。
最简单的例子便是两个手机上《会说话的tom猫》对着喊话,如果我们按照原理说,这两部手机不仅实现了通信,还是无线通信。
不过,这的确是个很糟糕的例子。
做过这个实验的人就发现,每次成功的概率不是很高,语音反复重复的过程很中可能因为周围的响声被混入而彻底和以前不一样。
因为这里面的无线传输的实际是通过机械振动传输实现的,也就是声音。
声音有强弱的差异,也就是所谓的在模拟信号中电压的大小,声卡或者其他音频处理设备要负责将他们转化和还原,并不是一件简单的事情。
做个类比,这样传递过程就好像一队人从头到尾传一句话,即使话的含义不发生改变,说话的语气和其他因素也是难以复制的。
不过我们如果换个方式,使用纸条的话,只要语义清晰,中间有人传下去,到最后队尾收到的肯定是队头想要表达的内容。
而在电子设备的通信中,我们正是通过这种“传纸条”的方式去做。
这种”纸条“,我们就叫做数字信号。
那也许有人问,那声卡采集和产生的不是模拟信号吗?
的确如此,不过模拟信号也可以看做数字信号,数字信号本身也可以看成一种简化了的模拟信号,本来连续的电压值被离散的限定在0和1两个数字里。
正是因为我们忽略了“语气”之类的我们无法把握的信息,“纸条”才方便传递,数字信号就是这个道理。
( 不过,模拟信号才是音频设备的重头戏,不信看看森海塞尔耳机和高保真功放的价格。
我们选择数字信号传播主要原因也是要避开这些不必要的成本。
)
那么,有什么现成的例子可以证明这个在音频设备间使用数字信号的想法是可行的呢?
电话。
电话在拨号时发出不同音高的声音不是偶然的,每个数字对应一个频率,这些固定频率的声音被转化成电流再通过电话线传递给控制端,控制端再根据频率的顺序得到数字的顺序,也就是电话号码,再按照既定的程序接通对应用户的电话。
这样我们就用按键完成了一段指令的输入,又经过一系列的信号的传递和转换,完成了对远程终端的控制。
而如果我们把这种做法更复杂化点,就是所谓拨号上网。
不过,这个信号的传递所使用的频率,远远超过了音频的所谓20-20kHz定义,但是我们看到,原理还是一样的。
不过,原来的声卡被换了个名字,叫调制解调器。
而原来声卡中最重要的数模转换器也被尽量的简化掉了,因为我们只需要0或1,或者多几个数字而已。
现在回头讨论下,为什么要利用电话上网。
原因很简单,电话是最普及的音频设备,甚至说是最普及和最简单的远程通信装置,即使在网络时代也是这样。
电话线的覆盖范围基本是100%,而移动通信的信号那就不必说了。
这样在电话线上载入网络通信,就避免了重新布线入户的成本。
而从我们的角度看,手机,mp3,电脑,这些最常见的电子设备,都有一个共同音频端口,我们甚至没有必要为这个端口做特别的修改,就能做很多事情,比如手机与单片机通信。
有人说,ADK就好了?
不过ADK需要新的成本,以及复杂的配置,这些配置对于一般用户来说太难以解释了,就是极客也很难上手。
而音频端口,只要一根线,一个简单的放大器电路,,一个写好的通信协议,也能完成类似的事情。
事实上,网络上已经流传了android利用音频线与串口通信的程序,请去电子市场搜索和下载AudioSerialOut程序,一目了然。
他们的官方网站也提供了一致的思路,笔者讲在下文中讲解。
另外,iphone用户也不必发愁,虽然苹果能锁死usb,但是在国外,伟大的极客们早就悟出谁也无法锁死音频端口的事实。
不信,看看这个iphone盖革管计数器。
注意连接方式。
首先是简单的电路部分。
我们要做到单片机对音频信号的读取,就需要一个简单的放大电路。
因为电脑音频输出大概只有几十毫伏,而arduino使用的avr单片机数字信号对应的高电平则是5v。
幸运的是,因为我们需求的是简单的只有高低电平的数字信号的放大,模拟电路里所谓的失真之类的问题就可以不必考虑了。
这里我们使用lm358作为放大器。
电路原理图如下
注意这里,lm358的放大倍数远远超过了本身5v的电源电压的能力,这我们不必考虑太多,关键是在R1放上一个大电阻让放大倍数足够使arduino识别高低电平就可以了。
另外记住,lm358输出的信号和原来的信号是反向的,高低电平会调置。
国外那个网站(就是做Audioserial软件的那个用的是lm324,是4个放大器在一起,原理一致不做解释)所使用的我继续花了个接线图,注意这个图是为了省空间在元件下面走线了。
一般电脑是两个声道,充分利用了lm358的两个放大器,而放大器5v的电源寄生在arduino上也就可以了。
输入端和音频插头连接,接线上,最靠近内侧的是地。
输出端自然要连在arduino的数字端口上,这不用解释。
看看我自己悲催用耳机改的插头吧。
建议用铜丝拧成圈固定这个插头,焊锡是不沾的,所以固定不住。
不过固定好还是要涂焊锡,只有面接触,才能保证信号质量,否则,杂波很夸张。
这是我在面包板上做的lm358电路,只用了一个声道。
如果这些都做好,并且,没有啥故障的话,那么就可以进入软件方面的设计和调试了。
音频信号频率计
为了验证单片机可以顺利的读取高低电平信号并研究这个信号频率上的范围和精度,也为了研究arduino时钟的设置,我制作了一个音频信号频率计,arduino读取声卡模拟出的占空比为0.5的方波(就是均匀交替的高低电平信号),通过计时器,得到方波每个波谷的长度(因为是lm358反置),进而计算出这个方波的频率。
首先我们要讨论的是,计时器。
为了了解单片机上计时器的原理,我们先从最原始的计时工具——日晷和日历说起。
古人通过观察日月星辰的变化规律,了解到,太阳做周期的往复运动
拉卡拉手机刷卡器音频通讯技术原理初步分析
发布时间:
2013-5-16
1. 拉卡拉刷卡器
大家都知道,拉卡拉就是一个手机刷卡器。
拉卡卡、智能手机、拉卡拉软件、网络,构成了一个完整的、更强大的POS系统。
为什么说更强大呢?
因为在手机应用app的这一层,拉卡拉可以做很多很多方便的功能,这样借助于类似传统的刷卡服务,提供一系列现在支付宝也正在大力发展的生活服务等功能。
而这个是银联的POS所严重缺乏的。
目前来说,移动支付里,最方便的肯定是支付宝的快捷支付;但考虑国内目前的安全环境,用户把银行卡和密码托管给一个网站来管理,明显不如用的时候输入一下的方式更能被接受。
相对于更安全的支付宝加网银的方式,拉卡拉做到了与发卡行无关,这样也不需要手机上安装各种不同的银行的网银客户端。
所以,显然拉卡拉在某些应用场景比一些其他的移动支付方式更有优势。
下面我们就来看看拉卡拉的技术原理是怎么回事。
2. 内部结构
上面左右是一个常见的拉卡拉设备,挺好看的。
如果我们把它拆开来看,就如右图所示,当然除了这个东西,下面还有个耳机插头、侧面还有一个刷卡的槽。
总体来说,这个电路板很简单。
2.1 一个电池就占了绝大部分地方,导致整个拉卡拉个头偏大,可供刷卡万次以上(见参考资料1)。
2.2 左边的四根引线,对应于耳机插头上的4个区域。
分别是左声道(Left)、右声道(Right)、麦克风(Mic)和接地线(Gnd)。
其中L和R是接收手机往外输出信号的接口,M是输出信号到手机的接口。
需要注意的是并不是所有的顺序都想右图所示。
因为存在两个不一样的标准,国际标准和国家标准。
像联想、中兴等大部分国产手机都是国家标准,跟右侧的图一样的顺序。
而iphone、htc、三星、小米等手机都是国际标准,M和Gnd的顺序是反向的。
拉卡拉的某些版本可以自动识别M和G的正反向。
(见参考资料2)
2.3 电路板最右面的芯片处理输入信号和转换刷卡数据的A\D(音频\数字)处理模块,它是整个系统的核心。
在手机应用里点击刷卡时,音频信号通过L或R从手机发送到电路板,通过A\D模块转换成数据信号。
刷卡时电路板拿到银行卡信息,再通过A\D模块转换成音频传输给手机。
当然手机APP应用里在信号出入的时候,也需要做相应的A\D编解码工作,这个也是手机APP里最重要的工作。
3. 刷卡支付流程
手机与拉卡拉音频通讯示意图
手机与拉卡拉的音频通讯大概结构见上图,大概的流程是:
3.1 先在手机上打开拉卡拉的应用。
点击刷卡。
3.2 手机应用会调用androidapi的AudioTrack,通过L和R线路给拉卡拉手机刷卡设备发送一段通知信号(L和R表达的信息是一样的,只是波形是反相的,L的高电平对应于R的低电平,还没搞清楚拉卡拉为什么这么设计)。
3.3 芯片上的通讯模块拿到音频信号,解码后发现是刷卡通知,就等待刷卡层传来刷卡信息。
3.4 在刷卡槽刷卡后,卡的信息传递给芯片。
3.5 芯片拿到卡的信息,编码成音频信号,同M线路发送给手机。
3.6 手机APP通过AudioRecord对音频信号进行采样,拿到数字信号。
3.7 手机APP程序通过对数据信号进行解码,拿到实际的数据信息,即卡的信息。
3.8 如果刷卡失败,则手机APP拿到的是一段失败提示信息。
3.9 至此手机与刷卡器的通讯完成,手机APP再使用此卡的信息与拉卡拉的服务器端后台通讯,处理后续支付操作。
其中的技术关键点是(细节本文暂不讨论):
a) 传输上使用什么样的调制方式,采用什么样的波特率、频率。
b) 通讯上如何制定合适的协议,包括如何判断信号开始、如何握手建立连接。
c) 编码上如何编码表示数据,如何校验和纠错,如何滤波和解码数据。
4. 相关的一些技术问题
4.1 A/D转换的问题
耳机线传输一般是1250HZ~9600HZ之间的交流音频信号。
信号的调制解调有3种方式,调幅(AM)、调频(FM)和调相(PM)三种。
根据对拉卡拉的输入输出信号的分析,我们发现拉卡拉使用的是调幅方式,频率为9600HZ和4800HZ的音频信号。
4.2 耳机接口标准的问题
两种标准见2.2中所描述的。
4.3 不同android手机的问题
a) 我们发现,在个别手机上,接收到的音频波形跟其他手机相比,是反相的。
即高电平的波峰变成了低电平的波谷。
这个问题可以在解码的时候,根据特定的前导码来判断。
b) 手机Mic采样到的音频信号电平可能会不一样。
例如同一段音频信号,使用A手机AudioRecord采样出来,波峰的值大概是32000;另外找一个手机可能是3200,根据我们的多种不同手机测试,发现可以相差10倍。
处理方法是,可以额外的进行一次处理,先归一化;或者是滤波的时候,动态的根据峰值来调整阈值。
c) 有些手机的Mic不认非标准的采样率。
比如三星的I9308,如果使用9600*4的采样率初始化AudioRecord,就会报错;改成44100就没有问题。
4.4 数据传输的效率
每次通讯报文在100字节左右(50个汉字左右)(见参考资料1)。
因此,拉卡拉的传输效率看来不是问题。
4.5 数据传输的准确性
拉卡拉用了一个取巧的方式。
其先发送一段9600HZ的音频信号,紧接着再发送一段表示同样数据的4800HZ的音频信号。
如果手机能处理高频率的信号,后面的低频率信号就可以用来校验前面的数据。
如果前面的处理有问题,直接从后面拿低频率的信号来处理也一样可以保证拿到完整的数据。
当然,我们还可以在数据本身叫上校验和纠错。
4.6 数据的安全性
官方说“拉卡拉手机刷卡器内置有安全芯片,每一台刷卡器对应有唯一的银行卡磁条信息保护密钥。
使用专用安全算法,保证一机一密,一次一密。
用户的个人密码,采用RSA非对称加密方法进行加密”。
(见参考资料1)
但是根据我们观察,貌似拉卡拉的电路板上并没有特殊的安全相关模块。
整个体系也没有使用CA证书做相关的电子签名和身份认证。
所以,其安全性还有待研究。
5. 更多的可能性
拉卡拉的使用场景还是太简单了。
其基本上仅仅使用了一个刷卡后的信号通过音频MIC线路传输给手机APP的功能。
传输的数据也很简单。
其实相当于将数据从电路板发送到手机APP,通过L/R将数据从手机发送到电路板要更简单、更高效,这一块拉卡拉几乎没怎么用上。
我们可以在这个系统结构上做更多双向的数据通讯,把一些安全性要求更高的操作放到硬件上来完成,从而实现更高的安全保障,提供更多的功能,适用更多的应用场景。