微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2540的简单开发

CC2540的简单开发

时间:10-02 整理:3721RD 点击:

想从芯片资料里的示例程序稍加改动,完成一个DS18B20无线测量温度的应用,请问程序中用户的程序(处理DS18B20数据)应该写在哪?如何发送此数据?

你是运行BLE的协议栈还是自己的协议?

楼主,你这个CC2540+DS18B20搞定了吗?我现在也正在搞,大家交流交流啊

楼主和Wang Guoqing,CC2540+DS18B20搞定了吗,大家一起讨论一下?我关心的是,这种组合能够达到“很省电”的目的吗?因为DS18B20的耗电量是很大的。

liangyuyang@gmail.com

请问一下你现在做出来了吗

 

测温度精度和范围如何,如果不搞的话,用TC1047A也可以,也不用标定,很好用。我一直在用,就是一个AD搞定,不用繁琐的单总线调试。无线的就根据自己情况作了。可以大家分享,现在无线是很好的领域。

欢迎大家在这里互相交流 :)

CC2540利用DS18B20进行温度采集时的晶振频率是32MHz吗

Jiangrong,

CC2540工作的时候是32Mhz的.

谢谢!想从芯片资料里的示例程序稍加改动,完成一个DS18B20无线测量温度的应用,请问程序中用户的程序(处理DS18B20数据)应该写在哪?如何发送此数据?

Hi jiangrong,

你可以参看BLE-CC254x-1.3\Projects\ble\SimpleBLEPeripheral项目.

里面的类似于simpleGATTprofile.c之类的,这就是用户程序. 

注意看

static uint8 simpleProfile_ReadAttrCB( );
static bStatus_t simpleProfile_WriteAttrCB(  ); 这两个回调函数, 所偶从master发出的读请求(要求你发数据)和写请求(就是master发送数据过来)都是最终通过这两个函数.

另外, 你作为slave端可以通过GATT_Notification() 主动发送数据给Master, 这个可能更符合你的要求. 具体怎么用, 请参考该函数定义.

cc2540中为I2C或者SPI提供时钟的是哪个端口 ?谢谢

http://processors.wiki.ti.com/index.php/Bluetooth_SensorTag?INTC=SensorTag&HQS=sensortag-wiki

 

BLE-STACK1.3有带Sensortag的源代码。内含I2C驱动。

 

\BLE-CC254x-1.3\Components\hal\target\CC2541ST 下面的代码可以借鉴

static uint8 simpleProfile_ReadAttrCB( );
static bStatus_t simpleProfile_WriteAttrCB(  );这2个函数是怎么触发工作的呢?,是每次主机有接收发送函数就中断触发还是在tasksArr[]设置了事件?如果设置了事件,请问是tasksArr[]里面的哪个事件调用他们。

这个两个是注册到GATT层的回调函数, 在GATT初始化的时候注册的. 这部分代码封装在库里面.

每当GATT层有数据发过来的时候, 会调用simpleProfile_WriteAttrCB, 

每当GATT层收到对方读取数据请求的时候, 会调用simpleProfile_ReadAttrCB

您好 Yan:

       有没有个GATT_Notification()相关的程序哈,我在看的BLE-CC254x-1.3\Projects\ble\SimpleBLEPeripheral项目,但是找不到和GATT_Notification()函数直接相关的程序。

Hi rivers,

你打开keyfob程序看一下, 里面有个 battservcie.c, 里面有个发送电池信息的, 用Notification:

static void battNotifyCB( linkDBItem_t *pLinkItem )
{
if ( pLinkItem->stateFlags & LINK_CONNECTED )
{
uint16 value = GATTServApp_ReadCharCfg( pLinkItem->connectionHandle,
battLevelClientCharCfg );
if ( value & GATT_CLIENT_CFG_NOTIFY )
{
attHandleValueNoti_t noti;

noti.handle = battAttrTbl[BATT_LEVEL_VALUE_IDX].handle;
noti.len = 1;
noti.value[0] = battLevel;

GATT_Notification( pLinkItem->connectionHandle, &noti, FALSE );
}
}
}

您好Yan:

谢谢帮助~,我现在在自己搞蓝牙4.0的一个小实验,目的是达到使用串口向keyfob发送数据,想要实现在上位机(现在时苹果系统)APP上进行显示我发送的数据,而现在只是实现了固定的数据发送,在BTool上能看到效果,使用的是GATT_Notification函数,所以做的和预期有差距,而且之后的飞线这边也没有头绪。

请问下有没有类似的这种使用串口输入到keyfob的程序的啊~,对了,还有官网上的苹果的那个APP源码怎么也下不下来,能不能帮我一起发一下下~

我的邮箱是634754484@qq.com

谢谢啦~~~~~~

对了我使用的是CC2540MINIDK_EM开发板

目前没有串口输入到keyfob 的实例程序.

iOS 源码请去sensorTag 的wiki 上再尝试一下下载:

http://processors.wiki.ti.com/index.php/Bluetooth_SensorTag?INTC=SensorTag&HQS=sensortag-wiki

说的很好!

您好,

1)这篇帖子也许会给您一些帮助

http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/t/61462.aspx

2)这些文字应该也会有一些参考价值

整个BLE协议栈是以库的形式提供的,GAP和GATT层的功能需要这样被理解:他们直接与应用程序和profile交互。

1、GAP-通用接入规范:

BLE协议栈的GAP层负责处理设备的接入方式和过程,包括设备发现,链路建立,链路终止,启动安全功能,设备配置。

GAP层通常扮演以下四种角色中的一种:

广播者——广告发送者,不是可连接的设备

观察者——扫描广告,不能够启动连接

外围设备——广告发送者,是可连接的设备,在单一链路层连接时作为一个从机

中央设备——扫描广告启动连接,在单一或者多链路层连接时作为主机,支持三个同时连接

在一个典型的蓝牙系统中,外围设备发送具体的广告数据让任何中央设备知道他是一个可连接的设备。广告内容包含设备地址,还可以包含一些额外的额数据,比如设备名称。中央设备接收到广告后发送一个搜索请求给外围设备,外围设备答复一个搜索答复。这就是设备发现的过程,这样中央设备就知道外围设备是一个可连接的设备。中央设备可以发送一个建立连接的请求给外围设备,一个连接情况包含一些连接参数:

连接间隔——在一个BLE连接中跳频机制需要被使用,这样两个设备之间可以在一个特定的通道上进行数据收发,在一个特定的时间之后会跳到一个新的通道上,LL层负责通道切换。这个遇见设备收发数据被称作是连接事件。尽管没有应用程序数据需要收发,两个设备之间仍然会交换链路层数据来保持连接。连接间隔是两个连接事件之间的时间,使用一个单元值为1.25ms的步进。连接间隔从最小值6(7.5ms)到最大值3200(4.0s)。

不同的应用也许需要不同的连接间隔,一个长时间的连接间隔将会节约更多的能量,因为设备可以在两个连接事件之间睡眠更长的时间。但是他会导致数据发送不及时,如果有数据要发送那么他只能够在下一次连接事件到来时才能被发送。

从机延迟——这个参数描述了从机跳过连接事件的次数。这使外围设备具有一定的灵活性,如果它不具有任何数据传送,它可以选择跳过连接事件,并保持睡眠,从而提供了一些积蓄力量。这一决定取决于外围设备。

监督超时——这是两个成功的连接事件之间间隔的最大值。如果超过这个时间还未出现成功的连接事件,那么设备将会考虑失去连接,返回一个未连接状态。这个参数值使用10ms的步进。监督超时时间从最小10(100ms)到最大3200(32.0s)。同时超时时间必须大于有效连接事件。

有效连接事件时间 = 连接间隔 X (1 + 从机延迟值)

 

在某些情况下,中央设备请求与外围设备建立连接包含连接参数对外围设备而言是不利的。在其他情况下,外围设备可以在连接过程中改变连接参数这个取决于外围设备的应用程序。外围设备可以请求中央设备改变连接参数通过设置连接参数更新请求。这个请求是被协议栈的L2CAP处理的。

 

这个请求包含四个参数:最小连接间隔、最大连接间隔、从机延迟、监督超时时间。这些值代表了外围设备针对连接的期望参数,连接间隔是以范围的形式提供的。当中央设备接收到这个请求, 他有权利决定是接受还是拒绝这些参数。

GAP通常还会负责启动BLE连接的安全功能。只有对通过身份验证的连接而言某些数据是可读或可写的。一旦形成一个连接,两个设备可以通过一个过程被称为配对。进行配对时,密钥建立加密和认证的链接。在一个典型的案例,外围设备需要中央设备提供密钥以完成配对过程。这可能是一个固定值,如“000000”,或可能是一个随机生成的值被提供给用户。中央设备发送正确的密钥后,两台设备交换安全密钥加密和验证的链接。

在许多情况下,相同的中央设备和外围设备将会经常建立连接和断开连接。BLE具有一个安全功能允许两个设备在配对的时候给对方一个长久的安全密钥。此功能称为绑定,使得两个重连设备能够迅速重新确立加密和认证而不需要经过充分的配对过程,只要它们存储长期的密钥信息。

 

2、GATT-通用属性规范:

协议栈的GATT层被设计用于两个连接设备应用程序中的数据通信。从GATT的立场而言,当两个设备建立连接之后,他们扮演两种角色中的一种:

GATT客户端——设备从GATT服务端读写数据。

GATT服务端——设备的数据被GATT客户端读写。

这里需要注意GATT角色和LL层的角色是独立的没有联系的。

 

一个GATT服务包含一个或者多个服务,是一个完成特定功能或特征的数据集合。

关键字是服务使用的数值,包含属性和配置信息。GATT定义了搜索服务、读属性、写属性的子过程。

GATT服务的关键字值包含属性和配置信息(描述符)存储在属性表中。属性表是一个简单的数据库包含一小段数据被称作是属性。

 

除了本身的值,每个属性都有与它相关的下列属性:

Handle(句柄)——这本质上是属性在表中的地址,每一个属性都有一个唯一的句柄。

Type(类型)——这个表明数据代码什么,通常被称作是UUID(蓝牙SIG或客户定义)。

Permissions(权限)——这个决定GATT客户端设备是否能够操作属性值、如何操作属性值。

 

GATT定义了GATT客户端和GATT服务端之间通信的子过程:

Read Characteristic Value——通过特殊的句柄来读取值

Read Using Characteristic UUID——通过UUID来读取值和句柄

Read Multiple Characteristic Values——通过一些句柄来读取值

Read Characteristic Descriptor——通过特殊的句柄来读取描述符

Discover Characteristic by UUID——通过UUID来查找关键字

Write Characteristic Value——通过特殊的句柄来写关键字值

Write Characteristic Descriptor——通过特殊的句柄来写关键字描述符

Characteristic Value Notification——服务端通知客户端关键字值,客户端收到数据后不需要答复,但是需要事先配置为关键字使能通。一个Profile定义了服务端何时发送该数据。

可以参考一下sensortag的例程,sensortag有六个IIC接口的传感器,完成了对六个传感器的数据采集,处理和发送,和你这个很类似;你需要做的就是将hal层(硬件层)添加18B20的驱动函数;相信这一块你也很熟悉

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

网站地图

Top