TN1348 SPC58x Konfigurace filtrů CAN a CAN-FD
Zavedení
Tato technická poznámka popisuje, jak nakonfigurovat akceptační filtry pro řadiče CAN zabudované v automobilových mikrořadičích SPC58x. Dokument popisuje konfigurace registru a poskytuje některé příkladyample pro urychlení konfigurace filtru. Tyto konfigurace lze s malými odchylkami převzít pro všechny mikrokontroléry v této rodině. Bývalýampsoubory v tomto dokumentu jsou založeny na 584bitovém MCU SPC58Cx/SPC32ECx.
MŮŽE přesview
SPC584Cx/SPC58ECx má osm instancí CAN vestavěných do dvou různých subsystémů, jak je zdokumentováno v referenční příručce k zařízení, část Příloha A Referenční dokumenty.
Všechny řadiče CAN ve stejném subsystému budou sdílet zdroje, jako je paměť RAM, hodiny atd. Každý subsystém CAN se skládá z následujících hlavních bloků:
- Modulární jádra CAN: k registrům modulu CAN lze přistupovat pomocí rozhraní Generic Slave Interface (GSI). Periferní modul GSI funguje jako požadavek od každého masteru.
- Rozhodčí CAN-RAM: je to přídavná logika pro rozhodování mezi požadavky na přístup k RAM různými řadiči CAN.
- SRAM: subsystém CAN se propojí s externí RAM pomocí tohoto rozhraní, je to SRAM.
- Řadič ECC: obsahuje logiku pro výpočet a ověření opravného kódu v paměti SRAM.
Informace o rozhraní SRAM a organizaci paměti naleznete v referenční příručce k zařízení Část Příloha A Referenční dokumenty.
Úvod do filtrování
Logika filtru CAN umožňuje konfigurovat filtry různými způsoby. Napřample, zprávy, které projdou filtrováním přijetí, mohou být uloženy v Rx FIFO (0 nebo 1) nebo ve vyhrazených rx bufferech. Každý filtr lze nakonfigurovat jako filtr pro přijetí nebo odmítnutí a lze jej také povolit nebo zakázat. Pro akceptační filtr se každý seznam filtrů provádí od položky #0 po první odpovídající položku v seznamu filtrů. Před použitím filtrů je nutné nakonfigurovat počáteční adresu a čísla filtru pro rezervaci části paměti RAM. Obrázek níže ukazuje a view mapy sdílené paměti a registrů (tedy počáteční adresy pro každou sekci).
Obrázek 1. Zpráva Konfigurace paměti RAM example
Zpráva Inicializace paměti RAM
Před použitím jakéhokoli filtru je nutné nakonfigurovat příslušnou oblast paměti RAM zpráv, ve kterých budou uloženy. K tomu musí softwarová aplikace zapsat offset (slovy) ze zprávy RAM základní adresy každé oblasti filtru. Počet filtrů pro každou oblast musí být nakonfigurován, aby řadič mohl pochopit, kde končí každá související oblast paměti filtru V tomto dokumentu, jako např.ample čtyři filtry, budou nakonfigurovány pro standardní identifikátory (11 bitů) a čtyři filtry pro rozšířené identifikátory (29 bitů), takže část paměti RAM pro zprávy vyhraďte pro uložení 11bitových filtrů a další pro 29bitové filtry. Chcete-li nakonfigurovat počáteční adresu oblasti standardního filtru ID, musí software zapsat pole FLSSA registru SIDFC (registr standardní konfigurace filtru ID). Pro rozšířené ID filtry je nutné zapsat pole FLESA registru XIDFC (Konfigurační registr rozšířeného ID filtru). Pole FLSSA a FLESA by měla obsahovat offset paměti „ve slovech“ od základní adresy RAM zprávy. Tato aplikace konfiguruje čtyři standardní filtry s offsetem nula a čtyři rozšířené filtry
Pro standardní konfiguraci filtru:
- FLSSA = 0x0: offset vzhledem k základní adrese RAM zpráv je nula, takže oblast začíná na začátku paměti RAM zpráv.
- LSS = 4: toto je počet filtrů ke konfiguraci. Každý filtr se skládá z „jednoho“ 32bitového slova.
V této konfiguraci část paměti začínající od offsetové nuly a mající velikost čtyř slov.
Poznámka: řadič CAN nemá žádný kontrolní mechanismus pro konfiguraci zprávy RAM, to znamená, že vývojář musí dávat pozor, aby se nepřekrývaly nakonfigurované oblasti RAM. Následující obrázek ukazuje, jak nakonfigurovat část paměti pro ukládání rozšířených identifikačních filtrů.
Pro konfiguraci oblasti RAM pro ukládání rozšířených filtrů je nutné naprogramovat následující hodnoty v polích FLESA a LSE.
- BLESA = 0x04: offset ve slovech vzhledem k základní adrese zprávy RAM. Je to proto, že v oblasti předchozích konfigurovaných filtrů bylo vyhrazeno 0x04 slov pro standardní filtry ID a poté je minimální použitelný offset 0x04.
- LSE = 4: toto je počet filtrů ke konfiguraci. Pro rozšířené ID je filtr složen ze „dvou“ 32bitových slov.
V této konfiguraci část paměti začínající od offsetu 0x04 (slova) o velikosti osmi slov (čtyři dvouslovné filtry). Minimální offset pro další konfigurovatelnou oblast paměti je tedy 0x0C slov. Všechny sekce zprávy RAM musí být nakonfigurovány s ohledem na počet a velikost prvků, které budou uloženy v sekci, aniž by se překrývaly jakékoli sekce.
Poznámka: pro převod slova offset na bajtový offset je potřeba vynásobit hodnotu slova čtyřmi.
Example standardních ID filtrů
Po konfiguraci zprávy RAM můžete nakonfigurovat filtry zařízení.
Každý filtrační prvek lze nakonfigurovat jako:
- Rozsahový filtr
- Dvojitý ID filtr
- Klasický filtr
- Filtr pro vyhrazenou vyrovnávací paměť rx (filtr s jedním ID)
Následující obrázek ukazuje, jak nakonfigurovat čtyři různé typy filtrů pro standardní identifikátory (11bitové identifikátory). Pro STANDARD ID použijte následující registr filtračních prvků.
Rozsahový filtr pro RX FIFO0
Pod exampsoubor filtrování pro ukládání zpráv s identifikátory v rozsahu [0x16, 0xF6] do Receive FIFO 0.
Hodnota registru (HEX): 0x081600F6
Hodnota registru (BIN): 00 001 00000010110 (00000) 00011110110
Poznámka: ve všech exampV souborech uvedených v tomto dokumentu jsou bity v hranatých závorkách zachovány na výchozí hodnotě. Hodnoty polí:
- SFT -> `00` -> Filtr rozsahu od SFID1 do SFID2
- SFEC -> `001` -> Uložit do Rx FIFO 0, pokud filtr odpovídá
- SFID1 -> `00000010110` -> První ID standardního rozsahu prvků filtru ID (0x16)
- SFID2 -> `00011110110` -> Druhé ID standardního rozsahu prvků filtru ID (0xF6)
Dvojitý filtr pro RX FIFO1
Níže je exampSoubor dvojitého ID filtru pro ukládání identifikátorů zpráv 0 x 0A nebo 0 x FF do FIFO 1.
Hodnota registru (HEX): 0x500A00FF
Hodnota registru (BIN): 01 010 00000001010 (00000) 00011111111
Hodnoty polí:
- SFT -> `01` -> Filtr Dual ID pro SFID1 nebo SFID2
- SFEC -> `010` -> Uložit do Rx FIFO 1, pokud filtr odpovídá
- SFID1 -> `00000001010` -> První ID standardního prvku filtru s dvojitým ID
- SFID2 -> `00011111111` -> Druhé ID standardního prvku filtru s dvojitým ID
Rx vyhrazené filtrování vyrovnávací paměti
Níže je example pro ukládání zpráv s identifikací 0 x 7F0 do vyhrazeného rx bufferu #0.
Pomocí vyhrazené vyrovnávací paměti je možné filtrovat pouze jedno ID zprávy, a to to, které je zapsáno v poli SFID1.
Hodnota registru (HEX): 0x3FF00000
Hodnota registru (BIN): 00 111 11111110000 (00000) 00 (000) 000000
- SFT -> `00` -> tato hodnota není důležitá, protože filtrování pro uložení do vyhrazené RX BUFFER a v tomto případě hodnota SFT je ignorována (viz případ popisu pole SFEC `111`)
- SFEC -> `111` -> Uložit do vyhrazené rx vyrovnávací paměti, pokud se filtr shoduje
- SFID1 -> `11111110000` -> standardní ID, které bude filtr akceptovat (0x7F0)
- SFID2[10, 9] -> `00` -> toto pole rozhoduje o tom, zda je přijatá zpráva uložena v rx vyrovnávací paměti nebo se s ní zachází jako se zprávou A, B nebo C sekvence ladicích zpráv. V tomto případě chce softwarová aplikace uložit zprávu do vyrovnávací paměti rx.
- SFID2[0,5] -> `000000` → index vyhrazeného bufferu rx, kam bude uložena odpovídající zpráva (pokud bylo nakonfigurováno N vyhrazeného bufferu rx, tento index může být v rozsahu [0, N -1]) .V tomto případě je zpráva uložena do vyhrazeného bufferu #0.
Klasický filtr pro RX FIFO0
Tento example ukazuje, jak ukládat zprávy s identifikátorem v rozsahu [0x688, 0x68F] v RX FIFO 0. Pro klasický filtr musí být definován pár Identifikátor / Maska. Identifikátor musí být zapsán v SFID1 a maska v polích SFID2 filtračního prvku. V klasickém filtru se zprávy ID, které projdou filtrem, získávají aplikací masky na identifikátor takto:
- toto je význam filtrových bitů -> 1 = musí odpovídat (0 = je mi to jedno);
- s filtrem s maskou složenou ze všech „1“ projde do filtru pouze jeden identifikátor (ten, který je zapsán v poli SFID1), zatímco filtr s maskou tvořenou všemi „0“ projde všechny identifikátory filtr.
Je zřejmé, že se jedná o nejjednodušší filtry. Níže je vysvětlení, jak uspořádat rozsahový filtr pro standardní ID v rozsahu [0x688, 0x68F], který ukládá přijaté zprávy do RX FIFO 0. Toto je standardní filtr zpráv, takže dáme hodnoty SFID1 = Identifikátor a SFID2 = Maska.
Hodnota registru (HEX): 0x8E8B07F8
Hodnota registru (BIN): 10 001 11010001011 00000 11111111000
- SFT -> `10` -> Klasický filtr: SFID1 = filtr, SFID2 = maska
- SFEC -> `001` -> Uložit do Rx FIFO 0, pokud filtr odpovídá
- SFID1 = 110 1000 1011 (Identifikátor0x68B)
- SFID2 = 111 1111 1000 (Mask0x7F8)
Aplikováním masky na identifikátor (trochu) s významem bitu masky (1 = musí odpovídat 0 = je mi to jedno) najdeme následující filtr rozsahu, kde symbol `X` znamená nulu nebo jedničku.
Filtr = 110 1000 1XXX
Filtrem pak projdou všechny standardní zprávy v rozsahu [0x688, 0x68F].
Rozšířená konfigurace filtrů ID
Stejné typy filtrů lze implementovat i pro rozšířené identifikátory (29bitové identifikátory).
Rozšířený rozsah filtru pro RX FIFO0
V tomto example, tento filtr bude ukládat zprávy s identifikátory v rozsahu [0xFFFFF, 0x1FFFFFFF] v FIFO 0.
Pod hodnotami registru:
- Hodnota registru F0 (HEX): 0x200FFFFF
- Hodnota registru F1 (HEX): 0xDFFFFFFF
- Hodnota registru FO (BIN): 001 00000000011111111111111111111
- Hodnota registru F1 (BIN): 11 (0) 11111111111111111111111111111
Hodnoty polí:
- EFEC -> `001` -> Uložit do Rx FIFO 0, pokud filtr odpovídá
- EFID1 ->`00000000011111111111111111111` -> První ID prvku filtru rozšířeného ID
rozsah (0xFFFFFF) - EFT -> `11` -> Filtr rozsahu od SFID1 do SFID2
- SFID2 ->`11111111111111111111111111111` -> Druhé ID standardního rozsahu prvků filtru ID (0x1FFFFFFF)
Dvojitý ID filtr pro FIFO 1
V tomto exampFiltr duálních ID bude ukládat zprávy s identifikátory 0xAAAAA nebo 0xBBBBB do FIFO 1.
- Hodnota registru F0 (HEX): 0x400AAAAA
- Hodnota registru F1 (HEX): 0x400BBBBB
- Hodnota registru FO (BIN): 010 000000000 10101010101010101010
- Hodnota registru F1 (BIN): 01 (0) 00000000010111011101110111011
Hodnoty polí:
- EFEC -> `010` -> Uložit do Rx FIFO 1, pokud filtr odpovídá
- EFID1 -> `00000000010101010101010101010` -> První rozšířené ID (0xAAAAA)
- EFT -> `01` -> Duální ID filtr pro EFID1 nebo EFID2
- EFID2 -> `00000000010111011101110111011` -> Druhé rozšířené ID (0x000BBBBB)
Vyhrazený rx buffer
V tomto exampFiltrování uloží zprávy s identifikátorem 0x000AAAAA do vyhrazené rx vyrovnávací paměti #1. Také v tomto scénáři lze pomocí vyhrazené vyrovnávací paměti filtrovat pouze jedno ID zprávy a je to to, které je zapsáno do pole EFID1.
- ID filtr pro vyhrazenou rx vyrovnávací paměť (ID = 0x000AAAAA)
- Hodnota registru F0 (HEX): 0xE00AAAAA
- Hodnota registru F1 (HEX): 0x00000001
- Hodnota registru FO (BIN): 111 00000000010101010101010101010
- Hodnota registru F1 (BIN): 00 (0) 000000000000000000 00 (000) 000001
Hodnoty polí:
- EFEC -> `111` -> Uložit do vyhrazené rx vyrovnávací paměti, pokud se filtr shoduje
- EFID1 -> `00000000010101010101010101010` -> rozšířené ID, které filtr přijme
(0x000AAAAA) - EFT -> `00` -> tato hodnota není důležitá, protože filtrování pro uložení do vyhrazeného RX
BUFFER a v tomto případě je hodnota EFT ignorována (viz případ popisu pole EFEC „111“) - EFID2[10, 9] -> `00` -> toto pole rozhoduje, zda se přijatá zpráva uloží do Rx Bufferu nebo se s ní bude pracovat jako se zprávou A, B nebo C sekvence ladicích zpráv. V tomto případě chce softwarová aplikace uložit zprávu do Rx Bufferu
- EFID2[0,5] -> `000001` -> index vyhrazeného rx bufferu, kam bude uložena odpovídající zpráva (pokud jste nakonfigurovali N vyhrazeného rx bufferu, tento index může být v rozsahu [0, N -1]). V tomto případě je zpráva uložena do vyhrazené vyrovnávací paměti #1
Klasický filtr pro rx FIFO1
V tomto example, programování filtru uloží zprávy uložené s identifikátorem v rozsahu [0 x FFFFF, 0 x1FFFFFF] do rx FIFO 1. Je pochopitelné, že metoda maskování je stejná jako u standardních ID filtrů. Níže je vysvětleno, jak naprogramovat filtr rozšířeného rozsahu ID v rage [0 x FFFFF, 0 x 1FFFFFF], který ukládá přijaté zprávy do rx FIFO 1. Toto je filtr pro rozšířené zprávy, takže přiřadíme hodnoty EFID1 = Identifikátor a EFID2 = maska
- Hodnota registru F0 (HEX): 0x400FFFFF
- Hodnota registru F1 (HEX): 0x9E0FFFFF
- Hodnota registru F0 (BIN): 010 00000000011111111111111111111
- Hodnota registru F1 (BIN): 10 (0) 11110000011111111111111111111
- EFT > `10` -> Klasický filtr: EFID1 = filtr, EFID2 = maska
- EFEC -> `010` -> Uložit do Rx FIFO 1, pokud filtr odpovídá
- EFID1 = 0 0000 0000 1111 1111 1111 1111 1111 (identifikátor 0xFFFFF)
- EFID2 = 1 1110 0000 1111 1111 1111 1111 1111 (maska 0x1E0FFFFF)
Aplikováním masky na identifikátor (bit) s významem bitu masky (1 = musí odpovídat 0 = je mi to jedno) najdeme následující rozsahový filtr, kde symbol `X` znamená nulu nebo jedničku.
Filtr = 0 000X XXXX 1111 1111 1111 1111 1111
Filtrem tedy projdou všechny rozšířené zprávy v rozsahu [0xFFFFF, 0x1FFFFFF].
Dodatek A Referenční dokumenty
- SPC584Cx/SPC58ECx Referenční příručka
- Technický list SPC584Cx/SPC58ECx
Příloha B Zkratky a zkratky
Zkratka | Kompletní jméno |
CAN | Síť oblasti ovladače |
FD | Flexibilní rychlost přenosu dat |
Historie revizí dokumentu
Datum | Verze | Změny |
01-března-2021 | 1 | Počáteční vydání. |
DŮLEŽITÉ UPOZORNĚNÍ - PŘEČTĚTE SI POZORNĚ
STMicroelectronics NV a její dceřiné společnosti („ST“) si vyhrazují právo provádět změny, opravy, vylepšení, úpravy a vylepšení produktů ST a / nebo tohoto dokumentu kdykoli bez předchozího upozornění. Před zadáním objednávky by kupující měli získat nejnovější relevantní informace o produktech ST. Produkty ST se prodávají v souladu s podmínkami prodeje společnosti ST platnými v době potvrzení objednávky.
Za výběr, výběr a používání produktů ST nese výhradní odpovědnost kupující a společnost ST nepřebírá žádnou odpovědnost za pomoc s aplikací ani za design produktů kupujících.
Společnost ST zde neuděluje žádnou výslovnou ani předpokládanou licenci k právu duševního vlastnictví.
Další prodej produktů ST s ustanoveními odlišnými od informací uvedených v tomto dokumentu ruší jakoukoli záruku poskytnutou společností ST na takový produkt.
ST a logo ST jsou ochranné známky společnosti ST. Další informace o ochranných známkách ST naleznete na www.st.com/trademarks. Všechny ostatní názvy produktů nebo služeb jsou majetkem jejich příslušných vlastníků.
Informace v tomto dokumentu nahrazují a nahrazují informace dříve uvedené v předchozích verzích tohoto dokumentu.
© 2021 STMicroelectronics – Všechna práva vyhrazena
Dokumenty / zdroje
![]() |
ST TN1348 SPC58x Konfigurace filtrů CAN a CAN-FD [pdfPokyny TN1348, SPC58x Konfigurace filtrů CAN a CAN-FD |