Newsgroup: it.hobby.elettronica.digitale
Titolo: USB OTG: tipo A e B al posto del micro-AB?

Mio malgrado dovrò affrontare il mostro "USB".  Userò un micro con USB 
controller OTG integrato in un Freescale Kinetis K20.
 
L'idea è quella di avere contemporaneamente una connessione dati di tipo 
device per un PC (seriale emulata o qualcosa del genere con protocollo 
proprietario) ed una connessione di tipo host per una pendrive 
(aggiornamento firmware automatico).
 
Ignorando per ora la difficoltà implementativa (non ho idea di come 
funzioni l'USB, figuriamoci OTG con tutta la problematica di leggere in 
un bootloader la FAT della pendrive per l'aggiornamento...) stavo 
rimuginando sulla connessione fisica.
 
Se non ho capito male il connettore per l'OTG è il micro-AB che accetta 
sia connettori micro-A che micro-B.  A seconda del cavo che uso e del 
dispositivo che collego, la porta diventa host o device.  Non so bene 
come faccia l'USB controller a capire come funzionare.
 
Il classico cavo micro-B da una parte e spina Standard-A (come quella 
delle chiavette) dall'altra mi permette di collegare il device ad un PC 
(come una stampante).
Un cavo OTG con micro-A da una parte e presa Standard-A (come quella dei 
PC) dall'altra mi permette di collegare la pendrive.
 
Siccome vorrei evitare l'utilizzo del micro-AB (costa di più, è più 
delicato, ci sarebbe il problema di recuperare il cavetto...) stavo 
pensando di disegnare i due cavi su PCB ed uscire con due connettori 
diversi: presa Standard-B (tipo stampante) per collegamento al PC e 
presa Standard-A (tipo PC) per chiavetta.
Il cavo "tipo stampante" si trova facilmente e la pendrive potrei 
collegarla direttamente.
 
L'unico problema sarebbe se qualche utonto usa contemporaneamente le due 
porte, ma potrei accettare un commutatore per abilitare una o l'altra porta.
 
Suggerimenti?


 
Lo stack USB Kinetis per me è stato difficile da utilizzare,infatti ho 
ancora delle cose in sospeso
Però prima dell'OTG io comincerei a implementare il master e il 
device,magari nella classe mass storage quest'ultimo ,in modo da 
implementare la FAT,
cosa che comunque puoi fare anche col master che deve prendere atto del MSD 
che c'è dall'altra parte ,quindi per prima cosa mi procurerei una pendrive 
su cui fare tutte le prove
 
sul connettore non so diriti niente 
 
 


 
Ciao
Giuseppe
 


 
Quindi secondo te è possibile usare un jumper per scegliere la modalità 
host o device e, conseguentemente, collegare un PC alla presa tipo B oppure 
una pendrive alla presa tipo A?
 
Quello che voglio fare è un bootloader che, al reset, controlla il modo di
funzionamento USB tramite il jumper.  Se in modalità host verifica se è 
presente un file compatibile nella pendrive (limitandosi a guardare la root).
Se in modalità device, prova a comunicare con un PC con un protocollo
proprietario per l'aggiornamento.
Se l'esito è negativo, parte l'applicazione normale.
 
Ora, mi immagino che lo stack USB debba entrare nel bootloader che non deve
occuparmi il grosso della Flash, altrimenti non avrei spazio per 
l'applicazione.  Secondo te può essere oppure rischio di avere un 
bootloader troppo grosso?
 
Un'altra possibilità è evitare il bootloader e gestire l'eventuale upgrade
direttamente dall'applicazione.  Ma questo non mi piace per due motivi:
- se l'applicazione va in crash per un bug, rischio di non gestire 
  correttamente il firmware upgrade e poi sono costretto ad usare il JTAG;
- se l'applicazione deve sovrascrivere sé stessa, devo avere il doppio di
  spazio in Flash (da A scrivo su B e alla fine dico che su B c'è il nuovo
  firmware) oppure deve esserci un modo per passare tutto il codice di 
  firmware upgrade in RAM e lanciare da lì l'esecuzione, ma non ho proprio
  idea se si può fare una cosa del genere.
 
Suggerimenti?
 
 

 su cui fare tutte le prove
 
Non ho capito benissimo.  Mi stai suggerendo di implementare, in
modalità device, un meccanismo di upgrade tramite classe MSC (anziché
CDC come avevo pensato inizialmente)?  In effetti questo permetterebbe
di riutilizzare l'implementazione della FAT che dovrei comunque fare
per la modalità host.
 
Quindi l'aggiornamento si limiterebbe nell'incollare il file di upgrade
nel disco removibile che apparirebbe sul PC al collegamento con la mia 
scheda.
 
Sarebbe figo, ma penso non sarà facile.  Ci sono esempi in giro?

 ancora delle cose in sospeso
 
Cominciamo bene.  In realtà ho (quasi) scelto di usare un Kinetis perché
mi sembrano molto economici.  Un QFP 64 pin con USB integrato sta intorno
ad 1.50€ per 1000pz.
Se ci sono altre soluzioni altrettanto economiche, ma più affidabili a
livello di USB sono tutto orecchie.
 
 
si,ma sono io che sono scarso,in realtà Freescales ti dà tantissima roba già 
fatta,strutturata per utilizzare lo stack senza problemi,
 
io partirei quindi da un progetto esempio con già lo stack USB e ci 
aggiungerei poi i moduli per le mie necessità
 
il fatto di usarlo solo come device o come master lo suggerivo giusto per 
fare pratica