
CAN FD در STM32 چیست؟ آموزش جامع FDCAN در STM32H7
میکروکنترلرهای مدرنی مانند خانواده STM32H7 به جای کنترلر CAN قدیمی، از واحد FDCAN استفاده میکنند. این واحد علاوه بر CAN FD، امکان ارتباط با شبکههای CAN کلاسیک را نیز فراهم میکند.
CAN FD در STM32 چیست؟ آموزش جامع FDCAN در STM32H7
ارتباط CAN FD یکی از مهمترین فناوریهای ارتباطی در سیستمهای Embedded و صنعتی مدرن است. افزایش حجم داده، نیاز به سرعت بالاتر و حفظ قابلیت اطمینان CAN باعث شد نسخه توسعهیافته این پروتکل با نام CAN with Flexible Data-Rate یا CAN FD معرفی شود.
میکروکنترلرهای مدرنی مانند خانواده STM32H7 به جای کنترلر CAN قدیمی، از واحد FDCAN استفاده میکنند. این واحد علاوه بر CAN FD، امکان ارتباط با شبکههای CAN کلاسیک را نیز فراهم میکند.
در این مقاله ساختار FDCAN در STM32، تفاوت CAN و CAN FD، مفهوم Bit Rate Switching، ساختار Message RAM، فیلترها، FIFOها، Bufferها، تنظیمات Bit Timing، نحوه استفاده از چند FDCAN و نکات مهم طراحی یک شبکه CAN FD بررسی میشود.
CAN FD چیست؟
CAN FD مخفف:
CAN with Flexible Data-Rate
است.
CAN FD در واقع توسعهای از پروتکل CAN است که دو قابلیت اصلی را به CAN کلاسیک اضافه میکند:
- افزایش حجم داده در هر Frame
- امکان استفاده از سرعت بالاتر در بخش Data
در CAN کلاسیک، حداکثر مقدار Payload برابر با 8 بایت است.
اما در CAN FD، یک Frame میتواند تا 64 بایت داده داشته باشد.
بنابراین اگر یک سیستم Embedded نیاز داشته باشد حجم بیشتری از اطلاعات را در یک Frame منتقل کند، CAN FD میتواند تعداد Frameهای مورد نیاز را به شکل قابل توجهی کاهش دهد.
تفاوت CAN و CAN FD
مهمترین تفاوتهای CAN و CAN FD را میتوان به شکل زیر خلاصه کرد:
| ویژگی | CAN Classic | CAN FD |
|---|---|---|
| حداکثر Payload | 8 بایت | 64 بایت |
| سرعت Arbitration | معمولاً یکسان با Data | قابل تنظیم |
| Bit Rate Switching | ندارد | دارد |
| DLC | تا 8 | تا 64 بایت |
| مناسب برای داده حجیم | محدود | بسیار مناسب |
| سازگاری با CAN قدیمی | بله | نیازمند پشتیبانی FD در Node |
| کاربرد | سیستمهای قدیمی و ساده | سیستمهای مدرن و پرسرعت |
مهمترین نکته این است که CAN FD الزاماً به این معنی نیست که کل Frame با سرعت بالاتر ارسال میشود.
در حالت معمول، بخش Arbitration با نرخ بیت اول و بخش Data میتواند با نرخ بیت دوم منتقل شود.
این قابلیت با نام Bit Rate Switching یا BRS شناخته میشود.
چرا CAN FD به وجود آمد؟
CAN کلاسیک برای بسیاری از سیستمهای صنعتی و خودرویی بسیار موفق بوده است، اما محدودیت 8 بایت Payload در بسیاری از کاربردهای جدید مشکل ایجاد میکند.
فرض کنید یک ECU باید اطلاعات زیر را ارسال کند:
- چند مقدار سنسور
- سرعت
- شتاب
- دما
- وضعیت خطا
- اطلاعات تشخیصی
- شمارنده
- Timestamp
اگر مجموع دادهها بیشتر از 8 بایت باشد، باید اطلاعات در چند Frame تقسیم شود.
این کار باعث افزایش تعداد Frameها و در نتیجه افزایش بار شبکه میشود.
CAN FD این مشکل را با افزایش Payload تا 64 بایت کاهش میدهد.
ساختار Frame در CAN FD
Frame در CAN FD از چند بخش اصلی تشکیل میشود:
- Identifier
- Control Field
- Data Field
- CRC
- ACK
- End of Frame
Identifier میتواند به صورت:
- Standard Identifier
- Extended Identifier
باشد.
در CAN استاندارد، Identifier برابر با 11 بیت است.
در Extended CAN، Identifier برابر با 29 بیت است.
CAN FD همچنان از این ساختارهای Identifier استفاده میکند و افزایش حجم Data به معنی تغییر ساختار Identifier نیست.
Standard ID و Extended ID
دو نوع شناسه اصلی در FDCAN وجود دارد.
Standard Identifier
شناسه 11 بیتی است و در بسیاری از شبکههای CAN استفاده میشود.
محدوده آن:
0x000 تا 0x7FF
است.
به دلیل کوچکتر بودن Identifier، مدیریت IDها در سیستمهای سادهتر معمولاً راحتتر است.
Extended Identifier
شناسه 29 بیتی است.
این نوع Identifier برای سیستمهایی مناسب است که تعداد زیادی پیام یا ساختار پیچیدهتری برای آدرسدهی نیاز دارند.
در شبکههای صنعتی بزرگ، Automotive و پروتکلهایی مانند CANopen و برخی پروتکلهای اختصاصی، استفاده از Extended ID رایج است.
FDCAN در STM32 چیست؟
در بسیاری از میکروکنترلرهای جدید STM32، واحد ارتباطی CAN با نام FDCAN ارائه شده است.
در STM32H7، این واحد بر اساس معماری Bosch M_CAN ساخته شده و قابلیتهای مربوط به CAN کلاسیک و CAN FD را فراهم میکند.
FDCAN را نباید صرفاً یک CAN با سرعت بیشتر در نظر گرفت.
این Peripheral شامل بخشهای مختلفی برای مدیریت:
- دریافت Frame
- ارسال Frame
- Acceptance Filter
- FIFO
- Buffer
- Message RAM
- Transmission Event
- Interrupt
- Bit Timing
است.
معماری FDCAN در STM32H7
ساختار کلی FDCAN را میتوان به چند بخش اصلی تقسیم کرد:
CAN Core
هسته اصلی پروتکل CAN است.
وظایفی مانند:
- مدیریت Frame
- Arbitration
- Synchronization
- Error Detection
- ACK
- CRC
- ارسال و دریافت بیتها
در این بخش انجام میشود.
RX Handler
داده دریافتشده را پردازش کرده و بر اساس Filterها تصمیم میگیرد Frame در کدام قسمت قرار گیرد.
TX Handler
پیامهای آماده ارسال را مدیریت میکند و بر اساس قوانین Arbitration و اولویت، ارسال را انجام میدهد.
Acceptance Filter
برای مشخص کردن این است که چه Identifierهایی اجازه ورود به سیستم دریافت را دارند.
Message RAM
یکی از مهمترین قسمتهای FDCAN است.
اطلاعات Filterها، FIFOها، Bufferها و Eventها در این حافظه قرار میگیرند.
Message RAM در STM32H7
یکی از تفاوتهای مهم FDCAN با CAN Controllerهای قدیمی، وجود Message RAM است.
در STM32H7، این RAM برای ذخیره اطلاعات مرتبط با FDCAN استفاده میشود.
بخشهای مختلف آن میتوانند شامل موارد زیر باشند:
- Standard Filters
- Extended Filters
- RX FIFO 0
- RX FIFO 1
- RX Buffers
- TX Event FIFO
- TX Buffers
- TX FIFO/Queue
باشند.
بنابراین در FDCAN صرفاً با چند Register برای ارسال و دریافت داده سروکار نداریم؛ باید ساختار Message RAM نیز به درستی پیکربندی شود.
ST در مستندات FDCAN تأکید میکند که این بخشها دارای Offset و تعداد Element قابل تنظیم هستند و برنامهنویس باید مراقب باشد قسمتهای مختلف Message RAM روی یکدیگر Overlap نکنند.
چرا Message RAM اهمیت زیادی دارد؟
فرض کنید یک STM32H7 دارای دو FDCAN باشد.
اگر هر دو Peripheral از یک Message RAM مشترک استفاده کنند، نمیتوان بدون برنامهریزی، تمام RAM را به صورت مستقل برای هر Peripheral در نظر گرفت.
باید فضای Message RAM بین Instanceها تقسیم شود.
برای مثال، اگر Message RAM دارای 2560 کلمه 32 بیتی باشد، میتوان در یک طراحی نمونه بخشی از آن را به FDCAN1 و بخش دیگری را به FDCAN2 اختصاص داد.
در برخی پیادهسازیها برای دو Instance، هر Peripheral میتواند از یک بخش 1280-word استفاده کند؛ اما مقدار دقیق مورد نیاز به تعداد Filterها، FIFOها، Bufferها و اندازه Elementهای انتخابشده بستگی دارد.
بنابراین یک قانون مهم وجود دارد:
Message RAM Offset چیست؟
هر FDCAN میتواند از یک نقطه مشخص در Message RAM شروع به استفاده کند.
این مقدار با مفهوم Message RAM Offset مشخص میشود.
اگر FDCAN1 از ابتدای Message RAM استفاده کند و FDCAN2 نیز از همان نقطه شروع شود، احتمال Overlap وجود خواهد داشت.
بنابراین هنگام استفاده همزمان از چند FDCAN باید فضای حافظه آنها به شکل دقیق محاسبه و تقسیم شود.
این موضوع یکی از مهمترین قسمتهای طراحی FDCAN در STM32H7 است.
Filter در FDCAN چیست؟
در یک شبکه CAN ممکن است تعداد زیادی Frame روی Bus وجود داشته باشد.
اما هر Node معمولاً فقط به بخشی از این پیامها نیاز دارد.
به جای اینکه تمام Frameها وارد نرمافزار شوند، FDCAN میتواند Identifier پیامها را در Hardware بررسی کند.
این مکانیزم با نام:
Acceptance Filtering
شناخته میشود.
STM32 FDCAN برای Standard و Extended Identifier بخشهای Filter جداگانه دارد. در STM32، بسته به خانواده و پیادهسازی، تعداد Filterهای قابل تخصیص نیز محدود و قابل تنظیم است؛ برای STM32H7 مستندات ST حداکثر 128 Filter برای Standard ID و 64 Filter برای Extended ID را ذکر میکنند.
انواع Filter در FDCAN
Filterها میتوانند به روشهای مختلف Identifier را بررسی کنند.
مهمترین حالتها عبارتاند از:
- Range
- Dual ID
- ID Mask
- Reject
- FIFO0
- FIFO1
- Priority
Mask Filter چیست؟
یکی از مهمترین روشهای Filtering، Mask است.
در این روش یک Identifier به همراه یک Mask تعریف میشود.
Mask مشخص میکند کدام بیتهای Identifier باید بررسی شوند.
اگر بیت Mask برابر 1 باشد، آن بیت در مقایسه اهمیت دارد.
اگر بیت Mask برابر 0 باشد، آن بیت نادیده گرفته میشود.
به همین دلیل Mask Filter میتواند به جای پذیرش تنها یک ID، یک گروه از Identifierها را قبول کند.
برای مثال اگر بخشی از Identifier نشاندهنده نوع Device و بخش دیگری نشاندهنده Channel باشد، میتوان Filter را طوری تنظیم کرد که فقط بخش Device بررسی شود.
FIFO در FDCAN
FDCAN دارای دو Receive FIFO اصلی است:
- RX FIFO 0
- RX FIFO 1
این دو FIFO اجازه میدهند پیامهای دریافتی بر اساس نوع یا اولویت به مسیرهای مختلف هدایت شوند.
برای مثال میتوان:
پیامهای کنترلی → FIFO0
و
پیامهای Telemetry → FIFO1
را در نظر گرفت.
این تقسیمبندی در سیستمهای Real-Time بسیار مفید است.
RX FIFO و RX Buffer چه تفاوتی دارند؟
دو روش اصلی برای دریافت داده وجود دارد:
RX FIFO
چند پیام پشت سر هم در یک صف ذخیره میشوند.
این روش برای زمانی مناسب است که تعداد زیادی Frame به صورت متوالی دریافت میشود.
RX Buffer
هر Buffer برای یک محل مشخص در نظر گرفته میشود.
این روش برای سیستمهایی مناسب است که میخواهند برخی پیامهای خاص را مستقیماً در محل مشخصی قرار دهند.
انتخاب FIFO یا Buffer به معماری نرمافزار و نحوه پردازش پیامها بستگی دارد.
TX FIFO چیست؟
برای ارسال نیز FDCAN میتواند از TX FIFO استفاده کند.
در این حالت چند پیام آماده ارسال در یک صف قرار میگیرند.
Peripheral وظیفه مدیریت ارسال آنها را بر اساس قوانین داخلی انجام میدهد.
این روش برای سیستمهایی مناسب است که نرمافزار ممکن است چند پیام را پشت سر هم آماده کند.
TX Queue چیست؟
TX Queue شبیه FIFO است اما رفتار انتخاب پیامها میتواند بر اساس Identifier و اولویت CAN انجام شود.
در CAN، Identifier کوچکتر معمولاً اولویت بالاتری در Arbitration دارد.
بنابراین طراحی صحیح Identifierها میتواند روی رفتار Real-Time شبکه تأثیر مستقیم داشته باشد.
TX Buffer چیست؟
FDCAN علاوه بر FIFO و Queue میتواند از Dedicated TX Buffer نیز استفاده کند.
در این روش پیام در یک Buffer مشخص قرار میگیرد.
این معماری برای پیامهایی که اهمیت یا زمانبندی مشخصی دارند میتواند مفید باشد.
TX Event FIFO چیست؟
FDCAN قابلیت ثبت Eventهای مربوط به ارسال را نیز دارد.
برای مثال بعد از ارسال موفق یک پیام، اطلاعات مربوط به آن میتواند در TX Event FIFO ذخیره شود.
این قابلیت برای سیستمهایی که نیاز به Tracking پیامهای ارسالشده دارند بسیار مفید است.
DLC در CAN FD
در CAN کلاسیک، DLC ارتباط نسبتاً مستقیم با تعداد بایتهای Data دارد.
اما در CAN FD وضعیت متفاوت است.
CAN FD میتواند Payloadهایی مانند:
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 12
- 16
- 20
- 24
- 32
- 48
- 64
بایت را منتقل کند.
بنابراین برای Payloadهای بزرگتر از 8 بایت، DLC به صورت مستقیم معادل مقدار تعداد بایت نیست.
این نکته هنگام طراحی نرمافزار FDCAN اهمیت زیادی دارد.
Bit Rate در CAN FD
یکی از مهمترین قابلیتهای CAN FD امکان استفاده از دو نرخ بیت است.
Nominal Bit Rate
نرخ بیت بخش Arbitration است.
Data Bit Rate
نرخ بیت بخش Data است.
برای مثال یک شبکه میتواند به صورت مفهومی با:
Nominal = 500 kbit/s
و
Data = 2 Mbit/s
کار کند.
مقدار واقعی باید بر اساس:
- طول Bus
- Transceiver
- Clock
- Bit Timing
- کیفیت سیمکشی
- Topology
- تعداد Nodeها
انتخاب شود.
Bit Rate Switching یا BRS چیست؟
BRS مخفف:
Bit Rate Switching
است.
در CAN FD، وقتی BRS فعال باشد، پس از بخش Arbitration، نرخ بیت میتواند تغییر کند.
این موضوع باعث میشود Data با سرعت بیشتری منتقل شود.
مزیت اصلی BRS این است که بخش حساس Arbitration همچنان میتواند با نرخ پایینتر و قابل اطمینانتر کار کند، در حالی که انتقال Payload با نرخ بالاتر انجام میشود.
آیا CAN FD همیشه سریعتر از CAN است؟
خیر.
CAN FD زمانی مزیت اصلی خود را نشان میدهد که:
- Payload بزرگ باشد
- BRS فعال باشد
- Bit Rate مناسب انتخاب شده باشد
- شبکه از نظر فیزیکی توانایی تحمل نرخ بالاتر را داشته باشد
اگر CAN FD فقط برای ارسال 2 یا 4 بایت استفاده شود و Data Bit Rate نیز با Nominal Bit Rate برابر باشد، مزیت آن نسبت به CAN کلاسیک ممکن است محدود باشد.
ارتباط CAN FD با CAN Transceiver
FDCAN داخلی STM32 مستقیماً به CANH و CANL متصل نمیشود.
بین MCU و Bus معمولاً یک CAN Transceiver قرار دارد.
ساختار کلی:
STM32 FDCAN → CAN Transceiver → CANH/CANL
است.
Transceiver وظیفه تبدیل سیگنال منطقی MCU به سیگنال Differential روی Bus و برعکس را دارد.
برای CAN FD باید Transceiver نیز قابلیت CAN FD داشته باشد.
استفاده از یک Transceiver نامناسب میتواند باعث شود نرمافزار کاملاً صحیح باشد اما ارتباط CAN FD به درستی کار نکند.
CANH و CANL چیستند؟
CAN از یک زوج سیم Differential استفاده میکند:
- CANH
- CANL
اطلاعات بر اساس اختلاف ولتاژ این دو خط منتقل میشود.
این روش باعث مقاومت بالاتر شبکه در برابر نویز نسبت به بسیاری از روشهای Single-Ended میشود.
در سیستمهای صنعتی، این ویژگی یکی از دلایل اصلی محبوبیت CAN است.
مقاومت Termination در CAN FD
Bus CAN معمولاً باید در دو انتهای فیزیکی خود Termination داشته باشد.
مقدار متداول:
120 Ω
است.
در نتیجه یک Bus صحیح معمولاً دو مقاومت 120 اهمی در دو انتهای شبکه دارد.
از دید کل Bus، این دو مقاومت موازی دیده میشوند و مقاومت معادل آنها تقریباً:
60 Ω
خواهد بود.
Termination نباید روی هر Node قرار گیرد؛ مقاومتها باید در دو انتهای واقعی Bus قرار داشته باشند.
توپولوژی مناسب CAN FD
CAN FD برای استفاده روی یک Bus خطی طراحی شده است.
ساختار مناسب معمولاً به صورت:
Node ─ Node ─ Node ─ Node
است.
استفاده از Star Topology بزرگ، Stubهای طولانی و سیمکشی نامناسب میتواند کیفیت سیگنال را کاهش دهد.
هرچه Data Bit Rate بالاتر رود، اهمیت Signal Integrity بیشتر میشود.
رابطه سرعت و طول کابل
یکی از اشتباهات رایج این است که تصور شود CAN FD میتواند همیشه با چند مگابیت بر ثانیه و روی کابل بسیار طولانی کار کند.
سرعت بالاتر معمولاً نیازمند محدود کردن طول Bus و کنترل بهتر شرایط فیزیکی است.
پارامترهای مهم شامل:
- طول کابل
- Impedance
- کیفیت Transceiver
- ظرفیت کابل
- Stub Length
- Termination
- تعداد Nodeها
- نرخ Data
هستند.
بنابراین انتخاب Bit Rate باید بر اساس سختافزار واقعی انجام شود، نه صرفاً قابلیت MCU.
Bit Timing در FDCAN
Bit Timing یکی از مهمترین قسمتهای تنظیم CAN FD است.
هر Bit به چند Time Quantum تقسیم میشود.
مفاهیم مهم عبارتاند از:
- Prescaler
- Time Quantum
- Sync Segment
- Time Segment 1
- Time Segment 2
- Sample Point
این پارامترها تعیین میکنند Receiver چه زمانی وضعیت Bus را Sample کند.
Sample Point چیست؟
Sample Point نقطهای از Bit Time است که در آن Receiver وضعیت Bus را نمونهبرداری میکند.
در بسیاری از شبکههای CAN، Sample Point در محدوده نسبتاً بالایی از Bit قرار میگیرد.
اما مقدار مناسب به شرایط شبکه و Bit Rate بستگی دارد.
برای CAN FD، معمولاً Nominal Bit Timing و Data Bit Timing به صورت جداگانه طراحی میشوند.
Nominal Bit Timing و Data Bit Timing
این دو بخش را نباید با یکدیگر اشتباه گرفت.
Nominal Bit Timing
برای Arbitration و بخش Nominal استفاده میشود.
Data Bit Timing
برای بخش Data زمانی که BRS فعال است استفاده میشود.
بنابراین در یک شبکه CAN FD ممکن است دو مجموعه تنظیمات Timing داشته باشیم.
FDCAN و CAN 2.0
یکی از مزیتهای مهم FDCAN در STM32 این است که میتواند با Frameهای CAN کلاسیک نیز کار کند.
یعنی وجود Peripheral با نام FDCAN به این معنی نیست که شبکه حتماً باید CAN FD باشد.
میتوان از آن برای:
Classic CAN
نیز استفاده کرد.
این موضوع برای مهاجرت سیستمهای قدیمی CAN به MCUهای جدید STM32 بسیار مهم است.
آیا CAN FD با CAN Classic سازگار است؟
در سطح کلی، CAN FD برای استفاده در شبکههای مدرن طراحی شده و Frameهای CAN FD نباید بدون پشتیبانی مناسب توسط Nodeهای صرفاً Classical CAN پردازش شوند.
بنابراین اگر در یک Bus ترکیبی از Nodeهای قدیمی و جدید دارید، باید نوع Frameها و قابلیت هر Node را دقیقاً در نظر بگیرید.
یک Node قدیمی CAN ممکن است نتواند Frameهای CAN FD را پردازش کند.
در نتیجه سازگاری شبکه باید در سطح پروتکل بررسی شود، نه فقط در سطح فیزیکی Bus.
FDCAN Loopback چیست؟
یکی از بهترین روشها برای تست اولیه FDCAN استفاده از Loopback است.
در Loopback، MCU میتواند پیام ارسالشده را بدون نیاز به یک شبکه واقعی برای تست دریافت کند.
دو مفهوم مهم وجود دارد:
Internal Loopback
تست داخل Peripheral انجام میشود و برای بررسی تنظیمات داخلی بسیار مناسب است.
External Loopback
مسیر واقعیتر و وابسته به بخش فیزیکی سیستم است.
Loopback برای پیدا کردن مشکلات نرمافزاری و تنظیمات اولیه مفید است، اما موفقیت در Loopback به معنی سالم بودن کل شبکه CAN FD نیست.
Normal Mode چیست؟
در Normal Mode، FDCAN به Bus واقعی متصل میشود.
ساختار معمول:
STM32 → CAN FD Transceiver → CAN Bus → Transceiver → STM32
است.
در این حالت موارد زیر همگی باید صحیح باشند:
- Bit Timing
- Transceiver
- Termination
- CANH
- CANL
- Identifier
- Filter
- Message RAM
- Data Length
- BRS
- FD Format
اگر یکی از این قسمتها اشتباه باشد، ارتباط ممکن است برقرار نشود.
Error State در CAN
یکی از ویژگیهای مهم CAN، مدیریت خطا در سطح سختافزار است.
Nodeها میتوانند خطاهایی مانند:
- Bit Error
- Stuff Error
- CRC Error
- Form Error
- ACK Error
را تشخیص دهند.
بر اساس وضعیت خطا، Node میتواند وارد Stateهای مختلف شود.
سه حالت مهم عبارتاند از:
Error Active
Node در وضعیت عادی فعالیت میکند.
Error Passive
تعداد خطاها افزایش یافته و Node وارد وضعیت محدودتر میشود.
Bus-Off
Node به دلیل خطاهای زیاد از Bus خارج میشود.
این مکانیزم یکی از دلایل اصلی Reliability بالای CAN در سیستمهای صنعتی است.
اهمیت Bus-Off در طراحی صنعتی
در یک محصول واقعی نباید فقط ارسال و دریافت Frame طراحی شود.
سیستم باید وضعیت خطا را نیز مدیریت کند.
برای مثال در صورت Bus-Off ممکن است لازم باشد:
- وضعیت خطا ثبت شود
- ارتباط متوقف شود
- Recovery انجام شود
- شمارنده خطا بررسی شود
- وضعیت Node به سیستم اصلی گزارش شود
در سیستمهای Safety-Critical، مدیریت این وضعیت اهمیت بسیار بیشتری پیدا میکند.
Priority در CAN چگونه کار میکند؟
CAN از Arbitration غیرمخرب استفاده میکند.
در شبکه CAN، Identifier نقش مهمی در تعیین اولویت دارد.
به طور کلی Identifier با مقدار عددی پایینتر اولویت بیشتری دارد.
به همین دلیل طراحی IDها باید از ابتدا بخشی از طراحی معماری شبکه باشد.
مثلاً پیامهای:
- Emergency
- Motor Control
- Safety
- Fast Sensor Data
میتوانند نسبت به پیامهای:
- Diagnostic
- Logging
- Telemetry
اولویت بالاتری داشته باشند.
طراحی مناسب CAN ID
بهتر است Identifierها تصادفی انتخاب نشوند.
میتوان ساختاری مانند این تعریف کرد:
Priority + Device Type + Message Type + Channel
البته ساختار دقیق کاملاً وابسته به سیستم است.
هدف این است که Identifier بتواند:
- اولویت
- نوع پیام
- نوع Device
- Channel
را در معماری شبکه مشخص کند.
این کار طراحی Filterها را نیز سادهتر میکند.
Filter و معماری نرمافزار
Filter فقط یک ابزار برای کاهش Interrupt نیست.
Filter میتواند بخشی از معماری سیستم باشد.
مثلاً:
FIFO0 → Control Messages
FIFO1 → Sensor Messages
RX Buffer → Critical Messages
این ساختار باعث میشود نرمافزار بعد از دریافت Frame، مجبور نباشد تمام پیامهای شبکه را بررسی کند.
FDCAN Interrupt
FDCAN میتواند رویدادهای مختلفی را ایجاد کند.
از جمله:
- دریافت Frame
- پر شدن FIFO
- رسیدن FIFO به Watermark
- ارسال Frame
- خطا
- Bus-Off
- Error Passive
استفاده از Interrupt برای سیستمهای Real-Time معمولاً بهتر از Polling دائمی است.
با این حال، معماری دقیق باید بر اساس نرخ پیام و نیازهای نرمافزار طراحی شود.
FIFO Watermark چیست؟
میتوان برای FIFO یک Watermark تعریف کرد.
به عنوان مثال فرض کنید FIFO ظرفیت چند پیام دارد.
به جای اینکه برای هر پیام یک Interrupt ایجاد شود، میتوان تعیین کرد زمانی که تعداد مشخصی پیام وارد FIFO شد، Interrupt ایجاد شود.
این روش میتواند تعداد Interruptها را کاهش دهد.
اما برای پیامهای بسیار حساس و Real-Time ممکن است دریافت سریع هر Frame اولویت بیشتری داشته باشد.
CAN FD برای چه کاربردهایی مناسب است؟
CAN FD در بسیاری از سیستمهای Embedded استفاده میشود.
از جمله:
Automotive
- ECU
- Gateway
- ADAS
- Battery Management
- Motor Control
- Diagnostics
Industrial Automation
- PLC
- Motor Drive
- Industrial Sensor
- Servo System
- Robot
- Controller
Energy
- Battery System
- Inverter
- Power Converter
- Energy Management
Robotics
- Motor Controller
- IMU
- Encoder
- Sensor Network
Medical Equipment
در برخی تجهیزات پزشکی Embedded که نیاز به ارتباط قابل اعتماد بین کنترلرها دارند نیز CAN و CAN FD میتوانند کاربرد داشته باشند.
CAN FD در سیستمهای موتور کنترل
در سیستم Motor Control ممکن است اطلاعات زیادی مانند:
- Position
- Velocity
- Torque
- Current
- Temperature
- Error State
بین Controller و Drive منتقل شود.
CAN کلاسیک در چنین شرایطی ممکن است به چند Frame نیاز داشته باشد.
CAN FD اجازه میدهد اطلاعات بیشتری در یک Frame قرار گیرد.
این موضوع میتواند طراحی پروتکل بالاتر را سادهتر کند.
CAN FD در BMS
در Battery Management System اطلاعات زیادی بین بخشهای مختلف سیستم ردوبدل میشود.
مانند:
- Cell Voltage
- Temperature
- Current
- State of Charge
- State of Health
- Fault
- Diagnostic
CAN FD با Payload بزرگتر میتواند برای چنین سیستمهایی بسیار مناسب باشد.
CAN FD در سیستمهای صنعتی
در سیستمهای صنعتی معمولاً چند Controller، Sensor و Actuator در یک شبکه قرار دارند.
یک معماری میتواند شامل:
Main Controller
Motor Controller
Sensor Node
Safety Controller
HMI
باشد.
CAN FD میتواند یک لایه ارتباطی مناسب برای این Nodeها فراهم کند.
مزیت اصلی آن در چنین سیستمهایی ترکیب:
Reliability + Deterministic Arbitration + Larger Payload + Higher Data Rate
است.
مزایای CAN FD
مهمترین مزایای CAN FD عبارتاند از:
1. Payload بزرگتر
تا 64 بایت Data در یک Frame.
2. سرعت بالاتر
امکان افزایش Data Bit Rate با BRS.
3. کاهش تعداد Frameها
اطلاعات بیشتری در هر Frame منتقل میشود.
4. حفظ مفهوم Arbitration در CAN
ساختار Arbitration همچنان مبتنی بر CAN است.
5. قابلیت استفاده در سیستمهای Real-Time
برای بسیاری از سیستمهای کنترل مناسب است.
6. قابلیت استفاده با FDCAN در STM32
میکروکنترلرهای جدید STM32 امکانات سختافزاری مناسبی برای CAN FD ارائه میکنند.
معایب و محدودیتهای CAN FD
CAN FD نیز محدودیتهایی دارد.
پیچیدگی بیشتر
تنظیمات آن نسبت به CAN کلاسیک پیچیدهتر است.
حساسیت بیشتر به طراحی فیزیکی
در نرخهای بالاتر، Signal Integrity اهمیت بیشتری پیدا میکند.
نیاز به Transceiver مناسب
تمام Transceiverهای CAN الزاماً برای CAN FD مناسب نیستند.
نیاز به طراحی دقیق Bit Timing
Nominal و Data Timing باید به درستی انتخاب شوند.
محدودیت سازگاری
تمام Nodeهای CAN کلاسیک نمیتوانند Frameهای CAN FD را پردازش کنند.
اشتباهات رایج در راهاندازی CAN FD در STM32
اشتباه اول: توجه نکردن به Transceiver
حتی اگر FDCAN به درستی تنظیم شده باشد، Transceiver نامناسب میتواند ارتباط را مختل کند.
اشتباه دوم: اشتباه در Bit Timing
تنظیم نادرست Prescaler، Time Segment و Sample Point یکی از دلایل اصلی عدم ارتباط است.
اشتباه سوم: فعال کردن BRS بدون توجه به Bus
بالا بردن Data Rate بدون بررسی طول کابل و کیفیت شبکه میتواند باعث خطا شود.
اشتباه چهارم: اشتباه در Message RAM
در STM32H7 باید Offset و تعداد Elementهای Message RAM به صورت دقیق محاسبه شوند.
ST نیز تأکید میکند که بخشهای مختلف Message RAM نباید روی یکدیگر Overlap داشته باشند.
اشتباه پنجم: Filter اشتباه
ممکن است Frame واقعاً روی Bus وجود داشته باشد اما Filter اجازه ورود آن را ندهد.
اشتباه ششم: اشتباه گرفتن DLC و تعداد بایت
در CAN FD برای Payloadهای بزرگتر از 8 بایت، رابطه DLC و تعداد واقعی بایتها مانند CAN کلاسیک نیست.
اشتباه هفتم: بررسی نکردن ACK
اگر تنها یک Node روی Bus وجود داشته باشد، رفتار ACK میتواند باعث شود تست ارسال با شبکه واقعی متفاوت باشد.
معماری پیشنهادی یک سیستم CAN FD با STM32
یک معماری صنعتی معمول میتواند به شکل زیر باشد:
در سمت نرمافزار نیز مسیر دریافت میتواند به شکل زیر طراحی شود:
این تفکیک باعث میشود Driver، Protocol و Application از یکدیگر جدا باشند.
CAN FD Driver با Protocol چه تفاوتی دارد؟
FDCAN فقط لایه Controller را فراهم میکند.
این Peripheral نمیداند مثلاً:
- Message ID شماره 0x100 یعنی چه
- Byteهای Data چه معنایی دارند
- کدام پیام مربوط به Motor است
- کدام پیام مربوط به Temperature است
این موارد در لایه بالاتر تعریف میشوند.
برای مثال میتوان یک پروتکل اختصاصی روی CAN FD طراحی کرد.
ساختار یک پیام میتواند شامل:
ID + Command + Device + Length + Data + Counter + CRC
باشد.
CAN FD و CANopen
CANopen یکی از Protocolهای معروف روی CAN است.
CANopen برای مواردی مانند:
- Device Profile
- Object Dictionary
- PDO
- SDO
- Network Management
ساختار مشخصی ارائه میدهد.
CAN FD میتواند برای پروتکلهای جدیدتر و معماریهای اختصاصی نیز استفاده شود.
بنابراین باید بین:
CAN / CAN FD Controller
و
Higher-Level Protocol
تفاوت قائل شد.
CAN FD و J1939
J1939 نیز یکی از Protocolهای شناختهشده در سیستمهای مبتنی بر CAN است.
در سیستمهای جدید، نسخههای مبتنی بر CAN FD نیز مطرح شدهاند.
این نشان میدهد که CAN FD صرفاً یک ویژگی سختافزاری MCU نیست؛ بلکه میتواند پایهای برای Protocolهای سطح بالاتر باشد.
CAN FD در STM32H7 چه مزیتی دارد؟
STM32H7 برای کاربردهای پردازشی سنگین طراحی شده است.
ترکیب:
Cortex-M7 + FDCAN + DMA/Interrupt Architecture + High-Speed Memory System
میتواند برای سیستمهایی مناسب باشد که علاوه بر ارتباط CAN FD، پردازشهای سنگین Embedded نیز دارند.
به عنوان مثال:
Sensor → FDCAN → STM32H7 → DSP/Control → FDCAN → Actuator
میتواند یک معماری مناسب برای سیستمهای صنعتی باشد.
FDCAN1 و FDCAN2 در STM32H7
در مدلهایی که بیش از یک FDCAN وجود دارد، میتوان دو شبکه مستقل یا دو Interface ارتباطی ایجاد کرد.
برای مثال:
FDCAN1
شبکه داخلی سیستم
FDCAN2
شبکه ارتباط با تجهیزات خارجی
اما در این حالت Message RAM باید به صورت دقیق بین Instanceها مدیریت شود.
مستندات و پیادهسازیهای STM32H7 نشان میدهند که Message RAM میتواند بین چند FDCAN به اشتراک گذاشته شود و Offset مناسب برای جلوگیری از تداخل باید در نظر گرفته شود.
آیا میتوان تمام Message RAM را برای یک FDCAN استفاده کرد؟
در صورت استفاده از یک FDCAN، فضای بیشتری برای اختصاص به همان Instance وجود خواهد داشت.
اما مقدار واقعی مصرفشده به Configuration بستگی دارد.
مثلاً اگر:
- Filter زیاد
- RX FIFO بزرگ
- TX FIFO بزرگ
- RX Buffer
- TX Buffer
- TX Event FIFO
همگی فعال باشند، مصرف Message RAM افزایش پیدا میکند.
بنابراین انتخاب «بیشترین مقدار ممکن» برای تمام بخشها همیشه طراحی مناسبی نیست.
چگونه Message RAM را بهینه کنیم؟
بهترین روش این است که ابتدا نیاز واقعی سیستم مشخص شود.
مثلاً اگر سیستم فقط:
- 8 Standard Filter
- RX FIFO0
- 16 پیام RX
- TX FIFO با 8 پیام
نیاز دارد، اختصاص فضای بسیار بزرگ به تمام بخشها منطقی نیست.
هر Element میتواند بر اساس اندازه Data، چند Word از Message RAM مصرف کند.
در CAN FD، انتخاب Data Element بزرگتر به معنی مصرف حافظه بیشتر است.
بنابراین اندازه RX و TX Element باید متناسب با حداکثر Payload مورد نیاز انتخاب شود.
CAN FD و DMA
در معماریهای Embedded، کاهش بار CPU اهمیت زیادی دارد.
در برخی STM32ها امکانات مختلفی برای مدیریت انتقال داده و Interrupt وجود دارد، اما معماری دقیق وابسته به خانواده و Peripheral است.
اصل مهم این است که طراحی باید به گونهای باشد که پردازنده مجبور نباشد دائماً وضعیت CAN Bus را Poll کند.
استفاده صحیح از:
- FIFO
- Interrupt
- Buffer
- DMA در صورت پشتیبانی و نیاز
میتواند بار CPU را کاهش دهد.
CAN FD و Real-Time
یکی از مهمترین مزیتهای CAN، Arbitration مبتنی بر Priority است.
اما CAN FD به خودی خود تضمین نمیکند که هر پیام دقیقاً در زمان مشخصی تحویل داده شود.
برای طراحی Real-Time باید موارد زیر بررسی شوند:
- Message Priority
- Bus Load
- Frame Length
- Nominal Bit Rate
- Data Bit Rate
- Number of Nodes
- Worst-Case Latency
- Error Frames
بنابراین طراحی Real-Time یک شبکه CAN FD نیازمند تحلیل کل شبکه است.
Bus Load چیست؟
Bus Load نشان میدهد چه مقدار از ظرفیت Bus توسط پیامها استفاده میشود.
اگر تعداد پیامها زیاد شود یا نرخ ارسال آنها افزایش پیدا کند، Bus Load افزایش مییابد.
وقتی Bus Load بیش از حد بالا برود:
- Latency افزایش پیدا میکند
- پیامهای کماولویت دیرتر ارسال میشوند
- احتمال ازدحام افزایش پیدا میکند
بنابراین باید در طراحی شبکه CAN FD، Worst-Case Bus Load محاسبه شود.
ابزارهای تست CAN FD
برای توسعه حرفهای، استفاده از ابزارهای تحلیل CAN بسیار مفید است.
ابزارهای تخصصی میتوانند موارد زیر را نمایش دهند:
- CAN ID
- DLC
- Data
- Timestamp
- Bit Rate
- Error
- Bus Load
- CAN FD / Classic CAN
- BRS
در مراحل Debug، داشتن یک CAN Analyzer مناسب میتواند زمان عیبیابی را به شدت کاهش دهد.
روش اصولی Debug کردن CAN FD
به جای تغییر تصادفی تنظیمات، بهتر است Debug به ترتیب زیر انجام شود:
مرحله اول
بررسی Clock و Peripheral Configuration
مرحله دوم
بررسی FDCAN Mode
مرحله سوم
بررسی Message RAM
مرحله چهارم
بررسی Filter
مرحله پنجم
بررسی Nominal Bit Timing
مرحله ششم
بررسی Data Bit Timing
مرحله هفتم
بررسی BRS
مرحله هشتم
بررسی Transceiver
مرحله نهم
بررسی CANH و CANL
مرحله دهم
بررسی Termination
مرحله یازدهم
بررسی با CAN Analyzer
این روش بسیار سریعتر از تغییر همزمان چندین پارامتر است.
جمعبندی
CAN FD نسل توسعهیافته CAN است که برای سیستمهایی طراحی شده که به Payload بزرگتر و نرخ انتقال بالاتر نیاز دارند.
مهمترین قابلیتهای CAN FD عبارتاند از:
- Payload تا 64 بایت
- Bit Rate Switching
- Data Bit Rate بالاتر
- حفظ Arbitration مبتنی بر CAN
- Hardware Filtering
- مناسب بودن برای سیستمهای Real-Time
- قابلیت استفاده در سیستمهای صنعتی و Automotive
در STM32H7، واحد FDCAN امکانات گستردهای برای مدیریت این شبکه فراهم میکند.
اما راهاندازی صحیح FDCAN فقط به تنظیم Bit Rate محدود نمیشود. مواردی مانند:
- Message RAM
- Filter
- RX FIFO
- TX FIFO
- RX Buffer
- TX Buffer
- TX Event FIFO
- Bit Timing
- BRS
- CAN FD Transceiver
- Termination
- Bus Load
همگی باید در طراحی در نظر گرفته شوند.
مهمترین نکته در طراحی یک سیستم حرفهای CAN FD این است که سه لایه را از یکدیگر جدا کنیم:
FDCAN Peripheral
↓
CAN FD Physical Layer
↓
Application Protocol
وقتی این سه لایه به صورت صحیح طراحی شوند، STM32H7 میتواند به عنوان یک Controller قدرتمند برای شبکههای CAN FD صنعتی، رباتیک، کنترل موتور، تجهیزات اندازهگیری و سیستمهای Embedded پیشرفته مورد استفاده قرار گیرد.
مستندات رسمی ST نیز ساختار FDCAN و Message RAM را به صورت جزئی بررسی کردهاند و برای طراحی دقیق Peripheral، مرجع اصلی محسوب میشوند.









