STlogotyp

TN1348 SPC58x Konfigurera CAN- och CAN-FD-filter

produkt

Introduktion

Denna tekniska notering beskriver hur man konfigurerar acceptansfilter för CAN-styrenheter inbäddade i SPC58x-mikrokontroller för fordon. Dokumentet beskriver registerkonfigurationerna och ger några example för att påskynda filterkonfigurationen. Dessa konfigurationer kan användas för alla mikrokontroller i denna familj med mindre avvikelser. Exetampfilerna i detta dokument är baserade på SPC584Cx/SPC58ECx 32-bitars MCU.

KAN överview

SPC584Cx/SPC58ECx har åtta CAN-instanser inbäddade i två olika delsystem som dokumenterats i enhetens referensmanual Avsnitt Bilaga A Referensdokument.
Alla CAN-styrenheter i samma delsystem kommer att dela resurser som RAM-minne, klocka, etc. Varje CAN-delsystem består av följande huvudblock:

  • Modulära CAN-kärnor: registren för CAN-modulen kan nås med det generiska slavgränssnittet (GSI). Den perifera GSI-modulen fungerar som en begäran från varje master.
  • CAN-RAM-arbiter: det är en ytterligare logik för medling bland begäranden om RAM-åtkomst från de olika CAN-styrenheterna.
  • SRAM: CAN-undersystemet kommer att samverka med ett externt RAM-minne med detta gränssnitt, det är SRAM.
  • ECC-styrenhet: den innehåller logiken för att beräkna och validera korrigeringskoden på SRAM-minnet.

För SRAM-gränssnittet och minnesorganisationen, se enhetens referensmanual Avsnitt Appendix A Referensdokument.

Filtrering introduktion

CAN-filterlogik låter dig konfigurera filtren på olika sätt. Till exempelample, meddelanden som passerar acceptansfiltreringen kan lagras i Rx FIFO (0 eller 1) eller i dedikerade rx-buffertar. Varje filter kan konfigureras som ett acceptans- eller avvisningsfilter och kan även aktiveras eller inaktiveras. För acceptansfilter utförs varje filterlista från objekt #0 till det första matchande objektet i filterlistan. Innan du använder filter är det obligatoriskt att konfigurera startadressen och numren på filtret för att reservera en del av meddelande-RAM. Bilden nedan visar en view av den delade minneskartan och registren (därav startadresserna för varje sektion).

Figur 1. Meddelande RAM-konfiguration example

Meddelande RAM-initiering

Innan du använder något filter är det obligatoriskt att konfigurera det relevanta RAM-området för meddelandena där de kommer att lagras. För att göra detta måste mjukvaruapplikationen skriva offset (i ord) från meddelandets RAM-basadress för varje filterområde. Antalet filter för varje område måste konfigureras så att styrenheten kan förstå var varje relaterat filterminnesområde slutar I detta dokument, som ex.ampDe fyra filtren kommer att konfigureras för standardidentifierare (11 bitar) och fyra filter för utökade identifierare (29 bitar), så reservera en del av meddelande-RAM för att lagra 11-bitars filter och en annan för 29-bitars filter. För att konfigurera startadressen för standard-id-filterområdet måste programvaran skriva FLSSA-fältet för SIDFC-registret (Standard ID-filterkonfigurationsregister). För utökade ID-filter är det nödvändigt att skriva FLESA-fältet i XIDFC-registret (Utökat ID-filterkonfigurationsregister). FLSSA- och FLESA-fälten bör innehålla minnesförskjutningen "i ord" från RAM-basadressen för meddelandet. Denna applikation konfigurerar fyra standardfilter vid offset noll och fyra utökade filter

För standardfilterkonfiguration:

  • FLSSA = 0x0: förskjutningen avseende meddelande-RAM-basadress är noll, så området börjar i början av meddelande-RAM.
  • LSS = 4: detta är antalet filter som ska konfigureras. Varje filter är sammansatt av "ett" 32-bitars ord.
    I denna konfiguration en del av minnet som börjar från offset noll och har en storlek på fyra ord.

Notera: CAN-styrenheten har ingen kontrollmekanism för att konfigurera meddelande-RAM, detta betyder att utvecklaren måste vara försiktig så att de inte överlappar de konfigurerade RAM-områdena. Följande bild visar hur man konfigurerar en del av minnet för att lagra utökade identifieringsfilter.

För att konfigurera RAM-området för att lagra utökade filter är det nödvändigt att programmera följande värden i FLESA- och LSE-fälten.

  • FLESA = 0x04: förskjutningen i ord avseende meddelandets RAM-basadress. Detta eftersom det i tidigare konfigurerade filterområde har reserverats 0x04 ord för standard-ID-filter och då är den minsta användbara offset 0x04.
  • LSE = 4: detta är antalet filter som ska konfigureras. För utökat ID består ett filter av "två" 32 bitars ord.

I denna konfiguration har en del av minnet som börjar från offset 0x04 (ord) en storlek på åtta ord (fyra tvåordsfilter). Därför är minsta offset för nästa konfigurerbara minnesområde 0x0C ord. Alla avsnitt av meddelande-RAM måste konfigureras med hänsyn till antalet och storleken på de element som kommer att lagras i avsnittet utan att överlappa några avsnitt.
Notera: för att konvertera en ordförskjutning till en byteförskjutning behövs det att multiplicera ordvärdet med fyra.

Exampstandard-ID-filter

Efter att ha konfigurerat meddelande-RAM, kan du konfigurera enhetsfiltren.
Varje filterelement kan konfigureras som:

  • Räckviddsfilter
  • Dubbelt ID-filter
  • Klassiskt filter
  • Filter för dedikerad rx-buffert (enkelt ID-filter)

Följande figur visar hur du konfigurerar fyra olika typer av filter för standardidentifierare (11-bitars identifierare). Använd följande filterelementregister för STANDARD ID.

Områdesfilter för RX FIFO0

Nedan ett exampfilfiltrering för att lagra meddelanden med identifierare i området [0x16, 0xF6] i Receive FIFO 0.
Registervärde (HEX): 0x081600F6
Registervärde (BIN): 00 001 00000010110 (00000) 00011110110

Notera: i alla exampfilerna i detta dokument, hålls bitarna inom parentes på standardvärdet. Fältvärden:

  • SFT -> `00` -> Områdesfilter från SFID1 till SFID2
  • SFEC -> `001` -> Lagra i Rx FIFO 0 om filtret matchar
  • SFID1 -> `00000010110` -> Första ID för standard-ID-filterelementintervall (0x16)
  • SFID2 -> `00011110110` -> Andra ID för standard-ID-filterelementintervall (0xF6)
Dubbelfilter för RX FIFO1

Nedan är ett example av ett dubbelt ID-filter för att lagra meddelandeidentifierare 0 x 0A eller 0 x FF i FIFO 1.
Registervärde (HEX): 0x500A00FF
Registervärde (BIN): 01 010 00000001010 (00000) 00011111111
Fältvärden:

  • SFT -> `01` -> Dubbla ID-filter för SFID1 eller SFID2
  • SFEC -> `010` -> Lagra i Rx FIFO 1 om filtret matchar
  • SFID1 -> `00000001010` -> Första ID för standard dubbel-ID-filterelement
  • SFID2 -> `00011111111` -> Andra ID för standard dubbel-ID-filterelement
Rx dedikerad buffertfiltrering

Nedan är ett example för att lagra meddelanden med identifiering 0 x 7F0 i dedikerad rx-buffert #0.
Med hjälp av en dedikerad buffert är det möjligt att filtrera endast ett meddelande-ID och det är det som är skrivet i SFID1-fältet.
Registervärde (HEX): 0x3FF00000
Registervärde (BIN): 00 111 11111110000 (00000) 00 (000) 000000

  • SFT -> `00` -> detta värde är inte viktigt eftersom filtrering för att lagra i dedikerad RX BUFFER och i detta fall SFT-värdet ignoreras (se SFEC-fältbeskrivning fall `111`)
  • SFEC -> `111` -> Lagra i dedikerad rx-buffert om filtret matchar
  • SFID1 -> `11111110000` -> standard-ID som filtret accepterar (0x7F0)
  • SFID2[10, 9] -> `00` -> detta fält avgör om det mottagna meddelandet lagras i en rx-buffert eller behandlas som meddelande A, B eller C i felsökningsmeddelandesekvensen. I det här fallet vill programvaran lagra meddelandet i en rx-buffert.
  • SFID2[0,5] -> `000000` → index för den dedikerade buffert rx där motsvarande meddelande kommer att lagras (om N dedikerad buffert rx har konfigurerats kan detta index vara i intervallet [0, N -1]) .I detta fall lagras meddelandet i dedikerad buffert #0.
Klassiskt filter för RX FIFO0

Detta example visar hur man lagrar meddelanden med identifierare i området [0x688, 0x68F] i RX FIFO 0. För ett klassiskt filter måste ett Identifier / Mask-par definieras. Identifieraren måste skrivas i SFID1 och masken i filterelementets SFID2-fält. I ett klassiskt filter erhålls ID-meddelandena som passerar filtret genom att applicera masken på identifieraren enligt följande:

  • detta är meningen med filterbitarna -> 1 = måste matcha (0 = bryr sig inte);
  • med ett filter med en mask som består av alla "1:or", kommer endast en identifierare att passera till filtret (den som är skriven i SFID1-fältet) medan ett filter som har en mask som består av alla "0" alla identifierare kommer att passera filtret.

Uppenbarligen är dessa de enklaste filtren. Nedan finns en förklaring av hur man organiserar ett intervallfilter för standard-ID:t i intervallet [0x688, 0x68F] som lagrar mottagna meddelanden i RX FIFO 0. Detta är ett standardmeddelandefilter, så vi kommer att ge värden till SFID1 = Identifier och SFID2 = Mask.
Registervärde (HEX): 0x8E8B07F8
Registervärde (BIN): 10 001 11010001011 00000 11111111000

  • SFT -> `10` -> Klassiskt filter: SFID1 = filter, SFID2 = mask
  • SFEC -> `001` -> Lagra i Rx FIFO 0 om filtret matchar
  • SFID1 = 110 1000 1011 (Identifier0x68B)
  • SFID2 = 111 1111 1000 (Mask0x7F8)

Genom att applicera masken på identifieraren (lite) med betydelsen av maskbiten (1 = måste matcha 0 = bryr sig inte) hittar vi följande områdesfilter där "X"-symbolen står för noll eller ett.

Filter = 110 1000 1XXX

Sedan kommer alla standardmeddelanden i området [0x688, 0x68F] att passera filtret.

Utökad konfiguration av ID-filter

Samma filtertyper kan implementeras även för utökade identifierare (29-bitars identifierare).

Räckvidd utökat filter för RX FIFO0

I detta example, kommer detta filter att lagra meddelanden med identifierare i området [0xFFFFF, 0x1FFFFFFF] i FIFO 0.
Under registervärdena:

  • F0 registervärde (HEX): 0x200FFFFF
  • F1 registervärde (HEX): 0xDFFFFFFF
  • FO-registervärde (BIN): 001 00000000011111111111111111111
  • F1 registervärde (BIN): 11 (0) 11111111111111111111111111111

Fältvärden:

  • EFEC -> `001` -> Lagra i Rx FIFO 0 om filtret matchar
  • EFID1 ->`00000000011111111111111111111` -> Första ID för utökat ID-filterelement
    range(0xFFFFF)
  • EFT -> `11` -> Områdesfilter från SFID1 till SFID2
  • SFID2 ->`11111111111111111111111111111` -> Andra ID för standard-ID-filterelementintervall (0x1FFFFFFF)
Dubbelt ID-filter för FIFO 1

I detta exampfiltret med dubbla ID kommer att lagra meddelanden med identifierare 0xAAAAA eller 0xBBBBB i FIFO 1.

  • F0 registervärde (HEX): 0x400AAAAA
  • F1 registervärde (HEX): 0x400BBBBB
  • FO-registervärde (BIN): 010 000000000 10101010101010101010
  • F1 registervärde (BIN): 01 (0) 00000000010111011101110111011

Fältvärden:

  • EFEC -> `010` -> Lagra i Rx FIFO 1 om filtret matchar
  • EFID1 -> `00000000010101010101010101010` -> Första utökade ID (0xAAAAA)
  • EFT -> `01` -> Dubbelt ID-filter för EFID1 eller EFID2
  • EFID2 -> `00000000010111011101110111011` -> Andra utökade ID (0x000BBBBB)
Dedikerad rx-buffert

I detta exampFiltreringen kommer att lagra meddelanden med identifieraren 0x000AAAAA i dedikerad rx-buffert #1. Även i det här scenariot kan endast ett meddelande-id filtreras med den dedikerade bufferten och det är det som skrevs in i EFID1-fältet.

  • ID-filter för dedikerad rx-buffert (ID = 0x000AAAAA)
  • F0 registervärde (HEX): 0xE00AAAAA
  • F1 registervärde (HEX): 0x00000001
  • FO-registervärde (BIN): 111 00000000010101010101010101010
  • F1 registervärde (BIN): 00 (0) 000000000000000000 00 (000) 000001

Fältvärden:

  • EFEC -> `111` -> Lagra i dedikerad rx-buffert om filtret matchar
  • EFID1 -> `00000000010101010101010101010` -> utökat ID som filtret accepterar
    (0x000AAAAA)
  • EFT -> `00` -> detta värde är inte viktigt eftersom filtrering för att lagra i dedikerad RX
    BUFFERT och i det här fallet EFT-värdet ignoreras (se EFEC-fältbeskrivningsfallet "111")
  • EFID2[10, 9] -> `00` -> detta fält avgör om det mottagna meddelandet lagras i en Rx-buffert eller behandlas som meddelande A, B eller C i felsökningsmeddelandesekvensen. I det här fallet vill programvaran lagra meddelandet i en Rx-buffert
  • EFID2[0,5] -> `000001` -> index för den dedikerade rx-bufferten där det matchande meddelandet kommer att lagras (om du har konfigurerat N dedikerad rx-buffert kan detta index vara i intervallet [0, N -1]). I detta fall lagras meddelandet i dedikerad buffert #1
Klassiskt filter för rx FIFO1

I detta example, kommer filterprogrammeringen att lagra meddelanden lagrade med identifierare i området [0 x FFFFF, 0 x1FFFFFF] i rx FIFO 1. Det är underförstått att maskeringsmetoden är densamma som standard ID-filtren. Nedan finns en förklaring om hur man programmerar ett utökat ID-intervallfilter i rage [0 x FFFFF, 0 x 1FFFFFF] som lagrar mottagna meddelanden i rx FIFO 1. Detta är ett filter för utökade meddelanden, så vi kommer att ge värden till EFID1 = Identifier och EFID2 = Mask

  • F0 registervärde (HEX): 0x400FFFFF
  • F1 registervärde (HEX): 0x9E0FFFFF
  • F0 registervärde (BIN): 010 00000000011111111111111111111
  • F1 registervärde (BIN): 10 (0) 11110000011111111111111111111
  • EFT > `10` -> Klassiskt filter: EFID1 = filter, EFID2 = mask
  • EFEC -> `010` -> Lagra i Rx FIFO 1 om filtret matchar
  • EFID1 = 0 0000 0000 1111 1111 1111 1111 1111 (Identifier 0xFFFFF)
  • EFID2 = 1 1110 0000 1111 1111 1111 1111 1111 (Mask 0x1E0FFFFF)

Genom att applicera masken på identifieraren (en bit) med betydelsen av maskbiten (1 = måste motsvara 0 = bryr sig inte) hittar vi följande områdesfilter där symbolen "X" står för noll eller ett.

Filter = 0 000X XXXX 1111 1111 1111 1111 1111

Så alla utökade meddelanden i området [0xFFFFF, 0x1FFFFFF] kommer att passera filtret.

Bilaga A Referensdokument

  • SPC584Cx/SPC58ECx Referensmanual
  • SPC584Cx/SPC58ECx datablad

Bilaga B Akronymer och förkortningar

Förkortning Fullständigt namn
BURK Controllers områdesnätverk
FD Flexibel datahastighet
Dokumentets revisionshistorik
Datum Version Ändringar
01-mars-2021 1 Initial release.

VIKTIGT MEDDELANDE - LÄS VÄNLIGT NÄR

STMicroelectronics NV och dess dotterbolag (“ST”) förbehåller sig rätten att göra ändringar, korrigeringar, förbättringar, modifieringar och förbättringar av ST-produkter och / eller detta dokument när som helst utan föregående meddelande. Köpare bör få den senaste relevanta informationen om ST-produkter innan de beställer. ST-produkter säljs enligt ST: s försäljningsvillkor på plats vid beställningsbekräftelsen.

Köpare är ensamma ansvariga för val, val och användning av ST-produkter och ST tar inget ansvar för applikationshjälp eller utformningen av köparens produkter.

Ingen licens, uttrycklig eller underförstådd, till någon immateriell rättighet beviljas av ST häri.

Återförsäljning av ST-produkter med bestämmelser som skiljer sig från den information som anges häri upphäver all garanti som beviljats ​​av ST för sådan produkt.

ST och ST-logotypen är varumärken som tillhör ST. För ytterligare information om ST-varumärken, se www.st.com/trademarks. Alla andra produkt- eller tjänstnamn tillhör sina respektive ägare.

Informationen i detta dokument ersätter och ersätter information som tidigare tillhandahållits i tidigare versioner av detta dokument.

© 2021 STMicroelectronics – Alla rättigheter reserverade

Dokument/resurser

ST TN1348 SPC58x Konfigurera CAN- och CAN-FD-filter [pdfInstruktioner
TN1348, SPC58x Konfigurera CAN- och CAN-FD-filter

Referenser

Lämna en kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade *