基于ARM的音频接口数据传输模块设计
存入事件,当外部业务程序在数据要发送时,将要发送的数据放入共享的发送数据缓存时,数据存入事件发生,所述的主线程取到要发送的数据,进行差分曼彻斯特编码,再用操作系统的音频控制接口函数发送到音频输出接口。
?
![](../img/eep/emb/emb-44234lczxegwynb3.jpg)
3.2 数据格式
音频输入输出线路上传输的数据信号采用差分曼彻斯特编码,不进行载波调制与解调,直接在音频线路上传输数据编码信号。具体协议机制如下:
(1)基于音频输入输出接口的数据传输方法是一种串行通讯方法,参考标准同步串行通讯协议,采用差分曼彻斯特编码,其特点为每发送一位至少有一个跳变,以适应在只能传输交流的音频输入输出线路上传输数据。通信信号中使用中间时刻的跳变来表示发送的0或1,第一个跳变的如果是正跳变表示1,如果是负跳变表示0,之后的跳变与前一个跳变进行差分,由相比较的结果决定是1或0,如果当前位跳变方向与前一位的跳变方向相同,则表示为0,否则表示为1。采用差分曼彻斯特编码,通信双方的同步允许差半位时间,同步差半位时间内接收的数据也不受影响。
(2)数据传输是双工方式,从手机输出数据的传输使用音频输出线路,进入手机的数据传输使用音频输入线路,发送数据前让总线空闲准备,提示接收方做好接收准备。总线空闲准备是用连续发送8位以上的0来表示。
(3)串行通讯采用帧起始标志进行同步,帧起始可以从任意一位开始,串行通讯的帧起始标志采用与标准串口通信同步中一样的标识,即连续发送6个1,即发送字符0x7e表示发送了帧起始标志。
(4)串行通讯采用帧结束标志表示本次数据发送结束,进入总线空闲状态。连续发送7个1,即发送字符0x7f表示发送了帧结束。串行通讯中,线路上传输的数据的单位为位,发送Byte时首先发送最高位,最后发送最低位,发送数据时字节间没有间隔。发送数据时,数据中很可能有连续的6个1,这与帧起始标志和帧结束标志相同,会造成通讯歧义。为消除歧义,规定当发送数据时,连续发送5个1后,必须发送一位无效的0,再接着发送其他数据。而接收到连续的5个1后,需要删除接着收到的0。这连续的5个1并非一定在1个Byte中,例如,两个Byte 0x0f和0xc0,每个Byte都没有连续的5个1,但先发送0x0f后发送0xc0时,就有连续的5个1了,需要动态插入、删除一位0。
(5)所述基于音频输入输出接口的串行通讯中,编码信息流一般以块形式表示,一个信息流块包含:块头和块负载信息,线路上传输的数据帧格式如图4所示。
?
![](../img/eep/emb/emb-44235dqrpneuavxd.jpg)
?
4 结束语
根据嵌入式开发的一般原理,设计了数据传输模块的结构,进而完成数据传输模块的硬件设计,软件设计中完成了主控系统、各相关电路的控制程序,采用差分曼彻斯特码传输数据,能满足串行通信的同步要求,保障了数据传输的稳定性。
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于ARM体系的嵌入式系统BSP的程序设计方案(04-11)
- 在Ubuntu上建立Arm Linux 开发环境(04-23)
- 达芬奇数字媒体片上系统的架构和Linux启动过程(06-02)
- SQLite嵌入式数据库系统的研究与实现(02-20)
- 革新2410D开发板试用手记(04-21)