微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > BLE_CC2540_初学者入门指导_03

BLE_CC2540_初学者入门指导_03

时间:10-02 整理:3721RD 点击:
七、换个硬件看看

1、使用购买的CC2540模块实验,修改了Debug接口,能够采用TI的CCDebug下载光盘自带的程序测试正常。

光盘例程使用BLE-Stack 1.1修改,分别下载KebFob和HostAppTest。

2、下载BLE-Stack 1.21中例程KebFob和HostAppTest测试连接过程也正常。

图1:测试UUID读取关键字成功,KeyFob的电量(百分比)


图2:测试Adv.Commands 读取RSSI值



3、使用BLE-Stack 1.1例程中的虚拟键盘,测试连接失败(光盘和协议栈原始例程都测试了),用HostAppTest测试搜索到的设备地址与待绑定的地址是匹配的。

待做的事情:

1)搞清楚3连接过程中出现的问题。
2)花时间去熟悉API函数以及相关的结构体。

八、开始做硬件了

1、参考《CC2540EM_discrete_schematic.pdf 》绘制CC2540无线模块原理图。

1)引出P0(8pin)、P1(8pin)、P2(3pin)、电源(2pin)、USB(2pin)、RESET(1pin)共计24pin。
2)不知引脚排列是否合理,目前的排列有利于模块布线。

见附件:CC2540_BLE_RF.pdf

2、参考《CC2540_MiniDK_SCHEMATIC.pdf 》和购买套件的底板原理图绘制CC2540底板原理图。

1)添加低功耗加速度传感器CMA3000(用于计步等,可缺省不焊接)。
2)添加CP2102用于USB转串口,通过UART打印字符便于调试等。
3)可选USB供电、CCdebug供电、CR2032纽扣电池供电。
4)设计中多处采用0R电阻,便于二次修改。

见附件:CC2540 Board.pdf

3、阅读BLE的宣传资料,觉得不适合在底板上添加传统的传感器,不知道是否需要添加传感器?

见附件:TI BLE @ CES.pdf

九、闲置阶段,随便玩玩

1、原理图修改、检查:
1)添加PCB天线和外置天线。
2)添加OLED显示、电源指示灯、添加拨码开关。

2、OLED选择了一款内置升压电路的型号与之前的像素一致:
1)选取内置升压的OLED省去了升压电路的设计。
2)实际经过调研科选择TPS61040作为升压芯片,满足需求(考虑到电感、续流二极管等物料不好采购的问题)。

3、确定底板上物料在ERP中的型号,主要的器件目前都已经确定、包括接插件。

4、调试CC2540的UART,调试OK能够打印信息:
1)发现在Advertising过程中会出错(测试了多种发送情况,确认是Advertising时RF引起的)。
2)使用DMA、ISR都是同样的情况。



十、开始玩弄她吧

1、CC2540通信建立过程调试:
1)找到UART在advertising过程中发送数据乱码的问题,使能低功耗(PWRMGR_BATTERY)会伴随主时钟的切换,导致波特率不稳定照成的,关闭低功耗数据正常,有待进步一学习,暂时不做深入研究。
2)在调通串口的基础上实现基本的通信建立过程调试,主要是通过peripheral、central的例子,实现了PC通过串口向peripheral设备发送数据通过无线被central设备接收再通过串口传输至另一台PC。

Peripheral(Send):

01 82 fe 07 00 05 11 11 11 11 11
01 82 fe 07 00 05 22 22 22 22 22

Central(Receive):

04 FF 0D 1B 05 00 01 00 07 07 00 11 11 11 11 11
04 FF 0D 1B 05 00 01 00 07 07 00 22 22 22 22 22

以上参考:附件一、附件二。

2、Blood Pressure例程测试:
1)在新版本BLE-Stack1.21中未提供BP的Collector,只有一个BP Sensor,所以还需要花点时间建立Collector的工程。
2)在TI Wiki上找到了关于BLE-Stack1.1关于BP演示的说明,需要一个BleHealthDemo(C#开发)上位机的配合,Collector是工作在Network Process模式下。

测试效果参考:附件三。

3、开会提出的问题小结:
1)为什么要有Proflie?
A:Profile由蓝牙SIG发布,描述了不同设备使用蓝牙协议栈时的差异性和统一性。比如一个血压计,大家都按照这个BP Profile、BP Service来进行规范定义,那么一个BP收集器就能够收集不同厂家生产的BP Sensor测量的血压值等。如果没有Profile关有协议那么大家都只能闭门造车,我生产的手机带蓝牙功能,那么你使用的蓝牙耳机就必须是我生产的,因为那些数据格式、设备描述等只有我知道,所以才有音频Profile(A2DP)之后大家按照这个规范去严格定义自己的设备就可以了。

2)BT流行版本的Profile比较:
我所理解的在BT2.0、BT2.1、BT3.0这些版本能够使用传统Profile,而4.0之后会多出一部分GATT-Basic规范Profile。

这里我们需要理解的是:
BT2.0 = Core Version2.0 +EDR
BT2.1 = Core Version2.1 +EDR
BT3.0 = Core Version3.0 +HS
BT4.0 = Core Version4.0 +BLE = BR/EDR + BLE(这里和以往不同,V4.0有两个核心,CC2540只有BLE)

对于血压计:

V4.0 版本使用BP Profile(Blood Pressure Profile)+ BP Service
V4.0 之前版本使用HD Profile(Human Device Profile)

HD Profile(健康规范)包括 BP Profile(血压规范) + HT Profile(温度规范)+ ……

这些规范可以从官方网站查看:
https://www.bluetooth.org/Technical/Specifications/adopted.htm

以上参考:附件四、附件五。

3、附件:

附件一



附件二



附件三



附件四



附件五



十一、血压计分析

1、Blood Pressure示例程序占用资源(256K Flash + 8K RAM):

2、Blood Pressure Profile规定的数据格式:



3、Profile 定义了数据格式、过程、服务的UUID等:



以上这些会在协议属性表中体现,而这个属性表会通过相关API将他作为参数传给协议栈。

static gattAttribute_t bloodPressureAttrTbl[] =
{
// BloodPressure Service
{
{ ATT_BT_UUID_SIZE, primaryServiceUUID }, /* type */
GATT_PERMIT_READ, /* permissions */
0, /* handle */
(uint8 *)&bloodPressureService /* pValue */
},

// 1. Characteristic Declaration
{
{ ATT_BT_UUID_SIZE, characterUUID },
GATT_PERMIT_READ,
0,
&bloodPressureTempProps
},

// 2. Characteristic Value
{
{ ATT_BT_UUID_SIZE, bloodPressureTempUUID },
0, //return READ_NOT_PERMITTED
0,
&bloodPressureTemp
},

// 3.Characteristic Configuration
{
{ ATT_BT_UUID_SIZE, clientCharCfgUUID },
GATT_PERMIT_READ | GATT_PERMIT_WRITE,
0,
(uint8 *)&bloodPressureMeasConfig
},
// 4.Presentation Format
{
{ ATT_BT_UUID_SIZE, charFormatUUID },
GATT_PERMIT_READ,
0,
(uint8 *)&bloodPressureTempFormat
},


//////////////////////////////////////////////
// IMMEDIATE MEASUREMENT
//////////////////////////////////////////////

// 5.Characteristic Declaration
{
{ ATT_BT_UUID_SIZE, characterUUID },
GATT_PERMIT_READ,
0,
&bloodPressureImeasProps
},

// 6.Characteristic Value
{
{ ATT_BT_UUID_SIZE, bloodPressureImeasUUID },
0, //return READ_NOT_PERMITTED
0,
&bloodPressureImeas
},

// 7.Characteristic Configuration
{
{ ATT_BT_UUID_SIZE, clientCharCfgUUID },
GATT_PERMIT_READ | GATT_PERMIT_WRITE,
0,
(uint8 *)&bloodPressureIMeasConfig
},


//////////////////////////////////////////////
// FEATURE
//////////////////////////////////////////////

// 8.Characteristic Declaration
{
{ ATT_BT_UUID_SIZE, characterUUID },
GATT_PERMIT_READ,
0,
&bpFeatureProps
},

// 9.Characteristic Value
{
{ ATT_BT_UUID_SIZE, bpFeatureUUID },
GATT_PERMIT_READ,
0,
(uint8 *)&bpFeature
},

};


好吧,第一章分享到这里结束了,只是简简单单的帮助初学者入门,权当玩玩,专业开发者请忽略。不排除自己理解和排版造成的问题,请自行判断,谢谢。

声明一下这三篇文章我之前在ti中文社区发过,这里搬到EE来,分享给大家欢迎跟帖讨论

多谢 分享 哈哈 :)

不错,希望楼主更多分享文章、

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top