Pico SE4 2023/2024
Objectif
Pour l'année académique 2023/2024 nous vous demandons de construire un pico-ordinateur comprenant les éléments suivants :
- un processeur de type microcontrôleur ;
- un clavier ;
- un dispositif d'affichage ;
- un système d'exploitation stocké dans la mémoire flash du microcontrôleur ;
- une mémoire de masse allant au delà de la mémoire flash sus-citée ;
- un dispositif de communication avec l'extérieur.
Pour faire en sorte que tous les éléments puissent communiquer entre eux nous vous demandons d'utiliser le bus SPI.
La structure de la plateforme de projet :
* Processeur du pico : 1) ATMega328p (utilisation possible d'Arduino nano ou mini) 2) ATMega{16,32}u{2,4} pour avoir directement une connexion USB 3) ATXMega (kit de dév disponibles) pour avoir plusieurs UART, faire du DMA, non testé 4) ARM cortex-M0 (ce serait probablement le mieux mais ça me paraît joueur)
* Clavier : 1) Port série 2) Clavier maison avec matrice de touches 3) Clavier USB avec un AT90USB647 LUFA/Host
* Ecran : 1) Port série 2) Ecran LCD *) FPGA VGA (à faire dans tous les cas)
* BIOS en mémoire Flash du processeur
* Mémoire de masse 1) EEPROM du SoC 2) Flash SPI 3) Clef USB avec un AT90USB647 LUFA/Host 4) FPGA mémoire M.2 :D
* Communication extérieure 1) Port série 2) Connexion USB "vendeur spécifique" 3) Puce Ethernet 10Mb/s ENC28J60 4) Connexion USB LUFA/RNDIS 5) Ethernet natif sur des ARM
Des architectures possibles :
* Compacte : - un ATMega*u*, - son port série (TX) pour la communication vers FPGA/VGA, - son port série (RX) pour le clavier (terminal série), - son port SPI pour la mémoire de masse, - son module USB pour la connexion "vendeur spécifique".
* Distribuée bus série partagé : - un ATMega328p, - un port série partagé (TX pour sélectionner un gestionnaire) : = 'V' pour vidéo, envoi vers le gestionnaire vidéo FPGA/VGA, = 'S' communication avec le gestionnaire série (un ATMega*u* LUFA/CDC), = 'C' communication avec le gestionnaire clavier (un AT90USB647 LUFA/Host/Clavier), = 'M' communication avec le gestionnaire mémoire de masse (un ATMega* avec une flash SPI), = 'R' communication avec le gestionnaire réseau (un ATMega*u* LUFA/RNDIS).
* Distribuée bus SPI : - un ATMega328p, - son port série pour le gestionnaire vidéo FPGA/VGA, - son bus SPI : = communication avec le gestionnaire série (un ATMega*u* LUFA/CDC), = communication avec le gestionnaire clavier (un AT90USB647 LUFA/Host/Clavier), = communication avec le gestionnaire mémoire de masse (un ATMega* avec une flash SPI), = communication avec le gestionnaire réseau (un ATMega*u* LUFA/RNDIS).
* Distribuée avec plusieurs UART : - un ATXMega, - port série (TX) vers le gestionnaire vidéo FPGA/VGA, - port série (RX) pour les entrées clavier série, - port série avec le gestionnaire clavier (un AT90USB647 LUFA/Host/Clavier), - port série avec le gestionnaire mémoire de masse (un ATMega* avec une flash SPI), - port série avec le gestionnaire réseau (un ATMega*u* LUFA/RNDIS).
Au niveau informatique, pour le processeur central, il y a du boulot : - écriture d'un interpréteur : = soit interpréteur nano-python, gestion de variables, boucles, tests, saisie et affichage ; = soit un DOS, liste d'exécutables, chargement d'exécutables, lancement et ordonnancement. - opérations basiques : = lecture clavier (série ou USB) ; = téléchargement d'exécutables ou de sources via le "réseau" ; = sauvegarde et chargement d'exécutables ou de sources via la mémoire de masse ; = affichage de chaînes de caractères ; = ordonnancement
Les pistes pour VHDL FPGA :
1) VGA mais déjà vu en TP donc peut être trop simple ? 2) interface SD non SPI (j'ai proposé interface paralèlle avec le uC mais j'ai pas compris si c'était intéressant ou pas) 3) des portions d'Ethernet (e.g. calcul de checksum, transceiver manchester, interface sériel avec le uC ?)
Les pistes pour les cartes classiques :
1) une carte CPU ATMega328p avec une flash SPI NAND 2) une carte fille SPI avec un ATMega328p et une matrice de touches (clavier) 3) une carte fille SPI avec un AT90USB647 pour connexion à un clavier USB ou une clef USB 4) une carte fille SPI avec un ATMega16u2 pour une connexion série USB 5) une carte fille SPI avec un ATMega16u2 pour une connexion réseau (EP bulk ou RNDIS) 6) une carte fille SPI avec un ATMega328p et un ENC28J60 pour une connexion Ethernet