Pic Micro, Arduino, Atmel, Microchip, Freescale, Texas Instrument, ecc. Strumenti di sviluppo, firmware e progetti.
#3084
Salve, in un mio progetto in cui realizzo un Host usb dovrei interfacciare un microcontrollore Microchip (host) ad una penna usb (device).

Ci lavoro salutariamente ma al momento sono risucito a far funzionare le librerie Microchip per la gestione usb come host. Ora vorrei mettere una funzione, simile a quella del sistema operativo che consenta la rimozione sicura della periferica (penna usb) senza rischiare di bruciarla ed evitando di dover spegnere la scheda ad ogni estrazione.

Non ho modo di fare prove su un device usb ed il computer per vedere cosa accade e come gestire la cosa.

Chiedo a voi qualche consiglo utile su come procedere. Ad esempio penserei di mettere un pulsante dedicato ad avviare la procedura di espulsione, ma non so se basti togliere la alimentazione alla linea Vbus (da 5volt) per alimentare la usb... o se addirittura sia del tutto inutile (del tipo: sfilo direttamente la usb mantenendo la alimentazione, dopo aver arrestato ogni comuncazione con la periferica )
#3091
Una delle tante ragioni tecniche alla base del successo dello standard USB è proprio la possibilità di attaccare e staccare i pezzi in presenza d'energia per l'alimentazione.
L'host è concepito per non subire danni nel caso una periferica assorba più corrente del dovuto, e la periferica (chiamiamola slave o chiavetta, per fare più scena) è concepita per non subire danni nel momento in cui viene collegata o scollegata con un'azione fisica netta o maldestra da parte dell'utente.
Il fatto che i sistemi operativi ti chiedano di "smontare" o "espellere" le chiavette prima di tirarle fisicamente via non è legato all'alimentazione dei circuiti d'interfaccia USB, ma serve solo per evitare che il distacco interrompa bruscamente un'operazione di scrittura in memoria, col rischio di creare un'incongruenza che, in seguito, potrebbe impedire l'accesso a qualche file, a qualche cartella, o all'intera zona dati di molti gigabyte.
A dispetto della semplicità con cui clicchi e trascini per copiare, aggiungere e togliere, la scrittura dei dati in una memoria non volatile che "vedi" come disco è abbastanza complessa, poiché segue determinate regole dettate da esigenze contrastanti di velocità, affidabilità e sicurezza.
Per fare un esempio prendiamo un'ipotetica foto ad altissima risoluzione che occupi intorno al mezzo gigabyte.
In teoria, quando clicchi e trascini sopra l'icona della chiavetta, il sistema potrebbe limitarsi a scrivere uno per uno tutti i byte della foto a partire dalla prima area libera disponibile, per poi prender nota della zona occupata ed etichettarla a dovere col giusto nome. Per una sola foto che sposti il discorso regge, ma già con due o più che scrivi, cancelli e riscrivi, la faccenda si complica in un batter d'occhio, perché il sistema deve prima scorrere byte per byte alla ricerca di una zona libera, e poi sperare che questa sia abbastanza grande da contenere in blocco tutti i nuovi dati.
Un sistema che agisse così non sarebbe operativo ma "disperativo", anche perché se scrivi tante foto piccole e poi ne cancelli alcune qua e là, i buchi che lasci potrebbero contar molto come somma di giga, ma non servire affatto per accogliere in blocco un solo file grande.
Un sistema operativo vero e attuale risolve i problemi ragionando così: in primo luogo non considera i singoli byte ma gruppi ben più grandi che chiama "cluster", cioè, alla lettera "ammassi"; in secondo luogo non scrive i nomi dei file nel punto in cui conserva i dati, ovvero qua e là a caso, ma crea una bella lista specifica che possa fungere da indice di rapida consultazione. Dulcis in fundo, non scrive necessariamente i cluster uno di seguito all'altro, ma fa in modo che la nostra foto d'esempio venga, se necessario, spezzettata e collocata in ordine sparso ad occupare anche eventuali buchi lasciati dalla cancellazione di file più piccoli. Ovviamente, per fare ciò, mantiene un'altra bella lista dove aggancia insieme (i tecnici direbbero "linka") i cluster fra loro.
Come rovescio della medaglia accade che i file, anche se lunghi per assurdo un solo, misero byte, debbano occupare nella chiavetta almeno un cluster (ad esempio 32 o più kilobyte), ma questo è un male ben tollerabile, poiché la memoria fisica in tecnologia "flash", molto in voga oggi, è spesso organizzata affinché la scrittura avvenga comunque in pagine o blocchi relativamente grandi.
Il meccanismo dei cluster e dell'indice espone però la chiavetta ad un certo rischio d'incongruenza proprio in occasione di un black-out, cioè della brusca mancanza d'energia durante una scrittura.
La famosa Legge di Murphy stabilisce che l'energia mancherà proprio nell'istante in cui il sistema operativo ha appena finito di spedire alla chiavetta l'ultimo blocco di dati, e si sta accingendo a preparare l'invio delle informazioni che aggiorneranno di conseguenza l'indice e la sequenza dei cluster.
Che cosa può succedere se, dopo il black-out e il ripristino dell'energia, nell'area dati della chiavetta ci sono tutti i pezzi della foto ma non i riferimenti per andare a pescarseli nel giusto ordine in mezzo a tanti altri?
Se siamo fortunati perdiamo solo un po' di spazio, cioè quell'area che nell'indice risulta "allocata" per la foto che abbiamo copiato ma di cui non abbiamo traccia del nome e della posizione; se siamo meno fortunati perdiamo la coerenza dei cluster, ovvero ci ritroviamo con la foto che per metà ritrae il soggetto d'origine, e per metà mostra un pezzo di qualche altro file incontrato lungo il percorso e "agganciato" alla catena in seguito all'errore di scrittura.
Se siamo proprio iellati perdiamo la coerenza dell'intero indice, e quando inseriamo la chiavetta riceviamo il triste invito a formattare perché l'oggetto, agli occhi del sistema, non contiene la risorse standard che lo qualificano come supporto dati utile.
In sostanza, visto che non puoi impedire alle persone di sganciare fisicamente la chiavetta nel momento critico, un buon accorgimento tecnico può essere accendere un LED rosso accecante quando stai scrivendo, e un LED verde flebile quando tutto è stato aggiornato con successo. Se hai già scritto il firmware per gestire un host USB, quest'ultima operazione visiva sarà facilissima. :)
Gio55 ringraziano
#3093
Grazie molto esaustivo!

Bhe via tutto il fw dell'host usb non l'ho proprio scritto da solo :oops: ; ho potuto sfruttare le librerie MLA (che però ho dovuto debugare a lungo per farle girare sul mio micro).

Allora vada per la segnalazione "fine scrittura" senza disalimentazione dei 5V (così mi risparmio pure il pin VbusON che sto veramente a corto di I/O !!!!)
#3100
Gio55 ha scritto:consenta la rimozione sicura della periferica (penna usb) senza rischiare di bruciarla

Se è questa la tua preoccupazione, stai sereno, non c'è nulla in un interfaccia USB che possa "bruciare" la penna.
Gio55 ringraziano
Vendo

OWON HDS2202S nuovo imballo originale 190.00 eur[…]

Sono comuni interruttori a levetta DPDT. Se le due[…]

Visita il nostro canale telegram