Une puce ILI9341, comme la plus part des pces qui gèrent les écrans TFT contient principalement une mémoire d'écran. Comme il s'agit d'un driver spécifiquement fait pour un écran 240x320 en 18 bits de couleurs, la mémoire est orienté en 12800 mots de 18 bits. Un séquenceur vient lire la mémoire et gère l'interface de sortie (3*240+320 sorties). Le circuit est programmable et des registres permettent de paramétrer les signaux, ainsi que de lire/écrire dans la mémoire...
Tout se fait par l'accès aux registres. Par exemple pour accéder à une case de la mémoire, il faut programmer deux registres donnant les deux coordonnés du pixel, puis en écrivant dans le registre tampon de donnée, on donne la valeur de la couleur.
Mais pour accéder aux registres, il y a une étape supplémentaire d'accès. Le ILI9341 possède plusieurs modes d'accès, aussi bien série que parallèle. Je suppose que celui dont tu dispose est déjà soudé sur un afficheur (sinon il faut avoir une pointe bien fine pour souder le millier de sorties du circuit). Dans ce cas les broches IM0:IM3 sont soudées hard et informent le ILI9341 du type de dialogue souhaité (série ou parallèle et lequel). En présence d'un écran possédant in ILI9341, on ne peut dialoguer que d'une seule façon. Ce qui veut dire que si j'écris pour un écran à ILI9341, un autre écran avec le même driver peur ne pas être compatible du tout, le dialogue étant différent.
Cela veut dire que pour accéder à un registre, il faut commencer par gérer des procédures simples "écrire dans un registre" et éventuellement "lire un registre".
Dans un deuxième temps initialiser le circuit (perso je compte 10 registres à programmer)
Dans un troisième temps seulement donner l'adresse du pixel et sa couleur
Je suis maso.... mais surtout intéressé par écrire en français (donc avec des accents), ce que ne permet pas Adafruit.
Si on a accès à la lecture des registres (il me semble que certains écrans sont câblés sans la possibilité de lire les registres), il suffit de demander la signature du driver. Pour un ILI9341, il faut lire l'ID4 du circuit:
- Envoyer une commande 0xD3
- Lire les 3 valeurs retournées qui suit. La première valeur n'a pas d'information (valeur poubelle), les deux octets qui suivent sont 0x93 et 0x41. 9341 en clair
Pour un ILI9486, après écriture d'une commande 0xD3, on doit lire XX009386
Les driver pour TFT on en principe un Id lisible, mais qui ne se trouve pas aux même adresses. Par exemple un ST7781 c'est suite à une commande en 0x00 et pas en 0xD3.
Pour identifier un driver, il faut en gros lire pleins registres et voir si il n'y a pas une correspondance avec un connu. C'est ainsi que procède Adafruit, en début de programme, ils testent certains registres pour identifier la puce et agir ensuite en conséquence.
Une autre solution pour connaitre la puce est de faire tourner un programme écrit pour un driver. Ceux ci sont suffisamment différents pour qu'un programme spécifique pour un driver ne tourne pas avec un autre (écran blanc alors)
La dernière solution est d'utiliser un programme de test qui sait rechercher le driver.
[edit]
le ILI9341 ne permet de gérer que des écrans 240x320 et un ILI9386 ne gère que les 320x480. En fonction de la taille de l'écran, on peut éliminer certains drivers. Mais en 320x240, les drivers suivants peuvent être utilisés:
HX8312 HX8346 HX8347 HX8367 HX8368 ILI9320 ILI9325 ILI9328 ILI9331 ILI9335 ILI9340 ILI9341 ILI9342 OTM3225 R61505 R61580 RM68090 S6D0129 SPFD5408 SSD1269 SSD1279 SSD1289 SSD1298 SSD2119 SSD2119 ST7781 ST7787 ST7789
J'en oublie certainement!