Récupération: reconditionner un clavier Samsung Galaxy Tab S6
Bonjour à tous,
J'ai eu l'occasion, de récupérer une ancienne tablette Galaxy Tab 6 (2019) et son clavier Bluetooth. Un système Android malheureusement plus tenu à jour en 2025 donc à l'utilisation déconseillée.
![]() |
| Clavier Galaxy Tab S6 (Bluetooth) |
Contre toute attente, il m'a été impossible d'appairer ce clavier avec un autre système. Ceci dit, cela n'est pas très étonnant d'être confronté à un système fermé.
A contre-courant de l'obsolescence
Si je n'ai pas encore trouvé comment reconvertir la tablette (n'hésitez pas à commenter), je me suis lancé dans la reconversion du clavier pour une future application MicroPython.
Cela commence forcement par l'ouverture du clavier qui n'est pas bien difficile (il y a 4 vis sous chacun des anti-dérapant.
![]() |
| Clavier Galaxy Tab S6 |
On y retrouve un clavier à membranes connecté sur un connecteur 26 broches, un accu Lipo de faible puissance, un touchpad I2C et un microcontroleur bluetooth (non visible de ce côté de la carte).
![]() |
| Clavier Galaxy Tab S6 |
Loin moi l'idée de reprogrammer le microcontrôleur Bt de la carte (ses protections matérielles sont certainement active), je me suis dit qu'il serait plus facile de réutiliser directement la membrane avec un Pico.
C'est que l'on imagine cette membrane comme un clavier de KeyPad dont le fonctionnement est sommaire.
Avec un peu d'analyse, j'ai rapidement repéré des résistances pull-down de 35 KΩ sur chacune des lignes (excepté les 5 premières). D'autres lignes marquée sont elles équipées d'un composant spécifique (voir les points blancs sur l'image ci-dessous).
Je pensais avoir repéré les colonnes, les autres signaux étant alors les lignes.
Malheureusement, les choses ne furent pas si simples!
Un peu de hacking
Je commence donc par souder des fils vernis 0.2mm sur le connecteur en vue de réaliser des tests. Les fils sont maintenus bien en place à l'aide de colle chaude (pour éviter de casser les fragiles soudures des fils).
![]() |
| Quelques fils soudés sur le connecteur (pin 1 à droite). |
J'ai procédé de même avec les 26 contacts ensuite reporté sur une plaque de prototypage (bien dans l'ordre).
![]() |
| report des connexions sur une plaque de prototypage offrant un accès via connecteur 2.54mm |
Connexion au Pico
J'ai utilisé 2x MCP23017 (GPIO expander 16 bits) pouvant être contrôlé via bus I2C, donc avec seulement deux lignes connectés sur le Pico.
![]() |
| Matrice clavier branché sur des MCP23017 |
![]() |
| Brochage du MCP23017 |
L'intérêt des MCP23017 est d'avoir les broches 1 à 26 du connecteur clavier branchés scrupuleusement dans l'ordre croissant des GPIOs des MCP23017. Pas de mathématiques complexes, il y a une relation 1-à-1 entre les MCP et la matrice clavier.
![]() |
| Correspondance broche clavier (1..26) vers MCP (0..15) + MCP (0..9) |
Enfin, j'ai aussi remarqué que l'usage de résistance pull-down sur les 5 premières lignes améliorait la stabilité de la détection. Ces pull-down manquantes sur le connecteur clavier était probablement activée sur le microcontroleur bluetooth.
Décoder la matrice clavier
Après un premier échec sur l'identification des colonnes et des lignes de la matrice, un second script a été écrit pour tester une à une chaque ligne comme une colonne considérant alors les 25 autres lignes pour détecter une touche.
Le script tester2.py publié sur le dépôt agit comme suit:
- Presser une touche du clavier
- Au démarrage, toutes les broches sont configurées en entrée.
Elles présentent toutes une haute impédance. - Ensuite le script sélectionne une ligne -- dite driver pin--, la configure en sortie et la place au niveau haut. Cette broche présente donc une faible impédance et est capable de fournir du courant.
- Ensuite, les 25 autres broches --read pin-- sont interrogés une par une pour y détecter un niveau haut.
Note: la touche pressée doit permettre au courant de circuler vers une des broches en lecture. - S'il N'Y A PAS de détection de niveau haut ALORS
* le script repasse la driver pin au niveau bas
* PUIS reconfigure celle-ci en entrée.
* ENFIN, le script passe la driver pin sur la broche suivante
* et recommence le cycle de détection au point 3. - S'il Y A détection d'un niveau haut ALORS le script a détecté un couple (driver_pin, read_pin) permettant de détecter la touche enfoncée.
Après avoir testé toutes les touches et répertorié les combinaisons dans une feuille calcul. Nous avons enfin un description de la matrice du clavier.
![]() |
| feuille calcul des détection de touches |
La feuille de calcul reprend les couples drive_pin,read_pin dans la 2ieme colonne.
Puisque le contact électrique se fait dans les deux sens entre drive_pin--et--read_pin alors il est possible d'écrire la relation de détection de F12 comme 7,13 ou 13,7 (d'ailleurs, les deux options sont indiquées par tester2.py ).
Par souci de simplicité, la relation est écrite avec le plus petit numéro de broche d'abord (donc 7,13 pour la touche F12).
Compilation des broches
Maintenant que nous disposons d'une description de la matrice, il serait opportun d'identifier les driver_pin et les read_pin utilisés dans la matrice.... cela revient à identifier les lignes et les colonnes du keypad présenté plus haut dans l'article.
C''est justement l'objectif du script tester2-driver-pin-detect.py disponible dans le dépôt.
Ce dernier permet d'identifier:
- driver pin = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
- read pin = [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26]
Remarque:
Il y a un recouvrement des broches driver_pin et read_pin. Suivant les circonstances, une broche de la matrice clavier agit tantôt comme broche driver_pin tantôt comme broche de read_pin (de lecture).
Lecture optimisée
Sur base des informations obtenue, le script tester3.py disponible dans le dépôt effectue une détection optimisée des touches du clavier.
La détection s'étend aux combinaisons de touches avec Shift,Ctrl,Alt.
Il reste encore un peu de travail mais le plus gros est fait :-)












Le 





.jpg)
.jpg)

