Pagina 1 di 1

[Rsolto]comunicazione su i2c

MessaggioInviato: giovedì 22 agosto 2019, 13:36
da Montanaro
ciao ragazzi,


devo programmare alcuni dispositivi plug in che si collegano tramite un bridge USB-i2c alla mia control unit linux.

Da un lato quindi ho un attuatore, ad esempio il led PCA9550 ( https://www.nxp.com/docs/en/data-sheet/PCA9550.pdf? ) e dall'altro ho la mia unità linux.
Questa unita comunica con il bridge attraverso i comandi ioctl
Un esempio di implementazione (ereditata, non fatta da me) è questo:

Codice: Seleziona tutto
else if (cmd == IOCTL_DEVICE_CMD_I2CWRITE) {
        struct device_i2cwrite s_i2cwrite;
       
        s_i2cwrite.deviceaddress = value;
        s_i2cwrite.deviceconfiguration = 0x01;
        s_i2cwrite.registeraddress = 0x20;
        s_i2cwrite.numdata = 4;
        s_i2cwrite.data[0] = 0x21;
        s_i2cwrite.data[1] = 0x22;
        s_i2cwrite.data[2] = 0x23;
        s_i2cwrite.data[3] = 0x24;
       
        ioctl(m_fddevice, cmd, &s_i2cwrite);
       
    } else if (cmd == IOCTL_DEVICE_CMD_I2CREAD) {
        struct device_i2cread s_i2cread;
        ioctl(m_fddevice, cmd, &s_i2cread);
       
        _INF() << "number readed = " << '0' + s_i2cread.numdata;
        _INF() << HEX1(s_i2cread.data[0]) << " " << HEX1(s_i2cread.data[1]) << " " << HEX1(s_i2cread.data[2]) << " " << HEX1(s_i2cread.data[3]);
        _INF() << '0'+s_i2cread.data[0] << " " << '0'+s_i2cread.data[1] << " " << '0'+s_i2cread.data[2] << " " << '0'+s_i2cread.data[3];
       
    }




ma non ci sto capendo molto su come utilizzarlo :O


suggerimenti ?

Re: comunicazione su i2c

MessaggioInviato: martedì 27 agosto 2019, 8:14
da Montanaro
ho trovato che si può chekkare il dispostivo tramite
Codice: Seleziona tutto
 i2cdetect
ma non ho e non posso installare il tool :(
quindi devo usare per forza lo ioctl

Re: comunicazione su i2c

MessaggioInviato: sabato 31 agosto 2019, 9:25
da runblade
Ehm di che tipo di info hai bisogno?
Riguardo la i2c in generale, al dispositivo nello specifico, al codice che usi,...?
Tendenzialmente debuggare una i2c senza un oscilloscopio o analizzatore stati logici non è facilissimo in quanto bisogna capire dove la catena (pc->usb->livello elettrico I2c->Data link layer->etc.) presenta dei problemi...
Innanzi tutto a pagina 10 del datasheet trovi come si aspetta di ricevere il pacchetto per la scrittura che è fatto di 3 byte, ma a quanto pare sul codice il pacchetto i2c trasferito è di 7 byte (pare).
Non è che il codice serve a far funzionare una memoria eeprom i2c tipo 24cxx?

Re: comunicazione su i2c

MessaggioInviato: lunedì 2 settembre 2019, 7:17
da Montanaro
runblade Immagine ha scritto:.
Innanzi tutto a pagina 10 del datasheet trovi come si aspetta di ricevere il pacchetto per la scrittura che è fatto di 3 byte, ma a quanto pare sul codice il pacchetto i2c trasferito è di 7 byte (pare).
Non è che il codice serve a far funzionare una memoria eeprom i2c tipo 24cxx?


ciao
voglio semplicemente accendere quei led.
si sono tre byte.
io invio C0h, 15h F4h
su registre device, register addr, data[0]
mi aspettavo che si accendessero i led ma niente.

Re: comunicazione su i2c

MessaggioInviato: lunedì 2 settembre 2019, 14:43
da runblade
Hai provato a trasferire tutto il pacchetto (7 byte) dell'esempio a pag 12 del datasheet?
Almeno parti con una programmazione del chip che in teoria dovrebbe fare qualcosa...

Re: comunicazione su i2c

MessaggioInviato: lunedì 2 settembre 2019, 22:38
da Montanaro
runblade Immagine ha scritto:Hai provato a trasferire tutto il pacchetto (7 byte) dell'esempio a pag 12 del datasheet?
Almeno parti con una programmazione del chip che in teoria dovrebbe fare qualcosa...



eh come si fa su quel codice ioctl citato? :muro:

Re: comunicazione su i2c

MessaggioInviato: martedì 3 settembre 2019, 13:13
da runblade
Io lo faccio con le mie ruotines o con quelle fornite dalle librerie dei sistemi di sviluppo per microcontrollori che uso.
Non ho esperienza su Ioctl/linux; di i2c si, parecchia....

Re: comunicazione su i2c

MessaggioInviato: venerdì 4 ottobre 2019, 13:41
da Montanaro
i comandi (non quelli sopra ma c0, 05, f04) erano giusti. errore dell'hardwarista :)

Re: [Rsolto]comunicazione su i2c

MessaggioInviato: venerdì 4 ottobre 2019, 15:03
da runblade
Scordato le resistenze di pull-up o valore errato?
Con oscilloscopio o analizzatore stati logici te ne saresti accorto subito.