Il pin SS può essere ridotto se viene utilizzato un solo dispositivo SPI?


8

Ho letto online che per avviare una transazione SPI su un dispositivo SPI supportato, la riga SS (selezione slave, aka selezione chip) deve essere impostata su bassa per l'intera transazione, quindi essere elevata alla fine della transazione. Se creo un circuito contenente un solo dispositivo SPI, dovrò abbassare il comando di invio linea SS, quindi alzare la linea ss ogni volta o posso legare la linea ss bassa e inviare comandi illimitati? Il dispositivo che sto usando è il chip audio ISD1700 .


3
In generale sì, il pin SS comunica al dispositivo slave quando inizia e termina la transazione. Senza di essa non c'è nulla per garantire che rimanga sincronizzato. Potrebbe funzionare, ma se non viene mai sincronizzato non lo riacquisterà.
Kevin White il

4
@kevinWhite in realtà molti dispositivi SPI hanno bisogno di quella transizione SS per dare il via a una macchina a stati interna. Il foglio dati per il tuo particolare dispositivo dovrebbe darti la risposta, ma se l'hai già ricevuto, perché non provarlo?
akohlsmith il

1
@akohlsmith - Sono d'accordo, sto dicendo che hai bisogno delle SS, non che puoi scappare senza di essa. Anche quei dispositivi che non lo richiedono per eseguire operazioni interne possono uscire dal sincronismo con il master. L'unico produttore che ha visto raccomandare di non utilizzare l'SS è Analog Devices per alcuni dei loro dispositivi in ​​cui hanno più funzioni assegnate ai pin in modo tale che l'SS potrebbe non essere disponibile. Non vedo come ciò possa essere affidabile e ho sentito dei reclami in cui il dispositivo richiede un ripristino per riportare in sincronia.
Kevin White il

Sono d'accordo con @akohlsmith. E se vuoi rispondere alla domanda, voterò. Ecco il mio argomento: comunico periodicamente con un dispositivo tramite SPI. Tuttavia, esiste una funzione guidata da interrupt che richiede anche lo SPI sullo stesso dispositivo. Usando il pin SS dovrei essere in grado di interrompere la transazione SPI corrente senza finirla. Consentendomi di accedere più rapidamente al dispositivo SPI durante la manutenzione dell'interrupt.
st2000,

Risposte:


14

[@Kevin e @akohlsmith dovrebbero pubblicare i loro commenti come risposte.
Questo per espandere i loro commenti. ]

SPI 1 non prescrive il comportamento esatto dell'SS (slave select line 2 ). Questo comportamento dipende dall'implementazione di ogni singolo dispositivo. Ho visto dispositivi in ​​grado di funzionare in modo permanente con le SS. Ho anche visto dispositivi che richiedono fronti di caduta e di salita sulla SS.

Sebbene non affermi esplicitamente che SS deve essere attivato,
la guida alla progettazione (p.31) afferma che SS avvia e termina la transazione SPI. Sarebbe prudente presumere che SS debba essere attivato per consentire la transazione SPI.

1 SPI è più un'usanza, piuttosto che uno standard.
2 CS (selezione chip) è un altro nome per la selezione slave.


6
Questa è un'ottima risposta Molti / la maggior parte dei dispositivi di destinazione SPI dipendono completamente dalla linea SPI_CS per inizializzare la macchina a stati di acquisizione bit interna alla parte per sincronizzarsi tra l'iniziatore e i dispositivi di destinazione. Ci sono alcuni dispositivi che sono in grado di risincronizzarsi semplicemente riconoscendo gli schemi di sincronizzazione o opcode al volo sulla linea del segnale MOSI. Ma questi sono in minoranza e si consiglia a chiunque stia progettando un sistema che utilizza dispositivi SPI di fornire un SPI_CS a ciascun dispositivo di destinazione anche se ciò significa utilizzare circuiti extra e / o GPIO con il dispositivo iniziatore per fornire tale funzionalità.
Michael Karas,

Non c'è bisogno di aggiungere un'altra risposta, la tua cattura ciò che @kevinwhite e io stessi dicevamo. :-)
akohlsmith il

5

Dipende interamente dal dispositivo slave.

Se il protocollo per il dispositivo slave include una sorta di frame, sia che si tratti di pacchetti a lunghezza fissa, byte di avvio / arresto o un'intestazione che specifica la lunghezza del pacchetto, il dispositivo slave potrebbe essere in grado di funzionare senza una selezione di chip. Ho un chip di memoria flash SPI nella scheda su cui sto attualmente lavorando, che sembra essere perfettamente soddisfatto o meno della selezione del chip. Può essere collegato in modo permanente a 0 V (abilitato) senza problemi.

Questo in realtà ci ha causato alcuni problemi, perché un appaltatore aveva impostato alcuni degli I / O di basso livello, incluso lo SPI, e noi (e loro!) Non ci siamo resi conto di non far funzionare il chip select. Non è stato fino a quando non ho dovuto estendere il loro lavoro SPI per aggiungere un altro dispositivo SPI sullo stesso bus che ho scoperto che in realtà non avevamo selezioni di chip!

Al contrario, molti dispositivi slave necessitano di selezioni di chip per inquadrare i dati e l'invio di più bit / byte rispetto al pacchetto previsto senza rilasciare la selezione di chip alla fine verrà visto come un trasferimento non valido e rifiutato. I DAC caricheranno spesso il nuovo valore sull'uscita sul fronte di salita della selezione del chip. Allo stesso modo gli ADC useranno spesso il trasferimento SPI per avviare (e talvolta il tempo) la conversione, quindi hanno bisogno del chip che seleziona il fronte di discesa come trigger.

Il tuo foglio dati in realtà non dice nulla su come guidare il tuo particolare chip su SPI e non sono abbastanza motivato da cercarlo su Google. Esercizio lasciato per il lettore ...;)


Ho intenzione di legare SS in basso e pregare che funzioni poiché il foglio dati per il dispositivo che ho ricevuto da Internet afferma solo che (secondo la tabella di definizione dei pin nel foglio dati) SS viene utilizzato per abilitare il dispositivo. Indica inoltre che se SS è alto, le altre linee SPI saranno in stato di alta impedenza. dita incrociate.

@ Mike Ho scoperto qualche motivazione stamattina, quindi ho cercato su Google "ISD1700". I primi due collegamenti erano due file PDF. Il primo era il foglio dati a cui ti sei collegato; e la seconda è stata la guida alla progettazione che dice esattamente come guidare il chip. La guida alla progettazione dice (sezione 10.2, pagina 31): "Una transazione SPI viene avviata sul fronte di discesa del pin SS ~". Quindi no, il foglio dati dice che non puoi cavartela con quello che stai pianificando. E non voglio essere troppo snarky qui, ma se tu avessi JFGI e leggessi i primi due link che sono venuti fuori, avresti potuto rispondere alla tua domanda.
Graham,

3

Senza sapere nulla di specifico sul dispositivo SPI slave, no, non puoi semplicemente legare SS basso.

Molti dispositivi utilizzano il bordo anteriore di SS per ripristinare la loro logica interna all'inizio di una nuova transazione. Ad esempio, le memorie potrebbero interpretare i primi due byte come indirizzo, quindi i byte successivi come dati. Alcuni ricordi non eseguono la scrittura fisica fino a quando SS non viene disattivato.

Per alcuni dispositivi con il protocollo giusto, potresti riuscire a cavartela. Tuttavia, non funzionerà con la maggior parte dei dispositivi disponibili.


Diversi anni di ritardo su questo. E sono qui perché cercavo anche risposte. Ottime informazioni sull'aggiunta di Olin e buone informazioni anche da altri. Penso che il problema riguardasse principalmente l'interpretazione delle parole "selezione chip" o "selezione slave" - ​​che se uno fosse costretto ad assumere qualcosa, allora il presupposto significherebbe semplicemente attivare quel dispositivo e spegnere tutti gli altri dispositivi slave che potrebbero altrimenti interferire con le comunicazioni tra slave e master. Un "presupposto" equo e logico. È bello che questo argomento sia chiarito proprio qui in questa discussione.
Kenny,

Un'altra domanda che segue da questo argomento potrebbe essere: Ad esempio: disabilitiamo il dispositivo slave dopo il completamento di ciascun comando inviato allo slave?
Kenny,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.