AIUTO SPI

Salve a tutti, sto utilizzando un Arduino DUE per comunicare via SPI con uno spettrometro (Qmini datasheet sotto) ma non sto capendo benissimo come funzionano i comandi riportati sul datasheet che risulta essere abbastanza criptico.
Supponiamo che voglia mandare un comando di RESET (0X0000) al device:

dal momento che sto mandando un comando allo slave dal master dovrò mandare innanzi tutto un comando di write ovvero 0x0000f102 (32 bit), seguito da come riportato payload length. Da qui i primi dubbi: la payload length è la lunghezza del dato che sto mandando in byte? quindi dal momento che sto inviando 0x0000(RESET) risulta essere due byte quindi devo inviare 0x00000002?

In totale dovrei inviare 32 bit (write)+payload length(32 bit)+16 bit (comando reset)=80 bit. Mando questi a gruppi di 8 bit alla volta con un ciclo for ed SPI_transfer immagazzinando prima il tutto in un array di byte?

Aiutatemi che non riesco proprio a capire.

NioLink Protocol Manual.pdf (609 KB)

>m_dal: in conformità al REGOLAMENTO, punto 13, il cross-posting è proibito (anche tra lingue diverse) per cui, il tuo post duplicato nella sezione Inglese del forum (post per di più scritto in parte in Italiano, cosa NON permessa) è stato cancellato.

Ti prego, per il futuro, di evitare di aprire più post sullo stesso argomento in sezioni differenti del forum. Grazie.

Guglielmo

Se guardi a partire da pagina 9 del documento che hai allegato viene chiaramente spiegato il funzionamento del colloquio su bus SPI ed il numero dei bytes che devi inviare.

Guglielmo

Si mi scuso ma pensavo di essere sulla parte IT del forum, mi sono accorto dopo di aver pubblicato su quella inglese.
Quello che non mi è chiaro è se devo mandare il messaggio interamente cioè tutti gli 80 bit in un unico SPI.transfer() . In tal caso conviene creare un byte array di grandezza 10 ed utilizzare SPI.transfer(buffer,10).
Altra cosa è: cosa è la payload length? Ok la lunghezza del dato ma in byte e soprattutto su quanti bit va scritta 8?! Quindi dovrei scrivere nel caso del reset command 0x00000002.
Grazie

Intanto ricorda che sul bus SPI si trasmette e si riceve nello stesso tempo, ogni colpo di clock, un bit viene trasmesso ed un bit viene letto, dopo di che ...
.. NON sei tu che ti occupi della trasmissione/ricezione dei singoli "bit" ma è l'interfaccia, tu vedi sempre dei bytes e li trasferisci con il metodo transfer() della libreria SPI ... che devi studiarti bene :wink:

Guglielmo