BlueNRG-1&2 BLE Stack v2.x编程指南中文版

需积分: 31 15 下载量 41 浏览量 更新于2024-07-16 2 收藏 2.13MB PDF 举报
"BlueNRG_1&2 BLE Stack v2.x编程手册【中文版】_2019.1.22.pdf" 本文档是针对意法半导体(ST)的BlueNRG-1和BlueNRG-2蓝牙低功耗(BLE)协议栈v2.x的编程指南,旨在帮助开发者快速掌握如何利用这些芯片进行BLE应用的开发。BlueNRG-1和BlueNRG-2是超低功耗的BLE单模片上系统,支持BLE规范,并且能够作为主设备或从设备,BlueNRG-2还具备扩展数据包长度的功能。 文档首先介绍了BLE技术的基础知识,包括BLE堆栈架构、物理层(PHY Layer)、链路层(Link Layer)、主机控制器接口(HCI)、逻辑链路控制和适配层协议(L2CAP)、属性协议(ATT)以及安全管理器(Security Manager)。这些基本概念是理解BLE通信的核心,也是开发BLE应用的基石。 在BLE堆栈架构部分,读者可以了解到BLE协议栈的分层结构,以及各层的主要功能。物理层负责无线信号的传输,链路层处理连接和数据包交换,而主机控制器接口则是主机与蓝牙控制器之间的通信桥梁。 链路层进一步细分为几个状态:广播状态、扫描状态和连接状态。广播状态用于设备间无连接的数据传输,扫描状态允许设备搜索其他BLE设备,连接状态则涉及两个设备间的双向通信。 L2CAP和ATT分别处理更高层次的数据传输和蓝牙服务的定义。L2CAP提供了服务质量控制和分段重组等功能,而ATT则定义了服务发现和数据交换的协议。 安全管理器涉及到BLE设备之间的安全连接,包括加密、身份验证和密钥管理,确保数据传输的安全性。 文档的后续部分详细阐述了BlueNRG-1和BlueNRG-2 BLE Stack v2.x的库API和事件回调机制,这些都是开发者实际编写代码时会用到的关键接口。通过这些API,开发者可以控制设备的广播、扫描、连接、数据传输等操作,同时,事件回调函数则用于处理来自协议栈的响应和事件,如连接建立、数据接收等。 最后,文档还提到了一些关于BlueNRG-1和BlueNRG-2设备的特殊信息和差异,以及如何根据BLE规范和这些设备的特性来设计和实现BLE应用程序。对于那些希望深入理解和利用BlueNRG系列芯片开发BLE应用的开发者来说,这份指南是非常宝贵的参考资料。

void sl_notify_gap_evt_to_porting_layer(sl_bt_msg_t *evt) { sl_status_t sc; bd_addr address; uint8_t address_type; struct ble_gap_event event; memset(&event, 0, sizeof(event)); switch (SL_BT_MSG_ID(evt->header)) { // ------------------------------- // This event is generated when an advertisement packet or a scan response // is received from a responder case sl_bt_evt_scanner_legacy_advertisement_report_id: memset(&event, 0, sizeof(event)); event.type = BLE_GAP_EVENT_DISC; event.disc.event_type = convert_to_nimble_adv_type(evt->data.evt_scanner_legacy_advertisement_report.event_flags); event.disc.length_data = evt->data.evt_scanner_legacy_advertisement_report.data.len; event.disc.data = evt->data.evt_scanner_legacy_advertisement_report.data.data; event.disc.addr.type = evt->data.evt_scanner_legacy_advertisement_report.address_type; memcpy(event.disc.addr.val, evt->data.evt_scanner_legacy_advertisement_report.address.addr, 6); event.disc.rssi = evt->data.evt_scanner_legacy_advertisement_report.rssi; notify_ble_event_to_listeners(&event); break; // ------------------------------- // This event indicates that a new connection was opened. case sl_bt_evt_connection_opened_id: event.type = BLE_GAP_EVENT_CONNECT; event.connect.conn_handle = evt->data.evt_connection_opened.connection; app_log_info("BLE connected, conn_id:%d\n", event.connect.conn_handle); notify_ble_event_to_listeners(&event); break; // ------------------------------- // This event indicates that a connection was closed. case sl_bt_evt_connection_closed_id: event.type = BLE_GAP_EVENT_DISCONNECT; event.disconnect.conn.conn_handle = evt->data.evt_connection_closed.connection; event.disconnect.reason = evt->data.evt_connection_closed.reason; app_log_info("BLE disconnected, conn_id:%d, reason:0x%02x\n", event.disconnect.conn.conn_handle, event.disconnect.reason); notify_ble_event_to_listeners(&event); break; case sl_bt_evt_gatt_mtu_exchanged_id: event.type = BLE_GAP_EVENT_MTU; event.mtu.conn_handle = evt->data.evt_gatt_mtu_exchanged.connection; event.mtu.value = evt->data.evt_gatt_mtu_exchanged.mtu; app_log_info("exchange mtu req: %d\n", event.mtu.value); notify_ble_event_to_listeners(&event); break; default: break; } }

2023-06-10 上传