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 :
- en général un coordinateur zigbee : version 1.2 (recommandée) ou version 3.0
- ou alors un routeur zigbee : routeur zigbee 1.2
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:
- sur pi 4, vous aurez besoin de la version 2.52 de wiringpi : installer wiringPi 2.52 depuis le site Web de Gordon
- sur pi 1 et pi 2, vous devrez utiliser d’autres broches.
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 : 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:
- vérifiez d’abord votre câblage.
- puis essayez un temps de base plus élevé, par exemple avec
./cc_chipid -m 100
, ou./cc_chipid -m 160
ou./cc_chipid -m 300
. - si rien de tout cela ne fonctionne, essayez de recompiler avec
make
.
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:
- -c broche : change la broche DC (par défaut 27)
- -d broche : change la broche DD (par défaut 28)
- -r broche : change la broche reset (par défaut 24)
- -m : change le multiplicateur du délai, et donc le temps de base (par défaut : ajustement automatique)
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:
- broche 1 ( GND ) -> broche 14 ( GND )
- broche 7 ( reset ) -> broche 3 ( wPi 8, BCM2 )
- broche 3 ( DC ) -> broche 11 ( wPi 0, BCM17 )
- 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?
- arrêtez tous les autres programmes.
-
fixez la vitesse du processeur avant la programmation. Exemple:
sudo echo performance >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
-
utilisez l’option -m pour augmenter les délais utilisés. Exemple:
./cc_write -m 300 CC2531ZNP-Prod.hex
-
recompilez le logiciel avec
make
. -
cherchez une solution dans les questions déjà posées sur github
-
Posez votre propre question sur github.
-
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.
-
Vérifiez votre alimentation
grep Under /var/log/kern.log
Si vous obtenez de nombreuses lignes, alors vous devriez changer d’alimentation.
-
Éloignez la clé des matériels suceptibles de la perturber : haut-parleurs, routeurs wi-fi, …
-
Reprogrammez la clé
Licence
Ce projet est sous licence GPL v3 ( voir COPYING ).