0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于BlueCore01b芯片和API实现嵌入式音频网关的设计

电子设计 来源:单片机与嵌入式系统应用 作者:殷伟凤,徐君国, 2021-05-18 15:53 次阅读

作者:殷伟凤,徐君国,刘高平 来源:单片机嵌入式系统应用

引言

蓝牙是一种近距离无线通信技术规范,用来描述和规定各种电子信息产品相互之间是如何用短距离无线电系统进行连接的。蓝牙技术的主要用途是取代电缆。由于蓝牙具有比802.11b、HomeRF红外等无线技术高得多的性能价格比,蓝牙技术应用具有非常广阔的前景。

目前已有不少公司生产出高集成度的蓝牙芯片组,例如朗讯的W7020+W7400芯片组、飞利浦的LMX3162芯片、Atmel的T2901 和AT76C551芯片等。利用这些芯片可进一步方便地进行蓝牙产品的开发、同时,也有许多公司还开发出了高层协议栈及相应的API开发者基于这些高级协议栈,可不必对蓝牙技术作深入的研究就可以方便地开发基于蓝牙的应用。本文讨论一个基于CSR的BlueCore01b芯片和CCL的 BlueStack协议栈的嵌入式音频网关的实现实例。

1 音频网关的应用

由于蓝牙的低功耗和小体积的特点,在实现移动电话具备矩距离无线通信的能力时,蓝牙是首选的,而且是唯一的。目前已有一些移动电话公司推出了蓝牙手机产品,如爱立信的T39和T68等、诺基亚的6310、摩托罗位的T270c、索尼的C413S和阿尔卡特的OT702等;但大部分手机仍不具有蓝牙功能。通过在普通手机的音频接口上加装一个蓝牙音频网关,就可实现普通手机的蓝牙功能,与蓝牙无线耳麦进行短距离无线通信。

所实现的音频网关符合蓝牙技术规范PATR K:6中的耳麦应用规范。音频网关(AG)既用作输入也用作输出。AG可与耳麦建立一个RFCOMM连接,向耳麦发送AT命令。AG和耳麦之间也可建立 SCO连接,进行音频传输。

2 音频网关硬件电路

音频网关的电路设计利用CSR提供的BlueCore01b蓝牙芯片。BlueCore01b是在单片芯上集成了射频单元和法带控制器。芯片的方框图如图1所示。该芯片由射频接收器、射频发射器、射频合成器、物理层DSP硬件引擎、猝发状态控制器、微处理器、内存管理单元等部分组成,BlueCore0b是一个完整的单片系统,只要与内含蓝牙软件栈配合,即可向数据和语音设备提供全兼容的蓝牙接口。因此,实现音频网关的硬件电路相当简单。它主要包括以下几部分:蓝牙芯片、外部内存、音频编/解码器(CODEC)、键盘/显示。嵌入式音频网关电路方框图供音频输入/输出接口,建立音频连接。键盘/显示部分主要用于输入设备的识别码(PIN码)、发送AT命令、音频控制等操作及相应的状态显示。在外部内存中包含有CSR蓝牙软件栈及用户应用程序。

基于BlueCore01b芯片和API实现嵌入式音频网关的设计

o4YBAGCjc_SAGNqYAABTTS31wp4377.png

3 音频网关软件

有了相应的硬件平台以后,功能的完成主要通过软件实现。音频网关应用程序的实现是基于BlueStack协议栈来完成的。下面详细讨论音频网关的实现。

3.1 软件的组成

如图3所示,音频网关软件为三层结构。

pIYBAGCjc-2ADO9BAABOl2okOko553.png

(1)BlueStack协议栈

BlueStack是剑桥咨询有限公司(CCL)的蓝牙协议软件栈,是用C语言实现的Bluetooth高层协议栈软件。它遵循由蓝牙特殊兴趣小组(SIG)提出的分层模型,支持在L2CAP上使用RFCOMM或TCS二进制作为传输协议层规范。基于BlueStack协议栈,可实现 Bluetooth的所有功能。音频网关就是基于BlueStack实现的。

(2)AG客户机程序

这是AG软件的最高层,主要进行设备的查询、配对、连接等的请求;PIO事件的处理;识别码输入、音量控制、送AT命令及状态显示;启动调度程序等。这一层的程序由用户根据不同的应用来编制。

(3)连接管理器程序

这是AG软件的中间层,也由用户编制。引入连接管理器,主要是为了减少高层应用程序的指令数量,为高层应用程序和低层协议栈之间提供一个通用接口。连接管理器级主要是处理高层的请求信息,传送至BlueStack,并接收BlueStack的处理结果,进行相应处理后,通知高层应用程序级。

3.2 消息及处理机制

(1)消息

整个协议栈的Bluestack实现是消息驱动的,因此层与层之间使用消息传递方法。从图3的结构可看出,只有相邻层有接口关系。在嵌入式音频网关应用程序中,涉及到两大类消息:CM消息和BlueStack消息。前者在客户机和连接管理器之间进行传递,如图4所示为消息传递示意图;后者为连接管理器和BlueStack协议栈之间传递的消息。

o4YBAGCjc-GAQxquAACZxQER-LU474.png

消息使用服务原始模型。一般地,在服务原语后加上扩展名_REQ、_IND、_RES(or _RSP)和_CFM,分别表明原语是一个服务请求、指示、响应还是证实。CM消息格式为CM_原语_扩展名,如SCO连接请求消息为 CM_SCO_CONNECT_REQ。BlueStack原语类型有四种:DM_PRIM、RFC_PRIM、SDP_PRIM及 L2CAP_PRIM。在AG应用中,用到前三种。BlueStack消息格式为DM(RFC、SDC或SDS)_原语_扩展名,如SCO连接请求消息为 DM_SCO_CONNECT_REQ。

(2)消息传递

各应用层之间的消息传递通过消息队列来完成。消息的处理是通过某项任务进行的。第一个任务都有一个消息队列,消息被提交给所属某一任务的消息队列。实现任务和消息队列之间的捆绑是静态的。消息队列n,归属于任务n。在此AG应用中,我们定义了两个任务:一是AG任务,任务号为1,队列号也为1;另一是CM任务,任务号为0,队列号也为0。因此,AG客户机将所要传递给CM的消息提交到队列0中,而CM传递给AG客户机的消息送入队列1中。

在软件中,一个服务原语是一个结构。结构名一般采用原语_T。结构成员包括这些原语的类型及相关的载荷数据,如CM的查询请求服务结构定义如下:

在软件中,一个服务原语是一个结构。结构名一般采用原语_T。结构成员包括这些原语的类型及相关的载荷数据,如CM的查询请求服务结构定义如下:

typedef struct{

uint8 max_response; //可被接收的最大查询响应数

Delay inq_timeout; //用户提供的查询处理超时时长

uint32 class_of_device; //设备类型

uint16 remote_name_request_enabled; //标志位指示是否完成远程名的请求

}CM_INQUIRY_REQ_T;

以下给出了消息的提交。其中,宏MAKE_MSG表示创建该消息,msg为该消息结构的指针,将消息送入队列用MessagePut函数来完成。

*AG客户机

MAKE_MSG(CM_INQUIRY_REQ);

msg-》max_responses=num_responses;

msg-》inq_timeout=D_SEC(timeout);

msg-》class_of_device=CoD_filter;

msg-》remote_name_request_enabled=rnr_en;

MessagePut(0,msg);

}

*CM

{

MAKE_MSG(CM_INQUIRY_COMPLETE_CFM);

msg-》status=status;

MessagePut(1,msg);

}

(3)消息处理

对某一消息队列中的消息,由相应的任务来完成,调度程序运行消息队列不为空的任务。在应用程序中,任务用宏定义“DECLARE_TASK”来声明,用参数来标识某个任务。参数必须为整数,表示其任务号。分别在AG客户机程序和CM中声明任务1和任务0。程序结构如下:

*AG客户机程序中的任务1:处理来自CM的消息DECLARE_TASK(1)

{

void *msg;

MessageType type;

/*取出队列中的消息,其中的参数必须与DECLARE_TASK中的一致*/

msg=MessageGet(1,&type);

if(msg)

{

switch(type)

{

/*Connection Manager is ready to be used*/

case CM_INIT_CFM:

agInitCfm();

break;

/*Connection Manager has been initializedand is ready for action*/

case CM_OPEN_CFM:

}

MessageDestroy(msg);/*释放消息*/

}

}

*CM程序中的任务0:处理来自AG客户机的消息DECLARE_TASK(0)

DECLARE_TASK(0)

{

MessageType type;

Void *msg=MessageGet(0,&type);

if(!msg)return;

switch(type)

{

/*Request to initialise the connection manager*/

case CM_INIT_REQ:

cmInitAction((CM_INIT_REQ_T*)msg);

break;

}

MessageDestroy(msg);

}

3.3 调度

整个应用程序的实现是事件驱动的。在AG应用中,事件包括BlueStack事件、PIO事件、RFCOMM源端及目的端事件。所有事件的处理以及前面介绍的消息队列中的消息处理均由调度程序来执行。调度程序由高层应用程序启动,而各事件及消息处理分布在各软件层中。图5给出调度程序的流程。

o4YBAGCjc9GAIU5hAACzFc0lTks477.png

4 结论

本文提出的音频网关,通过普通手机的音频口进行连接。经测试,可与市售的蓝牙耳麦及自行研制的蓝牙耳麦进行配对、通话。操作过程如下。①当AG 启动时,若AG原先已经配对,则直接进入连接模式。②若原先未配对,有两种情况:如果AG内已经存储有识别码(PINcode),则开始查询耳麦与之配对;如果无PIN码,则进入PIN输入模式,输入PIN码。此PIN码要与所要配对的耳麦的PIN码一致。当配对成功后,AG即进入可连接模式(作为子设备连接)。在此种模式下,AG处于寻呼扫描状态,耳麦可与之连接。AG也可作为主设备连接耳麦。此时,AG与耳麦建立一个RFCOMM连接,AG可发送 AT命令给耳麦。AG和HS之间也可建立SCO连接,进行音频传输。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    447

    文章

    47788

    浏览量

    409098
  • 射频
    +关注

    关注

    101

    文章

    5358

    浏览量

    165839
  • 控制器
    +关注

    关注

    112

    文章

    15223

    浏览量

    171159
收藏 人收藏

    评论

    相关推荐

    基于ARM9的嵌入式网关的研究

    调试接口  在嵌入式系统中,芯片的烧写、调试都需要用到JTAG调试接口,可满足实时地实现对程序的分析和执行的监控。JTAG(Joint Test Action Group)是IEEE的规范标准,它可
    发表于 06-17 11:43

    基于ARM7的嵌入式音频处理系统的设计

    技术,完成基于ARM7的嵌入式音频系统的软硬件设计与实现。该系统具有音频实时录制、音频实时播放和播放由WAV格式保存的
    发表于 04-24 09:42

    嵌入式WEB服务器网关系统的研究与实现

    嵌入式WEB服务器网关系统的研究与实现
    发表于 08-24 22:57

    嵌入式媒体网关的架构是什么?

    嵌入式媒体网关通俗的来说就是一台嵌入式的计算机,其架构和我们平常了解的个人电脑的架构基本类似,只是在普通个人电脑的基础上简化了相关的输入输出设备,以降低整个系统的成本
    发表于 08-26 07:56

    基于SPB怎么实现嵌入式音频处理系统设计?

    的软件构架。SPB中的软件IP模块可以屏蔽底层细节,为FPGA嵌入式设计的快速开发提供便利,提高研发效率。介绍了基于SPB的FPGA嵌入式设计关键技术,并在智能开发平台NanoBoard 3000上实现了基于SPB的
    发表于 03-11 07:12

    如何去实现一种基于CAN总线的嵌入式网关

    嵌入式网关的硬件结构是怎样设计的?嵌入式网关的软件部分是怎样设计的?
    发表于 05-24 06:07

    怎么实现嵌入式Modbus/TCP网关的设计?

     本文设计和实现了一种嵌入式协议转换网关,通过Modbus/TCP协议将传统的串行链路通信的Modbus现场总线与以太网相连。
    发表于 06-01 06:10

    如何去实现一种基于ARM的嵌入式网关系统设计?

    嵌入式网关系统的硬件是由哪些部分组成的?一种基于ARM的嵌入式网关嵌入式网关系统设计与
    发表于 06-03 07:26

    如何在ARM9开发板上实现基于嵌入式网关嵌入式系统网络通讯?

    本设计已在ARM9开发板上实现了基于嵌入式网关嵌入式系统网络通讯。
    发表于 06-04 06:27

    怎么实现基于IPP的嵌入式音频解码器的设计?

    基于Linux的系统框架和集成开发环境怎么搭建?怎么实现基于IPP的嵌入式音频解码器的设计?
    发表于 06-04 07:03

    怎么实现基于信号处理和嵌入式应用的音频处理系统的设计?

    本文阐述了基于信号处理和嵌入式应用的音频处理系统的设计和实现
    发表于 06-08 07:07

    嵌入式Linux音频流媒体终端系统的设计资料分享

    《一种嵌入式Linux音频流媒体终端系统的设计与实现》由会员分享,可在线阅读,更多相关《一种嵌入式Linux音频流媒体终端系统的设计与
    发表于 12-16 06:06

    BL102嵌入式OPC网关的相关资料推荐

    涨见识了,嵌入式OPC网关BL102可以快速替代OPC软件实现PLC数据采集转OPC了。嵌入式OPC网关是指OPC服务运行于
    发表于 12-23 07:30

    嵌入式OPC UA网关与传统OPC软件的区别是什么

    ,运行OPC Server与OPC Client的网关,用户不需要额外再增加硬件,就可以实现PLC设备转换为OPC协议集成到系统中。嵌入式OPC UA网关的特点就是独立于OS系统,直插
    发表于 12-23 07:48

    蓝牙技术在音频网关中的应用

    给出一种基于CSR的BlueCore01b蓝牙单芯片和BlueStack高级协议栈的音频网关实现方法。所开发的
    发表于 05-15 15:38 40次下载