news 2026/4/23 19:11:03

基于nRF52832芯片和S132 SoftDevice的所有错误码(err_code)的完整列表和注释

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于nRF52832芯片和S132 SoftDevice的所有错误码(err_code)的完整列表和注释

在Keil开发环境下,基于nRF52832芯片和S132 SoftDevice的所有错误码(err_code)的具体含义和完整列表,这是 Nordic 开发中排查问题的关键参考。

有以下几点:

  1. Nordic错误码核心分为通用错误码(nrf_error.h)和S132专用错误码(蓝牙相关),非0值均代表错误;
  2. 开发中高频遇到的错误码包括NRF_ERROR_BUSY(资源忙)、NRF_ERROR_INVALID_PARAM(参数错误)、NRF_ERROR_TIMEOUT(超时)、NRF_ERROR_BLE_STACK_BUSY(蓝牙栈忙);
  3. 在Keil中可通过查看头文件或编写错误码解析函数,快速定位错误码含义,提高调试效率。

一、错误码核心说明

Nordic 的错误码体系主要分为两类:

  1. 通用错误码:适用于所有 nRF52 系列和 SoftDevice(如 S132),定义在nrf_error.h
  2. SoftDevice 专用错误码:S132 蓝牙协议栈专属,定义在s132_nrf52_<版本号>_softdevice_api.h(如s132_nrf52_6.1.1_softdevice_api.h

错误码均为uint32_t类型,非0值代表错误NRF_SUCCESS (0)代表执行成功。

二、核心错误码列表及含义(Keil环境通用)

以下是开发中最常用的错误码,按功能分类整理:

1. 通用基础错误码(nrf_error.h)

错误码常量

数值

含义

NRF_SUCCESS

0

操作成功

NRF_ERROR_SVC_HANDLER_MISSING

1

SVC 处理函数缺失(SoftDevice 初始化前未配置中断)

NRF_ERROR_SOFTDEVICE_NOT_ENABLED

2

SoftDevice 未启用

NRF_ERROR_INTERNAL

3

内部错误(协议栈内部逻辑异常)

NRF_ERROR_NO_MEM

4

内存不足(如申请缓冲区失败)

NRF_ERROR_NOT_FOUND

5

未找到指定资源(如未找到蓝牙服务/特征)

NRF_ERROR_NOT_SUPPORTED

6

不支持的操作(如调用了S132不支持的蓝牙功能)

NRF_ERROR_INVALID_PARAM

7

参数无效(传入非法值,如空指针、超出范围)

NRF_ERROR_INVALID_STATE

8

状态错误(如蓝牙未初始化就发送数据)

NRF_ERROR_INVALID_LENGTH

9

长度错误(如数据长度超过MTU值)

NRF_ERROR_INVALID_FLAGS

10

标志位错误(如传入非法的蓝牙连接标志)

NRF_ERROR_INVALID_DATA

11

数据错误(如格式错误、校验失败)

NRF_ERROR_DATA_SIZE

12

数据大小超出限制

NRF_ERROR_TIMEOUT

13

超时(如蓝牙连接超时、广播超时)

NRF_ERROR_NULL

14

空指针错误

NRF_ERROR_FORBIDDEN

15

操作被禁止(如权限不足)

NRF_ERROR_INVALID_ADDR

16

地址无效(如蓝牙MAC地址错误)

NRF_ERROR_BUSY

17

资源忙(如SoftDevice正在处理其他请求)

NRF_ERROR_CONN_COUNT

18

连接数超出限制(S132最大支持8个连接)

2. S132 SoftDevice 专用错误码(蓝牙相关)

错误码常量

数值

含义

NRF_ERROR_BLE_INVALID_CONN_HANDLE

0x0080

无效的蓝牙连接句柄

NRF_ERROR_BLE_STACK_BUSY

0x0081

蓝牙协议栈忙

NRF_ERROR_BLE_INVALID_ATTR_HANDLE

0x0082

无效的属性句柄(如特征句柄错误)

NRF_ERROR_BLE_NO_TX_BUFFERS

0x0083

发送缓冲区耗尽(蓝牙数据发送缓存不足)

NRF_ERROR_BLE_NO_RX_BUFFERS

0x0084

接收缓冲区耗尽

NRF_ERROR_BLE_TX_OVERFLOW

0x0085

发送数据溢出

NRF_ERROR_BLE_RX_OVERFLOW

0x0086

接收数据溢出

NRF_ERROR_BLE_AUTH_FAILURE

0x0087

蓝牙认证失败(如配对密钥错误)

NRF_ERROR_BLE_PIN_OR_KEY_MISSING

0x0088

配对码/密钥缺失

NRF_ERROR_BLE_LL_REJECTED_PARAMS

0x0089

链路层拒绝参数(如连接参数协商失败)

NRF_ERROR_BLE_LL_CONN_REJECTED

0x008A

链路层拒绝连接(如对方设备拒绝)

NRF_ERROR_BLE_GAP_INVALID_BLE_ADDR

0x008B

无效的蓝牙地址

NRF_ERROR_BLE_GAP_SEC_PARAMS_INVALID

0x008C

安全参数无效(如加密参数错误)

NRF_ERROR_BLE_GATT_INVALID_CCCD

0x008D

无效的客户端特征配置描述符(CCCD)

NRF_ERROR_BLE_GATT_WRITE_NOT_PERMITTED

0x008E

GATT写操作不被允许

NRF_ERROR_BLE_GATT_READ_NOT_PERMITTED

0x008F

GATT读操作不被允许

3. 硬件/驱动相关错误码

错误码常量

数值

含义

NRF_ERROR_INVALID_IRQ

20

无效的中断号

NRF_ERROR_DMA_FAILED

21

DMA传输失败

NRF_ERROR_PIN_INVALID

22

引脚号无效(如配置了nRF52832不存在的引脚)

NRF_ERROR_UNALIGNED_ADDR

23

地址未对齐

三、Keil环境下快速查询错误码的实用方法

在Keil中开发时,可通过以下方式快速定位错误码含义:

1. 直接查看头文件(最准确)

  • 通用错误码:nRF5_SDK_<版本>/components/softdevice/common/nrf_error.h
  • S132专用错误码:nRF5_SDK_<版本>/components/softdevice/s132/headers/s132_nrf52_<版本>_softdevice_api.h
  • 蓝牙GAP/GATT错误码:nRF5_SDK_<版本>/components/ble/ble_gap.hble_gatt.h

2. 编写错误码解析函数(Keil中直接调用)

C
#include <stdint.h>
#include <stdio.h>
#include "nrf_error.h"

/**
* @brief 解析nRF52832/S132错误码为可读字符串
* @param err_code: 错误码数值
* @return 错误码描述字符串
*/
const char* err_code_to_string(uint32_t err_code)
{
switch(err_code)
{
case NRF_SUCCESS: return "NRF_SUCCESS: 操作成功";
case NRF_ERROR_SOFTDEVICE_NOT_ENABLED: return "NRF_ERROR_SOFTDEVICE_NOT_ENABLED: SoftDevice未启用";
case NRF_ERROR_NO_MEM: return "NRF_ERROR_NO_MEM: 内存不足";
case NRF_ERROR_INVALID_PARAM: return "NRF_ERROR_INVALID_PARAM: 参数无效";
case NRF_ERROR_INVALID_STATE: return "NRF_ERROR_INVALID_STATE: 状态错误";
case NRF_ERROR_TIMEOUT: return "NRF_ERROR_TIMEOUT: 操作超时";
case NRF_ERROR_BUSY: return "NRF_ERROR_BUSY: 资源忙";
case NRF_ERROR_BLE_INVALID_CONN_HANDLE: return "NRF_ERROR_BLE_INVALID_CONN_HANDLE: 无效蓝牙连接句柄";
case NRF_ERROR_BLE_STACK_BUSY: return "NRF_ERROR_BLE_STACK_BUSY: 蓝牙协议栈忙";
case NRF_ERROR_BLE_AUTH_FAILURE: return "NRF_ERROR_BLE_AUTH_FAILURE: 蓝牙认证失败";
default:
{
static char unknown_err[32];
sprintf(unknown_err, "未知错误码: 0x%08X", err_code);
return unknown_err;
}
}
}

// 调用示例(在Keil中调试时使用)
void test_err_code(void)
{
uint32_t err = sd_ble_gap_adv_start(&adv_params, APP_BLE_CONN_CFG_TAG);
if(err != NRF_SUCCESS)
{
// 打印错误码含义(需配置串口输出)
printf("广播启动失败: %s\r\n", err_code_to_string(err));
}
}

使用说明

  1. 将此函数添加到工程中,需确保开启串口打印(如使用nrf_uart);
  2. 调用SoftDevice API后,将返回的err_code传入该函数,即可在串口终端看到可读的错误描述;
  3. 可根据开发需求,在switch中补充更多错误码的解析。

四、关键注意事项

  1. 版本兼容性:不同版本的S132(如6.1.1、7.3.0)错误码数值可能略有差异,需以对应版本的头文件为准;
  2. 错误码范围:Nordic错误码数值通常为32位,低16位为核心错误码,高16位可能为扩展信息;
  3. Keil调试技巧:在Keil的Watch窗口中输入err_code,可直接查看错误码数值,再对照上述列表定位问题。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:07:48

3步打造智能音乐站:让小爱音箱秒变全能音乐中心

3步打造智能音乐站&#xff1a;让小爱音箱秒变全能音乐中心 【免费下载链接】xiaomusic 使用小爱同学播放音乐&#xff0c;音乐使用 yt-dlp 下载。 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaomusic &#x1f3af; 项目价值概述 Xiaomusic是一款专为小爱音…

作者头像 李华
网站建设 2026/4/23 10:47:51

Flowise自主部署:完全掌控数据安全的工作流引擎

Flowise自主部署&#xff1a;完全掌控数据安全的工作流引擎 1. 为什么选择Flowise本地部署 在AI应用快速发展的今天&#xff0c;数据安全和隐私保护成为企业最关心的问题之一。Flowise作为一款开源的LLM工作流平台&#xff0c;提供了本地部署方案&#xff0c;让企业能够在自己…

作者头像 李华
网站建设 2026/4/23 10:47:47

老Mac设备适配新macOS的技术方案:硬件兼容性破局指南

老Mac设备适配新macOS的技术方案&#xff1a;硬件兼容性破局指南 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 随着苹果公司对macOS系统的不断更新&#xff0c;许多老款…

作者头像 李华
网站建设 2026/4/23 17:12:03

CogVideoX-2b 文字生成视频:5分钟快速上手教程(AutoDL优化版)

CogVideoX-2b 文字生成视频&#xff1a;5分钟快速上手教程&#xff08;AutoDL优化版&#xff09; 你是否试过把一句话变成一段会动的视频&#xff1f;不是剪辑&#xff0c;不是模板&#xff0c;而是从零开始“想出来”再“画出来”——现在&#xff0c;这件事真的可以一键完成…

作者头像 李华
网站建设 2026/4/23 12:18:55

AI绘图如何引爆科研效率革命?

AI绘图如何引爆科研效率革命&#xff1f; 【免费下载链接】DeTikZify Synthesizing Graphics Programs for Scientific Figures and Sketches with TikZ 项目地址: https://gitcode.com/gh_mirrors/de/DeTikZify 副标题&#xff1a;让论文图表制作提速20倍 你知道吗&am…

作者头像 李华