Problema di comunicazione seriale flash con Microchip SST26VF064B - ID JEDEC errato

Aug 19 2020

Sto provando a testare la comunicazione SPI con il flash seriale Microchip SST26VF064B e ho riscontrato un problema durante la lettura dell'ID JEDEC dal chip. Secondo la scheda tecnica, i primi tre byte dovrebbero essere 0xBF, 0x26, 0x41 / 0x42. Ottengo dati completamente diversi: 0x7C, 0x20, 0x7F. Il chip sembra rispondere per leggere il comando ID JEDEC 0x9F, ma invia sempre gli stessi dati imprevisti.

Ho provato il driver SPI fornito con SDK per SOC con cui sto lavorando, e anche un semplice SPI bit-bang - il risultato è lo stesso, quindi penso che la comunicazione SPI funzioni bene. Sono a corto di idee su cosa provare dopo ... C'è qualche motivo per cui posso ottenere questi dati invece dell'ID previsto?

Risposte

1 woytekm Sep 01 2020 at 14:30

Sembra che questo fosse un problema complesso in parte correlato al clock e anche alla mancanza di resistori in serie sulla linea MISO. I problemi alla fine sono andati via dopo aver aggiunto una resistenza da 100ohm su MISO e impostato la linea SOC SCLK nRF52840 su "high drive", per far diminuire / aumentare più velocemente i fronti del clock.

Sospetto che i miei problemi siano legati al fatto che attualmente sto lavorando su una breadboard con cavi di collegamento abbastanza lunghi (10-15 cm). Come con ogni progetto, sto cercando di testare tutti i componenti sconosciuti prima di integrarli in un circuito / PCB. Naturalmente, la breadboard può e introdurrà i propri problemi, e questo probabilmente sta accadendo qui, ma comunque, ho lavorato con pochi chip SPI diversi e non ho mai riscontrato un comportamento così irregolare dei segnali sul bus prima.

- Primo problema: lo slave sta emettendo qualcosa su MISO, ma i dati in uscita sono imprevisti / sbagliati. Ho incluso gli schermi dell'oscilloscopio nella domanda originale e nella seconda, espansa, si possono vedere piccoli picchi che si verificano su MISO. Ho esaminato questi picchi e mi è sembrato che si verifichino sempre alle cadute del bordo del clock, quando lo slave dovrebbe spostarsi il bit successivo:

Giallo - CS, Blu - Orologio, Viola - MISO (MOSI è escluso su questi schermi)

Nella schermata in alto, si può vedere che lo slave rileva la caduta del limite del clock e MISO sta iniziando ad aumentare (apparentemente un po 'nel byte letto è uguale a 1), ma poi quando il bordo del clock scende ancora più lentamente, lo slave si confonde in qualche modo e spegne anche MISO prima che raggiunga il livello logico H appropriato (almeno questa è la mia comprensione di ciò che sta accadendo qui). In secondo luogo, lo schermo inferiore serve per il confronto, quando la funzione "high drive" di nRF52840 SOC è abilitata su SCLK - il limite del clock diminuisce più velocemente e MISO agisce correttamente con questa impostazione - il chip emette i dati previsti.

- Secondo problema: il segnale MISO è ok quando rilevato non collegato. Dopo il collegamento al master, il segnale MISO viene distorto al punto che è illeggibile dal master o non c'è alcun segnale MISO.

Di seguito è riportato il comportamento corretto (con resistenza da 100ohm su MISO, drive alto abilitato su SCLK) - questo è un chip flash diverso rispetto alla domanda originale - l'ho cambiato in Micron MT25QL128ABA, ma si è comportato esattamente allo stesso modo. Sonda con master collegato a MISO. Giallo - CS, Blu - Orologio, Viola - MISO. MOSI è escluso su questi schermi.

Di seguito è riportato il comportamento senza resistenza: nessun segnale MISO. Sonda con master collegato a MISO. Giallo - CS, Blu - Orologio, Viola - MISO. MOSI è escluso su questi schermi.

Ho trovato numerosi thread sui forum nordici, che descrivono problemi MISO simili: https://devzone.nordicsemi.com/f/nordic-q-a/47335/problem-using-digital-io-as-miso https://devzone.nordicsemi.com/f/nordic-q-a/47968/spi-doesn-t-work-in-nrf52810-while-emulating-nrf52810-in-nrf52832dk-was-successful/190230#190230

Non sono sicuro che si tratti di un bug o di un'errata configurazione del pin SOC utilizzato per MISO o se è correlato a lunghi cavi del bus SPI nel mio circuito di prova. Da quello che ho letto - i resistori possono essere utilizzati sul bus SPI per abbinare l'impedenza del ricevitore e del trasmettitore quando i cavi / tracce sono lunghi (ma 10 cm sono lunghi abbastanza da causare tali problemi?). Il fatto è che il resistore di valore relativamente piccolo su MISO aiuta qui. Vorrei sapere perché esattamente ciò accade, ma per essere sicuro mi manca una solida conoscenza di basso livello. Incorporerò un resistore su MISO su un PCB, ma lo testerò prima con il valore 0R, per vedere se condizioni migliori su PCB (tracce più brevi) faranno funzionare questo senza resistenza aggiuntiva.