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