L’essentiel

flash_cc2531

flash_cc2531 vous permet de programmer votre clé USB CC2531 à partir de votre Raspberry, sans avoir besoin d’un Arduino ou d’un CC Debugger. Il peut également programmer une clé CC2530.

Prérequis

Vous avez besoin d’un Raspberry ou d’un Odroid-c2.
Vous avez besoin de quoi connecter le port de débogage de la clé aux ports GPIO du Raspberry, par exemple un câble CC et quatre lignes Dupont (voir plus loin).
WiringPi doit être installé (s’il n’est pas pré-installé, vous pouvez généralement l’installer avec sudo apt install wiringpi, sinon voir le site Web de Gordon ou ce site alternatif ).
Enfin il vous faut le logiciel :

J’ai conçu flash_cc2531 sur un Raspberry Pi 3 avec raspbian, mais des programmations réussies ont été signalées sur d’autres modèles:

Préparation

Téléchargez flash_cc2531 sur votre raspberry :

git clone https://github.com/jmichault/flash_cc2531.git

Connectez les broches suivantes du port de débogage au port GPIO:

broche GPIO broche CC
39 ( GND ) 1 ( GND )
36 ( wPi 27, BCM16 ) 3 ( DC )
38 ( wPi 28, BCM20 ) 4 ( DD )
35 ( wPi 24, BCM19 ) 7 ( reset )

La disposition des broches du raspberry est disponible ici : https://pinout.xyz/

Puis insérez la clé USB dans un port.
Note : si vous ne voulez pas insérer la clé dans un port USB, vous pouvez à la place connecter la broche CC 9 à une broche 3,3v du raspberry (broche 1 ou 17).

Un câble de téléchargement CC et 4 lignes Dupont Femelle à Femelle sont parfaits à cet effet : photo de la clé et du _raspberry_ C’est mon option préférée, mais si vous n’avez pas de câble CC vous pouvez aussi souder directement les câbles Dupont sur la clé : voir par exemple le site lemariva.com ou notenoughtech.com

testez en exécutant ceci :

cd flash_cc2531
./cc_chipid

Ça doit retourner:

  ID = b524.

(la valeur peut être différente si la version matèrielle de votre clé n’est pas la même que la mienne).
Si vous voyez 0000 ou ffff quelque chose ne va pas:

utilisation

Pour enregistrer le contenu de la mémoire flash dans le fichier save.hex:

./cc_read save.hex

(dure environ 2 minutes).

Pour effacer la mémoire flash:

./cc_erase

Remarque: Vous devez effacer avant d’écrire (sauf si vous savez vraiment ce que vous allez faire).

Pour programmer le fichier CC2531ZNP-Prod.hex sur la clé CC2531:

./cc_write CC2531ZNP-Prod.hex

(dure environ 3 minutes).

Utiliser d’autres broches

toutes les commandes acceptent les arguments suivants:

la numérotation des broches utilisée est celle de wiringPi. Utilisez gpio readall pour avoir la disposition dans votre Raspberry (colonne wPi ).

Par exemple, si vous souhaitez utiliser les broches 3, 11 et 13:
Connectez les broches suivantes d’un port de débogage à un port GPIO:

  1. broche 1 ( GND ) -> broche 14 ( GND )
  2. broche 7 ( reset ) -> broche 3 ( wPi 8, BCM2 )
  3. broche 3 ( DC ) -> broche 11 ( wPi 0, BCM17 )
  4. broche 4 ( DD ) -> broche 13 ( wPi 2, BCM27 )

et maintenant vous pouvez lire l’ID, sauvegarder , effacer et écrire la mémoire flash avec les commandes suivantes:

./cc_chipid -r 8 -c 0 -d 2
./cc_read -r 8 -c 0 -d 2 save.hex
./cc_erase -r 8 -c 0 -d 2
./cc_write -r 8 -c 0 -d 2 CC2531ZNP-Prod.hex

et si ça ne marche pas?

  1. arrêtez tous les autres programmes.
  2. fixez la vitesse du processeur avant la programmation. Exemple:

    sudo echo performance >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
    
  3. utilisez l’option -m pour augmenter les délais utilisés. Exemple:

    ./cc_write -m 300 CC2531ZNP-Prod.hex
    
  4. recompilez le logiciel avec make.

  5. cherchez une solution dans les questions déjà posées sur github

  6. Posez votre propre question sur github.

  7. Vérifiez votre alimentation

    grep Under /var/log/kern.log
    

    Si vous obtenez de nombreuses lignes, alors vous devriez changer d’alimentation.

Je veux connecter plus de 15 périphériques

On lit sur différents sites que la clé CC2531 ne peut gérer que 15 périphériques maximum.
En fait le micrologiciel standard de cette clé a bien une limite de 15 connexions directes. Mais si l’une de ces connexions est un routeur zigbee (et la plupart des périphériques font office de routeur, c’est par exemple le cas des ampoules Philips Hue et des Ampoules Ikea TRÅDFRI), alors le CC2531 peut gérer les périphériques derrière ce routeur, et ceux derrière les routeurs connectés à ce routeur…
En réalité la limite pour le CC2531 est bien plus élevée. Et si un jour vous dépassez les 50 périphériques sur votre réseau zigbee, investir dans un coordinateur plus cher ne sera qu’une goutte dans votre budget.
Notons par ailleurs que le protocole zigbee limite le nombre de connexions directes à 32. Quel que soit votre coordinateur zigbee, il ne pourra pas se connecter à plus de 32 périphériques directement.

Ma clé a sa DEL rouge qui s’allume.

Il arrive que la clé se déprogramme, soit à cause d’un environnement chargé en parasites, soit à cause d’une mauvaise alimentation.

  1. Vérifiez votre alimentation

    grep Under /var/log/kern.log
    

    Si vous obtenez de nombreuses lignes, alors vous devriez changer d’alimentation.

  2. Éloignez la clé des matériels suceptibles de la perturber : haut-parleurs, routeurs wi-fi, …

  3. Reprogrammez la clé

Licence

Ce projet est sous licence GPL v3 ( voir COPYING ).