Présentation de la panne
Parenthèse vocabulaire : j’utilise le terme « brick » pour désigner le problème parce qu’il est relativement bien approprié. Dans ce cas là, la clé SDR est comme morte, elle est inutilisable et ne répond plus. Il s’agit dans ce cas précis d’un brick de bas niveau.
Plus de détails : brick informatique.
Symptômes de la panne :
- Sur Linux : la clé SDR n’est plus reconnue par aucun des outils comme rtl_test et retourne l’erreur suivante : « No supported devices found ».
- Sur Windows : Malgré une réinstallation des drivers avec Zadig, la clé est absente des listes de périphériques compatibles dans les logiciels comme SDR#
Dans tous les cas la clé SDR fonctionnait avant l’incident. Cette panne est liée à une erreur lors de l’écriture de l’EEPROM avec rtl_eeprom par exemple.
Cependant dans mon cas, le contenu de la mémoire a été à moitié corrompu sans même que je n’ai fais quelque action bizarre … Vouloir réécrire l’EEPROM sans le bon outil a complètement brické ma clé SDR : cf l’article à venir sur les démarches concernant la réparation de cette panne, cet article n’est que la version tuto / synthèse de ces travaux.
Nous allons désormais voir comment réparer cette panne. Ici, nous allons distinguer 2 méthodes : la méthode simple pour la remettre en fonction mais qui éliminera la possibilité de stocker la configuration dans l’EEPROM, la seconde méthode restaure une configuration par défaut grâce à un programmateur externe.
Première méthode : la simplicité
La première méthode est assez radicale et se base sur le fait que la clé SDR n’a pas besoin de l’EEPROM pour fonctionner. Elle intègre dans son programme une configuration par défaut qu’elle utilise en cas de défaut de l’EEPROM.
Matériel nécessaire :
- La clé SDR brickée
- Un fer à braser avec ses accessoires (étain, flux…)
- Petit outillage : pincettes, cutter, support de fixation …
Compétence nécessaire :
- Brasure de composants CMS
Marche à suivre :
L’opération est simple, elle consiste à retirer l’EEPROM du circuit de la clé SDR.

L’EEPROM utilisée par les clé SDR de ce type est une mémoire I2C de référence 24C02 de 2Kbits.
Je vous laisse procéder comme bon vous semble pour retirer ce composant. Cela va de soit qu’il faut faire ça proprement, ne rien casser ou détériorer autour. Une fois le composant retiré, vous pourrez passer un petit coup de tresse à dessouder puis d’alcool pour rendre la clé comme neuve.
Quand je dis neuve, c’est comme si ! Vous pouvez maintenant la reconnecter à votre ordinateur et devriez obtenir le résultat suivant :

La clé SDR fonctionne de manière nominale, excepté les fonctionnalités de l’EEPROM. Cela a pour conséquence cet étrange numéro de série. On peut évidemment tester avec GQRX par exemple :

Il vous faudra peut-être sous Windows remettre à jour les drivers avec Zadig (simple supposition, je n’ai pas essayé).
Et voilà, vous pouvez réutiliser votre clé SDR comme bon vous semble !
Seconde méthode : la plus complète
La seconde méthode aura pour objectif de restaurer l’EEPROM dans sa configuration par défaut, sortie d’usine. Pour cela il va falloir la reprogrammer manuellement.
Matériel nécessaire :
- La clé SDR corrompue
- Un fer à braser avec ses accessoires (étain, flux…)
- Petit outillage : pincettes, cutter, support de fixation …
- Un Arduino (qu’importe le modèle)
- Du fil fin ou un système permettant de connecter le boitier SO-8 de l’EEPROM à une breadboard par exemple
- Un ordinateur avec l’IDE Arduino installé
- Les sources avec les dumps et programmes téléchargeable à l’adresse suivante : dépôt GitLab
Compétences nécessaires :
- Brasure de composants CMS
- Programmation de cartes Arduino
Marche à suivre :
Tout d’abord la démarche est très similaire à la première méthode, il va falloir extraire l’EEPROM du circuit afin de pouvoir la connecter à l’Arduino.
Une fois la mémoire extraite, connectez là à l’Arduino suivant le schéma suivant avec la technique de votre choix :

Attention l’EEPROM s’alimente en 3,3V (même si il semblerait qu’elle supporte tout aussi bien une alimentation en 5V). Les résistances ont pour but de limiter le courant … Ici un levelshifter 3,3-5V bidirectionnel est peu-être plus adapté … Les pins 1 à 3 sont utilisés pour l’adresse I2C de la mémoire, tous à la masse nous donnera pour adresse 0x50. Les pins 4 et 8 sont l’alimentation. Le 5 et 6ème pins sont le port I2C donc SCL et SDA respectivement. Enfin, le 7ème est une protection à l’écriture des données. Cette entrée peut rester volante ou à défaut être tirée à la masse.
Pour ma part j’étais dans la recherche et l’expérimentation donc un montage volant à partir de fil monobrin très fin (récupéré d’un vieux câble téléphonique aérien abandonné salement par des techniciens près de chez moi …) et ça fait très bien l’affaire !

Désormais nous pouvons charger le programme présent dans les sources dans l’IDE Arduino. Ce programme se divise en deux partie. La plus grosse concerne la lecture des données contenues dans l’EEPROM et son affichage dans le moniteur série sous le format équivalent à un « hexdump -Cv » afin de permettre la lecture facile. La seconde intègre la fonction d’écriture de données, une écriture sera toujours suivie d’une lecture afin de s’assurer que l’opération s’est bien déroulée.
Nous allons dans un premier temps laisser commenté la ligne suivante, en début de fichier, comme elle l’est par défaut :
//#define REWRITE
Nous compilons le programme et le téléversons sur l’Arduino. Nous ouvrons ensuite le moniteur série et observons le résultat obtenu.

Voici ci-dessus le résultat que j’obtiens. Il ne faut pas tenir compte de la première ligne qui avait au moment de la capture déjà fait l’objet de tests d’écriture. J’observe là que les 2 et 3èmes lignes n’ont absolument aucun rapport avec la configuration que j’avais entré, les données ont été altérées.
Si vous ne parvenez pas à lire les données de l’EEPROM, revérifiez votre câblage puis à l’aide d’un Scanner I2C vérifiez que la mémoire est bien reconnue. Vous devriez voir apparaître le résultat suivant :

Une fois ces constatations faites, nous allons pouvoir réécrire l’EEPROM avec un dump propre et vierge. Pour cela nous décommentons la ligne vue précédemment, téléversons notre programme et ouvrons le port série. Nous devrions obtenir le résultat suivant :

Si vous possédez une clé RTL-SDR.COM V3, décommentez la ligne suivante pour flasher la dump la plus adapté à votre matériel.
// #define isRTLSDRV3Si vous rencontrez des difficultés lors de l’écriture, mettez le pin 7 à la masse et retestez.
Voilà, notre EEPROM est comme neuve, il va désormais falloir la braser de nouveau sur notre clé SDR et tester le tout. L’exécution des commandes « rtl_eeprom » et « rtl_test » va nous permettre de vérifier que l’ensemble refonctionne correctement.
Dans mon cas tout est correct, l’EEPROM est correctement reconnue et les paramètres ne sont pas corrompus. Je me suis donc permis de rajouter ma touche perso à ma clé comme on le voit sur la capture ci-après.

Voilà, votre clé est tout neuve et à l’avenir vous ferez sûrement plus attention lors que la réécriture de ce type de mémoire qui peut bricker l’appareil assez facilement en cas de problème …
Je remercie James et Gilles de m’avoir fait parvenir le dump pour la clé RTL-SDR.COM V3 me permettant de l’ajouter à cet article.
Ressources complémentaires :
- Datasheet 24C02
- Scanner I2C
- Lecture/écriture EEPROM I2C Arduino
- Sources lib rtl-sdr
- Sources et fichiers binaires liés à cet article
- Thread racontant les recherches qui ont permis d’aboutir à cet article : sur Twitter.