IMA4 2018/2019 P5 : Différence entre versions
(→display.h) |
(→display.h) |
||
Ligne 585 : | Ligne 585 : | ||
|} | |} | ||
− | [[Fichier:LCD Numworks.png | + | [[Fichier:LCD Numworks.png]] |
====''' flash.h '''==== | ====''' flash.h '''==== |
Version du 16 décembre 2018 à 19:25
Sommaire
- 1 Présentation générale
- 2 Préparation du projet
- 3 Réalisation du Projet
- 3.1 Semaine 1 - 17/09 - 21/09
- 3.2 Semaine 2 - 24/09 - 28/09
- 3.3 Semaine 3 - 01/10 - 05/10
- 3.4 Semaine 4 - 08/10 - 12/10
- 3.5 Semaine 5 - 15/10 - 19/10
- 3.6 Semaine 6 - 22/10 - 26/10
- 3.7 Semaine 7 - 29/10 - 02/11
- 3.8 Semaine 8 - 05/11 - 21/11
- 3.9 Semaine 9 - 12/11 - 21/11
- 3.10 Semaine 10 - 19/11 - 21/11
- 3.11 Semaine 11 - 26/11 - 30/11
- 3.12 Liste des liens externes
- 4 Documents Rendus
Présentation générale
Description
Réalisation d'un prototype de NumWorks
Dans le cadre de ce projet, il s'agira dans une première partie de réaliser un prototype de calculatrice NumWorks à base de plateforme Nucleo.
L'idée proposée est de se baser sur une carte Nucleo qui présente des caractéristiques similaires à celle utilisée dans la NumWorks
- STM32F412ZG contre STM32F412VGT6 (NumWorks)
Il est également nécessaire de réaliser un PCB afin d'y installer les boutons ainsi que la LED RGB pour le mode examens. Ce PCB doit également fonctionner comme un shield intermédiaire pour le shield Nucleo où se trouve l'écran LCD.
Tout ceci sera à vérifier grâce aux datasheets/schematics des éléments concernés.
le PCB intermédiaire devra également pallier aux problèmes de connexions des pins dû aux différences entre le ZGT6 et le VGT6 de la NumWorks.
Une fois le prototype assemblé, il faudra y installer le système d'exploitation (Epsilon) et vérifier son bon fonctionnement en effectuant les modifications nécessaires.
Partie 2 : Mise à jour d'une NumWorks via une autre NumWorks
Dans cette partie, il s'agit d'essayer de développer une méthode par USB permettant à une NumWorks en version X de mettre à jour une autre NumWorks en version Y (Y < X).
Une méthode par UART étant déjà disponible, il est proposé, en dernier recours, de regarder s'il est possible d'ajouter un connecteur sur une NumWorks standard pour réaliser la programmation par une autre méthode de communication avec le STM32. (Dans le cas où la méthode par USB n'est pas possible à cause du bootloader)
La seconde partie ne peut pas être simplifiée en utilisant une méthode de transfert UART pour flasher une NumWorks. Pour flasher une NumWorks il faut qu'elle soit connectée à un hôte USB (mode DFU).
Remarques
On ne prendra pas en compte les parties telles que la gestion de l'énergie étant donné que nous utiliserons une alimentation puisqu'il s'agit d'un prototype.
Bilan séance Intermédiaire
Partie 2 abandonnée en raison d'une nécessité de compétences en programmation embarquée. (Intégration d'un mode USB hôte à l'OS de la NumWorks)
Objectifs
Partie 1 : Conception du prototype
- conception et réalisation du bouclier clavier / LED ;
- éventuellement réalisation d'un bouclier de reroutage pour connecter correctement l'écran sur la Nucleo (respecter les connexions décrites dans le fichier ion/src/device/display.h d'Epsilon ;
- compiler et charger Epsilon ;
- tester et revoir le prototype jusqu'à qu'Epsilon fonctionne correctement sur le prototype réalisé à partir du bouclier écran.
- possibilité de passer par une phase de test en utilisant un écran d'une des NumWorks fournies (utilisation non destructive imposée)
Partie 2 : Mise à jour d'une NumWorks via une autre NumWorks via USB
Préparation du projet
Cahier des charges
Écran LCD TFT 2.4 avec shield
- Sélectionner un shield LCD utilisable sur la NUCLEO-F412ZG respectant les caractéristiques imposées
- Tester le bon fonctionnement de l'écran avec une carte Selectronic UNO (Arduino UNO)
- Comparer le contrôleur de l'écran avec celui utilisé par la NumWorks (Schematics) pour déterminer la nécessité d'une carte de reroutage.
NUCLEO-F412ZG
-
Utiliser Arduino IDE pour vérifier le fonctionnement de l'écran avec la NUCLEO - Implémenter Epsilon et effectuer les modifications nécessaires pour le fonctionnement de base
- Tester l'implémentation d'Epsilon en utilisant l'écran d'une des NumWorks via le PCB qui devra être réalisé
- Tester avec un des écrans employés sur un autre projet qui concerne le clonage d'une NumWorks
PCB (clavier et LED RGB) entre la carte NUCLEO et le shield LCD
- Création d'un PCB sous fritzing pour y placer le clavier (les commutateurs tactiles) et la LED RGB servant au mode examen
- Implémenter la Carte NUCLEO-F412ZG sous fritzing car manquante dans les composants de base (seule une version antérieure est proposée) pour réaliser le PCB
Choix techniques : matériel et logiciel
Matériels
- 1x NUCLEO-F412ZG Farnell ref: NUCLEO-F412ZG
- 47x Boutons (clavier+reset) RS ref: 2-1437565-7
- 1x Résistance (reset) CMS 0603 10 kΩ RS ref: ERA3APB103V
- 1x LED RGB Mouser ref: LTST-S310F2KT
- 3x Résistance (SOT-23) CMS 0603 1 MΩ RS ref: CPF0603B1M0E
- 1x Résistance R-led CMS 0603 100 Ω RS ref: CPF0603B100RE
- 2x Résistance G-led/B-led CMS 0603 56 Ω RS ref: ERA3AEB560V
- 3x AO3424 SOT-23 RS ref: 942-IRLML6346TRPBF
Logiciels
- OS (Epsilon) : SDK
- Réalisation du PCB : Fritzing
- Réalisation des composants manquants pour Fritzing : InkScape
Liste des tâches à effectuer
Partie 1 : Conception du prototype
- Examiner les caractéristiques d'une NumWorks standard et établir un cahier des charges avec les encadrants du projet.
- Déterminer la liste des éléments qui correspondent au cahier des charges.
- Réaliser le PCB (Fritzing) (shield pour Shield Nucleo) permettant l'ajout des boutons et de la LED RGB.
- Procéder à l'assemblage et aux tests d'implémentation de l'OS.
- Effectuer les corrections au niveau d'Epsilon si nécessaire.
Partie 2 : Mise à jour d'une NumWorks via une autre NumWorks
- Déterminer s'il est possible ou non de réaliser cette fonctionnalité via USB.
- Développer, implémenter puis tester la fonctionnalité, au moyen des deux NumWorks fournies si nécessaire.
- Dans le cas où il est impossible de réaliser en USB, chercher une méthode alternative pour communiquer avec le STM32
Calendrier prévisionnel
- Soutenance intermédiare : Vendredi 26 Octobre 16H-18H
- Soutenance : Jeudi 20 Décembre
Réalisation du Projet
Semaine 1 - 17/09 - 21/09
Analyse et appropriation du Projet
Le projet étant de réaliser le prototype de la calculatrice NumWorks qui est un projet Open-Source, j'ai commencé par me documenter sur leur site afin de déterminer quels choix ont été effectué pour la conception de cette dernière.
J'ai pu trouver sur numworks.com les deux parties distinctes de mon projet. La première correspond à la partie Hardware Engineering et la seconde au Software Engineering
La partie Hardware comporte deux sections,
- Mechanical Engineering qui concerne les pièces plastiques de la calculatrices mais qui ne nous concerne pas dans le cadre d'un prototype.
- La deuxième section, Electrical Engineering est correspond à ce que nous voulons étudier afin de pouvoir réaliser un prototype.
Dans cette section nous pouvons y trouver les éléments/composants ainsi que leur Schematics et Datasheets et le PCB de la NumWorks.
- Nous pouvons voir qu'ils utilisent un STM32 F412 VGT6 comme MCU, dans notre cas, il est proposé d'utiliser également un STM32, le F412ZGT6 dont les caractéristiques sont similaires, par son appartenance à la série G des STM32F412.
Ils comportent tout deux un ARMv7-M Cortex-M4 fréquencé à 100MHz, 1Mo de mémoire flash et 256Ko de RAM.
- Le pilote d'affichage du contrôleur LCD : ST7789V
Conformément au pilote, il sera nécessaire de rechercher un écran qui respecte les caractéristiques suivantes :
- Affichage en 320*240
- bus 16-Bit
- Pilote ST7789V (ou similaire pouvant répondre aux caractéristiques)
- LED RVB : LTST-S310F2KT
Semaine 2 - 24/09 - 28/09
Analyse des schematics et d'Epsilon sur Numworks.com
à l'adresse suivante, on peut consulter les schematics réalisés lors de la conception de la Numworks
On remarque en premier un schéma avec le MCU et les pins utilisés puis dans chaque section nous pouvons ensuite étudier chaque élément de la calculatrice.
Matrice Clavier
Dans un premier temps, nous allons nous intéresser à la matrice clavier.
C'est précisé, mais on peut remarquer l'absence de diode d'anti-ghosting.
Les signaux étant "Actifs à zéro" il est tout à fait possible de réaliser cette matrice clavier avec des boutons
LED RGB
Pour ce qui est de la LED, il s'agit d'un modèle qui comporte 4 entrées, une pour chaque couleur et une pour l'alimentation.
Chaque couleur est gérée via un transistor lui même géré par le pin associé.
Bouton Reset
Rien de plus simple qu'un bouton poussoir, on pourra utiliser le même type de bouton que ceux de la matrice clavier en cas de surplus.
Semaine 3 - 01/10 - 05/10
Recherche de matériel
MCU
Nous allons utiliser une carte NUCLEO-F412ZG pour mettre en oeuvre le prototype.
Il faudra cependant réaliser un PCB pour une matrice clavier similaire à celle utilisée par la Numworks ainsi que la LED RGB.
Le clavier
Nous voulons réaliser une matrice clavier, pour cela nous allons utiliser des boutons poussoirs à 4 pins RS: 479-1491
Ces derniers, grâce à leurs dimensions, présentent l'avantage de permettre à une route de passer sous le composant, entre les pattes, et ainsi éviter de court-circuiter l'ensemble.
NB: sur le schéma 1 et 2 / 3 et 4 sont toujours connectés, lorsque le bouton est enclenché, 2-4 et 1-3 sont connectés.
La Led et les transistors
En ce qui concerne les transistors, nous avons besoin d'un modèle qui correspond à celui utilisé par la Numworks:
- Datasheet AO3424
- Boitier : SOT23
Initialement j'avais proposé le IRLML6346TRPBF d'Infineon dans la fiche de commande mais ça a ensuite été regroupé avec RS: 287-667 utilisé par un autre projet.
Au niveau de la LED, le modèle utilisé par la Numworks était directement disponible.
L'écran LCD
La Numworks utilise un écran LCD fait sur mesure en 16 bits parallèle.
Dans le cadre de ce projet, il serait possible d'utilise un écran d'une des deux Numworks à disposition mais cela nécessite l'ajout d'un connecteur 31 pins sur le PCB
Nous savons que le driver utilisé par leur LCD est le ST7789V.
Un shield a été proposé en raison de son appartenance à la même famille de contrôleur (ST77XX).
Il s'agit d'un shield pour Arduino (la NUCLEO-F412ZG possède des pins compatible avec arduino)
N'étant plus disponible, une petite recherche à cependant permit de trouver un écran aux caractéristiques similaires dont le contrôleur est indiqué comme étant le ST7781R (LCD TFT Keyes)
Semaine 4 - 08/10 - 12/10
Vérifications sur le Shield LCD TFT
L'écran est arrivé en milieu de semaine, j'ai pu commencer à vérifier son fonctionnement.
Test avec Selectronic UNO (Arduino)
Afin de vérifier le contrôleur d'affichage du shield ainsi que son bon fonctionnement, j'ai utilisé une carte Selectronic UNO (via Arduino IDE).
J'ai utilisé un des scripts fournis dans la bibliothèque d'Adafruit-TFTLCD pour utiliser l'écran.
Après avoir modifié quelques lignes de code, j'ai réussi a faire fonctionner l'écran.
J'ai également pu, conformément aux datasheets des pilotes de contrôleurs afficher celui utilisé par ce dernier dans le moniteur série, il se trouve dans le registre 0x0
Cependant, le contrôleur de l'écran n'est finalement pas le ST7781R (0x7783) comme annoncé dans la fiche produit lorsque l'écran a été commandé mais le ILI9325 (0x9325).
Le fonctionnement et les caractéristiques qui diffèrent du ST7781R sont encore à déterminer.
Documentation sur les Drivers ST7789V, ST7781R et ILI9325
Type et taille de bus :
Timing :
- ST7789V :
- ST7781R :
- ILI9325 :
Fonctionnement :
- ST7789V :
- ST7781R :
- ILI9325 :
Test avec la NUCLEO
Je vais également avoir à tester l'écran sur la NUCLEO avant de tenter d'implémenter Epsilon et directement effectuer les modifications nécessaires.
Il y a également moyen d'utiliser Arduino IDE sur la NUCLEO : Quick Start to STM Nucleo on Arduino IDE
Semaine 5 - 15/10 - 19/10
Réception des commandes Farnell et Mouser, vérification et test du matériel
Les commandes sont arrivées au cours de la semaine,
- Farnell : Mardi 16 Octobre
- Mouser : Vendredi 19 Octobre
NUCLEO-F412ZG
La carte NUCLEO-F412ZG sur laquelle nous souhaitons réaliser le prototype présente un STM32 F412 ZGT6.
Ce dernier, par rapport au STM32 F412 VGT6 de la NumWorks, dispose d'une plus grande quantité d'entrées/sorties (81 contre 114)
Par conséquent, il est nécessaire de déterminer s'il y aura lieu de réaliser une carte de reroutage dans le cas où l'écran que nous utilisons est branché à des pins différents via les broches.
Dans cette fiche (Page 35/82 de la datasheet de la carte NUCLEO-F412ZG), nous pouvons voir que nos deux STM32 ont des packages différents
(le VG en avant dernier et le ZG en dernier)
LQFP100 (NumWorks - STM32F412VGT6)
LQFP144 (NUCLEO-F412ZG - STM32F412ZGT6)
Les pins et correspondances
keyboard.h
Les pins présentés au niveau des broches sont indiqué sur la figure 13 de la datasheet (Page 35/82)
On peut par exemple remarquer l'absence de certains pins nécessaires qui sont mentionnés dans les fichier .h d'Epsilon (ion/src/device
) (dépot git d'Epsilon).
Par exemple, pour la réalisation de la matrice clavier, il est indiqué que les GPIO C et GPIO E sont utilisés de PC0 à PC5 ainsi que PE0 à PE8 (keyboard.h)
Cependant, sur la figure 13,
PE0
est sur CN10 (D34)PE1
est absentPE2
est sur CN9 (D56)PE3
est sur CN9 (D60)PE4
est sur CN9 (D57)PE5
est sur CN9 (D58)PE7
est sur CN10 (D41)PE8
est sur CN10 (D42
Dans le cas du clavier, cela ne pose pas un grand soucis, il faudra utiliser un autre pin E disponible et effectuer la modification dans le fichier keyboard.h
Semaine 6 - 22/10 - 26/10
Soutenance Intermédiaire
Au vue de l'absence de résultats matériels à cette date (Vendredi 26/10), les objectifs du projet ont été revu à la baisse.
- Suppression de la partie USB du projet (nécessité de compétence en programmation embarquée)
- conception et réalisation du bouclier clavier / LED
- éventuellement réalisation d'un bouclier de reroutage pour connecter correctement l'écran sur la Nucleo (respecter les connexions décrites dans le fichier ion/src/device/display.h d'Epsilon
- compiler et charger Epsilon
- tester et revoir le prototype jusqu'à qu'Epsilon fonctionne correctement sur le prototype réalisé à partir du bouclier écran
Semaine 7 - 29/10 - 02/11
Semaine 8 - 05/11 - 21/11
Étude sur la nécessité d'un reroutage au niveau des pins
En prenant en compte les nouveaux objectifs, j'ai commencé à étudier la liste des pins dans les fichiers .h d'epsilon en comparant avec les pins disponibles sur la carte NUCLEO
L'étude des pins a été réalisé en fonction de la datasheet de la carte NUCLEO-F412ZG (Partie des pins : stm32F412_pin-description.pdf)
backlight.h
PIN | Rôle | Mode | Fonction | Localisation sur la NUCLEO |
---|---|---|---|---|
PC6 | Backlight Enable | Output | CN7 (1) |
base64.h
à priori aucun changement à effectuer
battery.h
PIN | Rôle | Mode | Fonction | Localisation sur la NUCLEO |
---|---|---|---|---|
PA0 | BAT_CHRG | Input, pulled up | Low = charging, high = full | CN10 (29) |
PA1 | VBAT_SNS | Analog | ADC1_1 | ABSENT |
- PA1 étant absent, et la fonction ADC1_1 n'est disponible sur aucun autre pin pouvant servir de substitut
console.h
PIN | Rôle | Mode | Fonction | Localisation sur la NUCLEO |
---|---|---|---|---|
PC11 | UART3 RX | Alternate Function | USART3_RX | CN8 (10) |
PD8 | UART3 TX | Alternate Function | USART3_TX | ABSENT |
- Dans le cas de la fonction USART3_TX le pin PD8 peut être remplacé par PB10 (Présent sur CN10 (32)) ou PC10 (Présent sur CN8 (6)) qui disposent de ces fonctions alternatives
device.h
Aucune modification prévue
display.h
PIN | Rôle | Mode | Fonction | Localisation sur la NUCLEO |
---|---|---|---|---|
PA2 | LCD D4 | Alternate Function 12 | FSMC_D4 | CN10 (11) |
PA3 | LCD D5 | Alternate Function 12 | FSMC_D5 | CN9 (1) |
PA4 | LCD D6 | Alternate Function 12 | FSMC_D6 | CN7 (17) |
PB12 | LCD D13 | Alternate Function 12 | FSMC_D13 | CN7 (7) |
PB14 | LCD Power | Output | ABSENT | |
PD0 | LCD D2 | Alternate Function 12 | FSMC_D2 | CN9 (25) |
PD1 | LCD D3 | Alternate Function 12 | FSMC_D3 | CN9 (27) |
PD4 | LCD Read Signal | Alternate Function 12 | FSMC_NOE | CN9 (8) |
PD5 | LCD Write Signal | Alternate Function 12 | FSMC_NWE | CN9 (6) |
PD7 | LCD Chip Select | Alternate Function 12 | FSMC_NE1 | CN7 (17) |
PD9 | LCD D14 | Alternate Function 12 | FSMC_D14 | ABSENT NON REMPLACABLE |
PD10 | LCD D15 | Alternate Function 12 | FSMC_D15 | ABSENT NON REMPLACABLE |
PD11 | LCD data/command | Alternate Function 12 | FSMC_A16 | CN10 (23) |
PD14 | LCD D0 | Alternate Function 12 | FSMC_D0 | CN7 (16) |
PD15 | LCD D1 | Alternate Function 12 | FSMC_D1 | CN7 (16) |
PE9 | LCD Reset | Output | CN10 (4) | |
PE10 | LCD D7 | Alternate Function 12 | FSMC_D7 | CN10 (24) |
PE11 | LCD D8 | Alternate Function 12 | FSMC_D8 | CN10 (6) |
PE12 | LCD D9 | Alternate Function 12 | FSMC_D9 | CN10 (26) |
PE13 | LCD D10 | Alternate Function 12 | FSMC_D10 | CN10 (10) |
PE14 | LCD D11 | Alternate Function 12 | FSMC_D11 | CN10 (28) |
PE15 | LCD D12 | Alternate Function 12 | FSMC_D12 | CN10 (30)
|
flash.h
led.h
sd_card.h
swd.h
timing.h
usb.h
wakeup.h
Semaine 9 - 12/11 - 21/11
Étude de la datasheet du STM32F412ZGT6
En raison de l'indisponibilité sous Fritzing de la carte STM32F412 utilisée dans le cadre du projet, j'ai du réaliser moi même les différentes vues du composant (Breadboard, Schematic et PCB) sous InkScape puis les implémenter avec l'utilitaire de création de composant.
Afin d'éviter un éventuel problème de dimensionnement, et en sachant que les pins présents sur la carte physique qui sont à réaliser sous Fritzing sont agencés de manière similaire à ceux d'une arduino UNO (voir schéma des pins rose/bleu de la STM32F412ZG plus haut) j'ai extrait les vues d'une arduino pour simplement y ajouter les pins nécessaires.
Semaine 10 - 19/11 - 21/11
Implémentation de la carte NUCLEO-F412ZG sous Fritzing via InkScape
Semaine 11 - 26/11 - 30/11
Correctifs apportés successivement aux vues Schematics et PCB
Liste des liens externes
- ST7781
- ST7781R
- ILI9325
- datasheet de la carte NUCLEO-F412ZG
- Concevoir un clavier
- Keyboard Matrix Help
- display.h @numworks/epsilon