NRF嵌入式开发:BLE HID与USB初始化模块解析

1. 项目概述

最近在研究NRF DESKTOP项目的代码结构,发现其中几个关键模块的实现方式很有意思。作为一个经常接触嵌入式开发的工程师,我想分享一下对其中两个核心模块的分析心得——hids.c和usb_state.c。这两个文件分别负责BLE HID服务和USB设备的初始化工作,是设备与外设通信的基础。

在Nordic的SDK架构中,模块化设计思想贯穿始终。每个功能模块通常由一个头文件(.h)和一个源文件(.c)组成,这种设计使得代码结构清晰,便于维护和扩展。今天要讨论的这两个文件就是典型代表,它们虽然功能不同,但在初始化流程和设计模式上有很多共通之处。

需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。

2. 核心模块解析

2.1 BLE HID服务初始化(hids.c)

hids.c文件实现了BLE HID(Human Interface Device)服务的初始化逻辑。HID over BLE是蓝牙低功耗协议中的一个重要profile,允许设备作为键盘、鼠标等输入设备使用。

在NRF SDK中,HID服务的初始化通常包含以下几个关键步骤:

  1. 服务结构体定义
c复制BLE_HIDS_DEF(m_hids, NRF_SDH_BLE_TOTAL_LINK_COUNT);

这行代码定义了HID服务实例,NRF_SDH_BLE_TOTAL_LINK_COUNT参数指定了支持的最大连接数。这种宏定义方式使得修改连接数配置非常方便。

  1. 特征值初始化
    HID服务包含多个特征值,如协议模式、报告映射、输入/输出报告等。每个特征值都需要单独配置属性和权限。例如:
c复制static ble_hids_init_t hids_init_obj = {
    .info_report_id = 0,
    .report_map_len = sizeof(report_map),
    .p_report_map = report_map,
    // 其他特征值初始化...
};
  1. 安全设置
    BLE HID通常需要设置适当的安全级别,以防止未授权访问:
c复制hids_init_obj.security_mode_write_perm = SEC_JUST_WORKS;
hids_init_obj.security

内容推荐

已经到底了哦
已经到底了哦