Bir CAN veriyolunda AYNI ID ile farklı mesajların iletimi


12

CAN tahkimi kimliklerle yapılır ve veri yolundaki herhangi bir düğüm herhangi bir kimlikle iletim yapabilir (ideal olarak olmamalıdır, ancak kötü bir düğüm olabilir).

Aynı CAN veri yoluna bağlı iki farklı düğüm aynı kimliklere ancak farklı veri baytlarına sahip iletiler iletirse ne olur?

Benim düşüncem: Otobüste çöp üretecek. Kimin baskın bitleri varsa, bunlar sadece aktarılacaktır.


1
Neden bu şekilde yaptıklarından emin değilim. Tahkimin mesajın tümüne başvurmasının daha anlamlı olacağını düşünürdüm.
Rocketmagnet

Yanıtlar:


12

CAN spesifikasyonunun Bölüm 6.1 :

BIT HATASI: Veriyoluna biraz gönderen bir birim de veri yolunu izler. İzlenen bit değeri gönderilen bit değerinden farklı olduğunda, bu bit zamanında bir BIT HATASI saptanmalıdır. Bir istisna, TAHKİM ALANI'nın doldurulmuş bit akışı sırasında veya ACK YUVASI sırasında 'resesif' bir bitin gönderilmesidir.

Yani, diğeri bir '0' iletirken ilk önce '1' ileten düğüm, bir Bit Hatası kaydeder ve daha sonra resmi olarak açıklandığı gibi bir hata işaretini (bkz. Bölüm 3.1.3) ileterek bir hatayı normal olarak işaret eder. Bölüm 6.2.

Gayri resmi olarak, bu düğüm hataya aktifse (normal durum olması gerekir), diğer tüm düğümlerin de algılayacağı (baskın bir hata olarak) 6 baskın bitlik bir hata bayrağı iletir. Bunun, bu mesajı tamamen yok etme etkisi vardır:

  • kimse almaz
  • Vericilerin hiçbiri başarılı bir şekilde hiçbir şey iletmediklerini düşünmeyecektir.

Her verici daha sonra yeniden iletmeye çalışacaktır - yeniden iletimlerin kesin zamanlamasına bağlı olarak, biri veri yolunun kazanç kontrolünden önce yeterince başlayabilir. Aksi takdirde, aynı sıra tekrar olabilir. (Ya da daha yüksek öncelikli başka bir mesaj ikisini de bir süreliğine kapatabilir!)


Genişletilmiş cevap @ clabbacchio'nun aşağıdaki cevabından esinlenmiştir.

"Kötü düğümler" den bahsediyorsunuz ve clabbacchio, iki düğüm farklı zamanlarda iletilirse, her alıcının çoklu alımlarıyla ne yapacağına karar vermesi gerektiği geçerli bir noktaya işaret ediyor.

Bu, geçen yıl bir saldırı ile gösterilmiştir . Makale, "PSCM özellikleri" bölümünde, bir saldırganın otobüsteki normal mesajlarla nasıl senkronize edilebileceğini ve "iyi" ECU'nun göndermek üzere olduğu mesajdan hemen önce kötü mesajlarını nasıl dinleyebileceğini tartışıyor. Alıcı ECU önceki iletiyi kabul eder, ileti sayacını güncelleştirir ve ileti sayacı artmadığından "iyi" iletileri hatalı olarak atar.


1

Sorunuzda şu hipotezi yaparsınız:

Kimin baskın bitleri varsa, bunlar sadece aktarılacaktır.

Bu, iki mesajın aynı anda iletildiğini varsayar; bu, daha genel bir sorunun özel bir durumudur. Martin'in geçerli yanıtı bu özel konuyu kapsar, ancak iki düğümün farklı zamanlarda iletildiği (daha genel) durumu göz ardı eder.

Bu durumda, aynı kimliğe sahip ancak veriyolunda farklı yük taşıyan dolaşımda iki mesaj olacaktır ve iki mesaj arasında ayrım yapmak ve almaları gereken içerik olup olmadığına karar vermek alıcıların mantığına bağlıdır. İki iletiyi ayırt edemezlerse, verileri yanlış yorumlayabilir ve sadece hata çerçevelerinden daha ciddi sorunlara neden olabilirler.

Örneğin, bir mesajın bir sıcaklık sensörünün okumasını içerdiğini, diğerinin aynı bayt üzerindeki bir aktüatörün hedef konumunu içerdiğini söyleyin (ASLA GERÇEK YAŞAMDA MUTLU OLMAMALI), aktüatörün bunu bilmeden hedefi olarak almasını sağlayabilirsiniz.


Evet, iki mesaj arasında ayrım yapmak için bir mantık uygulanmalıdır. Ancak sorum, tahkim kimliğine göre yapılıp yapılmadığı, mesaj kimliği aynı ve veriler farklıysa ne olacağıydı.
Swanand

@Swanand sadece aynı anda iletim hipotezinde? Sadece bir köşe kılıfı olduğunu fark edin, tersi daha olasıdır
clabacchio

0

Mesaj veri alanı farklıysa (umarım!) Yanlış CRC nedeniyle veri yolunda bir hata çerçevesi alırsınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.