Laird BL654 USB Bluetooth Dongle
- 3 minutes read - 521 wordsOverview
The Laird BL654 dongle is an alternative to using the Nordic nRF52 dongle for a Bluetooth controller as described in this post.
One big advantage is that the Laird dongle has case around it and it less likely to be damaged. So it can be nicely used in multiple use cases where using a logic board without a case is not a good idea.
The Zephyr documentation has a separate page for the BL654 dongle, but it is essentially just a nRF52 dongle in a nice package.
The dongle comes by default with just the bootloader.
$ cat /sys/kernel/debug/usb/devices
T: Bus=01 Lev=01 Prnt=01 Port=06 Cnt=02 Dev#= 2 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=1915 ProdID=521f Rev= 1.00
S: Manufacturer=Laird Connectivity
S: Product=Nordic Open DFU Bootloader
S: SerialNumber=xxxxxxxxxxxx
C:* #Ifs= 2 Cfg#= 1 Atr=c0 MxPwr=100mA
A: FirstIf#= 0 IfCount= 2 Cls=02(comm.) Sub=02 Prot=00
I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=00 Driver=cdc_acm
E: Ad=82(I) Atr=03(Int.) MxPS= 64 Ivl=16ms
I:* If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_acm
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=01(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
$ dmesg -t
usb 1-7: new full-speed USB device number 2 using xhci_hcd
usb 1-7: New USB device found, idVendor=1915, idProduct=521f, bcdDevice= 1.00
usb 1-7: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-7: Product: Nordic Open DFU Bootloader
usb 1-7: Manufacturer: Laird Connectivity
usb 1-7: SerialNumber: xxxxxxxxxxxx
cdc_acm 1-7:1.0: ttyACM0: USB ACM device
And so the same procedure as with the nRF52 and flashing tools are used,
but Zephyr provides a dedicated board module named bl654_usb
for this
dongle.
Building and flashing the firmware
First activate the environment.
$ source ~/zephyrproject/.venv/bin/activate
Now change to the Zephyr directory and build the firmware.
(.venv) $ cd ~/zephyrproject/zephyr
(.venv) $ west build -p always -b bl654_usb samples/bluetooth/hci_usb
Package new firmware into a flashable file.
(.venv) $ nrfutil pkg generate --hw-version 52 --sd-req=0x00 --application build/zephyr/zephyr.hex --application-version 1 hci_usb.zip
And then flash the firmware using /dev/ttyACM0
.
(.venv) $ nrfutil dfu usb-serial -pkg hci_usb.zip -p /dev/ttyACM0
Now this dongle behaves like a Bluetooth LE device.
$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 2fe3:000b NordicSemiconductor USB-DEV
$ cat /sys/kernel/debug/usb/devices
T: Bus=01 Lev=01 Prnt=01 Port=06 Cnt=02 Dev#= 2 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=2fe3 ProdID=000b Rev= 3.05
S: Manufacturer=ZEPHYR
S: Product=USB-DEV
S: SerialNumber=xxxxxxxxxxxxxxxx
C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
E: Ad=81(I) Atr=03(Int.) MxPS= 64 Ivl=1ms
E: Ad=01(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
$ dmesg -t
usb 1-7: new full-speed USB device number 2 using xhci_hcd
usb 1-7: New USB device found, idVendor=2fe3, idProduct=000b, bcdDevice= 3.05
usb 1-7: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-7: Product: USB-DEV
usb 1-7: Manufacturer: ZEPHYR
usb 1-7: SerialNumber: xxxxxxxxxxxxxxxx
Notes
There exists two version of this dongle with the same name, but different identifications. The 451-00003 and 451-00004. The latter is the one that is required for using Zephyr as controller firmware.