Sunday, September 21, 2025

0

Bluetooth 6.0 on Raspberry Pi featuring LE Audio w/ Auracast

Summary:

In a previous blog post, I shared my experience integrating the Intel AX210 WiFi + Bluetooth module into my Raspberry Pi 5 to to experiment with the Bluetooth LE Audio feature. After that I started looking out for addiotnal Bluetooth modules supporting the latest Bluetooth standard, has Lnux support and can interface with the Raspberry Pi over USB or UART.

After doing some reasearch, I came accross the Infenion (CYW55513 CYW55573) chipsets, which according to their specs support Bluetooth 6.0 standards and are LE Audio capable. The CYW55573 in particular supports Auracast which is the next big thing in Bluetooth technology allowing audio sharing / broadcasting among LE Audio capable devices.

After deciding on the chipsets I wanted to use, I ordered them in the form of M.2 embedded modules and started the experiment journey. At the end, I was able to attach the Bluetooth module to the Pi via the dedicated UART interface and control it via BlueZ (Linux Bluetooth protocol stack). I ran some tests to check if the audio sharing is working using a Pixel 8 phone having latest version of Android supporting Auracast

Hardware Setup: 

The following components were used:

 

 

 

 

 

 

 

 

 

 

 

 

 

Software Setup:

I flashed the latest Raspbian OS (12 bookworm) on the SD card of the Pi and enabled SSH for remote access. I updated the OS to the latest available software by running the following in the terminal:

  • sudo apt update

  • sudo apt upgrade 

The Linux kernel version used is 6.12.34+rpt-rpi-2712

To have LE Audio support, I installed the latest stable releases of BlueZ 5.83, Pipewire 1.4.6 and WirePlumber 0.5.10 directly from source.

Experimental features need to be enabled in BlueZ "main.conf" file by setting the following options:

  • ControllerMode = le # use low energy mode

  • Experimental = true # enable experimental features

  • KernelExperimental = 6fbaf188-05e0-496a-9885-d6ddfdb4e03e # enable ISO sockets

For WirePlumber, I created a configuration file: "~/.config/wireplumber/wireplumber.conf.d/80-bluez-properties.conf" according to the wiki documentation to set the Bluetooth audio profiles.

Afterwards a reboot of the Pi is required so changes would take effect.

Attaching Bluetooth over UART and flashing firmware:

Bluetooth module UART Interface:

I placed the IF573 M.2 module into the adapter board and referred to the uSD-M2 Adapter LBEE0ZZ1WE-uSD-M2 datasheet to locate the UART interface pins. Furthermore, I need one GND connection and the module could be powered from a 5V USB connection. 

After going through the data sheet, I learned that the UART interface is 4-wire type and so following singals are required for communication: TX, RX, RTS, CTS

The next step is to connect the M.2 adapter board to the Pi through the FTDI UART - USB adapter. One could perhaps connect directly to the UART interface on the Pi. However, you would need to reserve some GPIO pins on the Pi for that.

The connection singals would be as follows:

M.2 Adapter   <---->  FTDI USB adatper

RTS <----> CTS

CTS <----> RTS

TX <----> RX

RX <----> TX

GND <----> GND

Finally I connected the FTDI UART - USB adapter to the Pi via USB and also connected the M.2 adapter board via USB such that the IF573 module could be powered from 5V USB connection.

Flashing the Bluetooth firmware patch to the IF573:

Now that everything is connected, we still need to perform a very important step which is applying the required Bluetooth firmware for the controller so we can enable underlying functionality and also control the HCI interface via BlueZ. To save you sometime looking for the firmware files, you could find them avaialbe under this Github repo. Note that these may not be the latest firmware releases for the CYW55573 and perhaps one could refer to Infenion website to check for latest updates.

Anyway, I downladed the following package for the firmware files: summit-if573-pcie-firmware-12.103.0.5.tar.bz2 and since I am only interested in the Bluetooth functionality, I just needed to locate the .hcd patch file as shown below:

   

 

To apply the firmware patch file above to the device, it was not sufficent to use the btattach utility tool from BlueZ (the one usually used to attach Bluetooth devices over serial port). The CYW55573 according to its datasheet has some sort of secure upload mechanism where the chip needs to be placed in "autobaud" mode. You can read here for more details. Anyhow, What I had to do in the end is to do a reset for the Bluetooth core via a GPIO pin while the upload procedure is started. When the chip is out of reset, the firmware download into the chip RAM wokrs and the Bluetooth device is sucessfully connected and it is up and running !.

To apply the firmware patch, I used the following tool (brcm_patchram)  from Broadcom acquired later by Cypress and later on Infenion :). You simply need to trigger the executable as follows:

./brcm_patchram_plus --no2bytes --autobaud_mode --baudrate 115200 --use_baudrate_for_download --enable_hci --patchram /lib/firmware/cypress/CYW55560A1_v001.002.087.0225.0065.hcd /dev/ttyUSB0                                                             

After few seconds you should see the following in your terminal and you can confirm the Bluetooth device is connected and running via the "hciconfig" command as show below:

 

 

Testing of LE Audio & Auracast:

Now that the IF573 controller is up and running with BlueZ. I performed two experiments, one to check if we could stream audio from the Pi to a LE Audio capable headset and the second was to connect the Pi with an Android phone that supports Auracast audio sharing with the latest Android 16 update. Please note that in both scenraios, the main goal was to check if the interface is working and did not inveset much time looking into audio link quality and latency issues so do not expect something perfect =) 

Bluetooth LE Audio Unicast streaming to an audio headset:

I was able to pair and connect my LE Audio headset device to the Pi using CYW55573 chipset without probelms. After connection I see two LE Audio related endpoints are registerd which means they are also now recognised as media source/sink devices by wireplumber as shown below

Now when I start some audio play from the Pi, I see the related profiles being activated and they come back to idle when I pause / stop the stream so the interface seems to be working.  
 
If you look in parallel to the HCI logs using BlueZ btmon utility you will see alot of LE Audio data packets being sent as the stream is running.
 

Bluetooth LE Audio Sharing (Auracast) with Android phone:

In this test, I configured the Bluetooth controller (i.e CYW55573) to be discoverable and advertising so I could connect to it from my Pixel 8 phone and see if audio sharing is supported. I was able to see two settings enabled for my controller in BlueZ: (iso-broadcaster and sync-receiver)
 
Once the Pi is paired and connected with my Pixel 8 phone, I could see that it supports audio sharing !. Great now it seems I can share audio over Bluetooth using my Pi and Android phone :) 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 

Since audio sharing is now enabled. I can pair additional LE Audio devices to share ongoing audio stream from the phone. What I did here is to configure my Intel AX210 controller (also connected to the Pi via USB) to act as a peripheral via BlueZ and enabled discovery so it could be seen by the Pixel phone. Now when refreshing the audio sharing window on Android, I can add my Intel AX210 chip (advertising here under the name "LE_Audio"). 
Amazing!, Now I established a shared audio stream from Pixel phone to two Bluetooth devices running in parallel on the Pi.
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

To check whether sharing is working, I played a test sound from Android as shown in the menu above and observed the playing status notifications in BlueZ for my two connected Bluetooth devices

 

Encountered Problems:

Currently the setup has couple of issues that require additional investigation / optimizations:

  • When attaching the IF573 module to the Pi over UART, it only connects when I set the baudrate to 115200. Given that the module supports high speed UART, I want to have a faster UART link. This becomes important also for audio applications, otherwise, the audio quality is really bad. 

  • When attempting to stream audio from Pixel phone to the Pi, the BlueZ stack notifies me that audio play has started. However, no audio is recieved on the Pi. I checked the HCI logs and it shows that the stream disconnect shorty after the play starts. This needs more investigation for sure.


0 comments:

Post a Comment