STlogo

TN1348 SPC58x در حال پیکربندی فیلترهای CAN و CAN-FD

محصول

مقدمه

این یادداشت فنی نحوه پیکربندی فیلترهای پذیرش برای کنترلرهای CAN تعبیه شده در میکروکنترلرهای خودرو SPC58x را شرح می دهد. این سند پیکربندی های رجیستر را تشریح می کند و برخی موارد قبلی را ارائه می دهدample برای سرعت بخشیدن به پیکربندی فیلتر. این تنظیمات را می توان برای همه میکروکنترلرهای این خانواده با واریانس های جزئی اتخاذ کرد. سابقampموارد موجود در این سند بر اساس MCU 584 بیتی SPC58Cx/SPC32ECx هستند.

می تواند تمام شودview

SPC584Cx/SPC58ECx دارای هشت نمونه CAN است که در دو زیرسیستم مختلف جاسازی شده است، همانطور که در دفترچه راهنمای دستگاه بخش ضمیمه A اسناد مرجع مستند شده است.
همه کنترل‌کننده‌های CAN در یک زیرسیستم منابعی مانند حافظه RAM، ساعت و غیره را به اشتراک خواهند گذاشت. هر زیرسیستم CAN توسط بلوک‌های اصلی زیر تشکیل می‌شود:

  • هسته‌های CAN مدولار: با استفاده از رابط کاربری عمومی (GSI) می‌توان به رجیسترهای ماژول CAN دسترسی پیدا کرد. ماژول GSI محیطی به عنوان یک درخواست از هر استاد عمل می کند.
  • داور CAN-RAM: این یک منطق اضافی برای داوری در میان درخواست‌های دسترسی به RAM توسط کنترل‌کننده‌های مختلف CAN است.
  • SRAM: زیرسیستم CAN با استفاده از این رابط با یک رم خارجی ارتباط برقرار می کند، آن SRAM است.
  • کنترلر ECC: حاوی منطق محاسبه و تایید کد تصحیح حافظه SRAM است.

برای رابط SRAM و سازماندهی حافظه به دفترچه راهنمای دستگاه، بخش پیوست A اسناد مرجع مراجعه کنید.

معرفی فیلترینگ

منطق فیلتر CAN به شما امکان می دهد فیلترها را به روش های مختلف پیکربندی کنید. برای مثالampپیام هایی که از فیلتر پذیرش عبور می کنند را می توان در Rx FIFO (0 یا 1) یا در بافرهای اختصاصی rx ذخیره کرد. هر فیلتر را می توان به عنوان فیلتر پذیرش یا رد پیکربندی کرد و همچنین می تواند فعال یا غیرفعال شود. برای فیلتر پذیرش، هر لیست فیلتر از مورد شماره 0 تا اولین مورد منطبق در لیست فیلتر انجام می شود. قبل از استفاده از فیلترها، پیکربندی آدرس شروع و شماره فیلتر برای رزرو بخشی از RAM پیام الزامی است. شکل زیر الف را نشان می دهد view از نقشه حافظه مشترک و رجیسترها (از این رو آدرس های شروع برای هر بخش).

شکل 1. پیام پیکربندی RAM سابقample

مقداردهی اولیه رم پیام

قبل از استفاده از هر فیلتری، پیکربندی ناحیه رم مربوطه پیام هایی که در آن ذخیره می شوند الزامی است. برای انجام این کار، برنامه نرم افزاری باید افست (به صورت کلمات) را از آدرس پایگاه رم پیام هر ناحیه فیلتر بنویسد. تعداد فیلترها برای هر ناحیه باید پیکربندی شود، به طوری که کنترلر بتواند بفهمد که در این سند، به عنوان مثال، هر ناحیه حافظه فیلتر مربوطه به کجا ختم می شود.ampچهار فیلتر، برای شناسه های استاندارد (11 بیت) و چهار فیلتر برای شناسه های توسعه یافته (29 بیت) پیکربندی می شوند، بنابراین، بخشی از RAM پیام را برای ذخیره فیلترهای 11 بیتی و دیگری را برای فیلترهای 29 بیتی رزرو کنید. برای پیکربندی آدرس شروع ناحیه فیلتر شناسه استاندارد، نرم افزار باید فیلد FLSSA رجیستر SIDFC (رجیستر پیکربندی فیلتر شناسه استاندارد) را بنویسد. برای فیلترهای ID توسعه یافته، باید فیلد FLESA رجیستر XIDFC (رجیستر پیکربندی فیلتر شناسه توسعه یافته) را بنویسید. فیلدهای FLSSA و FLESA باید حاوی افست حافظه "در کلمات" از آدرس پایه RAM پیام باشند. این برنامه چهار فیلتر استاندارد را در حالت افست صفر و چهار فیلتر توسعه یافته پیکربندی می کند

برای پیکربندی استاندارد فیلتر:

  • FLSSA = 0x0: نسبت آفست آدرس پایه رم پیام صفر است، بنابراین منطقه از ابتدای رم پیام شروع می شود.
  • LSS = 4: این تعداد فیلترهایی است که باید پیکربندی شوند. هر فیلتر توسط «یک» کلمه 32 بیتی تشکیل شده است.
    در این پیکربندی بخشی از حافظه که از افست صفر شروع می شود و اندازه آن چهار کلمه است.

توجه: کنترلر CAN هیچ مکانیسم کنترلی برای پیکربندی پیام RAM ندارد، این بدان معناست که توسعه دهنده باید مراقب باشد که قسمت های RAM پیکربندی شده همپوشانی نداشته باشد. شکل زیر نحوه پیکربندی بخشی از حافظه را برای ذخیره فیلترهای شناسایی توسعه یافته نشان می دهد.

برای پیکربندی ناحیه RAM برای ذخیره فیلترهای توسعه یافته، لازم است مقادیر زیر را در فیلدهای FLESA و LSE برنامه ریزی کنید.

  • FLESA = 0x04: افست در کلمات با توجه به آدرس پایه RAM پیام. این به این دلیل است که در قسمت فیلترهای پیکربندی شده قبلی 0x04 کلمه برای فیلترهای ID استاندارد رزرو شده است و سپس حداقل افست قابل استفاده 0x04 است.
  • LSE = 4: این تعداد فیلترهایی است که باید پیکربندی شوند. برای شناسه توسعه یافته، یک فیلتر توسط «دو» کلمه 32 بیتی تشکیل شده است.

در این پیکربندی، بخشی از حافظه که از آفست 0x04 (کلمات) شروع می‌شود، دارای اندازه هشت کلمه (چهار فیلتر دو کلمه‌ای) است. بنابراین، حداقل افست برای ناحیه حافظه قابل تنظیم بعدی کلمات 0x0C است. تمام بخش‌های RAM پیام باید با توجه به تعداد و اندازه عناصری که در بخش ذخیره می‌شوند بدون همپوشانی هیچ بخش پیکربندی شوند.
توجه: برای تبدیل افست کلمه به افست بایت، باید مقدار کلمه را در چهار ضرب کرد.

Exampفیلترهای ID استاندارد

پس از پیکربندی پیام RAM، می توانید فیلترهای دستگاه را پیکربندی کنید.
هر عنصر فیلتر را می توان به صورت زیر پیکربندی کرد:

  • فیلتر برد
  • فیلتر ID دوگانه
  • فیلتر کلاسیک
  • فیلتر برای بافر اختصاصی rx (فیلتر تک شناسه)

شکل زیر نحوه پیکربندی چهار نوع فیلتر مختلف برای شناسه های استاندارد (شناسه های 11 بیتی) را نشان می دهد. از ثبت عنصر فیلتر زیر برای شناسه استاندارد استفاده کنید.

فیلتر برد برای RX FIFO0

زیر یک سابقampفیلتر کردن برای ذخیره پیام‌ها با شناسه‌هایی در محدوده [0x16، 0xF6] در Receive FIFO 0.
مقدار ثبت (HEX): 0x081600F6
ارزش ثبت (BIN): 00 001 00000010110 (00000) 00011110110

توجه: در تمام سابقampدر موارد ارائه شده در این سند، بیت های پرانتزی در مقدار پیش فرض نگهداری می شوند. مقادیر فیلدها:

  • SFT -> `00` -> فیلتر محدوده از SFID1 تا SFID2
  • SFEC -> `001` -> در صورت مطابقت فیلتر در Rx FIFO 0 ذخیره کنید
  • SFID1 -> `00000010110` -> شناسه اول محدوده عنصر فیلتر ID استاندارد (0x16)
  • SFID2 -> `00011110110` -> شناسه دوم محدوده عنصر فیلتر ID استاندارد (0xF6)
فیلتر دوگانه برای RX FIFO1

در زیر یک سابق استampیک فیلتر ID دوگانه برای ذخیره شناسه پیام‌ها 0 x 0A یا 0 x FF در FIFO 1.
مقدار ثبت (HEX): 0x500A00FF
ارزش ثبت (BIN): 01 010 00000001010 (00000) 00011111111
مقادیر فیلدها:

  • SFT -> `01` -> فیلتر ID دوگانه برای SFID1 یا SFID2
  • SFEC -> `010` -> در صورت مطابقت فیلتر در Rx FIFO 1 ذخیره کنید
  • SFID1 -> `00000001010` -> شناسه اول عنصر فیلتر شناسه دوگانه استاندارد
  • SFID2 -> `00011111111` -> شناسه دوم عنصر فیلتر شناسه دوگانه استاندارد
فیلترینگ بافر اختصاصی Rx

در زیر یک سابق استampبرای ذخیره پیام هایی با شناسایی 0 x 7F0 در بافر اختصاصی rx #0.
با استفاده از یک بافر اختصاصی، امکان فیلتر کردن تنها یک شناسه پیام وجود دارد که در قسمت SFID1 نوشته شده است.
مقدار ثبت (HEX): 0x3FF00000
ارزش ثبت (BIN): 00 111 11111110000 (00000) 00 (000) 000000

  • SFT -> `00` -> این مقدار مهم نیست زیرا فیلتر کردن برای ذخیره در RX BUFFER اختصاصی و در این مورد مقدار SFT نادیده گرفته می شود (به شرح فیلد SFEC مورد `111` مراجعه کنید)
  • SFEC -> `111` -> در صورت مطابقت فیلتر در بافر اختصاصی rx ذخیره شود
  • SFID1 -> `11111110000` -> شناسه استانداردی که فیلتر می‌پذیرد (0x7F0)
  • SFID2[10, 9] -> `00` -> این فیلد تصمیم می گیرد که آیا پیام دریافتی در بافر rx ذخیره شود یا به عنوان پیام A، B یا C از دنباله پیام اشکال زدایی تلقی شود. در این حالت، برنامه نرم افزاری می خواهد پیام را در بافر rx ذخیره کند.
  • SFID2[0,5] -> `000000` → فهرست بافر اختصاصی rx که در آن پیام مربوطه ذخیره می شود (اگر N بافر اختصاصی rx پیکربندی شده باشد، این شاخص می تواند در محدوده [0, N -1] باشد) در این مورد پیام در بافر اختصاصی شماره 0 ذخیره می شود.
فیلتر کلاسیک برای RX FIFO0

این سابقample نشان می دهد که چگونه می توان پیام ها را با شناسه در محدوده [0x688, 0x68F] در RX FIFO 0 ذخیره کرد. برای یک فیلتر کلاسیک، یک جفت شناسه / ماسک باید تعریف شود. شناسه باید در SFID1 و ماسک در قسمت SFID2 عنصر فیلتر نوشته شود. در یک فیلتر کلاسیک، پیام‌های شناسه‌ای که از فیلتر عبور می‌کنند با اعمال ماسک روی شناسه به صورت زیر به دست می‌آیند:

  • این معنای بیت های فیلتر است -> 1 = باید مطابقت داشته باشد (0 = اهمیتی نمی دهد).
  • داشتن فیلتری با ماسکی متشکل از تمام "1ها"، تنها یک شناسه به فیلتر منتقل می شود (همانی که در قسمت SFID1 نوشته شده است) در حالی که فیلتری که ماسکی از همه "0" تشکیل شده است، همه شناسه ها عبور می کند. فیلتر

بدیهی است که اینها ساده ترین فیلترها هستند. در زیر نحوه سازماندهی فیلتر محدوده برای شناسه استاندارد در محدوده [0x688, 0x68F] که پیام های دریافتی را در RX FIFO 0 ذخیره می کند، توضیح داده شده است. این یک فیلتر پیام استاندارد است، بنابراین مقادیر SFID1 = شناسه و SFID2 = را می دهیم. ماسک.
مقدار ثبت (HEX): 0x8E8B07F8
ارزش ثبت (BIN): 10 001 11010001011 00000 11111111000

  • SFT -> `10` -> فیلتر کلاسیک: SFID1 = فیلتر، SFID2 = ماسک
  • SFEC -> `001` -> در صورت مطابقت فیلتر در Rx FIFO 0 ذخیره کنید
  • SFID1 = 110 1000 1011 (Identifier0x68B)
  • SFID2 = 111 1111 1000 (Mask0x7F8)

با اعمال ماسک به شناسه (کمی) با معنی بیت ماسک (1 = باید مطابق با 0 = اهمیتی ندهید) فیلتر محدوده زیر را پیدا می کنیم که نماد 'X' مخفف صفر یا یک است.

فیلتر = 110 1000 1XXX

سپس، تمام پیام‌های استاندارد در محدوده [0x688, 0x68F] از فیلتر عبور می‌کنند.

پیکربندی فیلترهای ID توسعه یافته

همین نوع فیلترها را می توان برای شناسه های توسعه یافته (شناسه های 29 بیتی) نیز پیاده سازی کرد.

فیلتر طولانی مدت برای RX FIFO0

در این سابقample، این فیلتر پیام‌ها را با شناسه‌هایی در محدوده [0xFFFFF، 0x1FFFFFFFF] در FIFO 0 ذخیره می‌کند.
زیر مقادیر رجیستر:

  • مقدار ثبت F0 (HEX): 0x200FFFFF
  • مقدار ثبت F1 (HEX): 0xDFFFFFFFF
  • مقدار ثبت FO (BIN): 001 00000000011111111111111111111
  • مقدار ثبت F1 (BIN): 11 (0) 11111111111111111111111111111

مقادیر فیلدها:

  • EFEC -> `001` -> در صورت مطابقت فیلتر در Rx FIFO 0 ذخیره شود
  • EFID1 ->`00000000011111111111111111111` -> شناسه اول عنصر فیلتر ID توسعه یافته
    محدوده (0xFFFFFF)
  • EFT -> `11` -> فیلتر محدوده از SFID1 تا SFID2
  • SFID2 ->`11111111111111111111111111111` -> شناسه دوم محدوده عنصر فیلتر ID استاندارد (0x1FFFFFFFF)
فیلتر ID دوگانه برای FIFO 1

در این سابقampفیلتر شناسه دوگانه پیام‌هایی را با شناسه‌های 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)
بافر اختصاصی rx

در این سابقampفیلترینگ پیام هایی را با شناسه 0x000AAAAA در بافر اختصاصی rx شماره 1 ذخیره می کند. همچنین در این سناریو، با استفاده از بافر اختصاصی، تنها یک شناسه پیام را می توان فیلتر کرد و این شناسه در قسمت EFID1 نوشته شده است.

  • فیلتر شناسه برای بافر اختصاصی rx (ID = 0x000AAAAA)
  • مقدار ثبت F0 (HEX): 0xE00AAAAA
  • مقدار ثبت F1 (HEX): 0x00000001
  • مقدار ثبت FO (BIN): 111 00000000010101010101010101010
  • مقدار ثبت F1 (BIN): 00 (0) 000000000000000000 00 (000) 000001

مقادیر فیلدها:

  • EFEC -> `111` -> در صورت مطابقت فیلتر در بافر اختصاصی rx ذخیره شود
  • EFID1 -> `00000000010101010101010101010` -> شناسه توسعه یافته که فیلتر می پذیرد
    (0x000AAAAA)
  • EFT -> `00` -> این مقدار مهم نیست زیرا فیلتر برای ذخیره در RX اختصاصی است
    BUFFER و در این مورد مقدار EFT نادیده گرفته می شود (به شرح فیلد EFEC مورد '111' مراجعه کنید)
  • EFID2[10, 9] -> `00` -> این فیلد تصمیم می گیرد که آیا پیام دریافتی در یک بافر Rx ذخیره شود یا به عنوان پیام A، B یا C از دنباله پیام اشکال زدایی تلقی شود. در این مورد برنامه نرم افزاری می خواهد پیام را در یک بافر Rx ذخیره کند
  • EFID2[0,5] -> `000001` -> فهرست بافر اختصاصی rx که در آن پیام منطبق ذخیره می شود (اگر N بافر اختصاصی rx را پیکربندی کرده باشید، این شاخص می تواند در محدوده [0، N -1] باشد). در این مورد پیام در بافر اختصاصی شماره 1 ذخیره می شود
فیلتر کلاسیک برای rx FIFO1

در این سابقampبرنامه‌نویسی فیلتر، ذخیره پیام‌ها را با شناسه در محدوده [0 x FFFFF، 0 x1FFFFFF] در rx FIFO 1 ذخیره می‌کند. نادیده گرفته می‌شود که روش پوشاندن مانند فیلترهای ID استاندارد است. در زیر توضیحی در مورد نحوه برنامه ریزی یک فیلتر بازه ID توسعه یافته در rage [0 x FFFFF, 0 x 1FFFFFF] ارائه شده است که پیام های دریافتی را در rx FIFO 1 ذخیره می کند. و EFID1 = ماسک

  • مقدار ثبت 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

بنابراین، تمام پیام های توسعه یافته در محدوده [0xFFFFFF، 0x1FFFFFF] از فیلتر عبور می کنند.

پیوست الف اسناد مرجع

  • راهنمای مرجع SPC584Cx/SPC58ECx
  • برگه داده SPC584Cx/SPC58ECx

ضمیمه B مخفف ها و اختصارات

مخفف اسم کامل
می تواند کنترل کننده ی شبکه
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

مراجع

نظر بدهید

آدرس ایمیل شما منتشر نخواهد شد. فیلدهای الزامی مشخص شده اند *