Dalam komunikasi CAN Bus, kita sering ingin hanya menerima ID tertentu yang relevan dengan perangkat kita. Untuk itu, STM32 (dan banyak mikrokontroler lainnya) menyediakan fitur Filter dan Mask, yakni sebuah mekanisme seleksi yang efisien di level hardware.
Salah satu cara paling umum untuk memfilter pesan CAN adalah menggunakan metode Filter Mask Mode. Di artikel ini, kita akan membahas bagaimana cara kerja FilterMask dan bagaimana menggunakannya dengan benar.
Cara Kerja Filter Mask
Logika dasar dari filter mask pada CAN Bus bisa ditulis dalam bentuk:
(ID_masuk & MASK) == (ID_filter & MASK)
Dengan kata lain:
-
Mask menentukan bit-bit mana yang harus diperiksa (bit yang penting).
-
Jika suatu bit di MASK bernilai 1, maka bit tersebut wajib cocok dengan ID filter.
-
Jika suatu bit di MASK bernilai 0, maka bit tersebut diabaikan (tidak penting, boleh berbeda).
Semakin banyak bit yang dimask dengan 1, maka semakin ketat filternya. Semakin banyak bit yang 0, maka semakin longgar filternya.
Contoh Kasus
Misalnya kita menggunakan Filter ID dan Filter Mask seperti berikut:
Filter ID = 0b1010101010
Filter Mask = 0b1111000000
Artinya:
-
Hanya 4 bit teratas (bit 9–6) yang dianggap penting dan harus sama.
-
Bit 5 sampai 0 dianggap tidak penting, sehingga nilai berapapun akan tetap diterima.
Mari kita uji beberapa ID yang masuk:
ID Masuk | Penjelasan | Hasil |
---|---|---|
0b1010100000 | Bit penting (9–6) cocok | ✅ Lolos |
0b1010110000 | Bit 6 tidak cocok (bit penting) | ❌ Tidak lolos |
0b1010101111 | Bit penting cocok, bit lain diabaikan | ✅ Lolos |
Tips Praktis
-
Gunakan filter mask untuk menyaring grup ID tertentu. Misalnya, jika semua ID pentingmu dimulai dengan
0b1010
, kamu bisa set mask agar hanya 4 bit awal yang dicek. -
Untuk menerima semua ID, cukup set Mask = 0x000, artinya semua bit diabaikan.
-
Untuk menerima satu ID saja, set Mask = 0x7FF (semua bit 1 untuk ID 11-bit) dan FilterID sesuai ID target.
Kesimpulan
Filter Mask pada CAN Bus di STM32 sangat berguna untuk mengurangi beban perangkat dari menangani pesan yang tidak relevan. Dengan logika sederhana (ID & Mask) == (Filter & Mask)
, kita bisa membuat filter fleksibel dan efisien.
Tidak ada komentar:
Posting Komentar