Apa yang berlaku sekiranya dua segmen ID nod adalah sama?
Rangkaian CAN-bus tidak membenarkan dua nod mempunyai segmen ID yang sama pada prinsipnya, tetapi apa yang berlaku jika kedua-dua segmen ID nod adalah sama?
Sebelum percubaan, kita mesti mempunyai pemahaman yang jelas tentang struktur mesej CAN dan prinsip timbang tara.
Pertama, CAN struktur pesanan
Standard rangkaian CAN-bus yang paling banyak digunakan ialah versi V2.0. Piawaian ini dibahagikan kepada bahagian A dan B. Perbezaan utama mereka ialah panjang kod ID di kawasan timbang tara. Di antara mereka CAN2.0A (bingkai standard) adalah 11 bit ID, CAN2.0B (bingkai diperluas) adalah ID 29 bit. Jadual 1 di bawah menunjukkan struktur mesej CAN:
Jadual 1 CAN struktur mesej
| Nama Fasa | Panjang / bit fasa | Penerangan | |
| SOF | 1 | ertinya permulaan fasa data, dan dibuat oleh sedikit dominan tunggal | |
| Fasa Pencerobohan | Bingkai piawai | 12 | Menunjukkan keutamaan bingkai, yang terdiri daripada 11 alamat ID dan 1 RTR |
| bingkai dilanjutkan | 32 | Menunjukkan keutamaan bingkai, yang terdiri daripada 29 alamat ID, SRR 1 bit, IDE dilanjutkan dan RTR | |
| Fasa Kawalan | 6 | ertinya kod kumpulan dan bit terpelihara panjang data bagi segmen data | |
| Fasa Data | 0 ~ 8 | kandungan data, fasa kawalan mengawal panjang data | |
| CRC | 16 | cek transimission bingkai, dari SOF ke fasa data, semua kandungan, kecuali bit pengisian | |
| ACK | 2 | nod lain mengesahkan bingkai ini untuk diterima dengan betul | |
| Akhir Bingkai | 7 | bermaksud akhir bingkai | |
Kedua, prinsip penimbangtaraan
Bolehkah arbitrasi bas didasarkan pada "garis dan prinsip", seperti yang ditunjukkan dalam Rajah 1. Apabila transceiver memancarkan isyarat tahap yang berbeza pada masa yang sama, tahap reses selalu dilindungi oleh tahap dominan. Semasa menghantar mesej, pengawal CAN akan memantau sama ada status bas adalah sama seperti yang dihantar dengan sendirinya. Sekiranya tidak konsisten berlaku dalam segmen ID, arbitrase akan berlaku. Jika ia berlaku di kawasan lain, kesilapan yang sama akan dicetuskan.
Berikut adalah perkara penting. Bagaimana jika kedua-dua segmen ID nod adalah sama? Kami memulakan percubaan dengan dua kad CAN dan satu CANScope. Kad CAN mensimulasikan nod standard CAN untuk menghantar dan menerima mesej, dan CANScope melakukan pemantauan komunikasi, seperti yang ditunjukkan dalam Rajah 2.
Rajah 2 Pembinaan Platform Eksperimen
Ketiga, eksperimen satu "Segmen ID adalah sama tapi data berbeda"
Kad CAN digunakan untuk menghantar bingkai CAN dengan data ID 000H ke 01020304050607H dan kad CAN lain untuk menghantar bingkai CAN dengan data 000H ke 02020304050607H. Data yang CANScope mendengar pada ditunjukkan pada Rajah 3. Ia dapat diperhatikan bahawa terdapat sejumlah besar kesalahan data bidang mengisi.

Gambar 3. Bidang data mengisi erro
Mengapa ini begitu? Kami mula-mula mendapatkan bentuk gelombang yang sepadan dengan kedua-dua mesej penghantaran kad CAN, seperti yang ditunjukkan dalam Rajah 4. Oleh kerana mesej dua-pin adalah bingkai data standard dan setiap bingkai mengandungi 8 bait data, bentuk gelombang sepadan dengan dua bingkai paket adalah sama persis dalam segmen ID, RTR, IDE, R0, dan DLC. Oleh itu, peranan timbang tara adalah tidak berkesan dan kedua-dua nod menganggap diri mereka sebagai keutamaan dan terus menghantar data.
Sekarang kita fokus pada segmen data, data pertama byte adalah sama, adalah 00H; data byte kedua adalah berbeza, masing-masing 01H, 02H. Anak panah dalam Rajah 5 menunjukkan bahawa logik bit sepadan adalah 0 dan 1 masing-masing. Terdahulu, kita menyebut bahawa nod CAN akan mengesan sama ada paras bas adalah sama dengan tahap yang dihantar ketika menghantar mesej. Sekiranya tidak konsisten berlaku di kawasan bukan timbangtara, kesilapan yang sama akan dicetuskan, jadi jika kedua-dua bingkai dihantar ke bas pada masa yang sama Kesalahan bit mesti berlaku. Kerana ralat penghantaran sedikit akan menyebabkan nod menghantar 6 bit dominan yang melanggar peraturan pengisian (kesilapan aktif memusnahkan data bingkai), ralat pengisian bidang data berlaku, seperti yang ditunjukkan dalam Gbr. 3.

Rajah 5 Konflik Bidang Data
Keempat, eksperimen dua "data yang sama dengan ID yang sama"
Pada masa yang sama, gunakan dua kad CAN untuk menghantar Bingkai CAN yang ID ialah data 000H ke 01020304050607H, dan CANScope melakukan pemantauan komunikasi. Pertama sekali, kami tidak menyemak pilihan "jawapan bas" untuk membuat CANScope berfungsi dalam mod mendengar sahaja. Keputusan eksperimen ditunjukkan dalam Rajah 6, dan pemisah tindak balas berada dalam format yang salah.
Gambarajah 6 Kesalahan format pemisah tindak balas
Kenapa ini berlaku? Node yang menghantar mesej itu akan menghantar dua bit reses dalam segmen ACK. Jika tahap dominan diterima semasa bit pertama, bingkai itu dianggap telah diterima dengan betul. Oleh kerana kedua-dua penimbangtara berpendapat bahawa mereka telah memperoleh hak arbitrase apabila mereka mempunyai segmen arbitrase yang sama, mereka menunggu tindak balas dalam segmen ACK, tetapi hanya terdapat dua nod dalam rangkaian. Oleh itu, tiada tindak balas yang boleh diterima di segmen ACK, dan ralat pemisah tindak balas berlaku. Hanya bercakap, keadaan ini sama dengan fakta bahawa hanya satu nod dalam bas tidak akan dapat menghantar data. Rajah 7 menunjukkan perbandingan bentuk gelombang apabila tiada respons dalam segmen ACK.
Rajah 7 ACK Balas
Kami menyemak respons bas dan memulakan eksperimen sekali lagi (pada masa ini terdapat 3 nod dalam bas). Pada masa ini, seperti yang ditunjukkan dalam Gbr. 8, data bas dihantar dan diterima secara normal.
Rajah 8 Mula Jawapan BUS
Ringkasan: Apabila dua nod menghantar paket dengan ID dan data yang sama pada masa yang sama, ralat padding medan data berlaku. Apabila dua nod menghantar paket dengan ID yang sama dan data yang sama, tiada ralat berlaku jika nod lain bertindak balas. Nod lain bertindak balas dengan ralat tindak balas. Oleh itu, kita harus mengelakkan situasi yang sama di segmen ID ketika merancang bus CAN.





