TN1348 SPC58x Konfigurimi i filtrave CAN dhe CAN-FD
Hyrje
Ky shënim teknik përshkruan se si të konfiguroni filtrat e pranimit për kontrollorët CAN të ngulitur në mikrokontrolluesit e automobilave SPC58x. Dokumenti përshkruan konfigurimet e regjistrit dhe ofron disa p.shample për të shpejtuar konfigurimin e filtrit. Këto konfigurime mund të miratohen për të gjithë mikrokontrolluesit në këtë familje me varianca të vogla. IshampTë dhënat në këtë dokument bazohen në MCU 584-bit SPC58Cx/SPC32ECx.
MUND të përfundojëview
SPC584Cx/SPC58ECx ka tetë raste CAN të ngulitura në dy nënsisteme të ndryshme siç dokumentohet në manualin e referencës së pajisjes Seksioni Shtojca A Dokumentet e referencës.
Të gjithë kontrollorët CAN në të njëjtin nënsistem do të ndajnë burime si memoria RAM, ora, etj. Çdo nënsistem CAN përbëhet nga blloqet kryesore të mëposhtme:
- Bërthamat modulare CAN: regjistrat e modulit CAN mund të aksesohen duke përdorur Ndërfaqen e Përgjithshme Slave (GSI). Moduli periferik GSI vepron si një kërkesë nga çdo master.
- Arbitri CAN-RAM: është një logjikë shtesë për arbitrazh midis kërkesave për akses në RAM nga kontrollorët e ndryshëm CAN.
- SRAM: nënsistemi CAN do të ndërlidhet me një RAM të jashtëm duke përdorur këtë ndërfaqe, është SRAM.
- Kontrolluesi ECC: përmban logjikën për të llogaritur dhe vërtetuar kodin e korrigjimit në memorien SRAM.
Për ndërfaqen SRAM dhe organizimin e kujtesës, referojuni manualit të referencës së pajisjes Seksioni Shtojca A Dokumentet e referencës.
Hyrja e filtrimit
Logjika e filtrit CAN ju lejon të konfiguroni filtrat në mënyra të ndryshme. Për shembullampLe, mesazhet që kalojnë filtrimin e pranimit mund të ruhen në Rx FIFO (0 ose 1) ose në buffer të dedikuar rx. Çdo filtër mund të konfigurohet si një filtër pranimi ose refuzimi dhe gjithashtu mund të aktivizohet ose çaktivizohet. Për filtrin e pranimit, çdo listë filtri kryhet nga artikulli #0 deri te artikulli i parë që përputhet në listën e filtrave. Përpara përdorimit të filtrave është e detyrueshme të konfiguroni adresën fillestare dhe numrat e filtrit për të rezervuar një pjesë të RAM-it të mesazhit. Figura më poshtë tregon a view të hartës së kujtesës së përbashkët dhe regjistrave (pra adresat fillestare për çdo seksion).
Figura 1. Konfigurimi i RAM-it të mesazhit p.shample
Inicializimi i RAM-it të mesazhit
Përpara se të përdorni ndonjë filtër, është e detyrueshme të konfiguroni zonën përkatëse të RAM-it të mesazheve në të cilat do të ruhen. Për ta bërë këtë, aplikacioni i softuerit duhet të shkruajë kompensimin (me fjalë) nga adresa bazë e mesazhit RAM të çdo zone filtri. Numri i filtrave për secilën zonë duhet të konfigurohet, në mënyrë që kontrolluesi të kuptojë se ku përfundon çdo zonë e memories së filtrit përkatës në këtë dokument, si p.sh.ampLe katër filtra, do të konfigurohen për identifikuesit standardë (11 bit) dhe katër filtra për identifikues të zgjeruar (29 bit), kështu që rezervoni një pjesë të RAM-it të mesazheve për të ruajtur filtrat 11-bit dhe një tjetër për filtrat 29-bit. Për të konfiguruar adresën fillestare të zonës standarde të filtrit id, softueri duhet të shkruajë fushën FLSSA të regjistrit SIDFC (regjistri i konfigurimit të filtrit standard ID). Për filtrat e zgjeruar të ID-së është e nevojshme të shkruhet fusha FLESA e regjistrit XIDFC (regjistri i konfigurimit të filtrit të zgjeruar ID). Fushat FLSSA dhe FLESA duhet të përmbajnë zhvendosjen e kujtesës "me fjalë" nga adresa bazë e RAM-it të mesazhit. Ky aplikacion konfiguron katër filtra standardë me kompensim zero dhe katër filtra të zgjeruar
Për konfigurimin standard të filtrit:
- FLSSA = 0x0: kompensimi i adresës bazë të mesazhit RAM është zero, kështu që zona fillon në fillim të RAM-it të mesazheve.
- LSS = 4: ky është numri i filtrave për t'u konfiguruar. Çdo filtër përbëhet nga "një" fjalë 32 bit.
Në këtë konfigurim, një pjesë e kujtesës fillon nga kompensimi zero dhe ka një madhësi prej katër fjalësh.
Shënim: kontrolluesi CAN nuk ka asnjë mekanizëm kontrolli për konfigurimin e mesazhit RAM, kjo do të thotë që Zhvilluesi duhet të jetë i kujdesshëm që të mos mbivendoset zonat e konfiguruara të RAM-it. Figura e mëposhtme tregon se si të konfiguroni një pjesë të memories për të ruajtur filtrat e zgjeruar të identifikimit.
Për të konfiguruar zonën RAM për të ruajtur filtrat e zgjeruar, është e nevojshme të programoni vlerat e mëposhtme në fushat FLESA dhe LSE.
- FLESA = 0x04: zhvendosja në fjalë në lidhje me adresën bazë të RAM-it të mesazhit. Kjo sepse në zonën e filtrave të konfiguruar më parë është rezervuar 0x04 fjalë për filtrat standardë të ID-së dhe më pas kompensimi minimal i përdorshëm është 0x04.
- LSE = 4: ky është numri i filtrave që duhen konfiguruar. Për ID të zgjeruar, një filtër përbëhet nga "dy" fjalë 32 bit.
Në këtë konfigurim një pjesë e kujtesës duke filluar nga kompensimi 0x04 (fjalë) me një madhësi prej tetë fjalësh (katër filtra me dy fjalë). Prandaj, kompensimi minimal për zonën tjetër të memories së konfigurueshme është 0x0C fjalë. Të gjitha seksionet e RAM-it të mesazhit duhet të konfigurohen duke marrë parasysh numrin dhe madhësinë e elementeve që do të ruhen në seksion pa mbivendosur asnjë seksion.
Shënim: për të kthyer një kompensim fjalësh në një kompensim bajt, duhet të shumëzoni vlerën e fjalës me katër.
Example të filtrave standardë ID
Pas konfigurimit të mesazhit RAM, mund të konfiguroni filtrat e pajisjes.
Çdo element filtri mund të konfigurohet si:
- Filtri i rrezes
- Filtri i dyfishtë ID
- Filtër klasik
- Filtri për buferin e dedikuar rx (filtër me një ID)
Figura e mëposhtme tregon se si të konfiguroni katër lloje të ndryshme filtrash për identifikuesit standardë (identifikuesit 11-bit). Përdorni regjistrin e mëposhtëm të elementit të filtrit për ID STANDARD.
Filtri i rrezes për RX FIFO0
Poshtë një ishampfiltrimi për të ruajtur mesazhet me identifikues në intervalin [0x16 , 0xF6] në FIFO 0 të Marrjes.
Vlera e regjistrit (HEX): 0x081600F6
Vlera e regjistrit (BIN): 00 001 00000010110 (00000) 00011110110
Shënim: në të gjitha ishampPër sa i përket këtij dokumenti, bitet e vendosura në kllapa mbahen në vlerën e paracaktuar. Vlerat e fushave:
- SFT -> `00` -> Filtri i intervalit nga SFID1 në SFID2
- SFEC -> `001` -> Ruani në Rx FIFO 0 nëse filtri përputhet
- SFID1 -> `00000010110` -> ID-ja e parë e diapazonit të elementit të filtrit standard ID (0x16)
- SFID2 -> `00011110110` -> ID e dytë e diapazonit të elementit të filtrit standard ID (0xF6)
Filtër i dyfishtë për RX FIFO1
Më poshtë është një ishampnjë filtër ID të dyfishtë për të ruajtur identifikuesit e mesazheve 0 x 0A ose 0 x FF në FIFO 1.
Vlera e regjistrit (HEX): 0x500A00FF
Vlera e regjistrit (BIN): 01 010 00000001010 (00000) 00011111111
Vlerat e fushave:
- SFT -> `01` -> Filtri me ID të dyfishtë për SFID1 ose SFID2
- SFEC -> `010` -> Ruani në Rx FIFO 1 nëse filtri përputhet
- SFID1 -> `00000001010` -> ID-ja e parë e elementit standard të filtrit me ID të dyfishtë
- SFID2 -> `00011111111` -> ID e dytë e elementit standard të filtrit me ID të dyfishtë
Filtrim i dedikuar për tampon Rx
Më poshtë është një ishampLe të ruani mesazhet me identifikim 0 x 7F0 në bufferin e dedikuar rx #0.
Duke përdorur një buffer të dedikuar, është e mundur të filtrohet vetëm një ID e mesazhit dhe ajo është ajo e shkruar në fushën SFID1.
Vlera e regjistrit (HEX): 0x3FF00000
Vlera e regjistrit (BIN): 00 111 11111110000 (00000) 00 (000) 000000
- SFT -> `00` -> kjo vlerë nuk është e rëndësishme sepse filtrimi për t'u ruajtur në RX BUFFER të dedikuar dhe në këtë rast vlera SFT shpërfillet (shih rastin e përshkrimit të fushës SFEC "111")
- SFEC -> `111` -> Ruani në tampon të dedikuar rx nëse filtri përputhet
- SFID1 -> `11111110000` -> ID standarde që filtri do të pranojë (0x7F0)
- SFID2[10, 9] -> `00` -> kjo fushë vendos nëse mesazhi i marrë do të ruhet në një buffer rx ose do të trajtohet si mesazhi A, B ose C i sekuencës së mesazheve të korrigjimit. Në këtë rast, aplikacioni i softuerit dëshiron të ruajë mesazhin në një buffer rx.
- SFID2[0,5] -> `000000` → indeksi i buferit të dedikuar rx ku do të ruhet mesazhi përkatës (nëse është konfiguruar N tampon i dedikuar rx, ky indeks mund të jetë në intervalin [0, N -1]) .Në këtë rast mesazhi ruhet në bufferin e dedikuar #0.
Filtër klasik për RX FIFO0
Ky ishample tregon se si të ruhen mesazhet me identifikues në intervalin [0x688, 0x68F] në RX FIFO 0. Për një filtër klasik, duhet të përcaktohet një çift Identifikues/Maskë. Identifikuesi duhet të shkruhet në SFID1 dhe maska në fushat SFID2 të elementit të filtrit. Në një filtër klasik, mesazhet e ID-ve që kalojnë filtrin merren duke aplikuar maskën në identifikues si më poshtë:
- ky është kuptimi i pjesëve të filtrit -> 1 = duhet të përputhen (0 = mos u interesoni);
- duke pasur një filtër me një maskë të përbërë nga të gjitha "1", vetëm një identifikues do të kalojë në filtër (ai që është shkruar në fushën SFID1) ndërsa një filtër që ka një maskë të përbërë nga të gjitha "0" të gjithë identifikuesit do të kalojnë filtri.
Natyrisht, këta janë filtrat më të thjeshtë. Më poshtë është një shpjegim se si të organizohet një filtër i intervalit për ID-në standarde në intervalin [0x688, 0x68F] i cili ruan mesazhet e marra në RX FIFO 0. Ky është një filtër standard mesazhesh, kështu që ne do t'i japim vlera SFID1 = Identifikues dhe SFID2 = Maskë.
Vlera e regjistrit (HEX): 0x8E8B07F8
Vlera e regjistrit (BIN): 10 001 11010001011 00000 11111111000
- SFT -> `10` -> Filtri klasik: SFID1 = filtër, SFID2 = maskë
- SFEC -> `001` -> Ruani në Rx FIFO 0 nëse filtri përputhet
- SFID1 = 110 1000 1011 (Identifikuesi0x68B)
- SFID2 = 111 1111 1000 (Mask0x7F8)
Duke aplikuar maskën në identifikues (pak) me kuptimin e bitit të maskës (1 = duhet të përputhet me 0 = mos u interesoni) gjejmë filtrin e mëposhtëm të intervalit ku simboli `X` qëndron për zero ose një.
Filtri = 110 1000 1XXX
Më pas, të gjitha mesazhet standarde në intervalin [0x688, 0x68F] do të kalojnë filtrin.
Konfigurimi i zgjeruar i filtrave ID
Të njëjtat lloje filtrash mund të zbatohen edhe për identifikuesit e zgjeruar (identifikuesit 29-bit).
Filtri i zgjeruar për RX FIFO0
Në këtë ishampLe, ky filtër do të ruajë mesazhe me identifikues në intervalin [0xFFFFF, 0x1FFFFFFF] në FIFO 0.
Nën vlerat e regjistrit:
- Vlera e regjistrit F0 (HEX): 0x200FFFFF
- Vlera e regjistrit F1 (HEX): 0xDFFFFFFF
- Vlera e regjistrit FO (BIN): 001 00000000011111111111111111111
- Vlera e regjistrit F1 (BIN): 11 (0) 11111111111111111111111111111
Vlerat e fushave:
- EFEC -> `001` -> Ruani në Rx FIFO 0 nëse filtri përputhet
- EFID1 ->`00000000011111111111111111111` -> ID-ja e parë e elementit të filtrit ID të zgjeruar
diapazoni (0xFFFFFF) - EFT -> `11` -> Filtri i intervalit nga SFID1 në SFID2
- SFID2 ->`11111111111111111111111111111` -> ID-ja e dytë e diapazonit të elementit standard të filtrit ID (0x1FFFFFFF)
Filtri me ID të dyfishtë për FIFO 1
Në këtë ishampFiltri i ID-së së dyfishtë do të ruajë mesazhet me identifikues 0xAAAAA ose 0xBBBBB në FIFO 1.
- Vlera e regjistrit F0 (HEX): 0x400AAAAA
- Vlera e regjistrit F1 (HEX): 0x400BBBBB
- Vlera e regjistrit FO (BIN): 010 000000000 10101010101010101010
- Vlera e regjistrit F1 (BIN): 01 (0) 00000000010111011101110111011
Vlerat e fushave:
- EFEC -> `010` -> Ruani në Rx FIFO 1 nëse filtri përputhet
- EFID1 -> `00000000010101010101010101010` -> ID-ja e parë e zgjeruar (0xAAAAA)
- EFT -> `01` -> Filtri me ID të dyfishtë për EFID1 ose EFID2
- EFID2 -> `00000000010111011101110111011` -> ID e dytë e zgjeruar (0x000BBBBB)
Buffer i dedikuar rx
Në këtë ishampFiltrimi do të ruajë mesazhet që kanë identifikuesin 0x000AAAAA në bufferin e dedikuar rx #1. Gjithashtu në këtë skenar, duke përdorur bufferin e dedikuar mund të filtrohet vetëm një id mesazhi dhe është ai i shkruar në fushën EFID1.
- Filtri ID për buferin e dedikuar rx (ID = 0x000AAAAA)
- Vlera e regjistrit F0 (HEX): 0xE00AAAAA
- Vlera e regjistrit F1 (HEX): 0x00000001
- Vlera e regjistrit FO (BIN): 111 00000000010101010101010101010
- Vlera e regjistrit F1 (BIN): 00 (0) 000000000000000000 00 (000) 000001
Vlerat e fushave:
- EFEC -> `111` -> Ruani në tampon të dedikuar rx nëse filtri përputhet
- EFID1 -> `00000000010101010101010101010` -> ID e zgjeruar që filtri do të pranojë
(0x000AAAAA) - EFT -> `00` -> kjo vlerë nuk është e rëndësishme sepse filtrimi ruhet në RX të dedikuar
BUFFER dhe në këtë rast vlera EFT shpërfillet (shih përshkrimin e fushës EFEC rastin "111") - EFID2[10, 9] -> `00` -> kjo fushë vendos nëse mesazhi i marrë do të ruhet në një buffer Rx ose do të trajtohet si mesazhi A, B ose C i sekuencës së mesazheve të korrigjimit. Në këtë rast, aplikacioni softuerik dëshiron të ruajë mesazhin në një Buffer Rx
- EFID2[0,5] -> `000001` -> indeksi i buferit të dedikuar rx ku do të ruhet mesazhi që përputhet (nëse keni konfiguruar N tampon të dedikuar rx, ky indeks mund të jetë në intervalin [0, N -1]). Në këtë rast mesazhi ruhet në bufferin e dedikuar #1
Filtër klasik për rx FIFO1
Në këtë ishampLe, programimi i filtrit do të ruajë ruajtjen e mesazheve me identifikues në intervalin [0 x FFFFF, 0 x1FFFFFF] në rx FIFO 1. Është e paqartë që metoda e maskimit është e njëjtë me filtrat standardë ID. Më poshtë është një shpjegim se si të programohet një filtër i zgjeruar ID në rage [0 x FFFFF, 0 x 1FFFFFF] i cili ruan mesazhet e marra në rx FIFO 1. Ky është një filtër për mesazhet e zgjeruara, kështu që ne do t'i japim vlera EFID1 = Identifikues dhe EFID2 = Maskë
- Vlera e regjistrit F0 (HEX): 0x400FFFFF
- Vlera e regjistrit F1 (HEX): 0x9E0FFFFF
- Vlera e regjistrit F0 (BIN): 010 00000000011111111111111111111
- Vlera e regjistrit F1 (BIN): 10 (0) 11110000011111111111111111111
- EFT > `10` -> Filtri klasik: EFID1 = filtër, EFID2 = maskë
- EFEC -> `010` -> Ruani në Rx FIFO 1 nëse filtri përputhet
- EFID1 = 0 0000 0000 1111 1111 1111 1111 1111 (Identifikuesi 0xFFFFF)
- EFID2 = 1 1110 0000 1111 1111 1111 1111 1111 (Maska 0x1E0FFFFF)
Duke aplikuar maskën në identifikues (pak) me kuptimin e bitit të maskës (1 = duhet të korrespondojë me 0 = mos u interesoni) gjejmë filtrin e mëposhtëm të intervalit ku simboli `X` qëndron për zero ose një.
Filtri = 0 000X XXXX 1111 1111 1111 1111 1111
Pra, të gjitha mesazhet e zgjeruara në intervalin [0xFFFFFF, 0x1FFFFFF] do të kalojnë filtrin.
Shtojca A Dokumentet e referencës
- Manuali i referencës SPC584Cx/SPC58ECx
- Fleta e të dhënave SPC584Cx/SPC58ECx
Shtojca B Akronimet dhe shkurtesat
Shkurtesa | Emri i plotë |
MUND | Rrjeti i zonës së kontrolluesit |
FD | Shkalla fleksibël e të dhënave |
Historia e rishikimit të dokumentit
Data | Versioni | Ndryshimet |
01-Mars-2021 | 1 | Lëshimi fillestar. |
NJOFTIM T I RORTNDSISHM - JU LUTEM LEXONI KUJDES
STMicroelectronics NV dhe filialet e saj ("ST") rezervojnë të drejtën për të bërë ndryshime, korrigjime, përmirësime, modifikime dhe përmirësime të produkteve ST dhe / ose të këtij dokumenti në çdo kohë pa njoftim. Blerësit duhet të marrin informacionin më të fundit përkatës për produktet ST përpara se të vendosin porositë. Produktet ST shiten në përputhje me termat dhe kushtet e shitjes në vend në kohën e njohjes së porosisë.
Blerësit janë vetëm përgjegjës për zgjedhjen, përzgjedhjen dhe përdorimin e produkteve ST dhe ST nuk merr asnjë përgjegjësi për ndihmën e aplikimit ose modelimin e produkteve të Blerësve.
Asnjë licencë, e shprehur apo e nënkuptuar, për ndonjë të drejtë të pronësisë intelektuale nuk jepet nga ST këtu.
Rishitja e produkteve ST me dispozita të ndryshme nga informacioni i përcaktuar këtu do të anulojë çdo garanci të dhënë nga ST për këtë produkt.
ST dhe logoja ST janë marka tregtare të ST. Për informacion shtesë rreth markave ST, ju lutemi referojuni www.st.com/trademarks. Të gjithë emrat e tjerë të produkteve ose shërbimeve janë pronë e pronarëve të tyre përkatës.
Informacioni në këtë dokument zëvendëson dhe zëvendëson informacionin e dhënë më parë në çdo version të mëparshëm të këtij dokumenti.
© 2021 STMicroelectronics – Të gjitha të drejtat e rezervuara
Dokumentet / Burimet
![]() |
ST TN1348 SPC58x Konfigurimi i filtrave CAN dhe CAN-FD [pdfUdhëzime TN1348, SPC58x Konfigurimi i filtrave CAN dhe CAN-FD |