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:
Raspberry Pi 5 as a host running BlueZ stack
Sona IF573 - Wi-Fi 6E + Bluetooth Core 6.0 Module (based on CYW55573 chipset) [Cost: approx. 40 Euros]
uSD-M2 Adapter LBEE0ZZ1WE-uSD-M2 (M.2 adapter interface to access Bluetooth over UART) [Cost: approx. 50 Euros]
FT232 FTDI UART - USB adapter (to route UART signals over USB) [Cost: approx. 10 Euros]
Google Pixel 8 smartphone running Android 16 with latest update 05.09.2025 (to experiment with Auracast)
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:
Bluetooth LE Audio Sharing (Auracast) with Android phone:
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