ฝังด้วย Elliot: หลินสำหรับแฮกเกอร์


รถยนต์เป็นกองคล้ำของไมโครคอนโทรลเลอร์หลายร้อยคนในทุกวันนี้ – เพียงแค่ถามช่าง Greybeard ใด ๆ และเขาจะเริ่ม “คาร์บูเรเตอร์” ของเขา ระบบเหล่านี้ทั้งหมดและระบบย่อยจำเป็นต้องพูดคุยกันในสภาพแวดล้อมที่เป็นศัตรูทางไฟฟ้าและมันไม่ใช่การพูดเกินจริงที่จะบอกว่าการสื่อสารผิดพลาดหรือแม้กระทั่งการสื่อสารที่ล่าช้าสามารถมีผลกระทบที่สำคัญ เครือข่ายในรถยนต์เป็นธุรกิจที่สำคัญ การผลิตรถยนต์จำนวนมากทำให้ ICs ตัวรับส่งสัญญาณที่เกี่ยวข้องจำนวนมากสำหรับแฮ็กเกอร์ฮาร์ดแวร์ที่ไม่ใช่ยานยนต์ เหตุใดเราจึงไม่เห็นโครงการแฮ็กเกอร์มากขึ้นที่ใช้ประโยชน์จากฐานทรัพยากรที่น่าทึ่งนี้?

กระดูกสันหลังของเครือข่ายของรถยนต์เป็นเครือข่ายพื้นที่คอนโทรลเลอร์ (สามารถ) [Eric Evenchick] ของ Hackaday เป็นผู้เล่นที่เป็นพิเศษและเขียนทุกสิ่งมากมายที่คุณต้องการทราบเกี่ยวกับรถบัสที่สามารถทำได้ในชุด Multipart ที่คุณต้องการคั่นหน้าเพื่ออ่านในภายหลัง เครื่องยนต์เบรกประตูและบทวิจารณ์ข้อมูลเครื่องมือทั้งหมด (แตกต่างกัน) สามารถ มันรวดเร็วและน่าเชื่อถือสูง นอกจากนี้ยังมีความซับซ้อนและมีราคาแพงเล็กน้อยที่จะนำไปใช้

ในช่วงปลายปี 1990 ผู้ผลิตจำนวนมากมีโปรโตคอลรถบัสที่เป็นกรรมสิทธิ์ของตัวเองวิ่งไปข้าง ๆ สามารถสำหรับส่วนที่ไม่ใช่สิ่งที่ไม่สำคัญของเครือข่ายยานยนต์: วิธีการพูดคุยกับคอนโซลที่ติดตั้งประตูกับรถเข็นล็อคประตูและมอเตอร์หน้าต่าง มันไม่คุ้มค่าที่จะรกรถบัสหลักสามารถสื่อสารกับการสื่อสารที่ไม่สำคัญและไม่สำคัญเช่นนั้นดังนั้นเครือข่ายย่อยจึงหมุนได้ที่สามารถปิดกระป๋องหลัก สิ่งเหล่านี้ไม่จำเป็นต้องมีการรับประกันความเร็วหรือความน่าเชื่อถือของเครือข่ายหลักและด้วยเหตุผลด้านต้นทุนที่พวกเขาต้องใช้งานง่าย ไมโครคอนโทรลเลอร์ที่เล็กที่สุดควรพอเพียงที่จะม้วนหน้าต่างขึ้นและลงใช่ไหม?

ในช่วงต้นปี 2000 สเปคเครือข่ายการเชื่อมต่อระหว่างกัน (Lin) มาตรฐานหนึ่งวิธีการหนึ่งในเครือข่ายย่อยเหล่านี้มุ่งเน้นไปที่ต้นทุนการใช้งานที่ต่ำความเร็วปานกลางการกำหนดค่าใหม่และพฤติกรรมที่คาดการณ์ได้สำหรับการสื่อสารระหว่างไมโครคอนโทรลเลอร์หนึ่งหลักและทาสจำนวนน้อยใน คลัสเตอร์ ราคาถูกง่ายนำไปใช้กับไมโครคอนโทรลเลอร์ขนาดเล็กและดีที่สุดสำหรับโครงการขนาดกลาง? ความฝันของแฮ็กเกอร์! ทำไมคุณไม่ใช้ Lin ในโครงการ Micro-Micro ของคุณ? ลองขุดกันและคุณสามารถดูว่ามีสิ่งใดที่มีประโยชน์สำหรับคุณหรือไม่

โปรโตคอลหลิน

A Lin “Cluster” ซึ่งเป็นสิ่งที่เครือข่ายขนาดเล็กท้องถิ่นเรียกว่าในศัพท์แสงประกอบด้วยไมโครคอนโทรลเลอร์หลักเดียวและเป็นทาสจำนวนหนึ่ง หลินเริ่มต้นเป็นแบบดั้งเดิม 8N1 UART Serial โดยทั่วไปแล้วที่ 19,200 Baud และไม่อยู่กับลวดเดียว ถัดไปมันจะเพิ่มโปรโตคอลที่ช่วยให้สายเดี่ยวนี้ใช้เป็นรถบัสที่ใช้ร่วมกันระหว่างทาสหลายคน หากคุณพยายามที่จะหมุนโปรโตคอลเครือข่ายของคุณเองเพื่อการสื่อสารแบบอนุกรมของ UART ที่ง่ายคุณจะจบลงด้วยบางอย่างเช่นหลิน ไปดึงสำเนาของสเปค (PDF) และอ่านตาม!

การทำธุรกรรมหลินทุกรายการเป็นพื้นฐานที่เหมือนกัน: อาจารย์ส่งส่วนหัวที่มีตัวระบุที่มีการป้องกัน (PID) ซึ่งระบุงานที่จะดำเนินการ ภารกิจสามารถเป็นเช่น “เซ็นเซอร์อุณหภูมิรายงาน 2” หรือ “ตั้งค่า Servo 3” ขึ้นอยู่กับงานระหว่างหนึ่งถึงแปดไบต์ของข้อมูลที่ติดตามด้วยการตรวจสอบสองไบต์ ทาสต้องรู้ว่างานใดที่จะตอบสนองและวิธีการตอบสนอง ดังนั้นหากส่ง “SET Servo 3 ตำแหน่ง” Servo 3 Slave จึงต้องฟังไบต์ถัดไปและตอบสนองต่อไป ทาสทั้งหมดที่ไม่ตอบสนองต่อคำสั่งสามารถเพิกเฉยต่อข้อมูลจนกว่าจะเป็นคำนำถัดไป

ในกรณีของ “เซ็นเซอร์อุณหภูมิรายงาน 2” ทาสที่มีเซ็นเซอร์อุณหภูมิส่งข้อมูลทันทีหลังจากได้รับคำสั่ง เนื่องจากความยาวไบต์เป็นที่รู้จักกันล่วงหน้าและเฉพาะเซ็นเซอร์ 2 ได้รับอนุญาตให้ตอบสนองต่องานนี้อาจารย์รู้ว่าจะฟังอย่างแน่นอนพูดสี่ไบต์ในปฏิกิริยาและรู้ว่าควรใช้เวลานานเท่าไหร่

ระบบการเลือกตั้งนี้มีส่วนหัวที่ส่งต้นแบบและทาสที่ส่งปฏิกิริยารับประกันว่าไม่มีอุปกรณ์ใดที่จะเข้าถึงรถบัสในเวลาเดียวกันดังนั้นหลินได้รับเพียงแค่มีเพียง RX / TX บรรทัดเดียว คำนำรวมถึงการซิงค์ไบต์ (0x55) ที่ช่วยให้ทาสล็อคไปยังนาฬิกาหลักดังนั้นทาสสามารถทำงานบนแหล่งสัญญาณนาฬิกา RC ที่ราคาถูกกว่าและการรับสัญญาณอัตโนมัติเป็นไปได้

เนื่องจากความยาวของข้อความเป็นที่รู้จักกันก่อนเวลาการกำหนดเวลาสำหรับรูทีนการสำรวจของอาจารย์สามารถเขียนลงในตาราง MASTER โพลเครือข่ายในช่วงเวลาที่กำหนดและหากทาสไม่ตอบสนองภายใน 1.4 เท่าของเวลาที่กำหนดสำหรับการทำธุรกรรมมันสันนิษฐานว่าจะหายไปในการดำเนินการ ไม่ว่าจะด้วยวิธีใดต้นแบบจะอยู่ในรายการถัดไปในตารางและจะไม่ลองทาสที่อาจมีการชำรุดจนกระทั่งเลี้ยวกลับมาอีกครั้ง สิ่งนี้รับประกันอัตราการอัปเดตที่รู้จักสำหรับอุปกรณ์ทั้งหมดซึ่งทำให้ชีวิตง่ายขึ้นสำหรับการเขียนโปรแกรมหลัก

นั่นคือพื้นฐาน อาจารย์ส่ง PIDs และชุดข้อมูลชุดดังต่อไปนี้ ทุกอย่างสบาย ๆ ของ UART โทรและตอบสนองดัดแปลงให้มากที่สุดเท่าที่จะเป็นไปได้ในการสร้างเครือข่ายขนาดเล็ก

ความพิเศษ

Gui Lin การกำหนดค่าแอพจาก VI ที่ให้คำแนะนำดีโอ
การรักษาเครือข่ายที่ง่ายต่อการกำหนดว่าอาจารย์และทาสทั้งหมดเห็นด้วยกับชุดคำสั่งและความยาวของปฏิกิริยาที่ถูกต้อง นั่นเป็นข้อมูลจำนวนมากที่จำเป็นสำหรับการทำงานของ Lin Cluster ในหลักการ การช่วยเหลือเรื่องที่ค่อนข้างมีรูปแบบทั่วไปสำหรับการจดสัญลักษณ์ทั้งหมดนี้ในสเป็คหลิน

นอกจากนี้ยังมี API แบบดั้งเดิมสำหรับ C ที่ทั้งไมโครคอนโทรลเลอร์ Master และ Slave สามารถใช้เพื่อสร้างพฤติกรรมการเข้ารหัสในคลัสเตอร์หลิน การรวมกันนี้ทำให้เวิร์กโฟลว์ทั่วไปสำหรับการระบุและใช้งาน LIN Busses – มีประโยชน์มากสำหรับผู้ผลิตรถยนต์และไม่ไร้ประโยชน์สำหรับแฮ็กเกอร์เช่นกัน

นอกจากนี้ยังมีสถานะการนอนหลับและพฤติกรรมที่กำหนดไว้สำหรับรถบัสด้วยการนอนหลับที่เกี่ยวข้องและสัญญาณปลุก ทาสทั้งหมดควรตอบสนองต่อสัญญาณการนอนหลับและพวกเขาใด ๆ ควรไปนอนหลับโดยอัตโนมัติหลังจากหมดเวลาสี่วินาทีหากพวกเขาไม่เคยได้ยินจากเจ้านาย โหนดใด ๆ ทาสหรือต้นแบบสามารถส่งคำสั่ง Wakeup และหลังจากนั้นอาจารย์ควรกลับไปที่ตารางการเลือกตั้งปกติ

หลินเวอร์ชัน 2.0 รวมจำนวนของเฟรมที่เป็นตัวเลือกที่ทำให้เครือข่ายมีความยืดหยุ่นมากขึ้น โดยเฉพาะอย่างยิ่ง “เฟรม Sporadic” ทำให้เกิดปฏิกิริยาของทาสหากไม่ได้รับข้อมูลใหม่ใด ๆ เพราะการอัพเดตล่าสุด “เหตุการณ์ที่เกิดขึ้นจากเฟรม” เป็นเหมือนเฟรม Sporadic ยกเว้นพวกเขาสามารถตอบสนองเพิ่มเติมโดยโหนดทาสใด ๆ ที่มีข้อมูลใหม่

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

อาจารย์สามารถมีหลายตารางเวลาและสลับท่ามกลางพวกเขา ทาสไม่สนใจ – พวกเขาเพียงแค่ฟังงานที่เกี่ยวข้องกับพวกเขาต่อไป ไม่มีเหตุผลที่อาจารย์ส่งข้อมูลตำแหน่งเซอร์โวทุกช่วงเวลาหากไม่เปลี่ยนแปลงตัวอย่างเช่นแม้ว่ามันจะทำให้สิ่งต่าง ๆ ง่ายขึ้น การโทรของคุณ

นอกจากนี้ยังมีสเป็คชั้นพกพาที่เป็นทางเลือกที่เข้ากันได้กับ Bus Can และทำให้ง่ายขึ้นในการรวมคลัสเตอร์ Lin Lin ในท้องถิ่นด้วยเครือข่ายที่ใหญ่กว่า ในระยะสั้นหลินมีความคิดอย่างถี่ถ้วนผ่านโปรโตคอล UART Bus ด้วยการยอมรับในอุตสาหกรรมที่ดี คุณจะพบแบบฝึกหัดที่ดีจากผู้จำหน่ายทุกคนของฮาร์ดตัวรับส่งสัญญาณ (นี่คือบทนำที่ยอดเยี่ยมจากตราสารแห่งชาติ)

ฮาร์ดแวร์ – ชั้นกายภาพ

Topping Out โปรโตคอลทั้งหมดนี้เป็นชิปรับส่งสัญญาณหลินที่หลากหลายตั้งแต่ 0.25 ถึง $ 0.50 สำหรับเครื่องรับส่งสัญญาณธรรมดาจนถึงรอบ Buck หรือสองสำหรับชิป “พื้นฐานของระบบ” ที่มีตัวควบคุมแรงดันไฟฟ้าแบบบูรณาการ สิ่งเหล่านี้เป็นไปอย่างยิ่งเนื่องจากตัวรับส่งสัญญาณสามารถดูแลตรรกะการนอนหลับ / ปลุกและเปิดแหล่งจ่ายไฟให้กับไมโครคอนโทรลเลอร์ของคุณเปิดและปิด สิ่งนี้ทำให้การบูรณาการโหนดทาสที่ทำงานที่ 3.3 โวลต์ที่ง่ายมาก

ชิปตัวน้อยซื้อคุณมาก
เนื่องจากรถบัสหลินได้รับการพัฒนาสำหรับยานยนต์โดยทั่วไปจะมีการสเปรย์ 12 V เพราะนั่นคือหลักสูตรผ่านเส้นเลือดของสายไฟของรถของคุณ ฮาร์ดแวร์รับส่งสัญญาณ LIN ต้องรองรับแรงดันไฟฟ้าที่สูงขึ้นเพราะระบบไฟฟ้ารถยนต์สามารถเป็นสภาพแวดล้อมที่แหลมคม พวกเขายังต้องรับมือกับการต่อสู้รถบัสเมื่อชิปตัวรับส่งสัญญาณอาจพยายามดึงหลินลงในขณะที่คนอื่นพยายามดึงขึ้นดังนั้นจึงมีการป้องกันความร้อนสูงเกินไป Lin Transceivers เป็นสัตว์น้อยที่แข็งแกร่ง

ในทางตรงกันข้ามกับสาย I2C ซึ่งดึงขึ้นด้วยตัวต้านทานด้วย Puny, Automotive Lin Bus ดึงได้ถึง 12 V ด้วยตัวต้านทาน 1 kω เพื่อดึงบรรทัดนี้ลงเร็วพอ Transceivers หลินจำเป็นต้องสามารถดำเนินการนับหมื่นล้านคนดังนั้นพวกเขาจึงมีทรานซิสเตอร์ (สำหรับ ICS) เล็กน้อย (สำหรับ ICs) ที่สร้างขึ้นการรวมกันของแรงดันไฟฟ้าสูงและกระแสสูงที่ค่อนข้างสูงหมายถึงยานยนต์สเปค Lin Bus ดีสำหรับ 40 เมตรมากกว่าคู่หูที่ I2C ให้คุณโดยไม่หันไปใช้ไดรเวอร์ หากคุณต้องการระยะทางหรือภูมิคุ้มกันเสียงหลินอยู่ที่นั่นเพื่อคุณ

แต่ไม่มีอะไรบังคับให้คุณใช้รถบัสของคุณที่ 12 V แม้แต่ตัวรับส่งสัญญาณ ตัวรับสัญญาณไมโครชิปที่ฉันเห็นวิ่งลงไปที่ 5.5 โวลต์ในขณะที่คนจาก NXP และ Melexis วิ่งลงที่ ARDUINO เข้ากันได้ 5 V

และไม่มีอะไรบังคับให้คุณใช้ตัวรับส่งสัญญาณเลย! คุณสามารถเชื่อมต่อทรานซิสเตอร์ PNP (หรือ P-channel MOSFET) ไปยังสายบัสและขับรถที่มี UART TX สุ่มตัวอย่างบัสด้วย RX Line นี่มีข้อเสียเปรียบของ Echo ท้องถิ่น แต่สามารถจัดการได้ในซอฟต์แวร์ หรือมีชิ้นส่วนมากขึ้นเพียงเล็กน้อยเท่านั้นมีบริการนี้ที่เราเคยเห็นมาก่อน ฉันไม่พบโครงการแฮ็กเกอร์ใด ๆ ที่ใช้ตัวรับส่งสัญญาณ LIN จาก Scratch แม้ว่า บางทีนั่นอาจเป็นเพราะคนอุตสาหกรรมราคาถูกมาก

จุดแข็งและจุดอ่อน

ไม่มีรถบัสเหมาะสำหรับทุกโอกาสและหลินก็ไม่มีข้อยกเว้น หลินไม่เร็วโดยเฉพาะอย่างยิ่งการพัฒนาประมาณ 19,200 Baud UarT. การอัปเดตมาไม่บ่อยนักจากมุมมองของไมโครคอนโทรลเลอร์ การทำธุรกรรมเต็มความยาวพร้อมหมดเวลาใช้เวลาประมาณสิบมิลลิวินาที หาก MASTER Polls อุปกรณ์สิบหกตัวนั้นเป็นอัตราการอัปเดตประมาณเจ็ด Hertz ที่แย่ที่สุด แน่นอนว่าอาจารย์ไม่จำเป็นต้องสำรวจทุกอุปกรณ์ทุกครั้งและหลายครั้งที่ข้อความจะมีความยาวครึ่งหนึ่ง แต่คุณจะไม่ได้รับมากกว่า 200 Hz ในทางกลับกันอัตราการอัปเดตคงที่เนื่องจากความสามารถในการดำเนินการหมดเวลาให้แน่นสำหรับอุปกรณ์ที่เป็นขุยซึ่งยอดเยี่ยมสำหรับความน่าเชื่อถือและความเรียบง่ายและมันก็ไม่ช้ากว่า I2C มากนัก

มีหลินสองรุ่นหลักที่คุณจะเห็นในป่า, 1.x และ 2.x นอกเหนือจากประเภทเฟรมเสริมที่กล่าวถึงข้างต้นแล้วทั้งสองรุ่นมีสูตรการตรวจสอบที่แตกต่างกัน – และหนึ่งใน 2.x เป็นสิ่งที่แปลกประหลาดจริงๆ – จำเป็นต้องใช้เครื่องคิดเลขบนเว็บเพื่อให้แน่ใจว่าคุณทำถูกต้อง แทนที่จะเป็น mod-256 พวกเขาลบ 255 จากค่าใด ๆ 256 หรือมากกว่า มันเหมือนกับการไหลล้น 8 บิตที่ล้อมรอบไปที่ 1 แทน 0 นี้ทำให้ฉันรู้สึกถึงคุณหรือไม่?

อุปกรณ์หลินไม่เป็นที่แพร่หลายนอกอุตสาหกรรมยานยนต์ในฐานะ I2C หรือ SPI โดยการยิงยาวดังนั้นคุณอาจไม่เคยถูกบังคับให้จัดการกับโปรโตคอล แต่ถ้าคุณต้องการสร้างเครือข่ายโมดูลที่ใช้ไมโครคอนโทรลเลอร์จำนวนน้อยอย่างง่ายดายและถูกที่สุดเท่าที่จะทำได้โดยใช้เพียงหนึ่งสาย (บวกพื้นดิน) มันยากที่จะคิดอะไรง่ายขึ้น การเขียนรหัส Slave I2C ไม่มีปิกนิกอย่างแน่นอน การเขียนโค้ดเพื่อฟังไบต์เฉพาะในบรรทัด UART แล้วตอบสนองไม่ได้ง่ายกว่านี้

ต้องการเปลี่ยนวานิลลาธรรมดาของคุณในรถบัสหรือไม่? ใช้หน้าหรือสองออกจากสมุดหลิน! คุณทำมาแล้ว? แสดงให้เราเห็น!

Leave a Reply

Your email address will not be published. Required fields are marked *