« Pico SE4 2023/2024 » : différence entre les versions
Ligne 77 : | Ligne 77 : | ||
* l'accès au système de fichiers se fait par des primitives système ; | * l'accès au système de fichiers se fait par des primitives système ; | ||
* le micro-système de fichiers ne comporte qu'un répertoire : le répertoire principal, le répertoire principal peut comporter au maximum 64 fichiers, un fichier est caractérisé par un nom de 16 caractères au maximum, sa taille et ses blocs de données, un fichier est décrit par un maximum de 16 blocs de données ; | * le micro-système de fichiers ne comporte qu'un répertoire : le répertoire principal, le répertoire principal peut comporter au maximum 64 fichiers, un fichier est caractérisé par un nom de 16 caractères au maximum, sa taille et ses blocs de données, un fichier est décrit par un maximum de 16 blocs de données ; | ||
* les différentes primitives sont : | * le superbloc du système de fichiers comprend, en plus de la description du répertoire racine, une carte bit à bit des blocs de données libres, cette carte nécessite 16 blocs ; | ||
** <code>append</code> pour créer un fichier si non existant et ajouter des données en fin de fichier, les paramètres sont le nom du fichier, les données à ajouter et la taille des données | * les différentes primitives à implanter sont : | ||
** <code>append</code> pour créer un fichier si non existant et ajouter des données en fin de fichier, les paramètres sont le nom du fichier, les données à ajouter et la taille des données, | |||
** <code>read</code> pour lire des données dans un fichier, les paramètres sont le nom du fichier, le tableau dans lequel stocker les données, la taille du tableau et le déplacement par rapport au début du fichier, | |||
** <code>remove</code> pour détruire un fichier, le seul paramètre est le nom du fichier, | |||
** <code>rename</code> pour renommer un fichier, les paramètres sont l'ancien et le nouveau noms du fichier, | |||
** <code>copy</code> pour copier un fichier, les paramètres sont le nom du fichier original et le nom de la copie. | |||
== Programmation système == | == Programmation système == |
Version du 3 août 2023 à 16:32
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.
Organisation du travail
Vous aurez, comme d'habitude, la lourde tâche de tester ce module de travaux pratiques.
Ce sera d'autant moins facile que nous vous demandons de vous coordonner pour réaliser le pico-ordinateur : un seul exemplaire fonctionnel est attendu par groupes de 4 ou 5 binômes.
Vous allez donc devoir vous organiser pour que chaque binôme réalise une partie de l'ensemble. Cela dit des tâches identiques sont à réaliser par tous les binômes, ces tâches vos permettront de vous exercer mais aussi de tester vos réalisations spécifiques.
Tâches à réaliser
Pour que chaque binôme puisse avoir un minimum d'autonomie, chaque binôme commencera en utilisant un Arduino Uno adjoint de deux périphériques SPI.
Chaque binôme réalise :
- un ordonnanceur, vous écrirez en particulier une tâche de lecture sur port série et deux tâches d'envoi d'information sur bus SPI. Le partage du bus SPI doit être supervisé par l'ordonnanceur ;
- au choix, une carte fille FPGA programmée par VHDL et communicant via le bus SPI, le binôme réalise aussi la tâche d'ordonnancement utilisant la carte ;
- au choix, une carte mère ou une carte fille, le binôme réalise aussi la tâche d'ordonnancement correspondante, le binôme peut réaliser plusieurs cartes pour maximiser sa note.
Cartes filles FPGA
Les cartes filles FPGA doivent être programmées en VHDL. Tous les binômes doivent implanter en VHDL :
- un contrôleur de bus série SPI ;
- un décodeur des commandes reçues par SPI (commandes sur un octet avec éventuellement des paramètres à suivre) ;
- un contrôleur d'écran VGA affichant le contenu graphique de la RAM de la carte FPGA.
A minima il faut une commande pour insérer un pixel d'une couleur donnée dans la RAM d'affichage.
Vous pouvez aussi ajouter des fonctionnalités supplémentaires à votre carte FPGA :
- mémoire de masse par accès direct à une carte mémoire SD ;
- carte réseau Ethernet en utilisant un module PHY Ethernet.
Pour les fonctionnalités supplémentaires vous devez prévoir des commandes supplémentaire au niveau du décodeur.
Cartes électroniques
Les connexions entre cartes mères et cartes filles doivent être réalisées via des connecteurs HE-10 à 8 connecteurs :
- 2 broches pour l'alimentation ;
- 3 broches pour les signaux SPI (MISO, MOSI, SCK) ;
- 1 broche pour le CS (Chip Select) ;
- 1 broche pour une éventuelle ligne d'interruption ;
- 1 broche pour une eventuelle réinitialisation de la carte (Reset).
Cartes mères :
- une carte CPU ATMega328p avec une flash SPI NAND.
Cartes filles :
- une carte fille SPI avec un ATMega328p et une matrice de touches (clavier) ;
- une carte fille SPI avec un AT90USB647 pour connexion à un clavier USB ou une clef USB ;
- une carte fille SPI avec un ATMega328p et un écran LCD 2 lignes HD44780 ;
- une carte fille SPI avec un ATMega16u2 pour une connexion série USB ;
- une carte fille SPI avec un ATMega328p et un DAC R-2R comme carte son ;
- une carte fille SPI avec un ATMega16u2 pour une connexion réseau (EP bulk ou RNDIS) ;
- une carte fille SPI avec un ATMega328p et un ENC28J60 pour une connexion Ethernet.
Précisions sur la carte mère
La carte mère doit comporter un microcontrôleur ATMega328p, une puce mémoire AT45DB641E et 5 connecteurs HE10 pour connecter une carte fille FPGA et 4 cartes filles à microcontrôleur.
Du coté programmation vous êtes chargés d'écrire les fonctions d'accès à la mémoire, des primitives systèmes implantant un micro-système de fichiers et des primitives de communication via le bus SPI.
Les fonctions de base d'accès à la mémoire sont facilement trouvables, par exemple sur les sites du bureau d'études systèmes embarqués des PeiP.
Concernant le micro-système de fichiers, les fonctionnalités suivantes doivent être implantées :
- le système de fichiers doit résider dans la mémoire de 8 Mo, les accès à la mémoire se font par blocs de 256 octets ;
- l'accès au système de fichiers se fait par des primitives système ;
- le micro-système de fichiers ne comporte qu'un répertoire : le répertoire principal, le répertoire principal peut comporter au maximum 64 fichiers, un fichier est caractérisé par un nom de 16 caractères au maximum, sa taille et ses blocs de données, un fichier est décrit par un maximum de 16 blocs de données ;
- le superbloc du système de fichiers comprend, en plus de la description du répertoire racine, une carte bit à bit des blocs de données libres, cette carte nécessite 16 blocs ;
- les différentes primitives à implanter sont :
append
pour créer un fichier si non existant et ajouter des données en fin de fichier, les paramètres sont le nom du fichier, les données à ajouter et la taille des données,read
pour lire des données dans un fichier, les paramètres sont le nom du fichier, le tableau dans lequel stocker les données, la taille du tableau et le déplacement par rapport au début du fichier,remove
pour détruire un fichier, le seul paramètre est le nom du fichier,rename
pour renommer un fichier, les paramètres sont l'ancien et le nouveau noms du fichier,copy
pour copier un fichier, les paramètres sont le nom du fichier original et le nom de la copie.
Programmation système
Le système d'exploitation du pico-ordinateur doit avoir les fonctionnalités d'un DOS (Disk Operating System), à savoir :
- lecture des commandes tapées par l'utilisateur ;
- téléchargement d'exécutables ou de sources via le dispositif de communication extérieur ;
- sauvegarde et chargement d'exécutables ou de sources via la mémoire de masse ;
- permettre l'affichage de chaînes de caractères ;
- comprend un interpréteur micro-python pour faire tourner les sources ;
- les différentes fonctionnalités sont réalisées sous forme de tâches gérées par un ordonnanceur.
La programmation c'est aussi l'écriture des sous-systèmes ou des pilotes liés à chaque cartes :
- pour la carte mère, il faut écrire un sous-système de gestion de fichiers ;
- pour la carte fille comportant une matrice de touches, il faut écrire le pilote identifiant les touches actionnées et gérant l'envoi de ces touches à la carte mère ;
- pour la carte fille gérant un clavier USB, il faut utiliser un projet LUFA pour scanner régulièrement le clavier USB et envoyer d'éventuels événements à la carte mère ;
- pour la carte fille gérant un écran LCD, il faut écrire le pilote capable de gérer l'écran et la partie récupérant les données de la carte mère ;
- pour la carte fille gérant une clé USB, il faut utiliser un projet LUFA pour l'accès à la clé et écrire un sous-système de gestion de fichiers ;
- la carte fille gérant une connexion série ne nécessite qu'un modeste pilote de communication avec la carte mère ;
- pour la carte fille permettant une connexion avec le monde extérieur via de simples points d'accès USB de volume (EP Bulk), il faut écrire le pilote pour communication avec la carte mère mais aussi le programme sur le PC permettant la réception ou l'envoi de fichiers ;
- pour la carte fille son, il faut écrire la partie permettant de récupérer les échantillons, les copier en mémoire, et les jouer à la vitesse d'échantillonnage préalablement transmise ;
- pour la carte fille permettant une connexion Ethernet au dessus d'USB (RNDIS), il faut écrire une micro-pile réseau capable de récupérer et d'envoyer des fichiers au travers de paquets Ethernet mais aussi le programme sur le PC cible capable de comprendre ces paquets Ethernet ;
- pour la carte fille incluant une puce Ethernet, il faut implanter la micro-pile réseau et le programme évoquée ci-dessus mais aussi le pilote capable de gérer la puce Ethernet.
Détails (brouillon)
- Toutes les cartes doivent permettre un accès au port série de leur microcontrôleur pour un déverminage via un FTDI et ajouter des points de tests (bus SPI, alimentation, etc.).
- Pour tester la partie mémoire de masse, des commandes doivent être prévue pour écrire directement dans un fichier de la mémoire de masse et pour afficher le contenu d'un fichier.
- Tâche de gestion SPI spécifique, communication avec la tâche par pointeurs, file d'attente pour les demandes de communication, implanter un appel système.
- Plutôt partir sur n groupes de 4 binômes, chaque binôme réalise une carte fille et en commun une carte mère pour obtenir au final un pico-ordinateur.