Nordic NRF52805实现主从功能

本文介绍了在Nordic NRF52805芯片上实现蓝牙主从功能遇到的问题及其解决办法。尽管官方文档指出NRF52805仅支持S112和S113协议栈,但作者通过尝试使用S132协议栈成功实现了主从功能。文章详细讨论了芯片的特性、所需的内存空间以及如何配置和处理蓝牙和串口事件。
摘要由CSDN通过智能技术生成

避坑之Nordic NRF52805实现主从功能

Nordic最新推出nRF52系列无线SoC产品nRF52805,支持蓝牙5.2.这是其广受欢迎且经过验证的nRF52系列的第七款产品。nRF52805是一款超低功耗的低功耗蓝牙(Bluetooth® Low Energy/Bluetooth LE)SoC器件,采用尺寸仅为2.48 x 2.46mm的晶圆级芯片规模封装(WLCSP)供货。WLCSP SoC针对双层PCB设计进行了优化,消除了对更昂贵的四层PCB的需求,从而为预算有限的紧凑型设计显着削减了成本。

但是目前这款芯片貌似还没有大批量应用。为此最近刚好有个项目打算用这款芯片。当我在52805上实现完从机的功能后,下一步准备计划完成主机扫描的功能却意外官方公布的文档中,列出了一大限制。见下面52805描述的只能支持S112 S113 两种协议栈。做过Nordic nrf2的朋友都知道要实现主从必须用S132协议。

来源与官方SOC文档
这下让我彻底懵了,我知道NRF52805 和NRF52810以及NRF52832是一个系列的。而且52805和52810算是52832的裁剪版,但是没想到官方把这么重要的功能都裁掉了吧。度娘了一番,google了一番确实没看到有相关的文档说明。没办法。另辟蹊径,直接拿来S132的官方协议栈来尝试实现。

特别注意
NRF51805 的flash 大小为192KB 即 0x00000–0x30000,Ram 0x0000–0x6000

在这里插入图片描述
继续看官方可以支持主从S132的协议栈所需的空间大小。官网上下载最新的协议栈7.0.1 SoftDevice S132。
可以看到需要占用的flash 和 ram 如下
在这里插入图片描述
因此按照对应的大小来设置。接下来可参考我压缩包配置文档 和我已经实现好的代码。

下面为蓝牙接受的函数

static void nus_data_handler(ble_nus_evt_t * p_evt)
{
uint32_t i;
//通知使能
if (p_evt->type == BLE_NUS_EVT_COMM_STARTED)
{

  ;
}
//通知关闭后
else if(p_evt->type == BLE_NUS_EVT_COMM_STOPPED)
{

// uart_reconfig(); //通知关闭后,关闭串口
;
}
#if 1
if (p_evt->type == BLE_NUS_EVT_RX_DATA)
{
//BLE接收数据
NRF_LOG_DEBUG(“Received data from BLE NUS. Writing data on UART.”);
NRF_LOG_HEXDUMP_DEBUG(p_evt->params.rx_data.p_data, p_evt->params.rx_data.length);
#ifdef DUBUG_FLAG
printf(“Received data from BLE NUS. .”);
printf(“lenth = %d\n” ,p_evt->params.rx_data.length);
#endif

         #if 0
            for (i = 0; i < p_evt->params.rx_data.length; i++)
            {
             
             printf("p_data[%d] = 0x%X\n" ,i,p_evt->params.rx_data.p_data[i]);
            
            
            }
         #endif
			}

}

下面为BLE事件处理 包括蓝牙连接 断开 获取到扫描请求 等
static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context)
{
ret_code_t err_code = NRF_SUCCESS;
//判断BLE事件类型,根据事件类型执行相应操作
switch (p_ble_evt->header.evt_id)
{
//断开连接事件
case BLE_GAP_EVT_DISCONNECTED:
m_conn_handle = BLE_CONN_HANDLE_INVALID;

			    //打印提示信息
        NRF_LOG_INFO("D
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值