This commit is contained in:
parent
5ea7af48e8
commit
7b617fddc7
@ -11,7 +11,7 @@ aliases:
|
||||
- waveshare
|
||||
---
|
||||
|
||||
En terme d'écran à encre électronique (e-ink), Waveshare est un rare constructeur permettant d'acheter des écrans de toute taille.
|
||||
En termes d'écrans à encre électronique (e-ink), Waveshare est un des rares constructeurs permettant d'acheter des écrans de toute taille.
|
||||
Annoncés compatibles ESP32, Arduino et Raspberry Pi, ils sont en fait compatibles avec n'importe quelle carte de développement exposant le protocole SPI.
|
||||
|
||||
Les Raspberry Pi était devenues difficiles à trouver ces derniers mois, nous allons voir dans cet article comment utiliser une autre carte sous Linux pour utiliser un écran Waveshare.
|
||||
@ -31,10 +31,10 @@ Pour communiquer, le protocole utilise 3 fils + 1 fil par périphérique :
|
||||
|
||||
Plusieurs périphériques peuvent partager le bus SPI, les 3 fils décrits ci-dessus.
|
||||
Pour savoir à qui sont destinées les informations, il y a donc un fil supplémentaire pour chaque périphérique.
|
||||
Avec 3 périphériques sur le bus SPI, on aura donc 6 fils : les 3 fils du bus, partagés, et 1 fil par périphérique, non-partagés.
|
||||
Avec 3 périphériques sur le bus SPI, on aura donc 6 fils : les 3 fils du bus, partagés, et 1 fil par périphérique, non-partagé.
|
||||
|
||||
Ce fil supplémentaire, nommé `CS` pour Chip Select (ou `SS`), est alimenté lorsque la machine souhaite parler au périphérique désigné.
|
||||
1 seul périphérique est actif à la fois pour éviter les collisions sur le bus (imaginer deux périphériques envoyer deux messages distinct en même temps ... sur le même fil).
|
||||
1 seul périphérique est actif à la fois pour éviter les collisions sur le bus (imaginer deux périphériques envoyer deux messages distincts en même temps ... sur le même fil).
|
||||
Un périphérique ne parle et n'écoute que lorsque son `CS` est à l'état bas (à 0).
|
||||
|
||||
Lorsqu'un périphérique envoie ou reçoit des données, il se synchronise sur la fréquence d'horloge transmise par la machine sur le fil `SCLK`.
|
||||
@ -52,16 +52,16 @@ En plus de l'alimentation électrique (+3.3 V et la masse) et des fils utilisés
|
||||
|
||||
- `DC` : à 0 lorsque l'on enverra des commandes sur le bus SPI. À 1 lorsque ce sera des données qui y seront envoyées.
|
||||
- `RST` : lorsque ce fil est à 0, cela provoque le redémarrage de l'écran, la réinitialisation de tous ses registres. On le replace à 1 pour commencer à l'utiliser.
|
||||
- `BUSY` : la puce controlant l'écran utilise ce fil pour indiquer si l'écran ou le contrôleur est occupé, en train de réaliser une action (lorsqu'il est à 0) ou s'il est prêt à recevoir des informations (il est alors à 1) .
|
||||
- `BUSY` : la puce contrôlant l'écran utilise ce fil pour indiquer si l'écran ou le contrôleur est occupé, en train de réaliser une action (lorsqu'il est à 0) ou s'il est prêt à recevoir des informations (il est alors à 1) .
|
||||
|
||||
Ces spécifications étant bien établie, rien ne nous limite aux seules Raspberry Pi !
|
||||
Ces spécifications étant bien établies, rien ne nous limite aux seules Raspberry Pi !
|
||||
|
||||
|
||||
## Reconnaître une carte compatible
|
||||
|
||||
Pour être utilisée avec l'écran, la carte doit exposer un bus SPI sur ses GPIO, et vous devez disposer de 3 emplacements génériques disponibles en plus du 3,3 V et de la masse.
|
||||
|
||||
Toutes les cartes, récentes et anciennes, exposant ces interfaces.
|
||||
Toutes les cartes, récentes et anciennes, exposent ces interfaces.
|
||||
|
||||
Voici par exemple [la correspondance des broches de la Pine64](https://files.pine64.org/doc/Pine%20A64%20Schematic/Pine%20A64%20Pin%20Assignment%20160119.pdf) :
|
||||
|
||||
@ -72,7 +72,7 @@ Et [ceux de la Cubieboard](http://docs.cubieboard.org/cubieboard1_and_cubieboard
|
||||
![Correspondance des broches U15 de la Cubieboard](cubieboard-u15-pinout.webp)
|
||||
|
||||
Certaines cartes exposent des GPIO identiques à ceux de la Raspberry Pi, vous pourrez donc placer le HAT fourni directement dessus.
|
||||
Lorsque l'organisation des broches est différente, il faudra câble manuellement.
|
||||
Lorsque l'organisation des broches est différente, il faudra câbler manuellement.
|
||||
|
||||
Pour ma part, j'ai utilisé une carte MIPS Creator CI 20 :
|
||||
|
||||
@ -90,8 +90,8 @@ Nous n'avons pas les mêmes utilitaires simplifiés, nous allons donc voir comme
|
||||
|
||||
### Activer le SPI
|
||||
|
||||
Habituellement, on charge un module noyau pour Communiquer avec un appareil relié en SPI.
|
||||
Ce module créera alors une couche d'abstraction etexposera l'abstraction dans le dossier `/dev`.
|
||||
Habituellement, on charge un module noyau pour communiquer avec un appareil relié en SPI.
|
||||
Ce module créera alors une couche d'abstraction et exposera l'abstraction dans le dossier `/dev`.
|
||||
|
||||
Ici, nous n'avons pas de module noyau dédié à l'écran, en fait le programme que l'on va lancer, la démo de Waveshare, communique directement en SPI.
|
||||
C'est comme si on avait écrit un programme pour lire et écrire sur une clef USB en envoyant les commandes USB brutes, plutôt que de faire en sorte que le noyau affiche le périphérique sous `/dev/sdb`.
|
||||
@ -101,7 +101,7 @@ Afin de piloter le bus SPI depuis un programme de l'espace utilisateur, on va de
|
||||
Si vous avez compilé vous-même votre noyau, assurez-vous d'avoir ce module :
|
||||
|
||||
```
|
||||
42sh$ zgrep SPI_DEV /proc/config. gz
|
||||
42sh$ zgrep SPI_DEV /proc/config.gz
|
||||
CONFIG_SPI_SPIDEV=y
|
||||
```
|
||||
|
||||
@ -234,7 +234,7 @@ spi_gpio {
|
||||
On applique l'overlay au démarrage, comme vu précédemment.
|
||||
|
||||
Dans les deux cas, il est aussi possible de faire les modifications directement dans le fichier DTS original et de remplacer le DTB utiliser pour démarrer la carte.
|
||||
Il faudra alors aille à refaire cela à chaque mise à jour du noyau.
|
||||
Il faudra alors veiller à refaire cela à chaque mise à jour du noyau.
|
||||
|
||||
|
||||
## Configuration des GPIO dédiés
|
||||
@ -260,7 +260,7 @@ echo out > /sys/class/gpio/gpio136/direction
|
||||
|
||||
## Adapter le code de la démo
|
||||
|
||||
La démo de Waveshare s'attend à être exécutée sur un Raspberry Pi et on retrouve donc un certain nombre d'éléments écrit en dur.
|
||||
La démo de Waveshare s'attend à être exécutée sur un Raspberry Pi et on retrouve donc un certain nombre d'éléments écrits en dur.
|
||||
De plus, elle fait usage d'une dépendance Python qui ne fonctionne pas en dehors de cette plateforme.
|
||||
|
||||
Voici [l'implémentation](https://git.nemunai.re/nemunaire/waveshareteam-e-Paper/commit/dfa74b004198794d01bdc461ea88d1cf9cdb80b5) que j'ai effectué afin d'adapter le code à mon usage :
|
||||
|
Loading…
Reference in New Issue
Block a user