Sul blog di Elettronica Open Source puoi leggere non solo tutti gli articoli Premium riservati agli abbonati Platinum 2.0 e inseriti nella rivista Firmware 2.0 (insieme ad articoli tecnici, progetti, approfondimenti, news, tutorial a puntate e molto altro) ma anche gli articoli della Rubrica Firmware Reload. In questa Rubrica del blog abbiamo raccolto gli articoli tecnici della vecchia rivista cartacea Firmware, che contengono argomenti e temi evergreen per Professionisti, Makers, Hobbisti e Appassionati di elettronica. Oggi come oggi non possiamo decisamente più farne a meno, e i produttori lo sanno; è proprio per questo motivo che ce ne propongono sempre di nuove, più colorate, più capienti. Sono oggetti sempre più minuscoli, sempre più maneggevoli e sempre più comodi da utilizzare; piccoli capolavori di ingegneria che ci ritroviamo sempre a portata di mano. Ma cosa c’è dentro una penna USB? Com’è strutturata al suo interno? Cosa serve per crearne una? Nell’articolo trovate le risposte.
Introduzione
Oggi compiremo un’opera di “Reverse Engineering” su una penna USB. Siete pronti? Troppo spesso siamo utilizzatori passivi perfino degli oggetti più semplici. Difficile trovare il tempo, talvolta, per provare a farsi domande anche elementari ma che possono cambiare la nostra percezione delle cose. Una penna USB è un oggetto ormai di uso estremamente comune: più o meno tutti ne abbiamo una in tasca per poterci portare appresso, durante la giornata, documenti o file di varia natura più o meno utili. Ma cosa c’è dentro? Evidentemente una memoria: ma questo per un tecnico o un appassionato non è abbastanza. Di che tipo? Quanto veloce? Com’è fatto il circuito che la gestisce? Il condizionamento del segnale è davvero così elementare? La risposta a tante di queste domande è, evidentemente, no. Per quanto si tratti di una soluzione abbastanza semplice e tutto sommato facile da progettare, propone delle difficoltà specifiche che devono essere superate. Analizzare i documenti con i relativi componenti, scegliere i singoli integrati ed organizzare tutta l’elettronica di controllo o di condizionamento che permette loro di funzionare: queste sono le sfide aperte. E oggi le vediamo a partire dal prodotto finito. Mi è capitata tra le mani una penna USB che non funziona più. Per la cronaca, il suo malfunzionamento si manifesta col fatto che non viene più riconosciuta da alcun tipo di sistema operativo, il LED non si accende più e non compare neanche nell’elenco delle periferiche collegate al pc quando si prova a fare l’analisi dei dischi. Sono consapevole che sarebbe molto interessante analizzare il malfunzionamento e provare a spiegarlo ma, probabilmente, questo sarà argomento di un prossimo articolo. Per il momento, rimaniamo sui componenti, come si vede in Figura 1.
Una volta aperta, ci si rende conto che il modello è abbastanza grande; cosa alla quale non siamo più tanto abituati, perché la miniaturizzazione dei componenti ha reso questi dispositivi estremamente piccoli, e infatti alcune varianti sono simpaticamente denominate “pulci” o “unghie”. Questa, in effetti, è un pò datata ed anche i componenti, ovviamente, lo sono altrettanto. Guardando questa immagine, la prima cosa che si nota è che ci sono evidentemente due componenti principali, integrati, e una serie di altri componenti di dimensioni estremamente più contenute, che a primo impatto appaiono già per quello che sono: condensatori e resistenze. Scopo di questo articolo non è semplicemente constatare che all’interno di una penna USB possiamo trovare una memoria, ma piuttosto quello di provare a capire esattamente come è stato dimensionato l’intero circuito. Per cui, la prima cosa che dobbiamo fare è prestare attenzione ai componenti che vediamo in dettaglio in Figura 2.
Probabilmente molti di noi sono abituati ad avere a che fare con dispositivi e integrati in grado di memorizzare dati, a partire, ovviamente, dagli Hard Disk magnetici. Quello che troviamo all’interno di un dispositivo di questo tipo è molto diverso: non ci sono parti in movimento, niente meccanica di precisione (di altissima precisione!) e soprattutto nessun componente che sia (più o meno) estremamente sensibile alla magnetizzazione. In verità, anche su questo si potrebbe dire di più ed approfondire ma si rimanda alla libera iniziativa del lettore. Il dispositivo, per come è realizzato, garantisce anche una certa resistenza agli urti, ma è sempre buona regola evitarli. Quando parliamo di hard disk, infatti, un urto anche lieve (ma con una certa inclinazione) può irreparabilmente inficiare il funzionamento: danneggiamenti meccanici alla testina, disallineamento dei dischi e tanto altro ancora. Proprio in merito al disallineamento, inoltre, si potrebbero approfondire alcuni concetti fisici che sono alla base del funzionamento, come per esempio il momento angolare e gli effetti del mancato parallelismo tra l’asse del disco e quest’ultimo. Si rimanda al lettore diligente questa lettura di approfondimento. Abbiamo capito, quindi, che un supporto di memoria come quello di cui stiamo parlando è figlio di un processo di integrazione e di miniaturizzazione dei componenti che va sempre più perfezionandosi nel tempo. È evidente, però, che per quanto le dimensioni cambino, le esigenze restano le stesse:
- serve una tensione di alimentazione ed evidentemente un valore di corrente, sufficiente per poter far funzionare il tutto;
- serve poter contare su una certa capienza, ovvero capacità di memorizzazione;
- serve poter gestire il tutto a partire dall’integrazione e quindi lavorando sui tipi di contenitore.
Il primo componente, non necessariamente il più importante, che salta agli occhi guardando le immagini è l’HY27UU088G5MTPCB. Si tratta evidentemente di un dispositivo a montaggio superficiale. Il formato è conosciuto con l’acronimo TSOP, che sta per Thin Small Outline Package. Si tratta di una soluzione con spessore veramente molto contenuto, di circa 1 mm, e con una spaziatura tra i contatti pari a 0,5 mm. Le ridotte dimensioni di questo tipo di package lo rendono ideale per l’utilizzo all’interno di memorie Flash oppure RAM. In alcune applicazioni TSOP possono essere sostituiti da package “Ball Grid Array” che, come vediamo nella Figura 3, possono consentire un più alto grado di integrazione.
È anche importante dire, però, che il Ball Grid è più frequentemente impiegato in altre soluzioni. Quello che abbiamo visto in figura, in effetti, è proprio un processore, della serie MMX. Ma torniamo al TSOP per specificare che, in verità, i due tipi di memoria di cui abbiamo parlato non sono gli unici perché si intende impiegare questo tipo di contenitore anche in soluzioni quali FSRAM ed E2PROM. Si propone come una soluzione interessante in diverse applicazioni, prevalentemente mirate alle telecomunicazioni, all’integrazione all’interno di moduli cellulari e quindi anche dispositivi di memorizzazione, schede PCMCIA, comunicazioni wireless, integrazione all’interno di netbook, notebook e tante altre ancora. La sua versatilità vi suggerisce che sia estremamente utile avere a che fare con questo tipo di aspetti tecnici e che, comunque, resta relativamente semplice da gestire anche in piccole produzioni; è difficile, infatti, che a qualcuno venga l’idea di creare una serie limitata con componenti BGA, e dalla sua struttura vi sarà chiaro il perché. Ora che abbiamo capito come si presenta, vediamo esattamente che cos’è, perché di questo dispositivo non abbiamo ancora inquadrato le caratteristiche. HY27UU088G5MTPCB è evidentemente una sigla convenzionale, fatta di una serie di lettere e numeri che hanno uno specifico valore. In particolare, si tratta di una memoria di tipo NAND Flash prodotta da Hynix, un nome che, se cominciaste ad aprire i vostri dispositivi portatili, trovereste molto di frequente.
La sigla va letta così: HY 27 U U 08 8G 5 M T P C B. Le prime due riguardano il produttore, ci spiegano, infatti, che è prodotta da Hynix. Il secondo gruppo di due rappresenta la famiglia di dispositivi di appartenenza; 27 è esattamente quella delle NAND Flash. Il terzo carattere, la U, indica che il valore di tensione di alimentazione è compreso fra 2,7 e 3,6 V. Bisogna tenere presente che gli altri valori possibili, L ed S, indicano la tensione di funzionamento inferiore. Il quarto carattere è ancora una U, ma questa volta riguarda la “classificazione”; in questo caso il valore indica Multi Level Cell + Double Die + L/B, cioè una struttura multilivello piuttosto complicata. La stratificazione è una delle soluzioni ottimali per la realizzazione di integrati ad alta densità. Passiamo al gruppo “08”; questo rappresenta la cosiddetta “Bit Organization” e 08 indica x8. Il gruppo successivo, sempre composto da due caratteri, in questo caso “8G”, indica la densità di dati che in questo caso vuol indicare 8 Gbit. Il carattere successivo è un valore numerico, 5, il che vuol dire che l’indicazione del “Mode” è: 2nCE & 2R/nB; Sequencial Row Read Disable. La M, che come abbiamo visto, va considerata come carattere singolo, indica la “versione” e in questo caso vuol dire che stiamo parlando di una soluzione di prima generazione. Andando avanti troviamo una “T”: questa è l’indicazione del contenitore e dal momento che questa lettera indica proprio la soluzione TSOP, e non ad esempio una BGA (che va da F a G passando per B a seconda del numero di contatti), sappiamo che stiamo leggendo tutto correttamente. Le ultime tre lettere indicano, rispettivamente, il materiale di cui è costituito il package, l’intervallo di temperature a cui l’integrato può operare ed il cosiddetto “Bad Block”. Per una maggiore facilità di consultazione, vi riportiamo qui di seguito i dati relativi ai significati di ciascun indice a partire dalla classificazione:
X Classification
S = Single Level Cell + Single Die + S/B
A = Single Level Cell + Double Die + S/B
B = Single Level Cell + Quadruple Die + S/B
F = Single Level Cell + Single Die + L/B
G = Single Level Cell + Double Die + L/B
H = Single Level Cell + Quadruple Die + L/B
M = Multi Level Cell + Single Die + S/B
O = Multi Level Cell + Double Die + S/B
P = Multi Level Cell + Quadruple Die + S/B
T = Multi Level Cell + Single Die + L/B
U = Multi Level Cell + Double Die + L/B
V = Multi Level Cell + Quadruple Die + L/B
W = Multi Level Cell + L/B
XX Bit Organization
08 = x8
16 = x16
32 = x32
XX Density
64 = 64Mbit
28 = 128Mbit
56 = 256Mbit
12 = 512Mbit
1G = 1Gbit
2G = 2Gbit
4G = 4Gbit
8G = 8Gbit
AG = 16Gbit
BG = 32Gbit
CG = 64Gbit
DG = 128Gbit
X Mode
1 = 1nCE & 1R/nB; Sequencial Row Read Enable
2 = 1nCE & 1R/nB; Sequencial Row Read Disable
4 = 2nCE & 2R/nB; Sequencial Row Read Enable
5 = 2nCE & 2R/nB; Sequencial Row Read Disable
6 = 1nCE &1R/nB; Sequencial Row Read Enable & Auto Read Page 0
7 = 2nCE & 2R/nB; Sequencial Row Read Enable & Auto Read Page 0
8 = 1nCE &1R/nB; Sequencial Row Read Disable & Auto Read Page 0
9 = 2nCE &2R/nB; Sequencial Row Read Disable & Auto Read Page 0
X Version
D = Dual interface; Sequential Row Read Disable
F = 4nCE & 4R/B; Sequencial Row Read Disable
M = 1st Generation
A = 2nd Generation
B = 3rd Generation
C = 4th Generation
1 = Down Density (1st)
2 = Down Density (2nd)
X Package Type
T = TSOP
V = WSOP
S = USOP
F = FBGA (63ball)
B = FBGA (107ball)
G = FBGA (149ball)
H = TBGA
L = LGA
U = ULGA
W = Wafer
C = Chip
K = KGB
D = PGD2
X Package Material
Blank = Normal, Wafer, Chip, KGB
P = Lead Free
H = Halogen Free
R = Lead & Halogen Free
Blank = Wafer, Chip
C = 0°C to 70°C
X Operating
E = -25°C to 85°C
Temperature
M = -30°C to 85°C
I = -40°C to 85°C
Blank = Wafer
B = Included Bad Block
X Bad Block
S = 1 - 5 Bad Block
P = All Good Block
Quindi, abbiamo capito di che tipo di memoria stiamo parlando. Adesso c’è bisogno di condizionare la memoria per poterla utilizzare, il che vuol dire scegliere un controller adeguato per poi dimensionare i componenti, assemblare il circuito e farlo funzionare al meglio. Come potete facilmente notare dalle foto, è un pò difficile recuperare le informazioni sul controller utilizzato in questa particolare soluzione. Questo non è un grosso problema, però, perché dal momento che l’informazione manca, possiamo ragionare in una maniera diversa: seguendo la filosofia del Reverse Engineering, infatti, noi avremmo ricavato il codice dell’integrato, analizzato il suo foglio specifiche ed identificato i vari componenti. Questa volta possiamo fare qualcosa di diverso: effettuiamo una ricerca generale ed aperta con lo scopo di reperire un controller in grado di gestire proprio questa memoria, ovvero manteniamo la NAND Flash come parametro sapendo che l’unico altro che abbiamo è il collegamento tramite l’USB del PC. A seguito di questa indagine ne troviamo, tra le tante disponibili, una di STMicroelectronics, l’ST72681. Si tratta di un controller per dispositivi Flash ad 8 bit che lavora con soluzioni USB 2.0 High Speed. Insomma, perfetto. Il controller include il supporto per dispositivi di archiviazione di massa, Mass Storage Controller Interface (MSCI), insieme con i vantaggi della correzione Reed-Solomon encoder/decoder on-the-fly (su blocchi dati da 4 a 512-byte), risulta essere un’ottima soluzione per avere grande velocità di trasferimento di dati. Naturalmente, niente a che fare con l’USB 3.0 ma, dal momento che la capacità della penna USB in questione è piuttosto contenuta, i vantaggi non sarebbero così apprezzabili. Come tutti i circuiti, anche questo ha bisogno di almeno un oscillatore, il quarzo. Questa soluzione in particolare è dotata di un PLL interno a 60 MHz con un oscillatore con una frequenza pari a 12 MHz, il che vuol dire che viene generata una frequenza di lavoro per l’USB 2.0 PHY di 480 MHz. Vediamo adesso meglio, nel dettaglio, le caratteristiche di questo integrato. Tenete presente che l’abbiamo scelto soprattutto perché risulta molto versatile e che caratteristiche simili possono essere trovate in una grande varietà di suoi potenziali concorrenti:
• Interfaccia USB 2.0 compatibile con dispositivi di archiviazione di massa USB 2.0 PHY
• Mass Storage Controller Interface (MSCI) con supporto per dispositivi 2 kB-page NAND Flash (Numonyx, Hynix, Samsung, Toshiba, Micron, Renesas ed altri)
• MCU ST7 ad 8-bit integrata
• Alimentazione con un regolatore di tensione 3,3-1,8 V
• Compatibile con USB 2.0 low-power (consumo pari a 100 mA durante la scrittura e inferiore a 500 μA in sospensione)
• Supporto Bootability (HDD mode)
• Data Protection Write
• Contenitore LQFP48 7x7 ECOPACK®
• Reference design completo di schema, BOM e file Gerber
• Supporto per sistemi operativi Windows (Vista, XP, 2000, ME), Linux e MacOS
LAYOUT
Parliamo, ora, di layout e di disposizione dei componenti. Prima di tutto, analizziamo lo schema grazie alla Figura 4.
Si tratta dello schema di collegamento di principio del controller appena analizzato. Sostanzialmente, di tutto quello che serve per farlo funzionare. È evidente, infatti, la presenza del cristallo, delle capacità di controllo sull’alimentazione e di tutto ciò che consente il funzionamento in termini di regolazione della tensione e collegamenti ad altri componenti. Una sezione dedicata dello schema espone anche la necessità di disaccoppiare l’alimentazione (vedi Figura 5) in maniera tale da evitare che delle componenti continue non desiderate possano giungere direttamente ai componenti, causandone la rottura oppure problemi nel funzionamento.
Nell’ultima sezione che riportiamo c’è il collegamento alle memorie. Anche in questo caso si tratta di memorie NAND Flash (vedi Figura 6), il che è ovvio visto che si tratta del controller idoneo per questo tipo. Quello che è interessante è il numero di banchi, che può arrivare fino a quattro. Ovviamente questo significa che, a seconda del numero di banchi collegati ed a seconda delle singole dimensioni di ciascuno di essi, potremmo avere più o meno memoria a disposizione.
CONCLUSIONI
Siamo giunti al termine di questo viaggio all’interno di una penna USB. Dite la verità: al suo inizio, non pensavate che si potesse dire così tanto, vero? Certamente progettare un sistema, per quanto di piccole dimensioni e per quanto semplice possa sembrare, presenta specifiche difficoltà che bisogna imparare a gestire e risolvere. Alimentare correttamente l’integrato non è un compito così banale ed è per questo che è importante affrontarlo come una vera e propria sfida. E mentre il mondo scopre l’utilità della memorizzazione remota o di cloud server a cui affidare i propri dati, nella vita di tutti i giorni ciascuno di noi continua a sfruttare localmente questi piccoli capolavori della tecnica.