基于CC2540的蓝牙BLE协议,用户自定义的函数是哪块?

基于CC2540的蓝牙BLE协议,用户自定义的函数是哪块?,第1张

用户模式及协议

     1.文件传输模式

文件传输模式提供两终端间的数据通信功能,可传输后缀为.xls、.ppt、.wav、.jpg和.doc的文件(但并不限于这几种),以及完整的文件夹、目录或多媒体数据流等,提供远端文件夹浏览功能。文件传输协议栈如图2所示。

     2.因特网网桥模式

这种用户模式可通过手机或无卖帆线调制解调器向PC提供拨号入网和收发传真的功能,而不必与PC有物理上的连接。拨号上网需要两列协议栈(不包括SDP),如图3所示。AT命令集用来控制移动电话或调制解调器以及传送其他业务数据的协议栈。传真采用类似协议栈,但不使用闷袜PPP及基于PPP的其他网络协议,而由应用软件利用RFCOMM直接发送。

     3.局域网访问模式

该用户模式下,多功能数据终端(DTs)经局域网访问点(LAP)无线接入局域网,然后,DTs的 *** 作与通过拨号方式接入局域网的设备的 *** 作一样,其协议栈如图4所示。

    4.同步模式

同步用户模式提供设备到设备的个人资料管理(PIM)的同步更新功能,其典型应用如电话簿、日历、通知和记录等。它要求PC、蜂窝电话和个人数字助理(PDA)在传输和处理名片、日历及任务通知时,使用通用的协议和格式。其协议栈如图5所示,其中同步应用模块代表红外移动通信(IrMC)客户机或服务器。

     5.一机三用电话模式

手持电话机有三种使用方法:第一,接入公用电话网,作为普通电话使用;第二,作为不计费的内部电话使用;第三,作为蜂窝移动电话使用。无线电话和内部电话使用相同的协议栈;语音数据流直接与基带协议接口,不经过L2CAP层,如图6所示。

     6.头戴式设备模式

使用该模式,用户打电话时可自由移动。通过无线连接,头戴式设备通常作为蜂窝电话、无线电话或PC的音频输入输出设备。头戴式设备协议栈如图7所示,语音数据流不经过L2CAP层而直接接蚂配激入基带协议层。头戴式设备必须能收发并处理AT命令。

完整的协议栈包括蓝牙专用协议(如连接管理协议LMP和逻辑链路控制应用协议L2CAP)以及非专用协议(如对象交换协议OBEX和用户数据报协议UDP)。设计协议和协议栈的主要原则是尽可能利用现有的各种高层协议,保证现有协议与蓝牙技术的融合以及各种应用之间的互 *** 作,充分利用兼容蓝牙技术规范的软硬件系统。蓝牙技术规范的开放性保证了设备制造商可以自由地选用其专用协议或习惯使用的公共协议,在蓝牙技术规范基础上开发新的应用。

Android蓝牙系统分为四个层次,内核层、BlueZ库、BlueTooth的适配库、BlueTooth的JNI部分、Java框架层、应用层。下面先来分析Android的蓝牙协议栈。

Android的蓝牙协议栈采用BlueZ来实现,BlueZ分为两部分:内核代码和用户态程序及工具集。

内核代码主要由BlueZ核心协议和驱动程序组成;蓝牙协议实现在内核源代码net/bluetooth中,驱动程序位于内核源代码目录 driver/bluetooth中。用户态程序及工具集主要包括应用程序接口和BlueZ工具集,位于Android源代码目录externel /bluetooth(注:Android版本不一样,有的在externel/bluez目录下)中。

1、蓝牙协议栈

蓝牙协议栈的体系结构由底层硬件模块、中间协议层和高端应用层三部分组成。

一、底层硬件模块

组成:

链路管理协议(Link ManagerProtocol,LMP);

基带(Base Band,BB);

射频(Radio Frequency,RF)。

功能:

射频(RF)通过2.4GHz的ISM频段实现数据流的过滤和传输。

基带(BB)提供两种不同的物理链路,即同步面向连接链路(Synchronous Connection Oriented,SCO)和异步无连接链路(AsynchronousConnection Less,ACL),负责跳频和蓝牙数据,及信息帧的传输,且对所有类型的数据包提供不同层次的前向纠错码(Frequency Error Correction,FEC)或循环冗余度差错校验(CyclicRedundancy Check,CRC)。

链路管理协议(LMP)负责两个或多个设备链路的建立和拆除,及链路的安全和控制,如鉴权和加密、控制和协商基带包的大小等,它为上层软件模块提供了不同的访问入口。

主机控制器接口(HostController Interface,HCI)是蓝牙协议中软硬件之间的接口,提供了一个调用下层BB、LMP、状态和控制寄存器等硬件的统一命令,上下两个模块接口之间的消息和数据的传递必须通过HCI的解释才能进行。

二、中间协议层

组成:

逻辑链路控制和适配协议(LogicalLink Control and Adaptation Protocol,L2CAP);

服务发现协议(ServiceDiscovery Protocol,SDP);

串口仿真协议(或称线缆替换协议RFCOMM);

二进制电话控制协议(TelephonyControlprotocol Spectocol,TCS)。

功能:

L2CAP位于基带(BB)之上,向上层提供面向连接的和无连接的数据服务,它主要完成数据的拆装、服务质量控制、协议的复用、分组的分割和重组,及组提取等功能。

SDP是一个基于客户/服务器结构的协议,它工作在L2CAP层之上,为上层应用程序提供一种机制来发现可用的服务及其属性,服务的属性包括服务的类型及该服务所需的机制或协议信息。

RFCOMM是一个仿真有线链路的无线数据仿真协议,符合ETSI标准的TS07.10串口仿真协议,它在蓝牙基带上仿真RS-232的控制和数据信号,为原先使用串行连接的上层业务提供传送能力。

TCS定义了用于蓝牙设备之间建立语音和数据呼叫的控制信令(Call Control Signalling),并负责处理蓝牙设备组的移动管理过程。

三、高端应用层

组成:

点对点协议(Point-to-PointProtocol,PPP)

传输控制协议/网络层协议(TCP/IP)

用户数据包协议(UserDatagram Protocol,UDP);

对象交换协议(ObjectExchang Protocol,OBEX);

无线应用协议(WirelessApplication Protocol,WAP)

无线应用环境(WirelessApplication Environment,WAE);

功能:

PPP定义了串行点对点链路应当如何传输因特网协议数据,主要用于LAN接入、拨号网络及传真等应用规范。

TCP/IP、UDP定义了因特网与网络相关的通信及其他类型计算机设备和外围设备之间的通信。

OBEX支持设备间的数据交换,采用客户/服务器模式提供与HTTP(超文本传输协议)相同的基本功能。可用于交换的电子商务卡、个人日程表、消息和便条等格式。

WAP用于在数字蜂窝电话和其他小型无线设备上实现因特网业务,支持移动电话浏览网页、收取电子邮件和其他基于因特网的协议。

WAE提供用于WAP电话和个人数字助理(PersonalDigital Assistant,PDA)所需的各种应用软件。

2、android与蓝牙协议栈的关系

蓝牙系统的核心是BlueZ,因此JNI和上层都围绕跟BlueZ的沟通进行。JNI和android应用层,跟BlueZ沟通的主要手段是D- BUS,这是一套被广泛采用的IPC通信机制,跟Android框架使用的Binder类似。BlueZ以D-BUS为基础,给其他部分提供主要接口。

准备工作

一台 PC

IAR Embedded Workbench 集成开发环境,可以用30天试用版本。

支持 蓝牙 4.0 的智能手机链悄梁逗一部,并安装下列应用之一

Android Google Play Store.

iPhone App Store.

CC2540 开发板

CCDebugger 下载器

创建 iBeacon 工程文档

安装 TI 官方的 CC254x 开发环境

复制 C:\Texas Instruments\BLE-CC254x-1.3.2\Projects\ble\SimpleBLEBroadcaster 文件夹

粘贴到:C:\Texas Instruments\BLE-CC254x-1.3.2\Projects\ble\iBeacon

运行棚渣渣 IAR Embedded Workbench,点击 File >Open >Workspace

修改源代码

simpleBLEBroadcaster.c

// GAP - Advertisement data (max size = 31 bytes, though this is

// best kept short to conserve power while advertisting)

static uint8 advertData[] =

{

// Flagsthis sets the device to use limited discoverable

// mode (advertises for 30 seconds at a time) instead of general

// discoverable mode (advertises indefinitely)

0x02, // length of this data

GAP_ADTYPE_FLAGS,

GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,

// three-byte broadcast of the data "1 2 3"

0x04, // length of this data including the data type byte

GAP_ADTYPE_MANUFACTURER_SPECIFIC, // manufacturer specific advertisement data type

1,

2,

3

}

修改下面关键字

UID: E2C56DB5-DFFB-48D2-B060-D0F5A71096E0

Major: 1 (0x0001)

Minor: 1 (0x0001)

Measured Power: -59 (0xc5)

// GAP - Advertisement data (max size = 31 bytes, though this is

// best kept short to conserve power while advertisting)

static uint8 advertData[] =

{

// 25 byte ibeacon advertising data

// Preamble: 0x4c000215

// UUID: E2C56DB5-DFFB-48D2-B060-D0F5A71096E0

// Major: 1 (0x0001)

// Minor: 1 (0x0001)

// Measured Power: -59 (0xc5)

0x1A, // length of this data including the data type byte

GAP_ADTYPE_MANUFACTURER_SPECIFIC, // manufacturer specific advertisement data type

0x4c,

0x00,

0x02,

0x15,

0xe2,

0xc5,

0x6d,

0xb5,

0xdf,

0xfb,

0x48,

0xd2,

0xb0,

0x60,

0xd0,

0xf5,

0xa7,

0x10,

0x96,

0xe0,

0x00,

0x01,

0x00,

0x01,

0xc5

}

接下来修改广播类型,将下面代码

//uint8 advType = GAP_ADTYPE_ADV_NONCONN_IND// use non-connectable advertisements

uint8 advType = GAP_ADTYPE_ADV_DISCOVER_IND// use scannable unidirected advertisements

修改为

uint8 advType = GAP_ADTYPE_ADV_NONCONN_IND // use non-connectable advertisements

//uint8 advType = GAP_ADTYPE_ADV_DISCOVER_IND// use scannable unidirected advertisements

接下来修改 GAP

// Set the GAP Role Parameters

GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &initial_advertising_enable )

GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime )

GAPRole_SetParameter( GAPROLE_SCAN_RSP_DATA, sizeof ( scanRspData ), scanRspData )

GAPRole_SetParameter( GAPROLE_ADVERT_DATA, sizeof( advertData ), advertData )

GAPRole_SetParameter( GAPROLE_ADV_EVENT_TYPE, sizeof( uint8 ), &advType )

因为 iBeacon 必须不间断广播,并且不响应任何数据请求,所以我们要修改 GAPROLE_ADVERT_OFF_TIME 和 GAPROLE_SCAN_RSP_DATA。

// Set the GAP Role Parameters

GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &initial_advertising_enable )

//GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime )

//GAPRole_SetParameter( GAPROLE_SCAN_RSP_DATA, sizeof ( scanRspData ), scanRspData )

GAPRole_SetParameter( GAPROLE_ADVERT_DATA, sizeof( advertData ), advertData )

GAPRole_SetParameter( GAPROLE_ADV_EVENT_TYPE, sizeof( uint8 ), &advType )

保存工程后,进行编译,并通过 CCDebugger 下载程序到开发板中。

Select Project >Clean to clean the project.

Select Project >Make to make the project.

Select Project >Download and Debug to send the code to the CC2540 Key Fob

Select Debug >Go to Run the code on the CC2540 Key Fob.

BLE iBeacon

TI Displayport ESD Protection – TPD8S009

Arduino SPI 精华课程

TAGS

Arduino Arduino Due Arduino Esplora Atmega32u4 Atmel BacklightBMP085 Bootloader CC3x00 DatasheetDisplayport EasyDriver EDID eDPEsplora HDMI HMC5883L I2CJoystick LCD LED Luban LVDS MIPIMPU6050 MySQL Nginx PCB PHP pinModePWM PX4 Raspberry Pi RGB Sensor SPIStepper Motor Ubuntu Wifi 摇杆 树莓派步进电机 电源 背光 蓝牙

CATEGORIES

3D Printer

Android

Application Notes

Arduino

AVR

Backlight Driver

C

CC3x00

Datasheet

Development Environment

HDMI

Imaging &Graphics

iOS

Javascript

LCD/LCM

Material

Others

PCB Design

Power Management

Prototyping

Raspberry Pi

Rostock

Sensor

Server

Software

STM32

Super Manual

Tutorials

Work


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12484126.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存