news 2026/5/1 9:14:04

基于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/5/1 7:57:09

ms-swift备份恢复:模型与数据的安全保障措施

ms-swift备份恢复&#xff1a;模型与数据的安全保障措施 1. 为什么备份恢复是AI工程化落地的关键环节 在大模型微调实践中&#xff0c;一个被普遍忽视却至关重要的环节就是模型与数据的备份恢复机制。很多团队在训练初期只关注如何快速跑通流程&#xff0c;却忽略了当训练中断…

作者头像 李华
网站建设 2026/5/1 6:48:51

CogVideoX-2b保姆级教程:从安装到生成第一个视频

CogVideoX-2b保姆级教程&#xff1a;从安装到生成第一个视频 1. 为什么你需要这篇“真保姆级”教程 你是不是也遇到过这些情况&#xff1f; 下载了CogVideoX-2b&#xff0c;但卡在pip install报错&#xff1b; 好不容易跑通代码&#xff0c;显存直接爆掉&#xff0c;GPU温度飙…

作者头像 李华
网站建设 2026/5/1 6:53:31

CogVideoX-2b新手入门:从安装到生成第一个视频

CogVideoX-2b新手入门&#xff1a;从安装到生成第一个视频 1. 这不是“又一个视频生成工具”&#xff0c;而是你能亲手操控的本地导演 你有没有试过在深夜写完一段产品文案&#xff0c;突然想把它变成30秒短视频发到小红书&#xff1f;或者给团队做汇报时&#xff0c;希望把“…

作者头像 李华
网站建设 2026/4/21 17:40:25

如何永久保存社交媒体内容?这款工具让收藏从未如此简单

如何永久保存社交媒体内容&#xff1f;这款工具让收藏从未如此简单 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 作为技术爱好者&#xff0c;我们经常在各类视频平台发现值得永久收藏的内容——可能是一段…

作者头像 李华
网站建设 2026/4/12 15:26:59

SGLang实战体验:多轮对话性能实测分享

SGLang实战体验&#xff1a;多轮对话性能实测分享 1. 为什么选SGLang做多轮对话&#xff1f;一个被低估的推理框架 你有没有遇到过这样的问题&#xff1a;部署一个大模型做客服对话&#xff0c;前几轮响应还行&#xff0c;但用户连续追问5次后&#xff0c;延迟越来越高&#…

作者头像 李华
网站建设 2026/5/1 9:13:40

控制每分钟切换次数,VibeVoice更自然流畅

控制每分钟切换次数&#xff0c;VibeVoice更自然流畅 你有没有听过一段AI生成的多人对话&#xff0c;前30秒还像模像样&#xff0c;到第2分钟就开始“串音”——本该是女声接话&#xff0c;结果冒出来一个低沉男声&#xff1b;再过半分钟&#xff0c;语调突然平直&#xff0c;…

作者头像 李华