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

cc2541的simpleBLEperipheral

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

如题的工程,有几个小白问题想问一下:(CC2541通过串口与430单片机连接)

1,如何获取CC2541的状态?比如:广播状态,已连接,未连接。是通过读取gapProfileState来判断的么?

2,CC2541的广播是不是会一直等到连接上才不广播了,还是有什么其他的机制?

3,当CC2541与主机连上后(比如:手机),没有数据传输,或者数据传输完毕,是怎么进入休眠状态的?进入休眠状态后,是处于已连接还是断开连接?

4,关于Connection Interval,Slave Latency,Supervision Timeout,能解释一下具体含义么?他们如何修改?

5,利用串口如何能够休眠唤醒?

yiguang,

1.可以参考 gaprole_States_t 这个枚举的定义和用法,比如在peripheral.c里面, gapRole_state这个变量的变化。

2.必须有其他机制,不然功耗会很高,比如可以设置广播时间,按键停止广播等等,可以参考一下Keyfob工程。

3.这个是由OSAL系统自动控制。休眠模式有两种,PM2和PM3. 连接和断开的情况下都可以进入低功耗模式,在建立连接的情况下,进入的休眠模式是PM2,断开连接,并且没有软件timer的情况下,就会进入PM3模式,这个模式的功耗最低。

4. 这个是由蓝牙协议栈定义的, 说来相当话长。 简单说,connection interval 就是两个connection event之间的时间间隔,connection event 是BLE数据通信激活时候的状态(这个具体你得去看蓝牙spec了)。slave latency是从设备在没有数据要求主动发送的时候,允许的跳过的connection event的个数,从而达到更低的功耗。supervision timeout就是超过多长时间主设备或者从设备没有回应对方的poll请求,就认为连接丢失的时间长。如何修改,得根据具体的实际应用。但这些值都有一个范围,connection interval 7.5ms 到 4s, slave latency 0 到 499, supervision timeout 100ms 到 32s。

5. 应该可以。

Yan,

    你好,Connection Interval,Slave Latency,Supervision Timeout这三个参数的修改采用的哪个函数呢?

yiguang,

不好意思回得晚了,这个函数: L2CAP_ConnParamUpdateReq()

谢谢你了,我还有一个问题,当CC2541数据传输完毕或者没有数据传输的时候,它是怎样进入休眠模式的,看你上面的回复说是自动进入的。我想知道有没有哪个函数用于检测CC2541是否在传输数据或者传输完毕,当没有数据传输的时候,是否可以强制系统进入休眠模式?

1. 可以通过它来判断 ,

2. 可以设置为受限的广播  这样就不会是一直在广播状态了。

3. 是属于间歇的  ,唤醒不用你里   ,TI 的底层已经做好了 。

4.  文件的宏定义里面有  你搜一下 就有

5 你如果一直开着串口的话  ,好像串口起作用的时候  是不能进入低功耗的。

Yan:

      你好!

在TI提供的例程中,我看到初始化过程都是使用GAPRole_SetParameter()函数来设定Connection Interval,Slave Latency,Supervision Timeout等参数。

这里使用L2CAP_ConnParamUpdateReq()来设定参数,请问使用这两个函数来设定参数效果有什么不同吗?

      看协议栈的框架图,GAP跟GATT是协议栈的最顶层,最接近应用层。而L2CAP层则处于更下层,通过GAP层的接口函数来设定参数应该还是调用L2CAP层的接口函数来实现的吧?

shaokai,

如果你往下看GAPRole_SetParameter() 这些函数的话,最终也是调用L2CP层的API 来实现一些功能。

Hi Yan,

我看到extern hciStatus_t HCI_LE_ConnUpdateCmd( uint16 connHandle,

uint16 connIntervalMin,
uint16 connIntervalMax,
uint16 connLatency,
uint16 connTimeout,
uint16 minLen,
uint16 maxLen );

那么最终协议栈上面的那些个设置这些参数(比如GAP_UpdateLinkParamReq(),GAPCentralRole_UpdateLink())是不是最终通过这个函数来实现?

admsadm,

是的,没错!

最终都是到HCI 命令!

Connection Interval,Slave Latency,Supervision Timeout

請問這三個值根據實際運用設置,還是不了解要怎麼量測去進行設置?總不會是從7.5ms,7.6ms,7.7ms一直設定上去吧?另外,是master跟slave都要設定一樣的嗎?謝謝。

对于master和slave来说,是需要协调使用的连接参数的。slave发送一个param update请求,如果主机允许的话,双方就会以该参数建立连接。如果不允许,就不能用该参数进行连接。原则上,肯定是连接间隔越小越容易更新失败的。在central例程里有个GAP_LINK_PARAM_UPDATE_EVENT事件,你应该可以通过返回的status看看是否更新成功。

/**
 * GAP_LINK_PARAM_UPDATE_EVENT message format.  This message is sent to the app
 * when the connection parameters update request is complete.
 */
typedef struct
{
  osal_event_hdr_t hdr;     //!< GAP_MSG_EVENT and status
  uint8 opcode;             //!< GAP_LINK_PARAM_UPDATE_EVENT
  uint8 status;             //!< bStatus_t
  uint16 connectionHandle;  //!< Connection handle of the update
  uint16 connInterval;      //!< Requested connection interval
  uint16 connLatency;       //!< Requested connection latency
  uint16 connTimeout;       //!< Requested connection timeout
} gapLinkUpdateEvent_t;

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

网站地图

Top