TN1348 SPC58x Configuració de filtres CAN i CAN-FD
Introducció
Aquesta nota tècnica descriu com configurar els filtres d'acceptació per als controladors CAN integrats als microcontroladors d'automòbil SPC58x. El document descriu les configuracions del registre i proporciona alguns exemplesample per accelerar la configuració del filtre. Aquestes configuracions es poden adoptar per a tots els microcontroladors d'aquesta família amb petites variacions. L'exampEls fitxers d'aquest document es basen en SPC584Cx/SPC58ECx MCU de 32 bits.
CAN mésview
L'SPC584Cx/SPC58ECx té vuit instàncies CAN incrustades en dos subsistemes diferents, tal com es documenta al manual de referència del dispositiu Secció Apèndix A Documents de referència.
Tots els controladors CAN del mateix subsistema compartiran recursos com la memòria RAM, el rellotge, etc. Cada subsistema CAN està constituït pels següents blocs principals:
- Nuclis CAN modulars: es pot accedir als registres del mòdul CAN mitjançant la Interfície Esclava Genèrica (GSI). El mòdul GSI perifèric actua com a petició de cada mestre.
- Arbitre CAN-RAM: és una lògica addicional per a l'arbitratge entre les peticions d'accés a la RAM per part dels diferents controladors CAN.
- SRAM: el subsistema CAN connectarà amb una RAM externa mitjançant aquesta interfície, és la SRAM.
- Controlador ECC: conté la lògica per calcular i validar el codi de correcció a la memòria SRAM.
Per a la interfície SRAM i l'organització de la memòria, consulteu el manual de referència del dispositiu Secció Apèndix A Documents de referència.
Introducció al filtratge
La lògica de filtre CAN us permet configurar els filtres de diverses maneres. Per exampli, els missatges que passen el filtratge d'acceptació es poden emmagatzemar a Rx FIFO (0 o 1) o en buffers rx dedicats. Cada filtre es pot configurar com a filtre d'acceptació o de rebuig i també es pot activar o desactivar. Per al filtre d'acceptació, cada llista de filtres es realitza des de l'element #0 fins al primer element coincident de la llista de filtres. Abans d'utilitzar filtres és obligatori configurar l'adreça inicial i els números del filtre per reservar part de la memòria RAM del missatge. La figura següent mostra a view del mapa de memòria compartida i dels registres (d'aquí les adreces inicials de cada secció).
Figura 1. Configuració de la memòria RAM de missatges example
Inicialització de la memòria RAM del missatge
Abans d'utilitzar qualsevol filtre, és obligatori configurar l'àrea RAM corresponent dels missatges en què s'emmagatzemaran. Per fer-ho, l'aplicació de programari ha d'escriure el desplaçament (en paraules) a partir de l'adreça base RAM del missatge de cada àrea de filtre. S'ha de configurar el nombre de filtres per a cada àrea, de manera que el controlador pugui entendre on acaba cada àrea de memòria de filtre relacionada. En aquest document, com per exempleampels quatre filtres, es configuraran per a identificadors estàndard (11 bits) i quatre filtres per a identificadors estès (29 bits), per tant, reserveu una part de la memòria RAM de missatges per emmagatzemar filtres d'11 bits i una altra per a filtres de 29 bits. Per configurar l'adreça inicial de l'àrea de filtre d'identificació estàndard, el programari ha d'escriure el camp FLSSA del registre SIDFC (Registre de configuració de filtre d'identificació estàndard). Per als filtres d'ID estès cal escriure el camp FLESA del registre XIDFC (Registre de configuració del filtre d'ID estès). Els camps FLSSA i FLESA han de contenir el desplaçament de memòria "en paraules" de l'adreça base de RAM del missatge. Aquesta aplicació configura quatre filtres estàndard a offset zero i quatre filtres estès
Per a la configuració estàndard del filtre:
- FLSSA = 0x0: el desplaçament respecte a l'adreça base de la memòria RAM del missatge és zero, de manera que l'àrea comença al principi de la memòria RAM del missatge.
- LSS = 4: aquest és el nombre de filtres a configurar. Cada filtre està compost per "una" paraula de 32 bits.
En aquesta configuració, una part de memòria que comença des de zero i té una mida de quatre paraules.
Nota: el controlador CAN no té cap mecanisme de control per configurar el missatge RAM, això vol dir que el desenvolupador ha de tenir cura de no solapar-se amb les àrees de RAM configurades. La figura següent mostra com configurar una part de memòria per emmagatzemar filtres d'identificació ampliats.
Per configurar l'àrea RAM per emmagatzemar filtres ampliats és necessari programar els valors següents als camps FLESA i LSE.
- FLESA = 0x04: el desplaçament en paraules respecte a l'adreça base de la memòria RAM del missatge. Això perquè a l'àrea de filtres configurats anteriorment s'han reservat paraules 0x04 per als filtres d'identificació estàndard i, aleshores, el desplaçament mínim utilitzable és 0x04.
- LSE = 4: aquest és el nombre de filtres a configurar. Per a l'ID ampliat, un filtre està format per "dues" paraules de 32 bits.
En aquesta configuració, una part de memòria que comença des de l'offset 0x04 (paraules) amb una mida de vuit paraules (quatre filtres de dues paraules). Per tant, el desplaçament mínim per a la següent àrea de memòria configurable és de paraules 0x0C. Totes les seccions de la memòria RAM del missatge s'han de configurar tenint en compte el nombre i la mida dels elements que s'emmagatzemaran a la secció sense solapar cap secció.
Nota: per convertir un desplaçament de paraula en un desplaçament de bytes, cal multiplicar el valor de la paraula per quatre.
Exampfitxer de filtres d'identificació estàndard
Després de configurar el missatge RAM, podeu configurar els filtres del dispositiu.
Cada element de filtre es pot configurar com:
- Filtre de rang
- Doble filtre d'identificació
- Filtre clàssic
- Filtre per a la memòria intermèdia de recepció dedicada (filtre d'identificació únic)
La figura següent mostra com configurar quatre tipus diferents de filtres per als identificadors estàndard (identificadors d'11 bits). Utilitzeu el registre d'elements de filtre següent per a l'ID ESTÀNDARD.
Filtre de rang per a RX FIFO0
A sota un exampfitxer de filtratge per emmagatzemar els missatges amb identificadors en el rang [0x16 , 0xF6] al FIFO de recepció 0.
Valor de registre (HEX): 0x081600F6
Valor de registre (BIN): 00 001 00000010110 (00000) 00011110110
Nota: en tots els exampfitxers proporcionats en aquest document, els bits entre parèntesis es mantenen al valor predeterminat. Valors dels camps:
- SFT -> `00` -> Filtre d'interval de SFID1 a SFID2
- SFEC -> `001` -> Emmagatzema a Rx FIFO 0 si el filtre coincideix
- SFID1 -> `00000010110` -> Primer ID de l'interval d'elements de filtre d'ID estàndard (0x16)
- SFID2 -> `00011110110` -> Segon ID de l'interval d'elements de filtre d'ID estàndard (0xF6)
Doble filtre per a RX FIFO1
A continuació hi ha un exampfitxer d'un filtre d'identificació doble per emmagatzemar els identificadors de missatges 0 x 0A o 0 x FF a FIFO 1.
Valor de registre (HEX): 0x500A00FF
Valor de registre (BIN): 01 010 00000001010 (00000) 00011111111
Valors dels camps:
- SFT -> `01` -> Filtre d'identificació dual per a SFID1 o SFID2
- SFEC -> `010` -> Emmagatzema a Rx FIFO 1 si el filtre coincideix
- SFID1 -> `00000001010` -> Primer ID de l'element de filtre d'ID dual estàndard
- SFID2 -> `00011111111` -> Segon ID de l'element de filtre d'identificació dual estàndard
Filtre de buffer dedicat a Rx
A continuació hi ha un exampli per emmagatzemar missatges amb identificació 0 x 7F0 a la memòria intermèdia de recepció dedicada #0.
Mitjançant un buffer dedicat, és possible filtrar només un ID de missatge i aquest és el que s'escriu al camp SFID1.
Valor de registre (HEX): 0x3FF00000
Valor de registre (BIN): 00 111 11111110000 (00000) 00 (000) 000000
- SFT -> `00` -> aquest valor no és important perquè s'ignora el filtratge per emmagatzemar-lo a RX BUFFER dedicat i, en aquest cas, el valor SFT s'ignora (vegeu la descripció del camp SFEC cas `111`)
- SFEC -> `111` -> Emmagatzema al buffer de recepció dedicat si el filtre coincideix
- SFID1 -> `11111110000` -> ID estàndard que acceptarà el filtre (0x7F0)
- SFID2[10, 9] -> `00` -> aquest camp decideix si el missatge rebut s'emmagatzema en un buffer rx o es tracta com el missatge A, B o C de la seqüència de missatges de depuració. En aquest cas, l'aplicació de programari vol emmagatzemar el missatge en un buffer de recepció.
- SFID2[0,5] -> `000000` → índex del buffer rx dedicat on s'emmagatzemarà el missatge corresponent (si s'ha configurat N buffer rx dedicat, aquest índex pot estar en el rang [0, N -1]) .En aquest cas, el missatge s'emmagatzema a la memòria intermèdia dedicada #0.
Filtre clàssic per a RX FIFO0
Aquest exampli mostra com emmagatzemar els missatges amb identificador en el rang [0x688, 0x68F] al RX FIFO 0. Per a un filtre clàssic, s'ha de definir un parell Identificador/Màscara. L'identificador s'ha d'escriure a SFID1 i la màscara als camps SFID2 de l'element de filtre. En un filtre clàssic, els missatges d'ID que passen el filtre s'obtenen aplicant la màscara a l'identificador de la manera següent:
- aquest és el significat dels bits de filtre -> 1 = ha de coincidir (0 = no m'importa);
- tenint un filtre amb una màscara formada per tots els “1”, només passarà un identificador al filtre (el que està escrit al camp SFID1) mentre que un filtre amb una màscara formada per tots els “0” passarà tots els identificadors. el filtre.
Evidentment, aquests són els filtres més senzills. A continuació es mostra una explicació de com organitzar un filtre d'interval per a l'ID estàndard a l'interval [0x688, 0x68F] que emmagatzema els missatges rebuts a RX FIFO 0. Aquest és un filtre de missatge estàndard, de manera que donarem valors a SFID1 = Identificador i SFID2 = Màscara.
Valor de registre (HEX): 0x8E8B07F8
Valor de registre (BIN): 10 001 11010001011 00000 11111111000
- SFT -> `10` -> Filtre clàssic: SFID1 = filtre, SFID2 = màscara
- SFEC -> `001` -> Emmagatzema a Rx FIFO 0 si el filtre coincideix
- SFID1 = 110 1000 1011 (Identificador0x68B)
- SFID2 = 111 1111 1000 (Màscara0x7F8)
Aplicant la màscara a l'identificador (una mica) amb el significat del bit de màscara (1 = ha de coincidir amb 0 = no m'importa) trobem el següent filtre d'interval on el símbol "X" representa zero o un.
Filtre = 110 1000 1XXX
Aleshores, tots els missatges estàndard de l'interval [0x688, 0x68F] passaran el filtre.
Configuració de filtres d'identificació ampliats
També es poden implementar els mateixos tipus de filtres per als identificadors ampliats (identificadors de 29 bits).
Filtre de rang ampliat per a RX FIFO0
En aquest example, aquest filtre emmagatzemarà missatges amb identificadors en el rang [0xFFFFF, 0x1FFFFFFF] a FIFO 0.
A sota dels valors del registre:
- Valor del registre F0 (HEX): 0x200FFFFF
- Valor del registre F1 (HEX): 0xDFFFFFFF
- Valor del registre FO (BIN): 001 00000000011111111111111111111
- Valor del registre F1 (BIN): 11 (0) 11111111111111111111111111111
Valors dels camps:
- EFEC -> `001` -> Emmagatzema a Rx FIFO 0 si el filtre coincideix
- EFID1 ->`00000000011111111111111111111` -> Primer ID de l'element de filtre ID ampliat
rang (0xFFFFF) - EFT -> `11` -> Filtre d'interval de SFID1 a SFID2
- SFID2 ->`11111111111111111111111111111` -> Segon identificador de l'interval d'elements de filtre d'ID estàndard (0x1FFFFFFF)
Filtre d'identificació doble per a FIFO 1
En aquest exampel filtre d'identificació dual emmagatzemarà missatges amb identificadors 0xAAAAA o 0xBBBBB a FIFO 1.
- Valor del registre F0 (HEX): 0x400AAAAA
- Valor del registre F1 (HEX): 0x400BBBBB
- Valor del registre FO (BIN): 010 000000000 10101010101010101010
- Valor del registre F1 (BIN): 01 (0) 00000000010111011101110111011
Valors dels camps:
- EFEC -> `010` -> Emmagatzema a Rx FIFO 1 si el filtre coincideix
- EFID1 -> `00000000010101010101010101010` -> Primer identificador ampliat (0xAAAAA)
- EFT -> `01` -> Filtre d'identificació dual per a EFID1 o EFID2
- EFID2 -> `00000000010111011101110111011` -> Segon identificador ampliat (0x000BBBBB)
Buffer de recepció dedicat
En aquest exampel filtratge emmagatzemarà missatges amb l'identificador 0x000AAAAA a la memòria intermèdia dedicada rx #1. També en aquest escenari, utilitzant la memòria intermèdia dedicada només es pot filtrar un identificador de missatge i és el que s'ha escrit al camp EFID1.
- Filtre d'identificació per a la memòria intermèdia de recepció dedicada (ID = 0x000AAAAA)
- Valor del registre F0 (HEX): 0xE00AAAAA
- Valor del registre F1 (HEX): 0x00000001
- Valor del registre FO (BIN): 111 00000000010101010101010101010
- Valor del registre F1 (BIN): 00 (0) 000000000000000000 00 (000) 000001
Valors dels camps:
- EFEC -> `111` -> Emmagatzema al buffer de recepció dedicat si el filtre coincideix
- EFID1 -> `00000000010101010101010101010` -> ID ampliat que acceptarà el filtre
(0x000AAAAA) - EFT -> `00` -> aquest valor no és important perquè el filtratge per emmagatzemar-lo a RX dedicat
BUFFER i, en aquest cas, el valor EFT s'ignora (vegeu la descripció del camp EFEC cas `111`) - EFID2[10, 9] -> `00` -> aquest camp decideix si el missatge rebut s'emmagatzema en un buffer Rx o es tracta com el missatge A, B o C de la seqüència de missatges de depuració. En aquest cas, l'aplicació de programari vol emmagatzemar el missatge en un buffer Rx
- EFID2[0,5] -> `000001` -> índex de la memòria intermèdia de recepció dedicada on s'emmagatzemarà el missatge coincident (si heu configurat N buffer de recepció dedicat, aquest índex pot estar en l'interval [0, N -1]). En aquest cas, el missatge s'emmagatzema a la memòria intermèdia dedicada #1
Filtre clàssic per a rx FIFO1
En aquest example, la programació del filtre emmagatzemarà missatges emmagatzemats amb un identificador en el rang [0 x FFFFF, 0 x1FFFFFF] a l'rx FIFO 1. S'entén que el mètode d'emmascarament és el mateix que els filtres d'ID estàndard. A continuació es mostra una explicació sobre com programar un filtre d'interval d'identificació estès a rage [0 x FFFFF, 0 x 1FFFFFF] que emmagatzema els missatges rebuts a rx FIFO 1. Aquest és un filtre per a missatges ampliats, de manera que donarem valors a EFID1 = Identificador i EFID2 = Mascareta
- Valor del registre F0 (HEX): 0x400FFFFF
- Valor del registre F1 (HEX): 0x9E0FFFFF
- Valor del registre F0 (BIN): 010 00000000011111111111111111111
- Valor del registre F1 (BIN): 10 (0) 11110000011111111111111111111
- EFT > `10` -> Filtre clàssic: EFID1 = filtre, EFID2 = màscara
- EFEC -> `010` -> Emmagatzema a Rx FIFO 1 si el filtre coincideix
- EFID1 = 0 0000 0000 1111 1111 1111 1111 1111 (Identificador 0xFFFFF)
- EFID2 = 1 1110 0000 1111 1111 1111 1111 1111 (Màscara 0x1E0FFFFF)
Aplicant la màscara a l'identificador (un bit) amb el significat del bit de màscara (1 = ha de correspondre a 0 = no importa) trobem el següent filtre d'interval on el símbol `X` significa zero o un.
Filtre = 0 000X XXXX 1111 1111 1111 1111 1111
Per tant, tots els missatges ampliats de l'interval [0xFFFFF, 0x1FFFFFF] passaran el filtre.
Annex A Documents de referència
- SPC584Cx/SPC58ECx Manual de referència
- Full de dades SPC584Cx/SPC58ECx
Annex B Sigles i abreviatures
Abreviatura | Nom complet |
CAN | Xarxa d'àrea del controlador |
FD | Velocitat de dades flexible |
Historial de revisions de documents
Data | Versió | Canvis |
01-mar-2021 | 1 | Alliberament inicial. |
AVÍS IMPORTANT: LLEGEIX-HO AMB ATENCIÓ
STMicroelectronics NV i les seves filials ("ST") es reserven el dret de fer canvis, correccions, millores, modificacions i millores als productes ST i / o a aquest document en qualsevol moment sense previ avís. Els compradors haurien d’obtenir la informació rellevant més recent sobre els productes ST abans de fer comandes. Els productes ST es venen d'acord amb els termes i condicions de venda de ST vigents en el moment de la confirmació de la comanda.
Els compradors són els únics responsables de l’elecció, selecció i ús dels productes ST i ST no assumeix cap responsabilitat per l’assistència a la sol·licitud ni pel disseny dels productes dels compradors.
ST no concedeix cap llicència, expressa o implícita, a cap dret de propietat intel·lectual.
La revenda de productes ST amb disposicions diferents de la informació que s'estableix aquí anul·larà qualsevol garantia concedida per ST per a aquest producte.
ST i el logotip de ST són marques comercials de ST. Per obtenir informació addicional sobre les marques comercials ST, consulteu www.st.com/trademarks. Tots els altres noms de productes o serveis són propietat dels seus respectius propietaris.
La informació d'aquest document substitueix i substitueix la informació proporcionada anteriorment en qualsevol versió anterior d'aquest document.
© 2021 STMicroelectronics – Tots els drets reservats
Documents/Recursos
![]() |
ST TN1348 SPC58x Configuració de filtres CAN i CAN-FD [pdfInstruccions TN1348, SPC58x Configuració de filtres CAN i CAN-FD |