STlogo

TN1348 SPC58x Configurazione dei filtri CAN e CAN-FD

prodotto

Introduzione

Questa nota tecnica descrive come configurare i filtri di accettazione per i controller CAN integrati nei microcontrollori per autoveicoli SPC58x. Il documento descrive le configurazioni del registro e fornisce alcuni example per velocizzare la configurazione del filtro. Queste configurazioni possono essere adottate per tutti i microcontrollori di questa famiglia con variazioni minori. L'exampi file in questo documento si basano sull'MCU a 584 bit SPC58Cx/SPC32ECx.

PU finireview

SPC584Cx/SPC58ECx dispone di otto istanze CAN integrate in due diversi sottosistemi, come documentato nel manuale di riferimento del dispositivo, sezione Appendice A Documenti di riferimento.
Tutti i controller CAN nello stesso sottosistema condivideranno risorse come memoria RAM, clock, ecc. Ciascun sottosistema CAN è costituito dai seguenti blocchi principali:

  • Nuclei CAN modulari: i registri del modulo CAN sono accessibili tramite l'Interfaccia Slave Generica (GSI). Il modulo GSI periferico funge da richiesta di ogni master.
  • CAN-RAM arbiter: è una logica aggiuntiva di arbitrato tra le richieste di accesso alla RAM da parte dei vari controller CAN.
  • SRAM: il sottosistema CAN si interfaccerà con una RAM esterna utilizzando questa interfaccia, è la SRAM.
  • Controller ECC: contiene la logica per calcolare e validare il codice di correzione sulla memoria SRAM.

Per l'interfaccia SRAM e l'organizzazione della memoria, fare riferimento al manuale di riferimento del dispositivo Sezione Appendice A Documenti di riferimento.

Introduzione al filtraggio

La logica del filtro CAN consente di configurare i filtri in vari modi. Ad esempioample, i messaggi che passano il filtro di accettazione possono essere memorizzati in Rx FIFO (0 o 1) o in buffer rx dedicati. Ciascun filtro può essere configurato come filtro di accettazione o rifiuto e può anche essere abilitato o disabilitato. Per il filtro di accettazione, ogni elenco di filtri viene eseguito dall'elemento #0 al primo elemento corrispondente nell'elenco di filtri. Prima di utilizzare i filtri è obbligatorio configurare l'indirizzo di partenza ei numeri del filtro per riservare parte della RAM del messaggio. La figura seguente mostra a view della mappa di memoria condivisa e dei registri (da cui gli indirizzi di partenza per ogni sezione).

Figura 1. Configurazione della RAM dei messaggi example

Inizializzazione della RAM dei messaggi

Prima di utilizzare qualsiasi filtro, è obbligatorio configurare la relativa area RAM dei messaggi in cui verranno archiviati. Per fare ciò, l'applicazione software deve scrivere l'offset (in parole) dall'indirizzo di base della RAM dei messaggi di ciascuna area del filtro. Il numero di filtri per ciascuna area deve essere configurato, in modo che il controllore possa capire dove finisce ogni relativa area di memoria dei filtri In questo documento, come ad es.ampi quattro filtri, saranno configurati per identificatori standard (11 bit) e quattro filtri per identificatori estesi (29 bit), quindi riservare una parte della RAM dei messaggi per memorizzare i filtri a 11 bit e un'altra per i filtri a 29 bit. Per configurare l'indirizzo di partenza dell'area del filtro ID standard, il software deve scrivere il campo FLSSA del registro SIDFC (Registro di configurazione del filtro ID standard). Per i filtri ID estesi è necessario scrivere il campo FLESA del registro XIDFC (Extended ID filter configuration register). I campi FLSSA e FLESA devono contenere l'offset di memoria "in parole" dall'indirizzo di base RAM del messaggio. Questa applicazione configura quattro filtri standard con offset zero e quattro filtri estesi

Per la configurazione del filtro standard:

  • FLSSA = 0x0: l'offset rispetto all'indirizzo base della RAM dei messaggi è zero, quindi l'area inizia all'inizio della RAM dei messaggi.
  • LSS = 4: questo è il numero di filtri da configurare. Ogni filtro è composto da `una` parola a 32 bit.
    In questa configurazione una porzione di memoria che parte dall'offset zero ed ha una dimensione di quattro parole.

Nota: il controller CAN non ha alcun meccanismo di controllo per la configurazione della RAM dei messaggi, questo significa che lo Sviluppatore deve fare attenzione a non sovrapporre le aree RAM configurate. La figura seguente mostra come configurare una porzione di memoria per archiviare filtri di identificazione estesi.

Per configurare l'area RAM per memorizzare i filtri estesi è necessario programmare i seguenti valori nei campi FLESA e LSE.

  • FLESA = 0x04: l'offset in parole rispetto all'indirizzo di base della RAM del messaggio. Questo perché nell'area filtri configurata in precedenza sono state riservate 0x04 parole per filtri ID standard e quindi l'offset minimo utilizzabile è 0x04.
  • LSE = 4: questo è il numero di filtri da configurare. Per l'ID esteso un filtro è composto da `due` word a 32 bit.

In questa configurazione una porzione di memoria a partire dall'offset 0x04 (parole) avente una dimensione di otto parole (quattro filtri a due parole). Pertanto, l'offset minimo per la successiva area di memoria configurabile è 0x0C parole. Tutte le sezioni della RAM dei messaggi devono essere configurate considerando il numero e la dimensione degli elementi che verranno memorizzati nella sezione senza sovrapporsi ad alcuna sezione.
Nota: per convertire un offset di parola in un offset di byte, è necessario moltiplicare il valore della parola per quattro.

Exampfile di filtri ID standard

Dopo aver configurato la RAM dei messaggi, è possibile configurare i filtri del dispositivo.
Ciascun elemento filtrante può essere configurato come:

  • Filtro di intervallo
  • Filtro ID doppio
  • Filtro classico
  • Filtro per buffer rx dedicato (filtro ID singolo)

La figura seguente mostra come configurare quattro diversi tipi di filtri per gli identificatori standard (identificatori a 11 bit). Utilizzare il seguente registro dell'elemento filtro per STANDARD ID.

Filtro di gamma per RX FIFO0

Sotto un example di filtraggio per memorizzare i messaggi con identificatori nell'intervallo [0x16 , 0xF6] in Receive FIFO 0.
Valore del registro (HEX): 0x081600F6
Valore registro (BIN): 00 001 00000010110 (00000) 00011110110

Nota: in tutto l'esampi forniti in questo documento, i bit tra parentesi vengono mantenuti al valore predefinito. Valori dei campi:

  • SFT -> `00` -> Filtro intervallo da SFID1 a SFID2
  • SFEC -> `001` -> Memorizza in Rx FIFO 0 se il filtro corrisponde
  • SFID1 -> `00000010110` -> Primo ID dell'intervallo di elementi filtranti ID standard (0x16)
  • SFID2 -> `00011110110` -> Secondo ID della gamma di elementi filtranti ID standard (0xF6)
Doppio filtro per RX FIFO1

Di seguito è riportato un example di un filtro a doppio ID per memorizzare gli identificatori di messaggi 0 x 0A o 0 x FF in FIFO 1.
Valore registro (HEX): 0x500A00FF
Valore registro (BIN): 01 010 00000001010 (00000) 00011111111
Valori dei campi:

  • SFT -> `01` -> Filtro Dual ID per SFID1 o SFID2
  • SFEC -> `010` -> Memorizza in Rx FIFO 1 se il filtro corrisponde
  • SFID1 -> `00000001010` -> Primo ID dell'elemento filtrante a doppio ID standard
  • SFID2 -> `00011111111` -> Secondo ID dell'elemento filtrante a doppio ID standard
Filtraggio del buffer Rx dedicato

Di seguito è riportato un example per memorizzare i messaggi con identificazione 0 x 7F0 nel buffer rx dedicato #0.
Utilizzando un buffer dedicato è possibile filtrare un solo ID messaggio e cioè quello scritto nel campo SFID1.
Valore di registro (HEX): 0x3FF00000
Valore registro (BIN): 00 111 11111110000 (00000) 00 (000) 000000

  • SFT -> `00` -> questo valore non è importante perché il filtraggio per memorizzare nel BUFFER RX dedicato e in questo caso il valore SFT viene ignorato (vedi descrizione del campo SFEC caso `111`)
  • SFEC -> `111` -> Memorizza in un buffer rx dedicato se il filtro corrisponde
  • SFID1 -> `11111110000` -> ID standard che il filtro accetterà (0x7F0)
  • SFID2[10, 9] -> `00` -> questo campo decide se il messaggio ricevuto viene archiviato in un buffer rx o trattato come messaggio A, B o C della sequenza di messaggi di debug. In questo caso, l'applicazione software desidera memorizzare il messaggio in un buffer rx.
  • SFID2[0,5] -> `000000` → indice del buffer dedicato rx dove verrà memorizzato il messaggio corrispondente (se è stato configurato N buffer dedicato rx, questo indice può essere compreso nell'intervallo [0, N -1]) .In questo caso il messaggio viene memorizzato nel buffer dedicato #0.
Filtro classico per RX FIFO0

Questo example mostra come memorizzare i messaggi con identificatore nell'intervallo [0x688, 0x68F] nella RX FIFO 0. Per un filtro classico, deve essere definita una coppia Identificatore / Maschera. L'identificatore deve essere scritto in SFID1 e la maschera nei campi SFID2 dell'elemento filtrante. In un filtro classico, i messaggi di ID che passano il filtro si ottengono applicando la maschera all'identificatore come segue:

  • questo è il significato dei bit del filtro -> 1 = deve corrispondere (0 = non importa);
  • avendo un filtro con una maschera composta da tutti gli “1s”, al filtro passerà un solo identificatore (quello che è scritto nel campo SFID1) mentre un filtro avente una maschera composta da tutti gli “0” passeranno tutti gli identificatori il filtro.

Ovviamente, questi sono i filtri più semplici. Di seguito è riportata una spiegazione su come organizzare un filtro di intervallo per l'ID standard nell'intervallo [0x688, 0x68F] che memorizza i messaggi ricevuti in RX FIFO 0. Questo è un filtro di messaggi standard, quindi daremo valori a SFID1 = Identifier e SFID2 = Maschera.
Valore del registro (HEX): 0x8E8B07F8
Valore registro (BIN): 10 001 11010001011 00000 11111111000

  • SFT -> `10` -> Filtro classico: SFID1 = filtro, SFID2 = maschera
  • SFEC -> `001` -> Memorizza in Rx FIFO 0 se il filtro corrisponde
  • SFID1 = 110 1000 1011 (Identificatore 0x68B)
  • SFID2 = 111 1111 1000 (Maschera0x7F8)

Applicando la maschera all'identificatore (un po') con il significato del bit della maschera (1 = deve corrispondere a 0 = non importa) troviamo il seguente filtro di intervallo dove il simbolo `X` sta per zero o uno.

Filtro = 110 1000 1XXX

Quindi, tutti i messaggi standard nell'intervallo [0x688, 0x68F] passeranno il filtro.

Configurazione filtri ID estesi

Gli stessi tipi di filtri possono essere implementati anche per identificatori estesi (identificatori a 29 bit).

Filtro range esteso per RX FIFO0

In questo example, questo filtro memorizzerà i messaggi con identificatori nell'intervallo [0xFFFFF, 0x1FFFFFFF] in FIFO 0.
Di seguito i valori di registro:

  • Valore registro F0 (HEX): 0x200FFFFF
  • Valore registro F1 (HEX): 0xDFFFFFFF
  • Valore registro FO (BIN): 001 00000000011111111111111111111
  • Valore registro F1 (BIN): 11 (0) 11111111111111111111111111111

Valori dei campi:

  • EFEC -> `001` -> Memorizza in Rx FIFO 0 se il filtro corrisponde
  • EFID1 ->`00000000011111111111111111111` -> Primo ID dell'elemento filtro ID esteso
    intervallo(0xFFFFF)
  • EFT -> `11` -> Filtro intervallo da SFID1 a SFID2
  • SFID2 ->`11111111111111111111111111111` -> Secondo ID dell'intervallo di elementi del filtro ID standard(0x1FFFFFFFF)
Doppio filtro ID per FIFO 1

In questo example il filtro dual ID memorizzerà i messaggi con identificatori 0xAAAAA o 0xBBBBB in FIFO 1.

  • Valore registro F0 (HEX): 0x400AAAAAA
  • Valore registro F1 (HEX): 0x400BBBBB
  • Valore registro FO (BIN): 010 000000000 10101010101010101010
  • Valore registro F1 (BIN): 01 (0) 00000000010111011101110111011

Valori dei campi:

  • EFEC -> `010` -> Memorizza in Rx FIFO 1 se il filtro corrisponde
  • EFID1 -> `00000000010101010101010101010` -> Primo ID esteso (0xAAAA)
  • EFT -> `01` -> Filtro Dual ID per EFID1 o EFID2
  • EFID2 -> `00000000010111011101110111011` -> Secondo ID esteso (0x000BBBBB)
Buffer RX dedicato

In questo example il filtraggio memorizzerà i messaggi con identificatore 0x000AAAAA nel buffer rx n. 1 dedicato. Anche in questo scenario, utilizzando il buffer dedicato, è possibile filtrare un solo ID messaggio ed è quello scritto nel campo EFID1.

  • Filtro ID per buffer rx dedicato (ID = 0x000AAAAAA)
  • Valore registro F0 (HEX): 0xE00AAAAAA
  • Valore registro F1 (HEX): 0x00000001
  • Valore registro FO (BIN): 111 00000000010101010101010101010
  • Valore registro F1 (BIN): 00 (0) 000000000000000000 00 (000) 000001

Valori dei campi:

  • EFEC -> `111` -> Memorizza in un buffer rx dedicato se il filtro corrisponde
  • EFID1 -> `00000000010101010101010101010` -> ID esteso che il filtro accetterà
    (0x000AAAA)
  • EFT -> `00` -> questo valore non è importante perché il filtraggio per memorizzare in RX dedicata
    BUFFER e in questo caso il valore EFT viene ignorato (vedi descrizione del campo EFEC caso `111`)
  • EFID2[10, 9] -> `00` -> questo campo decide se il messaggio ricevuto viene archiviato in un Buffer Rx o trattato come messaggio A, B o C della sequenza di messaggi di debug. In questo caso l'applicazione software vuole memorizzare il messaggio in un buffer Rx
  • EFID2[0,5] -> `000001` -> indice del buffer rx dedicato dove verrà memorizzato il messaggio corrispondente (se hai configurato N buffer rx dedicato questo indice può essere compreso nell'intervallo [0, N -1]). In questo caso il messaggio viene archiviato nel buffer 1 dedicato
Filtro classico per rx FIFO1

In questo example, la programmazione del filtro memorizzerà i messaggi memorizzati con l'identificatore nell'intervallo [0 x FFFFF, 0 x1FFFFFF] nel FIFO 1 rx. È noto che il metodo di mascheramento è lo stesso dei filtri ID standard. Di seguito è riportata una spiegazione su come programmare un filtro di intervallo ID esteso in rage [0 x FFFFF, 0 x 1FFFFFF] che memorizza i messaggi ricevuti in rx FIFO 1. Questo è un filtro per i messaggi estesi, quindi daremo valori a EFID1 = Identifier e EFID2 = Maschera

  • Valore registro F0 (HEX): 0x400FFFFF
  • Valore registro F1 (HEX): 0x9E0FFFFF
  • Valore registro F0 (BIN): 010 00000000011111111111111111111
  • Valore registro F1 (BIN): 10 (0) 11110000011111111111111111111
  • EFT > `10` -> Filtro classico: EFID1 = filtro, EFID2 = maschera
  • EFEC -> `010` -> Memorizza in Rx FIFO 1 se il filtro corrisponde
  • EFID1 = 0 0000 0000 1111 1111 1111 1111 1111 (Identificatore 0xFFFFF)
  • EFID2 = 1 1110 0000 1111 1111 1111 1111 1111 (Maschera 0x1E0FFFFF)

Applicando la maschera all'identificatore (un bit) con il significato del bit maschera (1 = deve corrispondere a 0 = non importa) troviamo il seguente filtro di range dove il simbolo `X` sta per zero o uno.

Filtro = 0 000X XXXX 1111 1111 1111 1111 1111

Quindi, tutti i messaggi estesi nell'intervallo [0xFFFFF, 0x1FFFFFF] passeranno il filtro.

Appendice A Documenti di riferimento

  • SPC584Cx/SPC58ECx Manuale di riferimento
  • Scheda tecnica SPC584Cx/SPC58ECx

Appendice B Acronimi e abbreviazioni

Abbreviazione Nome completo
POTERE Rete di controllori
FD Velocità dati flessibile
Cronologia delle revisioni del documento
Data Versione Cambiamenti
01-mar-2021 1 Versione iniziale.

AVVISO IMPORTANTE - LEGGERE ATTENTAMENTE

STMicroelectronics NV e le sue consociate ("ST") si riservano il diritto di apportare modifiche, correzioni, miglioramenti, modifiche e miglioramenti ai prodotti ST e / o al presente documento in qualsiasi momento senza preavviso. Gli acquirenti dovrebbero ottenere le informazioni pertinenti più recenti sui prodotti ST prima di effettuare gli ordini. I prodotti ST sono venduti in conformità ai termini e alle condizioni di vendita di ST in vigore al momento della conferma dell'ordine.

Gli acquirenti sono gli unici responsabili della scelta, selezione e utilizzo dei prodotti ST e ST non si assume alcuna responsabilità per l'assistenza applicativa o la progettazione dei prodotti degli acquirenti.

Nel presente documento ST non concede alcuna licenza, espressa o implicita, su alcun diritto di proprietà intellettuale.

La rivendita di prodotti ST con disposizioni diverse dalle informazioni qui stabilite invaliderà qualsiasi garanzia concessa da ST per tale prodotto.

ST e il logo ST sono marchi di ST. Per ulteriori informazioni sui marchi ST, fare riferimento a www.st.com/trademarksTutti gli altri nomi di prodotti o servizi sono di proprietà dei rispettivi proprietari.

Le informazioni contenute nel presente documento annullano e sostituiscono le informazioni fornite in precedenza in qualsiasi versione precedente del documento.

© 2021 STMicroelectronics – Tutti i diritti riservati

Documenti / Risorse

ST TN1348 SPC58x Configurazione dei filtri CAN e CAN-FD [pdf] Istruzioni
TN1348, SPC58x Configurazione dei filtri CAN e CAN-FD

Riferimenti

Lascia un commento

Il tuo indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *