Arduino Uno e PyUSB...come fare?

Salve a tutti,
avrei un problema da esporvi che purtroppo il caro Google non ha saputo risolvermi.

Dovrei creare uno sketch compatibile con un software scritto in Pyton, che sfrutta la libreria PyUSB per comunicare con i dispositivi collegati.
Mi sono informato un po' (anche se in rete si trova poco) e sembra che PyUSB non sia proprio il massimo per comunicare con Arduino, ma purtroppo ho le mani legate in quanto devo proprio mantenere la compatibilità con il suddetto software.

Qualcuno sa in che modo posso impostare lo sketch in modo da poter recepire i comandi inviata dalla PyUSB?
Mi sembrava di aver letto qualcosa riguardo alle modalità HID, ma non ne sono sicuro...

Grazie a tutti in anticipo :wink:

PyUSB è un binding per usare la librerie libusb 1.0 scritta in C attraverso appunto il binding.
Se ti necessita accedere alla usb di arduino con il protocollo USB allora non c'è altra soluzione.
Mentre se ti serve solo scambiare dati seriali puoi usare pyserial e connetterti con arduino 2009 sul dev /dev/ttyUSB0 o arduino UNO su /dev/ttyACM0, questo però vale su sistemi *nix, su windows i nomi saranno COMXX o simili.

Ciao.

Il mio problema è che ho un software in python (che non posso modificare) che usa pyusb per comunicare con un device esterno (un flasher AVR).
Io sto replicando con arduino il flasher e vorrei mantenere la compatibilità con il software, per cui vorrei sapere se e come poter configurare correttamente arduino per poter leggere (e rispondere) in maniera corretta i comandi ricevuti dal programma.

Interessante, qual'è l'AVR flasher che stai replicando?
Qual'è il software che usa python.

Io ho scritto in C usando libusb per gestire l'avrisp mkii di atmel. Per farlo però ho dovuto studiare il protocollo USB e il protocollo usato per avrisp mkii. Il tuo arduino dovrà avere una dotazione hardware capace di USB e dovrai usare del software non proprio semplice per gestire lo STACK usb, cerca LUFA.

Fammi sapere, buona fortuna.

Il flasher che voglio replicare è questo:

Basato su PIC18F2455, di cui è disponibile solo .hex ma non il source.

Esiste già un porting open AVR basato su AT90USB(GitHub - G33KatWork/XBox-360-AVR-flasher: An XBox 360 SPI NAND flasher for AT90USB-style chips), il mio scopo era quello di trasportarlo su arduino mantenendo lo stesso software lato pc (scritto in python e che appunto usa pyusb).
La soluzione basata su AT90 appunto si basa su LUFA. E' possibile usarla anche sull'arduino Uno?

mmmm… no su arduino UNO il port se fosse possibile richiederebbe troppo lavoro.
Il motivo è legato al fatto che il progetto che hai linkato usa un AT90xx con supporto usb nativo e la board uno invece è composta da un 16U2 come interfaccia usb seriale verso il micro 328p che di suo non ha usb nativa ma solo una seriale TTL. Se guardi il codice sorgente che viene messo dentro il 16U2 vedi che usa LUFA.

La board leonardo potrebbe essere più indicata, ma bisogna verificare la dimensione del firmware, cioè quanta flash ha l’AT90 usando in quel progetto e quanta flash ha il micro della leonardo?.
Inoltre con la leonardo perdi le funzionalità tipiche della scheda e ti serve un programmatore ISP.

Ciao.

Capito.
Però ho trovato un porting delle lib V-USB specifico per Arduino (QUI) ma purtroppo non è molto chiaro su cosa posso e non posso fare.
V-USB in teoria permette di fare quelle che serve a me, però voglio prima chiedere il parere di qualcuno più esperto :wink:
@MauroTec sapresti illuminarmi sulla questione?

Grazie!

Ok, VUSB è stato provato da utenti del forum con risultati non proprio positivi.
Un utente ingegnere è intervenuto dicendo che è meglio evitare VUSB esponendo dei motivi convincenti.
Però è anche vero che il programmatore USBtiny di adafruit ha usato VUSB.

Io non la considero una strada da intraprendere, cioè prima devi fare dei test per vedere se VUSB funziona e entro che limiti e poi non è detto che ci sia compatibilità con il programma python. Quella di usare VUSB la vedo come una cosa che potresti tentare dopo aver fatto il port del codice verso un micro con USB nativa.

L’obbittivo qual’è, fare un prodotto da vendere? o mi serve usare quel programmatore e lo faccio con arduino UNO così risparmi? Nel secondo caso il gioco non vale la candela, troppo variabili in gioco e troppi possibili motivi di mancato funzionamento.

Ciao.

mi stavo chiedendo anche io quale fosse l'obiettivo, quale e' il sw pyton che citi ? magari quelle cose possono essere fatte con altri rpogrammatori gia' di per se open ?
spetta ma e' per le memorie delle consolle ? mi sembra che ne parlammo anche su altro topic
http://www.prezzydeal.com/matrix-nand-programmer.html

Dunque, vedo di chiari la questione:
L'immagine postata è di un NAND flasher per console Xbox, che si può usare attraverso un software free ma closed source(NandPro) oppure attraverso uno open source scrittto in python(Xflash).
Si esatto, se ne è parlato su un altro topic, ma all'epoca non avevo ancora le idee chiare sul funzionamento e su cosa volessi ottenere.Quello era più che altro per chiedere informazioni su come interfacciarsi col controller, ma è un problema già risolto.

Per programmare esistono già soluzioni basate su Olimex(che non so se sia open) o su AT90xx(open, che è quello che ho postato).
Il mio scopo era quello di fare un porting del programmatore su arduino(basandomi sul lavoro fatto su AT90) e avrei preferito farlo potendo mantenere il software lato pc originale(Nandpro/Xflash, che sono basati rispettivamente su libusb e pyusb).
Il prodotto non è assolutamente da vendere, lo facevo solo per unire la passione per arduino e quella per xbox e, una volta completato, pubblicare il tutto in maniera free.

Lo scopo di questo topic era solo consultarvi per sapere se c'era un metodo per mantenere la compatibilità software senza eccessivi grattacapi, ma da quello che ho capito no, quindi devo solo decidermi se riscrivermi l'app da o se espandere Xflash col supporto pyserial.

Tutto qui

ma resta sempre in campo la terza opzione, gia’ citata da Mauro, cioe’ di usare arduino leonardo (io userei Arduino micro per le dimensioni, visto che non ti servono shield), proprio perche’ usa un micro con usb integrato e mantenere cosi’ la compatibilita’ con il sw client

Quanto questo sia difficile non lo so, non ho mai messo mano alla sezione usb di questi micro e non ho mai toccato lufa

p.s. la cosa e’ interessante, tu vieni dal mondo sw ? io nasco elettronico e quindi ogni linea di codice da scrivere mi costa 10 (100 ?) volte il tempo che costa a Mauro ed altri qui sul forum presenti, pero’ prima o poi un hello word via usb/lufa dovro’ farlo :slight_smile:

Si, potrei anche lavorare sul Leonardo o sul Micro, ma personalmente giudico abbia una maggiore priorità il fatto che possa girare su tutte le board che sia compatibile con software già fatto.
Poi magari un giorno ne farò una versione dedicata a quelle board, chissà! :slight_smile:
Si, io vengo dal mondo software e per me vale esattamente il contrario:ogni circuito da progettare è un calvario! :slight_smile:
A proposito di elettronica: leggendo il README progetto basato su AT90xx il dev dice:

Just have an eye on the voltage your board uses.
The USBKey has a 3,3V power supply which is exactly the voltage needed

Che cosa intende? Su AT90 i levielli logici dei pin sono sempre 0-5V o 0-3.3V?

intende che questo programmatore lavora a 3,3v e che le memorie a cui vuole interfacciarsi funzionano anch'esse a 3,3v
quindi ad esempio la UNO non puoi usarla senza mettere mano ai livelli di tensione

Ok, allora avevo capito bene.
Da quello che ho capito per abbassare la tensione di lavoro si cambia il fusibile e il regolatore, sostituendolo con uno da 3.3V.
Però osservando lo schema per realizzare il flasher via porta LPT

I livelli della porta parallela non sono TTL(0-5v), esattamente come UNO?
Se così fosse mi basterebbe aggiungere tra Arduino e NAND le stesse resistenze(100 OHM) che userei col cavo LPT, giusto?

lo schema che hai postato va bene per i pc che escono a 3,3v sulla parallela. (ci sono pc che usano il 5V ed altri con il 3,3V sulla LPT)
dovresti misurarla, se tu hai la parallela a 5V non va bene questo schema.
cmq se vuoi usare la uno bastano dei semplici partitori

Teoricamente questo schema è dato come universale, non viene specificato se la parallela deve erogare 5v o 3.3v.
Nel caso fossero 3.3 quale sarebbe il motivo delle resistenze?

su 10 schemi internet 9 sono sbagliati o non descritti bene :slight_smile:

in questo caso le resistenze, parlando di LPT a 3,3v, fungono da disaccoppiatore, volendo fare un lavoro piu' serio servirebbero dei fotoaccoppiatori per isolarsi dal pc

Boh non saprei, io vengo dal mondo Xbox e ti posso dire che quello schema è stato usato da un sacco di persone(compreso il sottoscritto) e non ho mai avuto problemi di nessun tipo, ne sentito di persone che ne hanno mai avuti.
Quindi no so che dire...
Accennavi al fatto dei partitori:riesci a dirmi qualcosa di più?

UPDATE:Sembra che lo schema sia stato pensato per le LPT 5v(che sembra siano la stragrande maggioranza), e che nel caso si abbia una 3.3v(rarp caso) ci sia da rimuovere le resistenze.Quindi le resistenze sembra che servano ad abbassare la tensione.

Puo' essere che le memorie a cui si ci collega sono "5V Tolerant", come ad esempio alcuni convertitori seriale/usb
Se e' cosi' ti funziona lo stesso ma restano valide tutte le cose che ho scritto, ed onestamente non puoi rischiare di fondere una xbox per una cosa cosi' banale

per partitori intendo una cosa del genere,
http://www.google.it/imgres?imgurl=http://img441.imageshack.us/img441/2391/schematicuo7.jpg&imgrefurl=http://forum.arduino.cc/index.php/topic,8314.0.html&h=414&w=645&sz=95&tbnid=mOTbfKNlPEbduM:&tbnh=90&tbnw=140&zoom=1&usg=__TnU8iGBOZgbnDIVhqEiLTq6PqVM=&docid=6TviWjQsl5ip1M&sa=X&ei=Hip0UrT2MMXJtQbP2oHwCw&ved=0CEAQ9QEwAQ
poi volendo si possono usare tecniche piu' professionali come una gestione a mosfet o l'uso di integrati/buffer

Some parallel ports run at 3.3v others at 5v. The MAINBRD is 3.3 volts.
Testing with 5 volt lpt and NO resistors didn’t burn anything up.
It is recomnened to use 100 ohm series resistors
for all lpt connections except for DB25.11 and DB25.18 (GND).
This solution isn’t perfect but you typically dont leave it hooked up forever anyway.
If someone wants to design and post a buffer circuit go right ahead. I can’t be bothered

Questo è ciò che dicono i dev del settore.
Stando a quello che dicono non brucio niente anche senza resitenze ma preferisco portare le uscite a 3.3v, preferibilmente con il circuito più semplice possibile(senza scomodare mosfet o altri ic).
Che vantaggi avrebbe montare un partitore rispetto ad una semplice resistenza in serie?
cosa mi consiglieresti di fare?