SE4Binome2026-4

De projets-se.plil.fr
Aller à la navigation Aller à la recherche

Binôme 4 : BONKOUNGOU & SOUOP

Présentation

Étudiants : Wendbenedo BONKOUNGOU & Evora SOUOP. Formation : IOT4, Polytech Lille, 2026/2027. Dépôt Git : gitea.plil.fr/vsouopme/IOT4_Pico_fbonkoun_vsouopme.

L'objectif du projet est de concevoir, réaliser et programmer un pico-ordinateur complet composé d'une carte mère, de deux cartes filles et d'un mini système d'exploitation, en mettant en œuvre les communications SPI, USB et série ainsi que la gestion des périphériques.

Cahier des charges

Cette section décrit le périmètre fonctionnel et les livrables attendus du projet.

Vue d'ensemble

Notre binôme réalise un pico-ordinateur complet dans le cadre du sujet SE4 2026/2027. Il se compose d'une carte mère architecturée autour de trois microcontrôleurs (ATmega32u4 comme CPU, ATmega16u2 pour la passerelle USB/série, AT90USB1287 pour la gestion du clavier USB en mode host), d'une carte fille mémoire à base de flash NOR SPI, d'une carte fille écran hors-série de type TFT SPI ILI9341, ainsi que d'un mini système d'exploitation développé sur Arduino Uno avec bouclier multi-fonctions.

Références

Sujet spécifique : Pico SE4 2026/2027. Sujet général (protocole SPI, format des commandes) : Pico-ordinateur.

Choix techniques

Les choix techniques du projet répondent à trois critères hiérarchisés : la soudabilité manuelle de tous les composants, la conformité au cahier des charges (3,3 V, 8 MHz, sous-systèmes indépendants, bus SPI), et la disponibilité auprès des fournisseurs standards (Mouser, Digikey, Farnell).

Nomenclature

La contrainte transverse est que tous les composants doivent être soudables à la main. Aucun boîtier QFN, DFN ou BGA n'est retenu, et tous les passifs sont en 0805. La BOM complète avec justifications techniques est disponible dans le dépôt Git sous le nom Pico_SE4_BOM_Justifications.pdf.

Point technique : conflit RX du 32u4

Le sous-système ATmega16u2 et le sous-système AT90USB1287 doivent tous les deux envoyer des données vers l'unique broche RX du 32u4. Sans précaution, si les deux TX émettent des états logiques opposés simultanément, un court-circuit direct s'établit entre les étages de sortie CMOS, ce qui conduit à la destruction des microcontrôleurs à moyen terme.

La solution retenue est un multiplexeur analogique 2:1 (74LVC1G3157 en SOT-23-6) commandé par PD7 du 32u4. Un switch SPDT SW7 en face avant est lu par PD6 via un pull-up 10 kΩ. Le firmware choisit selon le contexte quel TX est écouté, avec trois modes possibles (SW7 maître absolu, override sur demande, ou simple bouton de bascule).

Points en attente de décision collective

Les codes SPI d'identification des cartes filles (magic byte 0xa_) doivent être tranchés collectivement avec les autres binômes et l'encadrant. Le brochage exact du connecteur HE-10 des cartes filles reste aussi à harmoniser entre binômes pour garantir l'interopérabilité.

Schémas et architecture

Le projet KiCad est réalisé en majorité sur une feuille racine A3 (paysage), avec une petite feuille hiérarchique pour le bus cartes filles. Cette organisation permet une lecture d'ensemble immédiate tout en isolant les blocs répétitifs.

Bloc alimentation

L'alimentation combine les trois sources VBUS des connecteurs USB de programmation via un OR-ing par diodes Schottky SS14, ce qui évite qu'un branchement simultané de deux ports ne mette en court-circuit deux PC hôtes. Le rail 5 V ainsi obtenu alimente ensuite un LDO AP2112 en boîtier SOT-89-5 qui produit le 3,3 V pour toute la carte. Le SOT-89-5 est préféré au SOT-25 pour sa meilleure soudabilité manuelle et sa dissipation thermique améliorée. Le dropout de 250 mV à 600 mA garantit une régulation continue même si VBUS tombe à 4,4 V. Un condensateur bulk 22 µF assure la tenue aux transitoires, et une LED rouge témoigne visuellement de la présence du 3,3 V.

ATmega32u4 (CPU principal)

Le CPU est câblé selon le schéma de référence de l'Arduino Leonardo, adapté en 3,3 V / 8 MHz. Le découplage comprend un cap 100 nF sur chaque paire VCC/GND, un cap 1 µF sur UCAP (indispensable pour le fonctionnement du régulateur USB interne), et un bulk 22 µF. Le quartz ABM3B 8 MHz est associé à deux capacités 22 pF en C0G (le C0G est obligatoire pour la stabilité en température). La protection ESD est assurée par un USBLC6-2SC6 juste après le connecteur, suivi de deux résistances série 22 Ω conformes à la spécification USB 2.0. Le bouton HWB combiné à RESET permet d'entrer en bootloader DFU pour flasher via l'USB natif sans programmateur externe. Le connecteur ICSP 2×3 est prévu comme secours en cas de corruption du bootloader.

Sous-système Mux TX (74LVC1G3157 + SW7)

Ce sous-système résout le conflit RX exposé plus haut. Le mux 74LVC1G3157 en SOT-23-6 reçoit sur ses entrées A et B les TX du 16u2 et du AT90, sélectionne l'un ou l'autre selon la valeur de S (pilotée par PD7 du 32u4), et transmet le résultat sur Y qui va vers PD2 (RX) du 32u4. Le switch SW7 en face avant est lu par PD6 via un pull-up 10 kΩ. Cette approche donne au firmware une flexibilité complète pour arbitrer entre les deux sources, sans manipulation physique nécessaire pour changer de mode.

Sous-système ATmega16u2 (USB/série)

Ce sous-système sert de passerelle entre l'USB (côté PC) et l'UART (côté 32u4), à la manière de l'Arduino Uno R3. Le firmware Arduino-usbserial-uno.hex sera flashé directement. La partie électrique reproduit celle du 32u4 : découplages VCC/UCAP, quartz 8 MHz, RESET avec bouton et pull-up, HWB avec bouton et pull-up, ICSP 2×3, protection ESD sur les data lines. La connexion série croisée est réalisée via des labels globaux : TXD1 (PD3) du 16u2 est labellisé "16u_TX" et rentre dans l'entrée A du mux, tandis que RXD1 (PD2) du 16u2 est labellisé "32u_TX" et reçoit directement le TX du 32u4 (PD3).

Sous-système AT90USB1287 (USB host clavier)

Ce sous-système gère la lecture d'un clavier USB standard en mode host. Il expose deux connecteurs USB physiques distincts : un USB-A mâle pour la programmation du AT90 en mode device, et un USB-A femelle pour brancher le clavier en mode host. Chaque connecteur a sa propre protection ESD (USBLC6-2SC6), placée au plus près des broches pour absorber les décharges au branchement. Le VBUS du connecteur clavier n'est pas relié directement au 5 V mais passe par un high-side switch TPS2051B, commandé par PE0 du AT90. Cela permet au firmware d'activer ou couper l'alimentation du clavier à la demande, avec une limitation de courant à 500 mA conforme à la norme USB. La broche FAULT du TPS2051B remonte vers PE1 pour que le AT90 sache si le clavier tire trop de courant. Les data lines D+/D- du connecteur prog et du connecteur clavier convergent sur la même paire de broches du AT90 (pins 4 et 5), ce qui est acceptable car les deux modes (device et host) ne fonctionnent jamais simultanément.

Bus cartes filles

Le bus est réalisé via quatre connecteurs HE-10 2×8 (16 broches shroudées avec détrompeur mécanique). Chaque slot reçoit les alimentations 3,3 V et GND, les trois lignes SPI communes (SCK, MOSI, MISO), une ligne CS dédiée, une ligne INT dédiée, une ligne RESET partagée, et quatre lignes E/S partagées dont le brochage exact reste à définir collectivement. Les CS des quatre slots sont pilotés par PB4 à PB7 du 32u4, les INT arrivent sur PC6, PC7, PD0 et PD1, et le RESET commun est piloté par PD4. Le SPI utilise le peripheral hardware du 32u4 (PB1 = SCK, PB2 = MOSI, PB3 = MISO), les mêmes broches que celles utilisées par le connecteur ICSP.

Cartes filles

Deux cartes filles sont prévues au titre du binôme, en complément de la carte mère.

Carte fille mémoire

Le composant retenu est la flash NOR SPI W25Q128JVSIQ (16 Mo). Ce choix est motivé par la possibilité d'implémenter un mini système de fichiers de type LittleFS sans consommer de RAM sur le 32u4, contrairement à une solution basée sur carte SD avec FatFs qui prendrait 2 à 3 Ko sur les 2,5 Ko disponibles.

Carte fille écran

Le composant retenu est un module TFT 2,4" SPI à contrôleur ILI9341 (résolution 320×240, alimentation 3,3 V natif, rétroéclairage tirant environ 80 mA).

Mini-OS

La cible est un Arduino Uno (ATMega328p) équipé du bouclier multi-fonctions fourni. L'ordonnanceur sera basé sur TIMER1 de l'ATMega328p, avec une ISR toutes les 20 ms qui sauvegarde et restaure le contexte des tâches.

Journal de bord

Séance 1 : 08/09/2026

Lecture du sujet SE4 2026/2027 et du sujet Pico-ordinateur général. Création du dépôt Gitea et premier push. Ébauche de la BOM.

Séance 2 : 09/09/2026

Révision de la BOM avec contrainte forte de soudabilité manuelle (SOT-89-5 privilégié au SOT-25, boîtiers TQFP retenus, passifs en 0805). Résolution du problème de conflit RX du 32u4 avec choix du mux 74LVC1G3157 et du switch SW7. Rédaction du document BOM et justifications, poussé dans le dépôt. Installation de KiCad 9 pour alignement avec l'infrastructure école. Nettoyage du dépôt Git via un .gitignore adapté à KiCad, retrait des fichiers auto-générés. Réorganisation des projets dispersés en un projet unique carte_mere.kicad_pro.

Séance 3 : 09/09/2026

Câblage complet du bloc alim sur la feuille racine (OR-ing 3 VBUS, LDO AP2112, LED témoin, ERC propre). Câblage complet du bloc CPU ATmega32u4 incluant découplages VCC/AVCC/UVCC, quartz 8 MHz, cap UCAP, RESET avec bouton et anti-rebond, HWB avec bouton, USB avec protection ESD et résistances série 22 Ω, connecteur ICSP, cap sur AREF. Création de la feuille hiérarchique Mux_TX avec placement du 74LVC1G3157, du SW7 et du pull-up, câblage via labels globaux et jonction avec PD2/PD6/PD7 du 32u4. Correction de plusieurs bugs détectés par l'ERC ou la relecture de netlist : PWR_FLAG mal placés, labels locaux et globaux en doublon, court-circuit RST vers GND causé par un fil traversant SW1, condensateur C1 câblé en série au lieu de parallèle sur l'entrée du LDO, UGND initialement isolé de GND.

Séance 4 : 10/09/2026

Passage de la feuille racine en format A3 paysage pour disposer de plus de place et rapatriement du bloc Mux_TX depuis sa feuille hiérarchique vers la feuille racine, jugée plus lisible qu'une arborescence de feuilles filles. Câblage complet du sous-système ATmega16u2 : USB avec protection ESD, quartz 8 MHz, cap UCAP, RESET, HWB, ICSP, jonction UART avec le 32u4 via labels 16u_TX (vers le mux) et 32u_TX (venant de PD3 du 32u4). Câblage complet du sous-système AT90USB1287 : USB de programmation avec sa propre protection ESD, USB clavier femelle avec sa propre USBLC6, TPS2051B pour alimenter le clavier en 5 V commuté (piloté par PE0, retour FAULT sur PE1), fusion des data lines D+/D- des deux USB sur les mêmes broches du AT90 puisque les deux modes ne coexistent pas. Câblage du bus cartes filles avec quatre connecteurs HE-10 2×8, brochage SPI commun (SCK/MOSI/MISO), CS et INT dédiés par slot, RESET commun. Nettoyage de doublons de composants involontairement copiés (J8 et U11).

Difficultés rencontrées

Cette section liste les principaux obstacles techniques rencontrés et les solutions retenues.

Le conflit RX du 32u4 (deux TX sur un RX) a été résolu par le choix du mux 74LVC1G3157 combiné au SW7 lu par le firmware. Plusieurs bugs de câblage subtils ont été détectés : un condensateur bulk câblé en série au lieu de parallèle sur le LDO, un fil parasite qui traversait le bouton RESET et court-circuitait RST à GND, des labels locaux et globaux qui bridgeaient des nets sans qu'on s'en rende compte visuellement. La méthode adoptée consiste à faire tourner l'ERC et à générer la netlist après chaque modification significative, puis à vérifier que chaque net attendu contient bien les broches attendues.

Bibliographie

Datasheets : ATmega32u4, AT90USB1287, AP2112, 74LVC1G3157, USBLC6-2SC6, TPS2051B.

Schémas de référence : Arduino Leonardo, Arduino Uno R3.

Fichiers

Fichiers principaux du dépôt Git : Pico_SE4_BOM_Justifications.pdf (nomenclature complète et justifications), carte_mere.kicad_pro (projet KiCad), carte_mere.kicad_sch (feuille racine contenant tous les blocs de la carte mère), carte_fille.kicad_sch (feuille hiérarchique du bus cartes filles).