SparkLink Alliance

SparkLink Alliance is an industrial alliance committed to promote next-generation wireless short-range communication technology innovation and industry ecosystem, and support applications in smart cars, smart homes, smart...

Portable GPS signal acquisition (BDS,GPS,GLONASS,GALILEO,GNSS test)

Portable signal acquisition and replay equipmentIt can complete the acquisition, storage and playback of 30MHz~ 3.6ghz analog signals, and simulate multi-frequency interference signals and fraud signals of BDS, GPS, GLONASS and...

Implementing SparkLink Low-Latency Audio Streaming with Custom LLC and Data Frame Encoding on ESP32-C6

1. Introduction: The Latency Bottleneck in Wireless Audio The pursuit of sub-10ms end-to-end audio latency in wireless systems has driven the development of proprietary protocols like Huawei's SparkLink (also known as NearLink). Unlike...

Implementing a High-Performance BLE Advertisement Beacon with Extended Advertising and Periodic Advertising Sync using nRF52840

1. Introduction: Beyond Basic Beacons – The Need for Extended and Periodic Advertising Traditional BLE advertisement beacons, such as iBeacon or Eddystone, broadcast a fixed 31-byte payload in a single advertisement event. This...

Bowers & Wilkins Pi7 S2 TWS bluetooth earbuds

High-resolution sound and crystal-clear voice calls, an industry-first wireless audio retransmission case.

Insights & Analysis

Marketing

Support us and view this ad

可选:点击以支持我们的网站

免费文章
IoT

Bluetooth 5.x Periodic Advertising Sync Transfer for Scalable IoT Sensor Networks

In the rapidly evolving landscape of the Internet of Things (IoT), the demand for scalable,...

IoT

Bluetooth Mesh 1.1 in Smart Factories: Scalability and Security Lessons

Introduction: The Evolution of Industrial Wireless Connectivity The modern smart factory is an...

Designing Auracast-Based Public Announcement Systems in Stadiums and Airports

In the rapidly evolving landscape of wireless audio, the introduction of Auracast—a Bluetooth LE...

Hands-Free Precision: How Voice Commands Are Reshaping the Wireless Mouse Experience

In the rapidly evolving landscape of human-computer interaction, the wireless mouse has long been...

Introduction: The Challenge of High-Throughput in Custom Bluetooth Modules In the domain of Bluetooth module ODM (Original Design Manufacturer) development, the demand for high-throughput data transfer combined with custom functionality is paramount. Traditional Bluetooth Low Energy (BLE) implementations often suffer from throughput limitations due to connection intervals, packet size constraints, and inefficient GATT service design. When designing firmware for a module that must support custom GATT services and store profile configurations in flash memory, developers face a multi-faceted challenge: maximizing data rate while maintaining low latency, ensuring reliable flash wear-leveling, and providing a flexible service architecture. This article provides a technical deep-dive into the architecture, implementation, and performance analysis of a high-throughput Bluetooth module ODM firmware that leverages custom GATT services and flash-based profile storage. Architecture Overview: Core Components and Data Flow The firmware architecture is built around three primary layers: the BLE stack (host and controller), the GATT service manager, and the flash storage manager. The BLE stack handles the radio and link-layer operations, while the GATT service manager dynamically registers and exposes custom services. The flash storage manager provides a wear-leveled, transactional interface for storing profile data (e.g., device name, service UUIDs, characteristic configurations). The data flow for a high-throughput scenario involves a central device (e.g., a smartphone) connecting to the module, discovering custom services, and then streaming data via notifications or writes. To achieve high throughput, we optimize the connection parameters (e.g., connection interval of 7.5 ms, slave latency of 0, and maximum PDU size of 251 bytes) and implement a data pipeline that minimizes CPU intervention. Custom GATT Service Design for Throughput Optimization A critical aspect of high-throughput BLE is the design of GATT services and characteristics. Instead of using multiple small characteristics, we consolidate data into a single large characteristic with a size matching the ATT MTU (e.g., 247 bytes of payload). This reduces the overhead of GATT operations. Additionally, we implement a "streaming" characteristic that uses the "Notify" property with a high-speed notification queue. The service definition in code is done dynamically at runtime, allowing for ODM customization. Below is a code snippet showing how to register a custom high-throughput service using the Nordic nRF5 SDK (though the principles apply to any BLE stack): // Custom GATT service UUID (16-bit for throughput efficiency) #define BLE_UUID_HT_SERVICE 0x180F #define BLE_UUID_HT_STREAM_CHAR 0x2A19 // Characteristic definition for high-throughput streaming static ble_gatts_char_handles_t m_ht_stream_handles; static void ht_service_init(ble_ht_t * p_ht) { uint32_t err_code; ble_uuid_t ble_uuid; ble_uuid128_t base_uuid = {0x23, 0xD1, 0x13, 0xEF, 0x5F, 0x78, 0x45, 0x56, 0xA5, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE}; err_code = sd_ble_uuid_vs_add(&base_uuid, &p_ht->uuid_type); APP_ERROR_CHECK(err_code); ble_uuid.type = p_ht->uuid_type; ble_uuid.uuid = BLE_UUID_HT_SERVICE; // Add service err_code = sd_ble_gatts_service_add(BLE_GATTS_SRVC_TYPE_PRIMARY, &ble_uuid, &p_ht->service_handle); APP_ERROR_CHECK(err_code); // Add streaming characteristic (Notify only, no Write for throughput) ble_gatts_char_md_t char_md; memset(&char_md, 0, sizeof(char_md)); char_md.char_props.notify = 1; char_md.char_props.read = 1; // Allow read for initial setup ble_gatts_attr_md_t attr_md; memset(&attr_md, 0, sizeof(attr_md)); attr_md.vloc = BLE_GATTS_VLOC_STACK; // Store in stack for speed attr_md.rd_auth = 0; attr_md.wr_auth = 0; attr_md.vlen = 1; // Variable length to accommodate large packets ble_gatts_attr_t attr_char_value; memset(&attr_char_value, 0, sizeof(attr_char_value)); attr_char_value.p_uuid = &ble_uuid; attr_char_value.p_attr_md = &attr_md; attr_char_value....

继续阅读完整内容

支持我们的网站,请点击查看下方广告

正在加载广告...