usb host e pendrive separati in casa

Girando in lungo ed in largo ho trovato decine di esempi su come leggere/scrivere files su SD, ma nulla - ribadisco nulla - che riguardi la stessa cosa con chiavetta usb.
Ok che la SD è facile da gestire perchè è SPI e quindi in quasi4e4otto si fa di tutto e che la USB è molto più complicata, ma possibile mai che fare la stessa cosa con una pendrive è più difficile che trovare il vaccino per il covid19 ?

Ho fatto una domanda su github dove c'è la libreria usb-host 2.0, ma noto che rispondono coi tempi della tradotta. Ci sono alcune domande ferme li anche da mesi.

Utilizzando un esempio della libreria di cui sopra, la pendrive sull'usb host viene riconosciuta ma poi ci si ferma lì perchè non esistono librerie in proposito ed io, di certo, non sono quello adatto a farne (purtroppo).

Chiudo lumi qui se qualcuno ha avuto esperienza in merito.

Grazie

L'unica cosa che ho trovato è QUESTA libreria ... di base, nel software della USB Host Shield, NON c'è nulla per fare quello che chiedi quindi ... vedi un po' quella libreria ... ::slight_smile:

Guglielmo

Grazie, Guglielmo
Ho dato una occhiata al volo e purtroppo lavora solo mega 2560.
Debbo installarle l'usb host e voglio provare. Al momento l'usb host ce l'ho installato solo su esp32
Non vedo però esempi relativi a read write di file, ma solo una visione generale del device, come d'altronde anche tu hai detto.
Sono curioso di capire cosa fa.
Faccio un test e ti tengo aggiornato

Risultati apprezzabili anche se il lavoro fatto in quella libreria è fermo da qualche anno
Oltre il neo che funziona solo con una mega è che occorre mettere una libreria usbhost 2.0 modificata, perchè l'originale non va. Debbo comunque approfondire la cosa.

L'ho provata con una mega 2560 e uno shield usb host dedicato (per intenderci quello che va sopra, a sandwich)
I quattro demo hanno funzionato subito. A differenza di quanto detto nel post precedente, gli esempi sono più corposi anche se a mio parere incompleti : ci sono infatti opzioni di scrittura, anche in csv, ma non ho trovato da nessuna parte opzioni di lettura del file.

Sono andato quindi a vedere le librerie che gestiscono la SD (in quanto questa si collega anche a quelle) ed ho messo questo codice di prova, per leggere un file scritto sulla pendrive.

   char CharRead; 
  
  file.open("001.txt", O_READ);
  while(file.available())
  {
      CharRead = file.read(); 
      Serial.print (CharRead);
  }  
  file.close();

in pratica ho utilizzato O_READ, che in nessuno dei demo è presente e .... magia : HA FUNZIONATO !!!
Sul monitor seriale sono apparse tutte le righe del file richiesto.

Continuo le mie prove e vi tengo aggiornati

fotosettore:
in pratica ho utilizzato O_READ, che in nessuno dei demo è presente e .... magia : HA FUNZIONATO !!!

Nessuna magia ;), basta vedere il codice della libreria per trovare in FatApiConstants_h le costanti di quel tipo:

//------------------------------------------------------------------------------
// use the gnu style oflag in open()
/** open() oflag for reading */
uint8_t const O_READ = 0X01;
/** open() oflag - same as O_IN */
uint8_t const O_RDONLY = O_READ;
/** open() oflag for write */
uint8_t const O_WRITE = 0X02;
/** open() oflag - same as O_WRITE */
uint8_t const O_WRONLY = O_WRITE;
/** open() oflag for reading and writing */
uint8_t const O_RDWR = (O_READ | O_WRITE);
/** open() oflag mask for access modes */
uint8_t const O_ACCMODE = (O_READ | O_WRITE);
/** The file offset shall be set to the end of the file prior to each write. */
uint8_t const O_APPEND = 0X04;
/** synchronous writes - call sync() after each write */
uint8_t const O_SYNC = 0X08;
/** truncate the file to zero length */
uint8_t const O_TRUNC = 0X10;
/** set the initial position at the end of the file */
uint8_t const O_AT_END = 0X20;
/** create the file if nonexistent */
uint8_t const O_CREAT = 0X40;
/** If O_CREAT and O_EXCL are set, open() shall fail if the file exists */
uint8_t const O_EXCL = 0X80;

intendevo magia per me ... che sono un pivello con le librerie
magari per voi è normale, per me no, sopratutto quando chi scrive le librerie non rilascia uno straccio di info e occorre fare il cane da caccia senza esperienza.
Io sono uno di quelli che credeva che le api di windows, a suo tempo, facevano il miele e 32 bit, figuriamoci ad andare a trovare il FatApiConstants_h :o
Quindi inutile dire che vi aggiorno qui le mie prove, perchè di sicuro scoprirò cose che già si sanno ...

fotosettore:
magari per voi è normale, per me no, sopratutto quando chi scrive le librerie non rilascia uno straccio di info e occorre fare il cane da caccia senza esperienza.

Hehe, vero, ma considera che non sono librerie commerciali ma in genere fatte da appassionati ed hobbisti, a volte è già tanto se c'è il README decente.. :wink:

In ogni caso quando devo usare una nuova libreria e capire come funziona, guardo nell'ordine:

  1. il README
  2. L'eventuale Wiki (se c'è) o documentazione (se c'è)
  3. Gli esempi allegati, se ci sono (altrimenti cerco in rete esempi di uso)
  4. Se mi rimane ancora qualche dubbio, mi vedo i file *.h (e qui veniamo alle costanti che cercavi)
  5. Se ho ancora dubbi o problemi cerco qui nel forum o in rete se qualcuno ne parla