Dans cet article nous verrons comment sauvegarder/restaurer un firmware sur une puce CSR.

Attention, faire ceci peut être dommageable et empêcher le bon fonctionnement de votre dongle Bluetooth voir le rendre inopérant.

Identification des composants

Tout d’abord il faut connaître le fabricant de la puce avec la commande hciconfig -a qui devrait afficher les informations des différents éléments bluetooth connectés à l’ordinateur, par exemple :
hci0: Type: BR/EDR Bus: USB
BD Address: 00:20:E0:9B:XX:XX ACL MTU: 192:8 SCO MTU: 64:8
UP RUNNING PSCAN
RX bytes:2454 acl:0 sco:0 events:87 errors:0
TX bytes:562 acl:0 sco:0 commands:51 errors:0
Features: 0xff 0xff 0x8f 0x78 0x18 0x18 0x00 0x80
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH HOLD SNIFF PARK
Link mode: SLAVE ACCEPT
Name: 'malin-0'
Class: 0x6e0100
Service Classes: Networking, Rendering, Capturing, Audio, Telephony
Device Class: Computer, Uncategorized
HCI Version: 1.1 (0x1) Revision: 0x571
LMP Version: 1.1 (0x1) Subversion: 0x571
Manufacturer: Cambridge Silicon Radio (10)

hci1: Type: BR/EDR Bus: USB
BD Address: 00:1E:58:3F:XX:XX ACL MTU: 384:8 SCO MTU: 64:8
UP RUNNING PSCAN
RX bytes:789 acl:0 sco:0 events:28 errors:0
TX bytes:376 acl:0 sco:0 commands:27 errors:0
Features: 0xff 0xff 0x8f 0xfe 0x9b 0xf9 0x00 0x80
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH HOLD SNIFF PARK
Link mode: SLAVE ACCEPT
Name: 'malin-1'
Class: 0x6e0100
Service Classes: Networking, Rendering, Capturing, Audio, Telephony
Device Class: Computer, Uncategorized
HCI Version: 2.0 (0x3) Revision: 0x77b
LMP Version: 2.0 (0x3) Subversion: 0x77b
Manufacturer: Cambridge Silicon Radio (10)

 

hci2: Type: BR/EDR Bus: USB
BD Address: 00:1B:11:63:XX:XX ACL MTU: 1017:8 SCO MTU: 64:0
UP RUNNING PSCAN
RX bytes:779 acl:0 sco:0 events:27 errors:0
TX bytes:376 acl:0 sco:0 commands:27 errors:0
Features: 0xff 0xff 0x8d 0xfe 0x9b 0xf9 0x00 0x80
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH HOLD SNIFF PARK
Link mode: SLAVE ACCEPT
Name: 'malin-2'
Class: 0x6e0100
Service Classes: Networking, Rendering, Capturing, Audio, Telephony
Device Class: Computer, Uncategorized
HCI Version: 2.0 (0x3) Revision: 0x403d
LMP Version: 2.0 (0x3) Subversion: 0x430e
Manufacturer: Broadcom Corporation (15)

Nous pouvons donc voir que nous avons 2 éléments venant de chez CSR(Cambridge Silicon Radio) qui sont hci0 et hci1.

Pour connaître les révisions des composants il faut lancer la commande bccmd -d hci0 chiprev ce qui donne pour mes 2 éléments :
sudo bccmd -d hci0 chiprev
Chip revision: 0x008a (BC2-External B)
sudo bccmd -d hci1 chiprev
Chip revision: 0x0026 (BC4-External)

Nous avons donc une puce BC2-Ext et une BC4-Ext qui sont toutes les deux programmables (-Ext et non -Rom).

Sauvegarde et modification du firmware CSR

Pour sauvegarder les firmwares de ces puces il faut utiliser la commande dfutool archive nomdufichier.dfu et sélectionné l’élément désiré, cela permet de sauvegarder le firmware.

Il est ainsi par exemple possible de passer la clé DBT-120 utilisant le chip Bluecore4-Ext en bluetooth 2.1 par mise à jour de firmware avec la commande dfutool upgrade nouveaufirmware.dfu.

Détection des registres

Il suffit de taper la commande sudo bccmd -d hci1 pslist

0x0001 - Bluetooth address (8 bytes)
0x01f9 - Host interface (2 bytes)
0x01fe - Crystal frequency (2 bytes)
0x0209 - TX and RX PIO control (2 bytes)
0x025c - Module security code (16 bytes)
0x02be - USB vendor identifier (2 bytes)
0x02bf - USB product identifier (2 bytes)

Modification des Vendor Id et Product Id USB

Il est aussi possible de modifier le vendor Id de la clé usb avec la commande bccmd psset -s 0x0000 0x02be 0x07d1 où 0x07d1 est le Vendor Id de la clé DBT-120 ainsi que le Product Id bccmd psset -s 0x0000 0x02bf 0xfc01.

Modification de l’adresse Mac

Pour lire l’adresse Mac du dongle :

sudo bccmd -d hci1 psget -s 0x0001 0x0001

Et pour le modifier de façon à avoir une adresse Mac 01:02:03:04:05:06 :

sudo bccmd -d hci1 psset -s 0x0001 0x0001 0x04 0x00 0x06 0x05 0x03 0x00 0x02 0x01