分享

BLE

 风之library 2015-02-06
七、换个硬件看看

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./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
    },
      
};





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


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多