Pagina 1 di 1

Scambio dati fra microcontrollori ad alta velocità (STM32)

MessaggioInviato: 12 mar 2021, 12:26
da Lucast85
Ciao a tutti,
dovrei scambiare dei dati fra due microcontrollori (un STM32L4 ed un STM32MP153) e mi servirebbe un aiuto nella scelta dell'interfaccia più adatta.
Per non avere limiti in futuro avevo pensato di scegliere una Quad-SPI ma al momento della selezione dei parametri della periferica, in CUBE-MX, vedo che esiste un campo "Memory Type" dove posso scegliere esclusivamente fra 4 tipi di memorie differenti (Micron , Macronix, ecc).
Da ulteriori ricerce sul web semrerebbe che la Quad-SPI si utilizzata esclusivamente come interfaccia microcontrollori-memorie.

Secondo voi, posso utilizzare una Quad-SPI?
Quali interfacce che consigliereste per lo scambio di dati fra due uC?

Grazie O_/

Re: Scambio dati fra microcontrollori ad alta velocità (STM3

MessaggioInviato: 12 mar 2021, 12:59
da dimaios
Dipende da molti fattori.

1. Che rate di scambio dati devi supportare?
2. E' bidirezionale?
3. Usi l'M4 interno all'STM32MP153 oppure lo scambio dati è direttamente con il Cortex A7?

Sicuro di dover utilizzare proprio un L4?
Non basta l'M4 interno?

Re: Scambio dati fra microcontrollori ad alta velocità (STM3

MessaggioInviato: 12 mar 2021, 16:06
da harpefalcata
Secondo me, la DMA è la piu indicata

Re: Scambio dati fra microcontrollori ad alta velocità (STM3

MessaggioInviato: 12 mar 2021, 16:13
da dimaios
harpefalcata ha scritto:Secondo me, la DMA è la piu indicata

Il DMA è correlato alle periferiche I/O con le quali vuoi scambiare dati.
Cosa intendi? qual è la periferica, una shared memory?

Re: Scambio dati fra microcontrollori ad alta velocità (STM3

MessaggioInviato: 12 mar 2021, 16:28
da Lucast85
Secondo me, la DMA è la piu indicata
Intendi una tecnica come questa?

dimaios ha scritto:1. Che rate di scambio dati devi supportare?
2. E' bidirezionale?
3. Usi l'M4 interno all'STM32MP153 oppure lo scambio dati è direttamente con il Cortex A7?

Sicuro di dover utilizzare proprio un L4?
Non basta l'M4 interno?
1. I pacchetti dati sono circa 3kB ogni 20 ms
2. SI, bidirezionale
3. Utilizziamo l'M4, l'A7 farà altro.
4. Potenzialmente si ma complicherebbe tutta la certificazione del FW per cui preferiamo tenere tutto il FW da certificare in un MCU ad hoc (L4) che poi possiamo riutilizzare nei i vari progetti futuri, dove non è detto che si utilizzerà anche un STM32MP1.

Re: Scambio dati fra microcontrollori ad alta velocità (STM3

MessaggioInviato: 12 mar 2021, 16:45
da dimaios
Dunque, 3kB in 20 ms sono circa 150 kB al secondo quindi con 1 bit start ed uno stop circa 1.5 Mb/s.
Con questi baud rate una UART a 3 Mb/s è più che sufficiente utilizzando anche il protocollo MODBUS RTU che trovi implementato gratuitamente.
Se non hai bisogno di ottimizzazioni particolari funziona benissimo e lo realizzi immediatamente.
Inoltre lo puoi riciclare ad ogni progetto rimappando adeguatamente le zone di memoria.
La UART la usi col DMA così non carichi l'MCU.
Lato MPU per la gestione della seriale hai quello che vuoi sotto ogni sistema operativo.

Re: Scambio dati fra microcontrollori ad alta velocità (STM3

MessaggioInviato: 12 mar 2021, 16:50
da dimaios
P.S. Anche con i GPIO puoi fare lo scambio dati ma dipende dal pinout dell'MCU. Se hai pochi pin a disposizione è un problema. Ho proposto la soluzione seriale perché è semplice ed economica dal punto di vista dei pin e della parte software ma non escludo anche altre possibilità. Bisognerebbe dare un'occhiata anche al part-number dell' STM32L

Re: Scambio dati fra microcontrollori ad alta velocità (STM3

MessaggioInviato: 12 mar 2021, 18:18
da Lucast85
Grazie per i consigli Foto Utentedimaios.
Per quanto riguarda il rate dei dati ti ho fornito un numero di massima per il dimensionamento. Tuttavia, come accade spesso, questo dato immagino tenda a salire come un po' tutte le specifiche di un progetto :lol: . Da progettista HW sono abituato a sovradimensionare un po' tutto ed anche per la comunicazione pensavo di tenermi largo con la QSPI.
Mi aspettavo che mi avresti proposto come alternativa la SPI ma hai preferito consigliarmi la UART. Posso chiederti come mai? In particolare:
  • Conosci la QSPI? E' solo utilizzata per le memorie o è possibile anche la comunicazione fra due microcontrollori?
  • Come mai non mi hai consigliato la SPI? Immagino che il throughput sia molto maggiore della UART ed il numero di pin occupati sono solo due in più. Forse è difficilmente gestibile a livello di protocollo FW?

Re: Scambio dati fra microcontrollori ad alta velocità (STM3

MessaggioInviato: 12 mar 2021, 18:36
da dimaios
Ti ho consigliato la UART perché la gestione dell'SPI è più complessa lato CPU.
Come fai a gestire l'SPI dall'altra parte se non con un driver?
Devi scendere a basso livello. Se necessario non è un problema ma visto che i driver delle UART sono già pronti e funzionanti non vedo perché complicarsi la vita.
Il data rate non è così elevato da pregiudicare il funzionamento con una UART ; tutto qui.
Quando progetto penso anche a chi scrive il software per una questione di economia globale.

P.S. I driver per SPI esistono nelle distribuzioni anche per CPU ma ci sono dei vincoli diversi. Con l'UART è più semplice.
Inoltre se non hai problemi di sincronismo l'UART è il canale giusto. Attenzione allo scheduler del sistema operativo e ai vincoli real-time se li dovessi avere.