TN1348 SPC58x Налада фільтраў CAN і CAN-FD
Уводзіны
У гэтай тэхнічнай нататцы апісваецца, як наладзіць прыёмныя фільтры для кантролераў CAN, убудаваных у аўтамабільныя мікракантролеры SPC58x. У дакуменце апісваюцца канфігурацыі рэестра і даюцца некаторыя прыкладыample для паскарэння канфігурацыі фільтра. Гэтыя канфігурацыі могуць быць прыняты для ўсіх мікракантролераў у гэтым сямействе з нязначнымі адхіленнямі. Былыampфайлы ў гэтым дакуменце заснаваны на 584-разрадным мікрасістэме кіравання SPC58Cx/SPC32ECx.
МОЖА скончыццаview
SPC584Cx/SPC58ECx мае восем асобнікаў CAN, убудаваных у дзве розныя падсістэмы, як паказана ў даведачным кіраўніцтве прылады, раздзел Дадатак A Даведачныя дакументы.
Усе кантралёры CAN у адной падсістэме будуць сумесна выкарыстоўваць такія рэсурсы, як аператыўная памяць, гадзіннік і г. д. Кожная падсістэма CAN складаецца з наступных асноўных блокаў:
- Модульныя ядра CAN: доступ да рэгістраў модуля CAN можна атрымаць з дапамогай агульнага падпарадкаванага інтэрфейсу (GSI). Перыферыйны модуль GSI дзейнічае як запыт ад кожнага майстра.
- CAN-RAM арбітр: гэта дадатковая логіка для арбітражу паміж запытамі на доступ да аператыўнай памяці з боку розных кантролераў CAN.
- SRAM: падсістэма CAN будзе ўзаемадзейнічаць са знешняй аператыўнай памяццю з дапамогай гэтага інтэрфейсу, гэта SRAM.
- Кантролер ECC: ён змяшчае логіку для вылічэння і праверкі кода карэкцыі ў памяці SRAM.
Інтэрфейс SRAM і арганізацыю памяці можна знайсці ў даведачным кіраўніцтве прылады Раздзел Дадатак A Даведачныя дакументы.
Увядзенне ў фільтраванне
Логіка фільтра CAN дазваляе наладжваць фільтры рознымі спосабамі. Напрыкладample, паведамленні, якія праходзяць фільтрацыю прыёму, могуць захоўвацца ў Rx FIFO (0 або 1) або ў спецыяльных буферах прыёму. Кожны фільтр можа быць сканфігураваны як фільтр прыняцця або адхілення, а таксама можа быць уключаны або адключаны. Для прымальнага фільтра кожны спіс фільтраў выконваецца ад элемента №0 да першага адпаведнага элемента ў спісе фільтраў. Перад выкарыстаннем фільтраў неабходна наладзіць пачатковы адрас і нумары фільтра для рэзервавання часткі аператыўнай памяці паведамленняў. На малюнку ніжэй паказаны а view агульнай карты памяці і рэгістраў (такім чынам, пачатковыя адрасы для кожнай секцыі).
Малюнак 1. Канфігурацыя аператыўнай памяці для паведамленняў, напрыкладample
Ініцыялізацыя аператыўнай памяці паведамлення
Перш чым выкарыстоўваць любы фільтр, неабходна наладзіць адпаведную вобласць аператыўнай памяці паведамленняў, у якой яны будуць захоўвацца. Для гэтага праграма павінна запісаць зрушэнне (словамі) ад базавага адраса аператыўнай памяці паведамлення кожнай вобласці фільтра. Колькасць фільтраў для кожнай вобласці павінна быць наладжана, каб кантролер мог зразумець, дзе заканчваецца кожная звязаная вобласць памяці фільтраў. У гэтым дакуменце, як напр.ample чатыры фільтры, будуць настроены для стандартных ідэнтыфікатараў (11 біт) і чатыры фільтры для пашыраных ідэнтыфікатараў (29 біт), таму зарэзервуйце частку аператыўнай памяці для паведамленняў для захоўвання 11-бітных фільтраў і другую для 29-бітных фільтраў. Каб наладзіць пачатковы адрас стандартнай вобласці фільтра ідэнтыфікатара, праграмнае забеспячэнне павінна запісаць поле FLSSA рэестра SIDFC (Стандартны рэгістр канфігурацыі фільтра ідэнтыфікатара). Для пашыраных ідэнтыфікацыйных фільтраў неабходна запісаць поле FLESA рэгістра XIDFC (Extended ID filter configuration register). Палі FLSSA і FLESA павінны ўтрымліваць зрушэнне памяці «словамі» ад базавага адраса RAM паведамлення. Гэта дадатак наладжвае чатыры стандартныя фільтры з нулявым зрушэннем і чатыры пашыраныя фільтры
Для стандартнай канфігурацыі фільтра:
- FLSSA = 0x0: зрушэнне адносна базавага адраса RAM паведамлення роўна нулю, таму вобласць пачынаецца ў пачатку RAM паведамлення.
- LSS = 4: гэта колькасць фільтраў для канфігурацыі. Кожны фільтр складаецца з аднаго 32-бітнага слова.
У гэтай канфігурацыі частка памяці, пачынаючы з нулявога зрушэння і мае памер чатырох слоў.
Заўвага: кантролер CAN не мае механізму кіравання для канфігурацыі аператыўнай памяці паведамленняў, гэта азначае, што распрацоўшчык павінен быць асцярожным, каб не перакрываць наладжаныя вобласці аператыўнай памяці. На наступным малюнку паказана, як наладзіць частку памяці для захоўвання пашыраных фільтраў ідэнтыфікацыі.
Каб наладзіць вобласць аператыўнай памяці для захоўвання пашыраных фільтраў, неабходна запраграмаваць наступныя значэнні ў палях FLESA і LSE.
- FLESA = 0x04: зрушэнне ў словах адносна базавага адрасу RAM паведамлення. Гэта таму, што ў папярэдняй наладжанай вобласці фільтраў было зарэзервавана слова 0x04 для стандартных фільтраў ідэнтыфікатара, а мінімальна карыснае зрушэнне роўна 0x04.
- LSE = 4: гэта колькасць фільтраў для канфігурацыі. Для пашыранага ідэнтыфікатара фільтр складаецца з "двух" 32-бітных слоў.
У гэтай канфігурацыі частка памяці, пачынаючы са зрушэння 0x04 (словы), мае памер у восем слоў (чатыры двухслоўныя фільтры). Такім чынам, мінімальнае зрушэнне для наступнай канфігураванай вобласці памяці складае 0x0C слоў. Усе раздзелы аператыўнай памяці паведамленняў павінны быць настроены з улікам колькасці і памеру элементаў, якія будуць захоўвацца ў раздзеле, без перакрыцця раздзелаў.
Заўвага: каб пераўтварыць зрушэнне слова ў зрушэнне байта, неабходна памножыць значэнне слова на чатыры.
Exampстандартных фільтраў ID
Пасля канфігурацыі аператыўнай памяці паведамленняў вы можаце наладзіць фільтры прылад.
Кожны фільтруючы элемент можна наладзіць як:
- Фільтр дыяпазону
- Фільтр падвойнага ідэнтыфікатара
- Класічны фільтр
- Фільтр для спецыяльнага буфера прыёму (фільтр з адным ідэнтыфікатарам)
На наступным малюнку паказана, як наладзіць чатыры розныя тыпы фільтраў для стандартных ідэнтыфікатараў (11-бітных ідэнтыфікатараў). Выкарыстоўвайце наступны рэгістр элементаў фільтра для STANDARD ID.
Фільтр дыяпазону для RX FIFO0
Ніжэй былогаampфайл фільтрацыі для захоўвання паведамленняў з ідэнтыфікатарамі ў дыяпазоне [0x16, 0xF6] у FIFO прыёму 0.
Рэестравае значэнне (HEX): 0x081600F6
Рэестравае значэнне (БІН): 00 001 00000010110 (00000) 00011110110
Заўвага: ва ўсіх выклampфайлаў, прадстаўленых у гэтым дакуменце, біты ў дужках захоўваюцца па змаўчанні. Значэнні палёў:
- SFT -> `00` -> Фільтр дыяпазону ад SFID1 да SFID2
- SFEC -> `001` -> Захаваць у Rx FIFO 0, калі фільтр адпавядае
- SFID1 -> `00000010110` -> Першы ідэнтыфікатар стандартнага дыяпазону элементаў фільтра ідэнтыфікатара (0x16)
- SFID2 -> `00011110110` -> Другі ідэнтыфікатар стандартнага дыяпазону элементаў фільтра ідэнтыфікатара (0xF6)
Двайны фільтр для RX FIFO1
Ніжэй эксampфільтр падвойнага ідэнтыфікатара для захоўвання ідэнтыфікатараў паведамленняў 0 x 0A або 0 x FF у FIFO 1.
Рэестравае значэнне (HEX): 0x500A00FF
Рэестравае значэнне (БІН): 01 010 00000001010 (00000) 00011111111
Значэнні палёў:
- SFT -> `01` -> Фільтр падвойнага ідэнтыфікатара для SFID1 або SFID2
- SFEC -> `010` -> Захаваць у Rx FIFO 1, калі фільтр адпавядае
- SFID1 -> `00000001010` -> Першы ідэнтыфікатар стандартнага элемента фільтра з падвойным ідэнтыфікатарам
- SFID2 -> `00011111111` -> Другі ідэнтыфікатар стандартнага элемента фільтра з падвойным ідэнтыфікатарам
Выдзеленая буферная фільтрацыя Rx
Ніжэй эксample для захоўвання паведамленняў з ідэнтыфікацыяй 0 x 7F0 у спецыяльным буферы прыёму №0.
Выкарыстоўваючы спецыяльны буфер, можна адфільтраваць толькі адзін ідэнтыфікатар паведамлення, і гэта тое, што запісана ў полі SFID1.
Рэестравае значэнне (HEX): 0x3FF00000
Рэестравае значэнне (БІН): 00 111 11111110000 (00000) 00 (000) 000000
- SFT -> `00` -> гэта значэнне не важна, таму што фільтраванне захоўваецца ў спецыяльным БУФЕРЫ RX, і ў гэтым выпадку значэнне SFT ігнаруецца (гл. выпадак апісання поля SFEC `111`)
- SFEC -> `111` -> Захаваць у спецыяльны буфер прыёму, калі фільтр адпавядае
- SFID1 -> `11111110000` -> стандартны ідэнтыфікатар, які прымае фільтр (0x7F0)
- SFID2[10, 9] -> `00` -> гэта поле вырашае, захоўваецца атрыманае паведамленне ў буферы прыёму або разглядаецца як паведамленне A, B або C паслядоўнасці паведамленняў адладкі. У гэтым выпадку праграма хоча захаваць паведамленне ў буферы прыёму.
- SFID2[0,5] -> `000000` → індэкс выдзеленага буфера прыёму, у якім будзе захоўвацца адпаведнае паведамленне (калі было настроена N выдзеленага буфера прыёму, гэты індэкс можа быць у дыяпазоне [0, N -1]) .У гэтым выпадку паведамленне захоўваецца ў спецыяльным буферы №0.
Класічны фільтр для RX FIFO0
Гэты былыampLe паказвае, як захоўваць паведамленні з ідэнтыфікатарам у дыяпазоне [0x688, 0x68F] у RX FIFO 0. Для класічнага фільтра неабходна вызначыць пару ідэнтыфікатар / маска. Ідэнтыфікатар павінен быць запісаны ў палях SFID1, а маска - у палях SFID2 фільтруючага элемента. У класічным фільтры паведамленні ID, якія праходзяць фільтр, атрымліваюцца шляхам прымянення маскі да ідэнтыфікатара наступным чынам:
- гэта значэнне бітаў фільтра -> 1 = павінны супадаць (0 = усё роўна);
- маючы фільтр з маскай, якая складаецца з усіх «1», толькі адзін ідэнтыфікатар будзе праходзіць у фільтр (той, які запісаны ў полі SFID1), у той час як фільтр, які мае маску, якая складаецца з усіх «0», будуць праходзіць усе ідэнтыфікатары фільтр.
Відавочна, што гэта самыя простыя фільтры. Ніжэй прыводзіцца тлумачэнне таго, як арганізаваць фільтр дыяпазону для стандартнага ідэнтыфікатара ў дыяпазоне [0x688, 0x68F], які захоўвае атрыманыя паведамленні ў RX FIFO 0. Гэта стандартны фільтр паведамленняў, таму мы будзем даваць значэнні SFID1 = ідэнтыфікатар і SFID2 = Маска.
Рэестравае значэнне (HEX): 0x8E8B07F8
Рэестравае значэнне (БІН): 10 001 11010001011 00000 11111111000
- SFT -> `10` -> Класічны фільтр: SFID1 = фільтр, SFID2 = маска
- SFEC -> `001` -> Захаваць у Rx FIFO 0, калі фільтр адпавядае
- SFID1 = 110 1000 1011 (Ідэнтыфікатар0x68B)
- SFID2 = 111 1111 1000 (Mask0x7F8)
Ужыўшы маску да ідэнтыфікатара (трохі) са значэннем біта маскі (1 = павінен супадаць з 0 = усё роўна), мы знаходзім наступны фільтр дыяпазону, дзе сімвал "X" азначае нуль або адзінку.
Фільтр = 110 1000 1XXX
Затым усе стандартныя паведамленні ў дыяпазоне [0x688, 0x68F] будуць праходзіць фільтр.
Пашыраная канфігурацыя фільтраў ID
Такія ж тыпы фільтраў могуць быць рэалізаваны і для пашыраных ідэнтыфікатараў (29-бітных ідэнтыфікатараў).
Фільтр пашыранага дыяпазону для RX FIFO0
У гэтым эксample, гэты фільтр будзе захоўваць паведамленні з ідэнтыфікатарамі ў дыяпазоне [0xFFFFF, 0x1FFFFFFF] у FIFO 0.
Ніжэй значэнняў рэгістра:
- Значэнне рэгістра F0 (HEX): 0x200FFFFF
- Значэнне рэгістра F1 (HEX): 0xDFFFFFFF
- Значэнне рэгістра FO (BIN): 001 00000000011111111111111111111
- Значэнне рэгістра F1 (BIN): 11 (0) 11111111111111111111111111111
Значэнні палёў:
- EFEC -> `001` -> Захаваць у Rx FIFO 0, калі фільтр адпавядае
- EFID1 ->`00000000011111111111111111111` -> Першы ідэнтыфікатар элемента фільтра пашыранага ідэнтыфікатара
дыяпазон (0xFFFFF) - EFT -> `11` -> Фільтр дыяпазону ад SFID1 да SFID2
- SFID2 ->`11111111111111111111111111111` -> Другі ідэнтыфікатар дыяпазону элемента фільтра стандартнага ідэнтыфікатара (0x1FFFFFFF)
Фільтр падвойнага ідэнтыфікатара для FIFO 1
У гэтым эксample фільтр падвойнага ідэнтыфікатара будзе захоўваць паведамленні з ідэнтыфікатарамі 0xAAAAA або 0xBBBBB у FIFO 1.
- Значэнне рэгістра F0 (HEX): 0x400AAAAA
- Значэнне рэгістра F1 (HEX): 0x400BBBBB
- Значэнне рэгістра FO (BIN): 010 000000000 10101010101010101010
- Значэнне рэгістра F1 (BIN): 01 (0) 00000000010111011101110111011
Значэнні палёў:
- EFEC -> `010` -> Захаваць у Rx FIFO 1, калі фільтр адпавядае
- EFID1 -> `00000000010101010101010101010` -> Першы пашыраны ідэнтыфікатар (0xAAAAA)
- EFT -> `01` -> Фільтр падвойнага ідэнтыфікатара для EFID1 або EFID2
- EFID2 -> `00000000010111011101110111011` -> Другі пашыраны ідэнтыфікатар (0x000BBBBB)
Выдзелены буфер прыёму
У гэтым эксample фільтраванне будзе захоўваць паведамленні з ідэнтыфікатарам 0x000AAAAA ў спецыяльным буферы прыёму №1. Акрамя таго, у гэтым сцэнарыі пры выкарыстанні спецыяльнага буфера можа быць адфільтраваны толькі адзін ідэнтыфікатар паведамлення, і гэта тое, што запісана ў поле EFID1.
- Фільтр ідэнтыфікатара для выдзеленага буфера прыёму (ідэнтыфікатар = 0x000AAAAA)
- Значэнне рэгістра F0 (HEX): 0xE00AAAAA
- Значэнне рэгістра F1 (HEX): 0x00000001
- Значэнне рэгістра FO (BIN): 111 00000000010101010101010101010
- Значэнне рэгістра F1 (BIN): 00 (0) 000000000000000000 00 (000) 000001
Значэнні палёў:
- EFEC -> `111` -> Захаваць у спецыяльны буфер прыёму, калі фільтр адпавядае
- EFID1 -> `00000000010101010101010101010` -> пашыраны ідэнтыфікатар, які прымае фільтр
(0x000AAAAA) - EFT -> `00` -> гэта значэнне не важна, таму што фільтраванне захоўваецца ў спецыяльным RX
BUFFER і ў гэтым выпадку значэнне EFT ігнаруецца (гл. выпадак апісання поля EFEC `111`) - EFID2[10, 9] -> `00` -> гэта поле вырашае, захоўваецца атрыманае паведамленне ў буферы прыёму або разглядаецца як паведамленне A, B або C паслядоўнасці паведамленняў адладкі. У гэтым выпадку праграма хоча захаваць паведамленне ў буфер прыёму
- EFID2[0,5] -> `000001` -> індэкс спецыяльнага буфера прыёму, дзе будзе захоўвацца адпаведнае паведамленне (калі вы наладзілі N вылучанага буфера прыёму, гэты індэкс можа быць у дыяпазоне [0, N -1]). У гэтым выпадку паведамленне захоўваецца ў спецыяльным буферы №1
Класічны фільтр для rx FIFO1
У гэтым эксample, праграмаванне фільтра будзе захоўваць сховішча паведамленняў з ідэнтыфікатарам у дыяпазоне [0 x FFFFF, 0 x1FFFFFF] у RX FIFO 1. Не разумеецца, што метад маскіроўкі такі ж, як і ў стандартных фільтраў ID. Ніжэй прыводзіцца тлумачэнне таго, як запраграмаваць фільтр пашыранага дыяпазону ідэнтыфікатараў у rage [0 x FFFFF, 0 x 1FFFFFF], які захоўвае атрыманыя паведамленні ў rx FIFO 1. Гэта фільтр для пашыраных паведамленняў, таму мы будзем даваць значэнні EFID1 = ідэнтыфікатар і EFID2 = Маска
- Значэнне рэгістра F0 (HEX): 0x400FFFFF
- Значэнне рэгістра F1 (HEX): 0x9E0FFFFF
- Значэнне рэгістра F0 (BIN): 010 00000000011111111111111111111
- Значэнне рэгістра F1 (BIN): 10 (0) 11110000011111111111111111111
- EFT > `10` -> Класічны фільтр: EFID1 = фільтр, EFID2 = маска
- EFEC -> `010` -> Захаваць у Rx FIFO 1, калі фільтр адпавядае
- EFID1 = 0 0000 0000 1111 1111 1111 1111 1111 (Ідэнтыфікатар 0xFFFFF)
- EFID2 = 1 1110 0000 1111 1111 1111 1111 1111 (маска 0x1E0FFFFF)
Прымяняючы маску да ідэнтыфікатара (біт) са значэннем біта маскі (1 = павінен адпавядаць 0 = усё роўна), мы знаходзім наступны фільтр дыяпазону, дзе сімвал "X" азначае нуль або адзінку.
Фільтр = 0 000X XXXX 1111 1111 1111 1111 1111
Такім чынам, усе пашыраныя паведамленні ў дыяпазоне [0xFFFFF, 0x1FFFFFF] будуць праходзіць фільтр.
Дадатак А Даведачныя дакументы
- SPC584Cx/SPC58ECx Даведачнае кіраўніцтва
- Табліца дадзеных SPC584Cx/SPC58ECx
Дадатак Б Скарачэнні і абрэвіятуры
Абрэвіятура | Поўная назва |
МОЖА | Кантролер сеткі |
FD | Гнуткая хуткасць перадачы дадзеных |
Гісторыя пераглядаў дакумента
Дата | Версія | Змены |
01-сакавіка-2021 | 1 | Першапачатковы выпуск. |
ВАЖНАЕ ЗАЎВАГА - ПАЧАЦЬ, УВАЖНА
STMicroelectronics NV і яе даччыныя кампаніі ("ST") пакідаюць за сабой права ўносіць змены, выпраўленні, удасканаленні, мадыфікацыі і ўдасканаленні прадуктаў ST і / або гэтага дакумента ў любы час без папярэдняга паведамлення. Пакупнікі павінны атрымаць самую актуальную інфармацыю аб прадуктах ST перад размяшчэннем заказаў. Прадукцыя ST прадаецца ў адпаведнасці з умовамі продажу ST, якія дзейнічаюць на момант пацверджання замовы.
Пакупнікі нясуць адзіную адказнасць за выбар, выбар і выкарыстанне прадуктаў ST, і ST не нясе адказнасці за дапамогу ў заяўцы і дызайн прадуктаў пакупнікоў.
ST тут не прадастаўляе ніякіх ліцэнзій, відавочных або пэўных, на права інтэлектуальнай уласнасці.
Перапродаж прадуктаў ST з умовамі, адрознымі ад інфармацыі, выкладзенай у гэтым дакуменце, прыводзіць да анулявання любой гарантыі, прадастаўленай ST на такі прадукт.
ST і лагатып ST з'яўляюцца гандлёвымі маркамі ST. Для атрымання дадатковай інфармацыі аб гандлёвых марках ST, калі ласка, звярніцеся да www.st.com/trademarks. Усе іншыя назвы прадуктаў і паслуг з'яўляюцца ўласнасцю іх адпаведных уладальнікаў.
Інфармацыя ў гэтым дакуменце замяняе інфармацыю, якая была прадстаўлена ў папярэдніх версіях гэтага дакумента.
© 2021 STMicroelectronics – Усе правы абаронены
Дакументы / Рэсурсы
![]() |
ST TN1348 SPC58x Налада фільтраў CAN і CAN-FD [pdfІнструкцыі TN1348, SPC58x Налада фільтраў CAN і CAN-FD |