การส่งข้อความที่แตกต่างด้วย SAME ID บน CAN บัส


12

การตัดสินโดยอนุญาโตตุลาการสามารถทำได้ด้วย ID และโหนดใด ๆ บนบัสสามารถส่งผ่านด้วย ID ใด ๆ (โดยปกติแล้วมันไม่ควร แต่โหนดที่น่ารังเกียจสามารถทำได้)

จะเกิดอะไรขึ้นถ้าสองโหนดที่แตกต่างกันเชื่อมต่อกับ CAN บัสเดียวกันส่งข้อความด้วย ID เดียวกัน แต่ไบต์ข้อมูลต่างกัน

ความคิดของฉัน: มันจะสร้างขยะบนรถบัส ใครก็ตามที่มีบิตที่โดดเด่นเหล่านั้นเท่านั้นที่จะได้รับการถ่ายทอด


1
ฉันไม่แน่ใจว่าทำไมพวกเขาทำอย่างนี้ ฉันคิดว่ามันจะเหมาะสมกว่าที่อนุญาโตตุลาการจะใช้กับข้อความทั้งหมด
Rocketmagnet

คำตอบ:


12

มาตรา 6.1 ของรายละเอียดCAN :

ข้อผิดพลาด BIT: หน่วยที่กำลังส่งบิตบนบัสยังมอนิเตอร์บัส ต้องตรวจพบข้อผิดพลาดบิตในเวลานั้นเมื่อค่าบิตที่ถูกตรวจสอบแตกต่างจากค่าบิตที่ส่ง ข้อยกเว้นคือการส่งบิต 'recessive' ระหว่างสตรีมบิตยัดของ ARBITRATION FIELD หรือระหว่าง ACK SLOT

ดังนั้นโหนดที่ส่งสัญญาณ '1' ครั้งแรกเมื่ออีกโหนดหนึ่งส่งสัญญาณ '0' จะบันทึกข้อผิดพลาดบิตแล้วส่งสัญญาณข้อผิดพลาดตามปกติ - โดยการส่งสัญญาณข้อผิดพลาด (ดูหัวข้อ 3.1.3) ตามที่อธิบายอย่างเป็นทางการ ในมาตรา 6.2

อย่างไม่เป็นทางการหากโหนดนั้นทำงานผิดพลาด (ซึ่งควรเป็นกรณีปกติ) มันจะส่งสัญญาณข้อผิดพลาดของ 6 บิตที่โดดเด่นซึ่งโหนดอื่น ๆ ทั้งหมดจะตรวจพบ (เป็นข้อผิดพลาดของสิ่งต่าง ๆ ) นี่เป็นผลของการทำลายข้อความนั้นอย่างสมบูรณ์:

  • ไม่มีใครจะได้รับมัน
  • ไม่มีตัวส่งสัญญาณใดที่จะคิดว่าพวกเขาส่งสิ่งใดได้สำเร็จ

เครื่องส่งสัญญาณแต่ละเครื่องจะพยายามส่งสัญญาณซ้ำอีกครั้งทั้งนี้ขึ้นอยู่กับช่วงเวลาที่แม่นยำของการส่งสัญญาณใหม่เครื่องหนึ่งอาจเริ่มต้นอย่างเพียงพอก่อนที่เครื่องควบคุมการรับสัญญาณอื่น ๆ จะได้รับ มิฉะนั้นลำดับเดียวกันอาจเกิดขึ้นอีกครั้ง (หรือข้อความอื่นที่มีลำดับความสำคัญสูงกว่าอาจทำให้ทั้งคู่ปิดอยู่ครู่หนึ่ง!)


คำตอบเพิ่มเติมที่ได้แรงบันดาลใจจากคำตอบของ @ clabbacchio ด้านล่าง

คุณพูดถึง "โหนดที่น่ารังเกียจ" และ clabbacchio ทำให้จุดที่ถูกต้องว่าถ้าสองโหนดส่งในเวลาที่ต่างกันผู้รับแต่ละคนต้องตัดสินใจว่าจะทำอย่างไรกับการออกงานหลายครั้ง

ปีนี้มีการแฮ็คข้อมูล บทความนี้กล่าวถึงในหัวข้อ "PSCM specifics" ว่าผู้โจมตีสามารถซิงโครไนซ์กับข้อความปกติบนรถบัสและเล่นข้อความชั่วร้ายได้อย่างไรก่อนที่ ECU "ดี" กำลังจะส่ง ECU ที่ได้รับนั้นยอมรับข้อความก่อนหน้าปรับปรุงตัวนับข้อความจากนั้นทิ้งข้อความ "ดี" เป็นข้อผิดพลาดเนื่องจากตัวนับข้อความไม่เพิ่มขึ้น


1

ในคำถามของคุณคุณทำสมมติฐานนี้:

ใครก็ตามที่มีบิตที่โดดเด่นเหล่านั้นเท่านั้นที่จะได้รับการถ่ายทอด

ซึ่งถือว่าข้อความทั้งสองนั้นถูกส่งในเวลาเดียวกันซึ่งเป็นกรณีเฉพาะของปัญหาทั่วไปที่มากขึ้น คำตอบที่ถูกต้องของ Martin ครอบคลุมประเด็นเฉพาะนี้ แต่ไม่สนใจกรณี (ทั่วไป) ซึ่งทั้งสองโหนดส่งในเวลาที่ต่างกัน

ในกรณีนั้นจะมีข้อความสองข้อความที่มี ID เดียวกัน แต่ส่วนต่างของข้อมูลบนรถบัสและมันขึ้นอยู่กับตรรกะของผู้รับที่จะแยกแยะระหว่างข้อความทั้งสองและตัดสินใจว่าเป็นเนื้อหาที่พวกเขาต้องการได้รับหรือไม่ หากพวกเขาล้มเหลวในการแยกแยะข้อความทั้งสองพวกเขาอาจตีความข้อมูลผิดและก่อให้เกิดปัญหาร้ายแรงมากกว่าแค่เฟรมข้อผิดพลาด

เช่นบอกว่าข้อความหนึ่งมีการอ่านของเซ็นเซอร์อุณหภูมิอื่น ๆ มีตำแหน่งเป้าหมายของแอคทูเอเตอร์ในไบต์เดียวกัน (ไม่ควรเกิดขึ้นในชีวิตจริง) คุณอาจมีแอคทูเอเตอร์ได้ตามเป้าหมายโดยไม่รู้ตัว


ใช่ควรใช้ตรรกะเพื่อแยกความแตกต่างระหว่างสองข้อความ แต่คำถามของฉันคือถ้าอนุญาโตตุลาการทำบนพื้นฐานของ ID แล้วจะเกิดอะไรขึ้นถ้า ID ข้อความเหมือนกันและข้อมูลแตกต่างกัน
Swanand

@Swanand บนสมมติฐานของการส่งพร้อมกันเท่านั้น? เพิ่งสังเกตว่ามันเป็นเรื่องของมุมตรงกันข้ามมีแนวโน้มมากกว่า
clabacchio

0

หากเขตข้อมูลข้อความแตกต่างคุณจะ (รับความหวัง!) รับกรอบข้อผิดพลาดบนรถบัสเนื่องจาก CRC ผิด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.