Transmisi pesan yang berbeda dengan ID SAMA di bus CAN


12

BISA arbitrase dilakukan dengan ID, dan setiap node di bus dapat mengirimkan dengan ID apa pun (idealnya tidak, tetapi sebuah node jahat bisa).

Bagaimana jika dua node berbeda terhubung pada bus CAN yang sama mengirimkan pesan dengan ID yang sama tetapi byte data yang berbeda?

Pemikiran saya: Ini akan menghasilkan sampah di bus. Siapa pun yang memiliki bit dominan itu hanya akan ditransmisikan.


1
Saya tidak yakin mengapa mereka melakukannya dengan cara ini. Saya akan berpikir akan lebih masuk akal jika arbitrasi berlaku untuk seluruh pesan.
Rocketmagnet

Jawaban:


12

Bagian 6.1 dari spesifikasi CAN :

BIT ERROR: Unit yang mengirim sedikit di bus juga memonitor bus. BIT ERROR harus dideteksi pada waktu bit itu, ketika nilai bit yang dipantau berbeda dari nilai bit yang dikirim. Pengecualian adalah pengiriman bit 'resesif' selama stream bit stuffed dari ARBITRATION FIELD atau selama ACK SLOT.

Jadi, simpul yang pertama mentransmisikan '1' ketika yang lain mentransmisikan '0' akan mencatat Kesalahan Bit dan kemudian sinyal kesalahan seperti biasa - dengan mengirimkan flag kesalahan (lihat Bagian 3.1.3), seperti yang dijelaskan secara formal dalam Bagian 6.2.

Secara informal, jika simpul itu aktif kesalahan (yang seharusnya merupakan kasus biasa) akan mengirimkan bendera kesalahan 6 bit dominan, yang juga akan dideteksi oleh semua simpul lain (sebagai kesalahan barang). Ini memiliki efek menghancurkan pesan itu sepenuhnya:

  • tidak ada yang akan menerimanya
  • tidak satu pun pemancar akan berpikir bahwa mereka telah berhasil mentransmisikan apa pun.

Setiap pemancar kemudian akan mencoba mentransmisikan ulang - tergantung pada waktu yang tepat dari transmisi ulang, yang satu mungkin mulai cukup sebelum yang lain mendapatkan kendali bus. Kalau tidak, urutan yang sama dapat terjadi lagi. (Atau pesan dengan prioritas lebih tinggi dapat membuat keduanya tidak aktif untuk sementara waktu!)


Jawaban yang diperluas terinspirasi oleh jawaban @ clabbacchio di bawah ini.

Anda menyebutkan "node jahat", dan clabbacchio membuat poin yang valid bahwa jika dua node mentransmisikan pada waktu yang berbeda, masing-masing penerima perlu memutuskan apa yang harus dilakukan dengan beberapa reseptinya.

Ini ditunjukkan oleh retas tahun lalu . Makalah ini membahas, di bagian "spesifik PSCM", bagaimana penyerang dapat menyinkronkan pesan biasa di bus dan memainkan pesan jahat mereka tepat sebelum pesan yang akan dikirim ECU "baik". ECU penerima menerima pesan sebelumnya, memperbarui penghitung pesannya dan kemudian membuang pesan "baik" sebagai kesalahan, karena penghitung pesannya tidak bertambah.


1

Dalam pertanyaan Anda, Anda membuat hipotesis ini:

Siapa pun yang memiliki bit dominan itu hanya akan ditransmisikan.

Yang mengasumsikan bahwa dua pesan ditransmisikan pada waktu yang bersamaan, yang merupakan kasus khusus dari masalah yang lebih umum. Jawaban sah Martin mencakup masalah khusus ini, tetapi mengabaikan kasus (lebih umum) di mana dua node mentransmisikan pada waktu yang berbeda.

Dalam hal ini, akan ada dua pesan dengan ID yang sama tetapi muatan berbeda yang beredar di bus, dan terserah pada logika penerima untuk membedakan antara dua pesan dan memutuskan apakah itu adalah konten yang harus mereka terima. Jika mereka gagal membedakan dua pesan, mereka mungkin salah menafsirkan data dan menyebabkan masalah yang lebih serius daripada hanya frame kesalahan.

Misalkan mengatakan bahwa satu pesan berisi pembacaan sensor suhu, yang lain berisi posisi target aktuator pada byte yang sama (HARUS TIDAK PERNAH TERJADI DALAM KEHIDUPAN NYATA), Anda mungkin memiliki aktuator mendapatkan itu sebagai target tanpa menyadarinya.


Ya, logika harus diterapkan untuk membedakan antara dua pesan. Tetapi pertanyaan saya adalah apakah arbitrase dilakukan berdasarkan ID, lalu apa yang akan terjadi jika ID pesan sama dan datanya berbeda.
Swanand

@ Swanand hanya pada hipotesis transmisi simultan? Hanya perhatikan bahwa ini adalah kasus sudut, yang terjadi adalah sebaliknya
clabacchio

0

Jika bidang data pesan berbeda, Anda (semoga!) Akan mendapatkan bingkai kesalahan di bus karena CRC yang salah.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.