Right-click the speaker icon in the system tray > Sounds.
Solution: The BR21 has two variants: BR21 (Standard) and BR21T (Touch panel). The "Full" driver pack includes both. If you get a platform error, you must manually extract the driver:
my_br21_project/
├─ src/
│ ├─ main.c // entry point, RTOS init
│ ├─ app_audio.c // audio pipeline glue
│ └─ app_ble.c // BLE service implementation
├─ inc/
│ └─ app_cfg.h // compile‑time options
├─ Makefile / CMakeLists.txt
└─ jieli_sdk/ // symbolic link to $JIELI_SDK_ROOT
Typical main.c
#include "hal.h"
#include "bt.h"
#include "ble_gatt.h"
#include "dsp.h"
#include "pmu.h"
#include "freeRTOS.h"
#include "task.h"
void system_init(void)
hal_init(); // clocks, pins, UART for debug
pmu_init(); // battery monitor, sleep config
bt_init(); // classic + BLE stack
dsp_init(); // allocate buffers, load default EQ
ble_gatt_init(); // register custom services
void app_task(void *arg)
// Example: start A2DP sink, enable ANC after 5 s
bt_a2dp_sink_start();
vTaskDelay(pdMS_TO_TICKS(5000));
dsp_anc_enable(true);
for (;;)
vTaskDelay(portMAX_DELAY);
int main(void)
system_init();
xTaskCreate(app_task, "APP", 1024, NULL, 2, NULL);
vTaskStartScheduler(); // never returns
+------------------------------------------------------------+
| APPLICATION (User) |
| - Audio pipeline (PCM → DSP → I2S) |
| - BLE services (GATT) |
| - Power‑management policies |
+-----------------------|------------------------------------+
|
+--------v--------+ (FreeRTOS kernel)
| Jieli SDK |
|----------------| • Task scheduler
| BT Stack | • HCI transport (UART/USB)
| Audio DSP | • Audio processing graph
| BLE GATT | • BLE connection manager
| HAL Layer | • Register‑level drivers
+--------|--------+
|
+--------v--------+
| BR21 HW |
|----------------|
| Cortex‑M0 (Ctrl)|
| Cortex‑M4 (DSP) |
| RF Front‑End |
| DAC/ADC |
| PMU |
+-----------------+
Key driver layers
| Layer | Responsibilities | Typical API(s) |
|-------|------------------|----------------|
| HAL (Hardware Abstraction Layer) | Direct register access, peripheral init/de‑init, interrupt routing. | hal_i2s_init(), hal_gpio_set(), hal_uart_write() |
| BT Stack | Classic & LE link management, profile handling (A2DP, HFP, AVRCP, GATT). | bt_init(), bt_a2dp_start(), bt_le_connect() |
| Audio DSP | Sample‑rate conversion, equalizer, ANC, echo‑cancellation, codec interfacing. | dsp_eq_set(), dsp_anc_enable(), dsp_process() |
| BLE GATT | Service/characteristic registration, read/write callbacks, notifications. | ble_gatt_add_service(), ble_gatt_notify() |
| Power Management | Sleep‑mode entry, wake‑up sources, battery‑level monitoring. | pmu_enter_sleep(), pmu_set_wakeup_source() |
| RTOS Wrapper | Task creation, message queues, timers, mutexes. | os_thread_create(), os_queue_send() |
GitHub Repositories:
Reputable Tech Forums:
If you have recently purchased a pair of budget wireless earbuds, a Bluetooth speaker, or a hands-free car kit, chances are the device is powered by a chip from Jieli Technology (Zhuhai Jieli Technology Co., Ltd.). One of their most popular and widely used chips is the BR21.
The term "jieli br21 driver full" is one of the most searched phrases by DIY repair enthusiasts, audio tinkerers, and everyday users facing connectivity issues. But what does it actually mean?
In short, the "Jieli BR21 Driver Full" refers to the complete set of USB drivers and firmware utilities required for a computer to recognize, communicate with, and flash (update) the firmware on devices using the Jieli BR21 Bluetooth audio chip. Unlike standard Bluetooth drivers that come with Windows, these proprietary drivers allow you to modify EQ settings, change device names, fix pairing loops, and even recover "bricked" earbuds. jieli br21 driver full
This article will walk you through everything you need to know—from downloading the correct drivers to advanced troubleshooting.
This is the most critical step. Earbuds and speakers must be in DFU (Device Firmware Update) mode.
| Profile | Direction | Key Functions |
|---------|-----------|---------------|
| A2DP Sink | Remote → BR21 | bt_a2dp_sink_start(), bt_a2dp_sink_stop() |
| A2DP Source | BR21 → Remote | bt_a2dp_source_start(), bt_a2dp_source_write() |
| HFP (Hands‑Free) | Two‑way voice | bt_hfp_init(), bt_hfp_send_voice_data() |
| AVRCP | Control (play/pause) | bt_avrcp_register_cb() | Right-click the speaker icon in the system tray > Sounds
Example – Changing Sample Rate
bt_a2dp_set_sample_rate(44100); // must be called before start()