How to SSH upload missing bluetooth firmware

Hi all,

I recently just purchased a bluetooth dongle for the MOD Dwarf so I can edit using my mobile phone if I need to when away from my PC. Before purchasing a BT dongle I looked for BT 4.0 + devices supported by Linux and found the KINIVO BTD400 available and was supposed to be supported by Linux. The list of dongles supported by MOD Dwarf according to the wiki looked to contain two devices I couldn’t find.

The basic issue is that it isnt working and was wondering if anyone would be able to help. I have tried a few things debugging and are showing my process below in case it helps others understand the issue.

After plugging it in and setting it to discoverable, it looked at first as though it was working but then was unable to pair.

So I ssh into the dwarf to debug and look at dmesg and saw:

[ 1229.954204] usb 2-1: new full-speed USB device number 2 using ohci-platform
[ 1230.166373] usb 2-1: New USB device found, idVendor=0a5c, idProduct=21e8, bcdDevice= 1.12
[ 1230.166422] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1230.166488] usb 2-1: Product: BCM20702A0
[ 1230.166496] usb 2-1: Manufacturer: Broadcom Corp
[ 1230.166502] usb 2-1: SerialNumber: 5CF370A7BB15
[ 1230.295363] Bluetooth: hci0: BCM: chip id 63
[ 1230.297526] Bluetooth: hci0: BCM: features 0x07
[ 1230.321318] Bluetooth: hci0: BCM20702A
[ 1230.321348] Bluetooth: hci0: BCM20702A1 (001.002.014) build 0000
[ 1230.323546] Bluetooth: hci0: BCM: firmware Patch file not found, tried:
[ 1230.324226] Bluetooth: hci0: BCM: 'brcm/BCM20702A1-0a5c-21e8.hcd'
[ 1230.324347] Bluetooth: hci0: BCM: 'brcm/BCM-0a5c-21e8.hcd'

So it looks like the BT dongle firmware was missing. This is fine, so I went to download the firmware from:

and went to copy it to: /lib/firmware/brcm/BCM20702A1-0a5c-21e8.hcd

however the symlink for that firmware folder is incorrect as there doesn’t exist a /data/firmware folder!

ls -l /lib/firmware
lrwxrwxrwx 1 root root 14 Jan  1 00:00 /lib/firmware -> /data/firmware
[root@moddwarf lib]# ls -l /data
total 68
-rw-r--r--  1 root root  1036 Jan  1 00:22 asound.state
drwxr-xr-x  3 root root  4096 Jan  1 00:21 bluetooth/
-rw-r--r--  1 root root     0 Jan  1 00:04 enable-usb-audio-gadget
-rw-r--r--  1 root root     0 Jan  1 00:04 enable-usb-multi-gadget
-rw-r--r--  1 root root     0 Jan  1 00:04 enable-usb-windows-compat
drwx------  2 root root 16384 Jan  1 00:01 lost+found/
drwx------  6 root root  4096 Jan  1 00:30 root/
-rw-r--r--  1 root root   175 Jan  1 00:00 temperature_001.csv
-rw-r--r--  1 root root   431 Jan  1 00:01 temperature_002.csv
-rw-r--r--  1 root root   197 Jan  1 00:00 temperature_003.csv
-rw-r--r--  1 root root  1619 Jan  1 00:05 temperature_004.csv
-rw-r--r--  1 root root  9677 Jan  1 00:32 temperature_005.csv
-rw-r--r--  1 root root   635 Jan  1 00:02 temperature_006.csv
-rw-r--r--  1 root root  1151 Jan  1 00:03 temperature_007.csv
drwxr-xr-x 13 root root  4096 Jan  1 00:00 user-files/
-rw-r--r--  1 root root     0 Jan  1  1970 using-256-frames

Is this broken? Or am I copying this to the wrong location?

So I then created /data/firmware manually and copy the files where they need to be and now the driver loads as expected (though not on boot I assume the /data partition isn’t loaded until later in the process, but if I unplug and re-plug the USB device after boot it is ok).

Now when I disable wifi + mobile data on my Android phone, and try to pair. I am getting errors in dmesg like:

[  117.472387] usb 2-1: USB disconnect, device number 2
[  121.243848] usb 2-1: new full-speed USB device number 3 using ohci-platform
[  121.455042] usb 2-1: New USB device found, idVendor=0a5c, idProduct=21e8, bcdDevice= 1.12
[  121.455158] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  121.455170] usb 2-1: Product: BCM20702A0
[  121.455285] usb 2-1: Manufacturer: Broadcom Corp
[  121.455294] usb 2-1: SerialNumber: 5CF370A7BB15
[  121.584852] Bluetooth: hci0: BCM: chip id 63
[  121.586962] Bluetooth: hci0: BCM: features 0x07
[  121.610840] Bluetooth: hci0: BCM20702A
[  121.610872] Bluetooth: hci0: BCM20702A1 (001.002.014) build 0000
[  121.616064] Bluetooth: hci0: BCM20702A1 'brcm/BCM20702A1-0a5c-21e8.hcd' Patch
[  122.943803] Bluetooth: hci0: Broadcom Bluetooth Device
[  122.943833] Bluetooth: hci0: BCM20702A1 (001.002.014) build 1764
[  334.080791] Bluetooth: hci0: ACL packet for unknown connection handle 12
[  337.091814] Bluetooth: hci0: ACL packet for unknown connection handle 12
[  397.114798] Bluetooth: hci0: ACL packet for unknown connection handle 12
[  589.763801] Bluetooth: hci0: ACL packet for unknown connection handle 12
[  592.777793] Bluetooth: hci0: ACL packet for unknown connection handle 12

When this happens it pairs very slowly and doesn’t show the internet option. But it isn’t always consistent, once I tried and saw the internet option in the paired device but just couldn’t turn it on.

Looking at other debug info, the system looks all good. For example:

 bluetoothctl --version
5.37
[root@moddwarf log]# hciconfig -a
hci0:   Type: BR/EDR  Bus: USB
        BD Address: 5C:F3:70:A7:BB:15  ACL MTU: 1021:8  SCO MTU: 64:1
        UP RUNNING
        RX bytes:3702 acl:0 sco:0 events:419 errors:0
        TX bytes:36860 acl:0 sco:0 commands:418 errors:0
        Features: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
        Link policy: RSWITCH SNIFF
        Link mode: SLAVE ACCEPT
        Name: 'MOD Dwarf 01-00628'
        Class: 0x822310
        Service Classes: Networking, Information
        Device Class: LAN Access, Fully available
        HCI Version: 4.1 (0x7)  Revision: 0x16e4
        LMP Version: 4.1 (0x7)  Subversion: 0x220e
        Manufacturer: Broadcom Corporation (15)

[root@moddwarf log]# bluetoothctl
[NEW] Controller 5C:F3:70:A7:BB:15 MOD Dwarf 01-00628 [default]
[NEW] Device 7C:F3:1B:63:B0:F9 K61
[bluetooth]# show
Controller 5C:F3:70:A7:BB:15
        Name: BlueZ 5.37
        Alias: MOD Dwarf 01-00628
        Class: 0x822310
        Powered: yes
        Discoverable: no
        Pairable: yes
        UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
        UUID: NAP                       (00001116-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control        (0000110e-0000-1000-8000-00805f9b34fb)
        UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
        UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
        Modalias: usb:v1D6Bp0246d0525
        Discovering: no
[bluetooth]# devices
Device 7C:F3:1B:63:B0:F9 K61
[bluetooth]# info
Missing device address argument
[bluetooth]# info 7C:F3:1B:63:B0:F9
Device 7C:F3:1B:63:B0:F9
        Name: K61
        Alias: K61
        Class: 0x5a020c
        Icon: phone
        Paired: yes
        Trusted: yes
        Blocked: no
        Connected: no
        LegacyPairing: no
ifconfig
bnep      Link encap:Ethernet  HWaddr FE:5B:0F:3C:F2:33
          inet addr:192.168.50.1  Bcast:192.168.50.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:50 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:8860 (8.6 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:6686 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6686 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:357977 (349.5 KiB)  TX bytes:357977 (349.5 KiB)

usb0      Link encap:Ethernet  HWaddr 22:00:62:FF:FF:FF
          inet addr:192.168.51.1  Bcast:192.168.51.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2817 errors:0 dropped:118 overruns:0 frame:0
          TX packets:3220 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:192459 (187.9 KiB)  TX bytes:597047 (583.0 KiB)

I know a bit about Linux but not really much about bluetooth support in Linux. I will continue to debug myself but if you can offer any help that would be great.

Thanks.

1 Like

No, this is intentional.
The main system is read-only and is overwritten on updates, that is why there is a symlink to a /data/ folder which is kept even after an OS update.
See WiFi - MOD Wiki which has the same steps as you need.

3 Likes

Thanks. Sorry I edited my post above after I got further in the process. Thanks for confirming the process I was taking is correct.

You replied quicker than I thought would happen :slight_smile:

I am still having issues further down the process now though

4 Likes