kaiyun官方注册
您所在的位置: 首页> 通信与网络> 设计应用> 基于Android的MT8880芯片的设计与实现
基于Android的MT8880芯片的设计与实现
2016年微型机与应用第21期
文波,周渊平
四川大学 电子信息学院,四川 成都 610065
摘要:Android是一种基于Linux的开源操作系统,它具有十分丰富的应用。文章提出了将搭载有Android系统的主板TQ210和双音多频拨号芯片MT8880通过主板上的摄像头B接口连接起来,设计一个可以在Android系统上接听和拨打有线电话的应用,然后在 Linux 内核中编写驱动程序,并在 HAL层和JNI层中生成动态库文件,实现在Android平台上通过有线接听和拨打电话的功能。经过测试,该设计方案能成功接听和拨打电话。
Abstract:
Key words :

  文波,周渊平

  (四川大学 电子信息学院,四川 成都 610065)

摘要:Android是一种基于Linux的开源操作系统,它具有十分丰富的应用。文章提出了将搭载有Android系统的主板TQ210和双音多频拨号芯片MT8880通过主板上的摄像头B接口连接起来,设计一个可以在Android系统上接听和拨打有线电话的应用,然后在 Linux 内核中编写驱动程序,并在HAL层和JNI层中生成动态库文件,实现在Android平台上通过有线接听和拨打电话的功能。经过测试,该设计方案能成功接听和拨打电话。

关键词:Android; 有线电话; MT8880; HAL; JNI

0引言

  随着移动通信技术的发展,移动通信经历了从第一代到第四代的飞速发展,目前,5G通信已经进入测试阶段。然而移动通信的每一次改变,通信频率几乎是成倍增加,使得每一个基站的信号覆盖率会越来越小,这样就会要求建立更多的基站,但是在城市里,居民不可能同意在自己的小区及小区附近建立基站,所以可以大胆预测,当5G通信到来时,室内的信号将会比较弱,手机通话质量会大大降低,这样使得辐射也会大大增加,通话稳定性将会显著降低。所以本文提出了一种在搭载有Android4.0系统的主板TQ210上拨打有线电话的方法,既可以克服手机在室内信号差的不足,又可以在主板上完成手机所具有的所有功能,这样在室内就可以完全不用手机。

1硬件系统设计

  1.1硬件框架

  硬件系统由主板TQ210与MT8880模块及其外围电路构成,如图1所示。主板TQ210采用了三星公司推出的S5pv210微处理器[1],从图1中可以看出主板TQ210的外围电路十分齐全。只需要将TQ210开发板的GPIO接口与MT8880模块连接起来,就可以实现在搭载有Android系统的主板上接听和拨打电话的功能。

图像 001.png

1.2MT8880模块简介

  MT8880收发芯片是具有微处理器接口的、功能较丰富的双音多频(DTMF)芯片。它的发送部分采用行列计数器及频率稳定性较高的D/A转换器,可以发出16种双音多频DTMF信号;接收部分能接收16个DTMF信号,并把DTMF信号分离及解码,以4位并行二进制方式输出[2]。MT8880芯片的功耗非常低,集成度相当高且定时准确,可以调整双音频模式的占空比,能自动抑制拨号音和调整信号增益,还带有标准的数据总线,可以与TTL电平兼容,并可方便地进行编程控制[3]。

图像 002.png

1.2.1引脚排列与功能

  MT8880芯片引脚排列如图2所示。该芯片有20个引脚,其中1脚为运放的同向输入引脚;2脚为运放的反向输入引脚;3脚为运放增益选择端;4脚为基准电压输出端;5脚为电源地;6脚为DTMF时钟/振荡器输入,采用3.579 545 MHz的时钟信号;7脚为时钟输出引脚;8脚为输出DTMF信号引脚;9脚为读写控制端;10脚为片选引脚;11脚为寄存器选择引脚,当为低电平时,控制数据寄存器的读写,当为高电平时,控制状态寄存器和控制寄存器的读写;12脚为系统时钟输入;13脚为中断处理请求端;14~17脚为数据线,控制DTMF信号的发送和接收;18脚为滞后前输出,当检测到有效音频时,就变为高电平,信号条件不足时又立刻返回低电平;19脚为滞后输出/保护后输出;20脚为电源正极,为该芯片提供所需电压[4]。

图像 009.png

  1.2.2信号音判断原理

  信号音主要由拨号音、忙音及回铃音组成,其中拨号音是连续脉冲信号,忙音和回铃音的频率相同,都在425 Hz~475 Hz,但它们通断时间并不一样,回铃音在1 s时间为通,4 s时间为断开,而忙音则是以0.7 s为一个周期,在一半的时间接通,一半的时间断开。若要判断信号音,应该在拨号后将MT8880芯片设置为呼叫处理模式,MT8880的呼叫处理滤波器是一个带通滤波器,当信号输入端有信号音输入时,在IRQ/CP就输出一高电平,此时电话呼叫过程中的各种信号音经MT8880滤波,限幅后得到方波,并由MT8880芯片的IRQ引脚输出,判断该引脚上的信号就知道为何种信号音。

  在本次编程中,拨完电话号码后,就让MT8880芯片工作在CP模式,并开启中断及定时器,采用下降沿触发,计数时间为5 s,判断步骤如下:

  (1)若计数值小于256则为拨号音,进入其他状态并继续检测。若计数值还是小于256,则说明还是在通话中,一直检测,直到计数值大于256后就挂断电话,因为此时对方已经挂断了电话。

  (2)如果计数值在1 024~1 791之间,则为忙音,直接挂断电话。

  (3)若计数值在256~1 023,则为回铃音,等待对方接听,并继续进入CP模式检测。

  1.2.3MT8880模块与主板连接原理

图像 003.png

  由于TQ210主板上并没有直接可用的GPIO口,经过查阅电路图发现摄像头接口CAMERA_B的引脚与GPIO口复用,它使用了GPJ0口的全部引脚和GPJ1口的部分引脚。若要将此接口作为GPIO口,只需要将原来配置的摄像头驱动中对GPJ1、GPJ0引脚的初始化代码去掉,然后在自己写的驱动中对这些引脚初始化成所需的功能即可。图3为MT8880模块输入输出接口与开发板的GPIO接口对接图,其中D0~D3为数据线,当打电话时,把这4个脚配置为输出,当接电话时,把这4个脚配置为输入,为以后做来电显示做准备。具体每个脚的功能见表1。

2软件设计

  Android系统的底层是Linux[5],所以所有的软件设计都是在Ubuntu14.04系统上完成的,要使该芯片能够正常工作,则必须要在Linux内核中编写相应的驱动文件,在HAL层和JNI层生成动态库文件以及在应用层编写应用程序[6]。

2.1MT8880驱动开发

  在/opt/EmbedSky/TQ210/Kernel_3.0.8_TQ210_for_Linux_v1.4/drivers/char目录下新建一个tq210_mt8880.c,然后在tq210_mt8880.c文件里编写好程序后并保存,修改该目录下的Kconfig文件,在终端执行命令make menuconfig时可以看到刚刚新增的配置选项,最后修改该目录下的Makefile文件,然后在make menuconfig中选择刚才加上的菜单,重新编译内核,如果成功,则内核就已经包含了最新加进去的MT8880驱动了。

2.2HAL层开发

  硬件抽象层(Hardware Abstraction Layer,HAL)是建立在Linux驱动之上的一套动态库。这套动态库是属于Linux内核层之上的系统运行库层[7]。

  Android系统的HAL层是为了避开Linux的GPL束缚,保护一些硬件供应商的知识产权而提出的,HAL层用于控制硬件的动作,而Linux 驱动程序仅仅完成一些简单的数据交互作用,甚至把硬件寄存器空间直接映射到user space[8]。目前HAL存在两种架构,位于libhardware_legacy目录下的“旧HAL架构”和位于hardware的libhardware目录下的“新HAL架构”。主板TQ210采用了“新HAL架构”。新HAL架构如图4所示。

图像 004.png

  编写HAL层代码步骤如下:

  (1)首先在TQ210_Android_4.0.4_V1.4/hardware/Libhardward/include下创建MT8880.h头文件,编写头文件源码并保存。

  (2)然后在/opt/EmbedSky/TQ210/TQ210_Android_4.0.4_V1.4/device/embedsky/tq210目录下创建libMT8880文件夹,在该文件夹中新建MT8880.c文件,在该文件里编写源码,然后保存该文件,最后在该文件夹下创建Android.mk文件并编写该文件的源码,然后保存该文件。

  (3)最后在终端输入相关命令进行编译,将在目录下生成的MT8880.tq210.so文件复制到主板上的system/lib/hw目录下,当然也可以放在其他目录下。

2.3JNI层开发

  JNI的全称为Java Native Interface,它是Java平台的一部分,并允许Java代码与其他语言写的代码进行交互,使得在JVM(Java虚拟机)内部运行的Java字节码能够与其他语言(比如C、C++等)进行交互操作[9],图5为JNI层在Android中的位置关系图。

图像 005.png

  在/opt/EmbedSky/TQ210/TQ210_Android_4.0.4_V1.4/packages/apps中创建MT8880文件夹,用来存放jni源码,在该文件夹中新建文件MT8880Service.cpp,编写源码并保存,这里需要注意的是函数的前置Java_com_embedsky_MT8880_MT8880Activity_决定了创建应用程序使用的包名。其次创建Android.mk文件,编写源码并保存。最后在终端输入相关命令进行编译,将生成的libMT8880.so文件复制到主板对应的目录中[10]。

3测试及结果

  在本次测试中,将TQ210开发板(搭载Android4.0系统)与MT8880模块及其外围电路通过开发板上的CAMERA_B接口连接起来,并把电话线接到MT8880上的RJ11接口上,然后打开开发板上的通讯录APP,点击按钮进行拨号。经过测试,该装置能顺利拨通要打的电话,并且语音质量良好,测试结果如图6~图8所示。

图像 006.png

图像 007.png

图像 008.png

4结论

  本文实现了在Android系统上通过MT8880芯片拨打和接听有线电话的功能,并且该方案既有抗干扰能力强、辐射小、保密性强的通信特点,又具有Android平台的所有特性。如果将手机上的通讯信息同步到该系统上,然后直接在该系统上拨出要打的电话号码,即可完全实现无线与有线的融合,把两者的优点结合起来,这样该设计方案将更加完美。

参考文献

  [1] 广州天嵌计算机科技有限公司.TQ210用户硬件手册[Z].2012.

  [2] 李传南,王剑刚,李宝华.单片机与DTMF信号收发芯片MT8880的直接接口设计[J].电子与自动化,1999(2):23-24.

  [3] 张立臣.DTMF信号收、发芯片MT8888原理及应用[J].国外电子元器件,2001(9):30-31.

  [4] 董守田,徐风文.DTMF收发芯片MT8888的应用[J].农机化研究,2003(2):216-217.

  [5] 宋宝华.Linux设备驱动开发详解(第二版)[M].北京:人民邮电出版社,2013.

  [6] 李刚.疯狂Android讲义[M].北京:电子工业出版社,2015.

  [7] 李宁. Android开发权威指南[M]. 北京:人民邮电出版社,2011.

  [8] 韦德琼.基于Android系统的驱动模块的设计和实现[D].哈尔滨:哈尔滨工业大学,2012.

  [9] 施月玲,宣凯,张海平,等.JNI技术在Android平台融合通信终端的应用[J].杭州电子科技大学学报(自然科学版),2015,28(2):41-44.

  [10] 杜江,周渊平.基于Android的电话拨号功能[J].计算机系统应用,2014,23(12):245-248.


此内容为AET网站原创,未经授权禁止转载。
Baidu
map