Bridge da UART, I2C e SMBus ad USB
Non so se avrei fatto meglio ad intitolare questo progetto come Adattatore Seriale/USB per fare in modo che venisse indicizzato meglio su Google, ma fatto sta che non si tratta solo di questo: il dispositivo che presento permette difatti di comunicare, e quindi eseguire anche semplici operazioni di debug, anche su un bus I²C o SMBus.
I PCB di questo progetto sono stati gentilmente offerti da PCB Way – il servizio di realizzazione PCB più completo che c’è: realizzano PCB fino a 30 layers! (in tutti i colori, compreso il viola!), PCB flessibili, stencil SMD, PCB con base in alluminio o rame (e altri materiali). Hanno un prezzo molto vantaggioso che parte da $5 per 10 PCB standard (1 o 2 layers fino a 100x100mm). PCBWay ha un sistema che premia con punti (beans) e la possibilità di inviare inviti che permettono di avere sconti e regali. Assistenza istantanea anche tramite chat, lavorazione velocissima, precisione e qualità ai massimi livelli.
Indice dei contenuti
MCP2221A
Il cuore del circuito è costituito dall’integrato MCP2221A prodotto da Microchip. Questo integrato è catalogato come USB 2.0 to I²C/UART Protocol Converter with GPIO ovvero un convertitore di protocollo da USB a UART e I²C con IO aventi funzioni personalizzabili. Alcuni fanno una paragone tra questo e il più blasonato FT232R della FTDI: stiamo confrontando due prodotti ben diversi! Volendo parlare esclusivamente della comunicazione seriale, l’MCP2221A è un bridge UART, ovvero fa da ponte tra una porta seriale (porta COM) sul PC emulata tramite USB CDC ad una comunicazione di tipo UART (linee RX, TX). L’FTDI FT232R è un adattatore RS232 in quanto, oltre alle linee di TX e RX, supporta anche tutte le altre linee che fanno parte dello standard RS232: DTR, RTS, RI, DSR, DCD e CTS.
Nel momento in cui dobbiamo comunicare con un semplice dispositivo logico che ha solo RX e TX la scelta tra i due è indifferente a livello hardware/software (i driver per i dispositivi ci sono per tutti i sistemi operativi, Android compreso), ma lo è a livello monetario: l’MCP2221A in formato SOIC costa su Mouser €1,70 per un solo pezzo, mentre l’FT232R, sempre in SOIC, €4,05. L’FTDI ha però, i buffer di ricezione e trasmissione da 256 e 128bytes rispettivamente, mentre il Microchip entrambi 64bytes: la maggior quantità di buffer dell’FTDI è data anche dal fatto che supporta velocità di comunicazione fino a 3Megabaud mentre il Microchip arriva fino a 460800baud. Personalmente non ho mai incontrato dispositivi che comunicano su seriale a queste velocità, mi sono sempre fermato a 115200baud.
Se avete bisogno di un adattatore RS232 per comunicare, ad esempio, con una vecchia apparecchiatura (tipo un vecchio computer) che ha la RS232 su connettore DE9 (o peggio su DB25 come l’Amiga 500) allora, ok, dovete usare l’FTDI (ma anche no, dal momento che, anche se ci sono le linee di comunicazione RS232 aggiuntive, spesso non sono usate e a volte gli adattatori FTDI non hanno nemmeno riportati verso l’esterno questi pin!), ma per due semplici linee RX e TX questo va benissimo.
In più l’MCP2221A, oltre al prezzo, ha altri 2 assi nella manica: esiste in formato DIP, e credo sia l’unico dispositivo da USB a UART esistente in questo formato (correggetemi se sbaglio) e personalmente lo apprezzo molto, e, dicevo, supporta la comunicazione come master su bus I²C.
Tutto questo tralasciando altre funzionalità: tale chip, difatti ha 4 GPIO che normalmente vengono utilizzati per pilotare dei led di segnalazione stato (RX, TX, Attività su bus I²C, porta USB configurata e pronta) ma possono essere facilmente riprogrammati con un tool per eseguire altre funzioni come semplici IO, ingressi Analogici, uscite DAC ecc.
In aggiunta Microchip ha rilasciato i sorgenti dell’applicazione per Android , le DLL e l’interfaccia JAVA per questo integrato: vuol dire che ognuno può scrivere da se le proprie applicazioni personalizzate per comunicare da PC o da cellulare con l’MCP2221A. Tenendo conto che potete programmare i 4 GPIO per eseguire svariate funzioni, oltre ad utilizzare UART e I2C… si apre un mondo! Più in avanti spiego dove reperire tutto il materiale con cui lavorarci.
L’ MCP2221 è un PIC?
Mi sono fatto questa domanda per il semplice motivo che questo integrato aveva troppe caratteristiche in comune con i microcontrollori PIC, tra cui i GPIO utilizzabili come ingressi analogici, uscite DAC… Ho quindi fatto alcune considerazioni: L’MCP2221A è un dispositivo a 14pin con USB 2.0.
Microcontrollori PIC da 14 pin con moduli USB esistono e sono i PIC16F1454 e PIC16F1455. Il PIC16F1454 però non ha il modulo DAC, per cui, avendo l’MCP2221A la possibilità di selezionare due GPIO come uscite DAC, potrebbe derivare dal PIC16F1455. Anche le piedinature combaciano:
Vedete che oltre a VDD, VSS, VUSB, USB D+, USB D-, Reset, i pin della UART Rx e Tx ricadono sui pin RC5 e RC4 che sono usati dalla UART e così anche SCL e SDA cadono sui pin RC0 e RC1 che pure sono usati come SCL e SDA dal modulo MSSP del PIC. Il DAC, poi, può essere impostato come DAC1 su GP2, che cade su RC3 (sul PIC è l’uscita DAC2, DACOUT2) e il DAC2 su GP3 (RC2=>DACOUT1), i numeri del DAC sono invertiti ma è solo questione di nomenclatura, l’importante è la funzione. Gli ingressi AD possono essere impostati su GP1, GP2 e GP3 che corrispondono ad RA4/AN3, RC3/AN7 e RC2/AN6… tutto mi ha fatto pensare che si trattasse dello stesso dispositivo. Anche perchè, insomma, la Microchip i PIC ce li ha già: basta solo farli uscire di fabbrica con un firmware pre-caricato e cambiare la sigla!
Dopo aver fatto tutte queste considerazioni decido di fare una prova: collego l’MCP2221A al PICkit4 utilizzando la schedina che presentai anni fa. Quella scheda, per i PIC ad 8,l 14 e 20 pin ha un unico zoccolo da 20 con ICSPDAT e ICSPCLK sui pin 13 e 12 e dal datasheet del PIC16F1455 vedo che questi due pin sono consentiti purchè si utilizzi la modalità di programmazione LVP per mantenere la compatibilità col PIC18F14K50, che è pure un dispositivo USB a basso numero di pin (di pin ne ha 20): questa compatibilità probabilmente è stata voluta anche per supportare la scheda Low Pin Count USB Development Kit.
Così facendo, l’MPLAB IPE (il tool di programmazione separato da MPLAB X) segnala che la cosa non va a buon fine. Stacco quindi i fili e collego ICSPDAT e ICSPCLK ai pin 10 e 9 abilitando la modalità di programmazione ad alta tensione… E sorpresa:
Posso quindi affermare con estrema sicurezza che, si, l’MCP2221A è un PIC16F1455 con un altro vestito!
La lettura del dispositivo, però, come era più che prevedibile, restituisce un HEX pieno di zeri dal momento che la memoria programma è protetta. Si potrebbe cancellare? Con tutta probabilità si, per poterlo riutilizzare come PIC16F1455… ma perchè farlo!
Il Circuito
Questo è lo schema del bridge USB UART/I²C che presento in questo articolo:
Ho cerchiato la parte dell’alimentatore: vedete che c’è un jumper per alimentare tutto, eventualmente a 3.3V: in questo caso tutto il dispositivo funziona a 3.3V e avrò anche questa tensione sui terminali “+” degli headers con cui poter alimentare piccoli circuiti. Fin’ora non ho mai usato adattatori con questa caratteristica: tutti quelli che ho hanno sull’header la tensione di 5V presa dall’USB e, se sono compatibili con la comunicazione TTL a 3.3V, non ci sono punti in cui è possibile prelevare la 3.3V.
Volendo utilizzare il circuito a 3.3V, la 5V da USB è comunque disponibile per alimentare eventuali circuit esterni sul pin che rimane libero sul jumper JP1
Il regolatore scelto è certamente sovradimensionato dal momento che dalla USB si possono tirare fuori max 500mA mentre l’LM1117-3.3 arriva fino a 800mA, ma la vedevo una scelta migliore sia come reperibilità, sia come resistenza sia per il fatto che i regolatori “piccoli”, in formato TO-92, erogano massimo 250mA e in questo modo è magari possibile tirare dall’USB tutti e 500mA. Il connettore USB scelto è quello di tipo B (quello tipico delle stampanti) perchè più solido e in formato through-hole. Sui GPIO ho messo i led per le varie segnalazioni dal momento che, personalmente, non mi interessa utilizzare le funzioni extra.
Elenco componenti
- R1, R2, R3, R4 : resistenza 220Ω ¼W
- R5, R6 : resistenza ¼W *(vedi nota)
- C1, C3 : condensatore elettrolitico 220µF 16V
- C2, C4 : condensatore poliestere/multistrato 220nF (pitch 2.5 ÷ 5mm)
- C5, C6 : condensatore multistrato 100nF (obbligatorio pitch 2.5mm per C5)
- S1 : pulsante tattile 6x6mm
- IC1 : Microchip MCP2221A/P (formato DIP)
- U1 : regolatore di tensione LM1117-3.3 (venduto anche come LD33) formato TO-220
- LED1, LED2, LED3, LED4 : leds da 3mm, colori a piacere (io ho usato rosso/verde/rosso/giallo)
- X1 : connettore USB tipo B femmina
- pinstrip maschio da almeno 13 pin (da spezzare in 3+6+4)
- jumper
- PCB
* Il valore delle due resistenze R5 e R6 va scelto in base alla velocità di comunicazione del BUS I²C oppure, ancora, questo posto può essere lasciato vuoto nel momento in cui le resistenze sono già incluse sul circuito. Personalmente ho 3 versioni del PCB: una senza resistenze, una con le resistenze da 2.2KΩ per i bus che vanno a 400kHz e una con le resistenze da 4.7KΩ per i bus da 100kHz : ho preso questi valori da alcuni datasheet delle EEprom, ma se volete, potete consultare l’application note della Texas Instruments che spiega come vanno calcolate.
PCB
Il PCB è stato realizzato da PCBWay e come sempre la qualità è al top! Vi consiglio caldamente di utilizzare il loro servizio perchè sono rapidissimi e hanno un prezzo favoloso di $5 (circa €4,60) per 10 PCB standard! Ho scelto anche questa volta di farli realizzare in giallo, come per Coviclock, e le serigrafie bianche, anche se questa volta le ho fatte molto piccole, si leggono alla perfezione: nulla a che vedere con altri servizi con i quali apparivano sbiadite o seghettate.
Ho previsto una piccola area di dissipazione per il regolatore di tensione, fatta con il layer rame sia sopra che sotto. Nella parte inferiore ho fatto coprire l’area di dissipazione del regolatore con il soldermask lasciando scoperta un’area circolare su cui ho previsto che vada a toccare la rondella usata per il fissaggio con vite. Ho preparato comunque un prospetto del PCB con alcune indicazioni, anche se non ce n’era bisogno dal momento che è tutto già indicato sullo stampato:
Il connettore UART l’ho fatto in quel modo (con due GND e un pin non connesso) perchè così è compatibile con il pinout dei cavetti originali della FTDI anche se, dato che l’MCP2221 ha solo RX e TX ho dovuto fare delle semplificazioni: dall’alto verso il basso il pin 2 sugli FTDI è occupato da CTS e io l’ho messo a GND, mentre il pin 6 è occupato da RTS e l’ho lasciato disconnesso.
All’ultimo paragrafo dell’articolo c’è la galleria immagini: potete vedere da voi come sono perfetti i PCB! Ne ho alcuni extra da cedere e se siete interessati ad averli, previo piccola donazione a supporto del sito (solo PCB, senza componenti), contattatemi. Invito i ragazzi che hanno scritto articoli per Settorezero a contattarmi per chiedermelo gratuitamente: mi faccio carico anche della spedizione senza problemi e con piacere fino ad esaurimento scorte. Se ne avete bisogno in una certa quantità potete tranquillamente ordinarli da PCBWay:
https://www.pcbway.com/project/shareproject/UART_I2C_USB_Bridge.html
Per farsi realizzare il PCB è necessario essere iscritti, vi chiedo la cortesia di farlo utilizzando il mio link di invito.
Drivers
Il dispositivo è compatibile con Windows, Linux, Mac e Android. Sui miei PC windows è stato riconosciuto automaticamente senza dover installare nulla. Nel caso in cui non vi venga riconosciuto potete scaricare i driver dal sito della Microchip nella pagina dell’MCP2221A: andate su Documents e cliccate sul file MCP2220/MCP2221 Windows Driver & Installer. In questo zip ci sono i due files inf e cat separati, se sapete installarli da soli oppure c’è l’eseguibile che fa in automatico nella cartella Driver Installation Tool, diviso in X86 per sistemi a 32bit, e X64. Per quanto riguarda Linux e MAC pare non ci sia nulla da installare e ci sono due files di testo che spiegano come procedere nel caso in cui l’adattatore non venga riconosciuto subito: Info per MAC, Info per Linux. Per quanto riguarda Android, vediamo dopo.
Software
Sulla pagina dell’MCP2221A è possibile scaricare alcune applicazioni da utilizzare sul PC oltre alla documentazione. Vediamo qui a cosa servono i vari files da scaricare. Dopo aver aperto la pagina appena linkata, cliccate sulla voce Documents.
MCP2221 utility
E’ per Windows, è il programma che permette di configurare il funzionamento dell’MCP2221. Non è necessario utilizzarlo se non per applicazioni particolari. Permette difatti di modificare il comportamento dei GPIO ed altri settaggi:
Non andrò a spiegare come si utilizza perchè lo trovo più che semplice e, ad ogni modo, la scheda che ho realizzato presenta i led di stato sui GPIO per le funzioni di default, per cui non sarebbe possibile utilizzare altre funzionalità a meno di non rimuovere/non montare i led. Può essere utile per settare un diverso quantitativo di richiesta corrente una volta connesso ad un PC. VID e PID sono quelli della Microchip e non andrebbero cambiati a meno che non avete realizzato un’applicazione vostra con dentro un MCP2221 programmato e avete pagato per ottenere questi codici che vi identificano e identificano il tipo di prodotto.
MCP2221 Terminal Android App
Si tratta dell’app Android che consente di fare tutto: terminale seriale, terminale I²C e configurazione GPIO. Questo download contiene, oltre all’apk, anche i sorgenti dell’applicazione Android. Se volete installare l’applicazione, però, non è necessario scaricare questo file in quanto è disponibile sul play store ed è decisamente più comodo installarlo da li.
Ho fatto 4 video per spiegare l’utilizzo di questa app. Nel caso di comunicazione I²C ho collegato la scheda ad una EEprom 24C512 montata su una millefori. Ho collegato i 3 pin di selezione indirizzo e il pin di Write Protect a GND. Alimentazione, SCL e SDA sono collegati direttamente alla mia scheda bridge dato che le resistenze di pull-up sono già incluse.
Se non avete mai utilizzato la comunicazione I²C, oppure l’avete sempre fatto con Arduino seguendo gli esempi senza leggere la teoria, forse è conveniente dare una lettura a questi due miei vecchi articoli:
Esempio 1 – Comunicazione I2C, lettura sequenziale
In questo filmato eseguo la lettura bulk: quando parlo faccio riferimento ad un articolo precedente in cui ho scritto “Settorezero.com” sull’EEprom a partire dalla locazione di memoria n°2. Anche se non avete letto quell’articolo o comunque non vi interessa, sappiate che sto semplicemente leggendo una EEprom in cui c’è memorizzato Settorezero.com a partire dalla locazione 2. La cosa importante, quando si comunica con i dispositivi I²C, è ricordarsi sempre di specificare in maniera corretta sia l’indirizzo del dispositivo fisico (device address) che l’indirizzo del registro da utilizzare: avendo collegato tutti i pin di selezione indirizzo dell’EEprom a GND, l’indirizzo a 7bit è 0x50 (fate sempre riferimento al datasheet del dispositivo che avete tra le mani); gli indirizzi delle celle di memoria delle EEprom dalla 24C32 compresa in poi, sono a 16bit, quindi è necessario specificare sempre due bytes: prima quello alto e poi quello basso. In aggiunta su alcuni modelli di EEprom una parte del device address potrebbe essere utilizzato per la selezione dell’indirizzo cella (fate riferimento a questo mio vecchio articolo in cui ho spiegato come vanno indirizzate le celle di memoria sui vari modelli di EEprom I²C).
Esempio 2 – Comunicazione I2C, scrittura seguita da lettura
In quest’altro video, invece, spiego come scrivere e poi leggere sempre sulla stessa EEprom:
Esempio 3 – Comunicazione UART
In questo video ho collegato la scheda direttamente ad un Arduino UNO sul quale ho caricato un semplicissimo programma di esempio. Il programma caricato su Arduino è il seguente:
/* * Esempio utilizzato su Arduino per il test * di comunicazione Seriale sul Bridge Seriale MCP2221A * * https://www.settorezero.com */ char buff[50]; // buffer di ricezione void setup() { // porta seriale impostata a 9600baud Serial.begin(9600); } void loop() { static uint8_t i=0; // contatore bytes ricevuti if (Serial.available()>0) { char s=0; // byte ricevuto su seriale s=Serial.read(); if (s>0) buff[i++]=s; // se il byte è >0 lo aggiungo al buffer incrementando il puntatore if (s=='@') // se il carattere ricevuto è @, fermo la ricezione do l'output { buff[i]='\0'; // 'chiudo' il buffer Serial.println(); Serial.println("Arduino ha ricevuto:"); Serial.println(buff); Serial.flush(); // attendo lo svuotamento del buffer di trasmissione i=0; // riporto a zero il puntatore } } } |
Cliccate qui, eventualmente, se vi interessa scaricarlo: serial_test (213 download) .
Vedete che il programma non fa altro che immagazzinare i bytes ricevuti in un buffer (max 50 caratteri), se riceve il carattere @ allora fa l’output su seriale, ho fatto questa cosa perchè i programmi terminale che ho provato su Android non inviano ritorni a capo e mi serviva qualcosa per capire quando la stringa finiva, altrimenti l’echo di esempio avveniva su ogni singolo byte ricevuto ed era brutto da vedersi per un tutorial.
Questo è il video che mostra l’utilizzo:
Qualcuno potrebbe obiettare che avrei potuto collegare l’Arduino direttamente al cellulare con la porta USB: verissimo ma è una considerazione inutile: non è questo lo scopo del tutorial dato che dovete immaginare che la scheda che ho realizzato possa essere utilizzata con qualsiasi altro dispositivo dotato di una UART senza uno sbocco su una porta USB.
Esempio 4 – Comunicazione UART con un altro programma
Oltre all’MCP2221 Terminal ho voluto testare anche altri programmi Android per la comunicazione seriale e ho trovato questo USB Serial Terminal di Kai Morich che è molto ben fatto e possiede anche tasti per memorizzare delle Macro. Il collegamento iniziale con altri programmi è un po’ diverso e chiaramente questi permettono solo di sfruttare la comunicazione UART e non l’I2C.
MCP2221 Linux Kernel I2C Bus Driver
E’ un applicativo Linux che consente di sfruttare la comunicazione I2C dal terminale.
MCP2221 Command Line Interface
Come dice la parola stessa, è un programma per riga di comando. E’ per sistemi Windows. Facendo partire l’installer viene installato l’eseguibile insieme ad un altro paio di files in \Program Files (x86)\Microchip\MCP2221CLI e viene creato un link a questa cartella sul desktop. Potete usare questo programma da altri programmi che hanno la possibilità di eseguire comandi shell. Questo è l’help della CLI:
Chiaramente serve per comunicare con i GPIO e con I²C o SMBus: la comunicazione seriale la si fa tramite porta COM…
MCP2221 DLL e MCP2221 Java Native Interface
Di DLL ne sono presenti varie versioni: conviene ovviamente scaricare quella più aggiornata. Nel file zip ci sono le DLL gestite (managed) e non gestite (unmanaged), ovvero le DLL che potete utilizzare da applicazioni scritte in .NET (C#, VB.NET, per il Java c’è il download apposito Java Native Interface) o in linguaggi compilati senza framework (C, C++, ecc). Sono utili per creare da sè applicazioni personalizzate che comunicano con l’MCP2221 e quindi da qui potete utilizzare anche le funzioni custom dei GPIO qualora vorreste creare un dispositivo a se stante. Se sapete programmare applicazioni per PC sapete come fare. Nel file ZIP è incluso un PDF con la descrizione di tutte le funzioni utilizzabili con queste DLL.
MCP2221 I2C/SMBUS Terminal
Applicativo windows che permette di sfruttare la comunicazione I2C. E’ molto semplice da utilizzare. Nel momento in cui connettete la scheda, in Select Device appare un numero, che è il numero seriale identificativo dell’MCP2221A (che si può cambiare dal tool che abbiamo visto prima): se avete collegato più di un dispositivo dovete sceglierlo. Scegliete quindi la velocità di comunicazione e il formato dei dati in Esadecimale o Decimale.
La parte Commands è strutturata come una tabella: ogni riga conterrà un’operazione di lettura o di scrittura e tutte le righe verrano eventualmente eseguite in sequenza.
La colonna On contiene una checkbox che, se spuntata, farà in modo che la riga venga eseguita quando andremo ad inviare i comandi. La colonna Protocol consente di selezionare il protocollo di comunicazione: oltre I2C e SMBus, ci sono le funzioni che consentono di eseguire i comandi custom eventualmente programmati sull’MCP2221A con l’applicazione MCP2221 Utility. Qui farò riferimento soltanto alle funzionalità I2C, perchè cambiando protocollo alcune colonne cambiano di significato. La colonna Address Length, come sull’app android, permette di specificare il device address, io consiglio di utilizzare sempre l’indirizzo a 7bit per semplicità. Nella successiva colonna Address andrà specificato l’indirizzo del dispositivo con cui comunicare, lo andrete a specificare in esadecimale se avete selezionato Hex come data format (default). Segue quindi l’Operation da eseguire: compare Write o Read. La colonna Register Index è disattivata per l’I2C in quanto viene utilizzata solo dall’SMBus: nel caso di un dispositivo I2C sappiamo che l’indirizzo del registro su cui operare, come già specificato, va incluso nell’array trasferito con l’operazione di scrittura. Segue la colonna Data in cui, solo in caso di operazione Write, andrà messo l’indirizzo del registro su cui operare (1 o 2 bytes) ed eventualmente uno o più bytes da scrivere. I Bytes vengono separati da una virgola e vanno sempre scritti nel formato selezionato (Hex o Decimale). Nel caso di un’operazione Read, invece, nel campo data va messo il numero di bytes da leggere (l’indirizzo da cui partire a leggere viene specificato prima con un’operazione di write).
Nel seguente esempio ho messo due operazioni fatte con una eeprom: una di Write con la quale scrivo l’indirizzo da cui partire (0,0 => cella 0, l’eeprom ha gli indirizzi celle a 16bit quindi devo specificare 2 bytes) e una successiva di Read con la quale dico che devo leggere 20 Bytes:
Le righe possono essere inviate una alla volta premendo il pulsantino Send alla fine della stessa, anche se l’operazione ha il flag On spento, oppure possono essere inviate tutte insieme (quelle col flag On acceso) premendo il pulsante Send All in basso a destra.
Nella tabella Commands sono presenti altre colonne: PEC (Packet Error Check) è un campo utilizzato per il controllo di errore solo nelle comunicazioni SMBus, Delay (ms) è un ritardo che viene eventualmente inserito dopo aver inviato il comando corrispondente. Comments può contenere delle note che non hanno influenza su nulla: serve solo a voi nel caso in cui vogliate salvare la sequenza di comandi in un file e riutilizzarla in futuro se non vi ricordate quella riga a cosa serviva.
Vediamo un altro esempio sempre su una EEprom. In questo caso invio 18 bytes (li ho scritti a caso) a partire dalla locazione 0x0201, dopodichè eseguo un’altra operazione di scrittura per specificare l’indirizzo da cui partire (0x0201), eseguo quindi un’operazione di lettura dicendo di leggere 18bytes (0x12 in esadecimale):
Vedete che ho inserito le note nella finestra per vostra comodità. Dopo aver premuto il pulsante Send All, nella finestra di output mi appare:
Ho collegato anche l’analizzatore logico per controllare la comunicazione e questo è l’output del packet analyzer:
Come vedete anche il packet analyzer rileva 3 pacchetti in sequenza: il primo di scrittura bulk, il secondo per la scrittura del solo indirizzo e il terzo con la lettura sequenziale.
E per la UART?
Potete utilizzare un programma terminale qualsiasi: CuteCOM, CoolTerm, Terminal, TeraTerm, PuTTY
Librerie alternative
C’è un progetto open source riguardo alle librerie HID da utilizzare con questo dispositivo: MCP2221 HID Library by Zak Kemble
Galleria
Questo progetto è stato recensito su Hackster.io.