
Un microcontrollore AVR a 8 bit non è certo un mostro in termini di potenza di calcolo, ma nelle mani giuste questi chip possono comunque fare cose sorprendenti. Nel corso degli anni, avrete probabilmente visto robot, console per videogiochi e strumenti di produttività basati su Arduino, tutti alimentati da un chip AVR. Recentemente, un maker noto come Maurycyz ha portato l’hacking AVR a un livello superiore, sviluppando un server web pubblico che gira su uno di questi microcontrollori.
Il chip specifico utilizzato per il server è un Microchip AVR64DD32. Ha un singolo core AVR a 8 bit che opera fino a 24 MHz con 8 kB di SRAM e 64 kB di memoria flash. Non è molto, certo, ma Maurycyz è riuscito non solo a costruire un server web con questi limiti, ma anche a gestire le connessioni di rete.
Invece di utilizzare un controller Ethernet dedicato per la rete, il progetto adotta un approccio più insolito, utilizzando SLIP (Serial Line Internet Protocol) su una connessione seriale UART standard. SLIP era comunemente utilizzato durante l’era delle connessioni dial-up per trasportare il traffico internet su collegamenti seriali, e Linux lo supporta ancora oggi con strumenti integrati. Collegando l’AVR a un adattatore da USB a seriale operante a 115200 baud, il microcontrollore ottiene una propria interfaccia di rete senza bisogno di hardware specializzato.
Questa soluzione alternativa si è resa necessaria perché implementare Ethernet direttamente sull’AVR sarebbe stato impraticabile. Anche i segnali Ethernet 10BASE-T viaggiano a velocità troppo elevate perché le periferiche del chip possano generarli in modo affidabile, soprattutto con la codifica Manchester che raddoppia la velocità di segnalazione sul cavo. Invece, l’approccio seriale leggero consente all’AVR di concentrarsi interamente sulla gestione dei pacchetti e sulla fornitura di pagine web.
Il microcontrollore esegue uno stack TCP/IP completamente personalizzato, scritto da zero. Il supporto IPv4 è stato semplificato ignorando funzionalità obsolete come la frammentazione dei pacchetti, che i sistemi moderni utilizzano raramente. Il TCP si è rivelato molto più complesso, richiedendo il tracciamento dello stato, la logica di ritrasmissione e la gestione dei casi limite di connessione. Una volta ricevuta una richiesta, il server restituisce semplicemente una risposta predefinita. Questo è sufficiente per ospitare un sito web a pagina singola, ma niente di più.
Due buffer di pacchetti da 1500 byte consumano una grande porzione della memoria disponibile, ma l’AVR ha ancora abbastanza RAM per gestire teoricamente circa 200 connessioni TCP simultanee. La velocità di trasmissione effettiva è piuttosto bassa, con valori intorno ai 2 kB/s a causa delle impostazioni TCP conservative e della larghezza di banda seriale limitata.
Per rendere il server accessibile pubblicamente, Maurycyz instrada il traffico attraverso una macchina Linux connessa a un VPS tramite WireGuard. Le richieste vengono inoltrate all’AVR tramite il collegamento seriale SLIP, consentendo al piccolo sistema a 8 bit di apparire online su Internet. Se siete interessati, è possibile accedervi da qui.
Iscriviti ai nostri gruppi Telegram
Link utili