3.18. พื้นฐาน UART

UART (Universal Asynchronous Receiver-Transmitter) เป็นวิธีที่เก่าแก่และเรียบง่ายที่สุดในการส่งข้อมูลไบต์ระหว่างไมโครคอนโทรลเลอร์สองตัว หรือระหว่างไมโครคอนโทรลเลอร์กับคอมพิวเตอร์โฮสต์ สายสัญญาณสองเส้นรับหน้าที่ส่งข้อมูล -- เส้นละหนึ่งทิศทาง -- และสายกราวด์ร่วมทำหน้าที่อ้างอิงสัญญาณ ทั้งสองฝั่งไม่ใช้สัญญาณนาฬิการ่วมกัน แต่ตกลงกัน อัตราบอด ล่วงหน้า แล้วกู้คืนจังหวะบิตจากสายสัญญาณข้อมูลนั้นเอง

3.18.1. เฟรมข้อมูล

อักขระแต่ละตัวบนสายสัญญาณจะถูกห่อหุ้มด้วยเฟรม: บิตเริ่มต้น บิตข้อมูล บิตพาริตี (ถ้ามี) และบิตหยุดหนึ่งหรือสองบิต

A UART frame waveform. The signal sits idle high on the left, falls low for one bit time (the start bit), then carries eight data bits in sequence, then returns high for one bit time (the stop bit) before returning to idle.

หนึ่งเฟรม UART: บิตเริ่มต้น บิตข้อมูลแปดบิต และบิตหยุด แต่ละบิตกว้างหนึ่งช่วงเวลาบิต (1 / baudrate วินาที)

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

3.18.2. อัตราบอด

ช่วงเวลาบิต -- และความเร็วของลิงก์ -- ถูกกำหนดโดย อัตราบอด ซึ่งคือจำนวนบิตต่อวินาที ค่ามาตรฐานได้แก่ 9600, 19200, 38400, 57600, 115200, 230400, 460800 และ 921600 โดย 115200 เป็นค่าดีฟอลต์ที่ใช้กันมากที่สุด ทั้งสองฝั่งต้องตกลงกันในเรื่องอัตราบอดภายในค่าเบี่ยงเบนสักสองสามเปอร์เซ็นต์ มิฉะนั้นตัวรับจะสุ่มตัวอย่างบิตในจุดที่ผิด และข้อมูลจะกลายเป็นสัญญาณรบกวน

อัตราบอดที่สูงขึ้นส่งข้อมูลได้มากขึ้นต่อวินาที แต่ไวต่อความยาวสาย ความจุ และความแม่นยำของนาฬิกาที่แต่ละฝั่งมากกว่า สำหรับลิงก์สั้นระหว่างบอร์ดสองตัวบนโต๊ะเดียวกัน ใช้ 115200 ถึง 921600 ได้อย่างสบาย

3.18.3. การเดินสาย

ลิงก์ UART ใช้สายสัญญาณสามเส้น:

Two boards labelled A and B, connected by three wires. Board A's TX pin connects to board B's RX pin; board B's TX pin connects to board A's RX pin; and both boards' ground pins are tied together.

การเดินสาย UART: TX ของบอร์ดหนึ่งต่อไปยัง RX ของอีกบอร์ด และกราวด์ทั้งสองต่อถึงกัน

  • TX → RX ทั้งสองทิศทาง พินส่งข้อมูลของบอร์ดหนึ่งคือพินรับข้อมูลของอีกบอร์ด ข้อผิดพลาดที่มือใหม่มักทำคือต่อ TX → TX -- เอาต์พุตสองตัวขัดกันเอง โดยไม่มีข้อมูลที่ตัวรับฝั่งไหนเลย

  • กราวด์ร่วม ระดับสัญญาณอ้างอิงกราวด์ ดังนั้นบอร์ดทั้งสองต้องมีกราวด์ร่วม มิฉะนั้นตัวรับจะเห็นแรงดันไฟฟ้าที่ผิดพลาดบนสาย

3.18.4. ระดับแรงดันและชั้นฟิสิคัล

ระดับสัญญาณบนพิน UART ของกล้องเป็น 3.3 V CMOS: กราวด์สำหรับลอจิกศูนย์ และ 3.3 V สำหรับลอจิกหนึ่ง อุปกรณ์ใดก็ตามที่ใช้ UART 3.3 V CMOS -- ไมโครคอนโทรลเลอร์อื่น อะแดปเตอร์ USB-to-serial ที่ตั้งเป็น 3.3 V หรือโมดูล GPS 3.3 V -- สามารถต่อสายตรงได้

Note

อุปกรณ์ UART 5 V CMOS (ไมโครคอนโทรลเลอร์รุ่นเก่า โมดูล GPS บางรุ่น บอร์ดเซนเซอร์เก่าบางตัว) ใช้การกำหนดเฟรม UART เหมือนกันแต่ใช้ระดับลอจิก 5 V การต่อสายตรงกับกล้องนั้นไม่ปลอดภัย: TX 5 V ที่ขับพิน RX ของกล้องจะเกินแรงดันอินพุตสูงสุดสัมบูรณ์บนกล้องที่ไม่รองรับ 5 V และ TX 3.3 V ของกล้องอาจไม่ถึงค่าขีดแบ่งสูงของอุปกรณ์ 5 V สำหรับลอจิกหนึ่งที่สะอาด

การแปลแรงดันระหว่างสองระดับต้องใช้ active line driver -- IC เลื่อนระดับแบบสองทิศทางที่มีทรานซิสเตอร์ขับสัญญาณของตัวเองทั้งสองฝั่งของแต่ละสาย ตัวเลื่อนระดับแบบพาสซีฟที่ใช้ MOSFET และ pull-up จาก การแปลงระดับสัญญาณ ไม่เพียงพอที่นี่: ขอบขาขึ้นของพวกมันอาศัยการชาร์จสายผ่านตัวต้านทาน ซึ่งเหมาะสำหรับความเร็วสวิตช์แต่ช้าเกินไปสำหรับ UART ที่อัตราบอด 115200 แต่ละบิตใช้เวลาประมาณ 8 µs และการเลื่อนระดับแบบ RC ของตัวเลื่อนแบบพาสซีฟจะทำให้บิตหนึ่งยืดทับบิตถัดไป

Active line driver สร้างขอบสัญญาณที่คมชัดในทั้งสองทิศทางที่อัตรา UART เต็มรูปแบบ เลือกชิ้นส่วนที่รองรับอัตราบอดที่ลิงก์จะใช้งาน ต่อ TX และ RX ของกล้องกับฝั่ง 3.3 V ของตัวเลื่อนระดับ และต่อ TX และ RX ของอุปกรณ์ 5 V กับฝั่ง 5 V

ชั้นฟิสิคัลรุ่นเก่าสามแบบใช้การกำหนดเฟรมเหมือนกันแต่แรงดันต่างกัน และต้องใช้ตัวแปลงระดับระหว่างพวกมันกับไมโครคอนโทรลเลอร์ 3.3 V:

  • RS-232 ใช้กับพอร์ตซีเรียลบนคอมพิวเตอร์เดสก์ท็อปและอุปกรณ์อุตสาหกรรมบางอย่าง สายสัญญาณแกว่งระหว่างประมาณ ±5 V ถึง ±15 V โดย idle อยู่ที่ขั้วลบ ขั้วสัญญาณกลับกันและแรงดันสูงกว่า CMOS ชิปในตระกูล MAX232 / MAX3232 (หรือที่เทียบเท่า) ทำหน้าที่แปลงสัญญาณ

  • RS-422 มาตรฐานสัญญาณดิฟเฟอเรนเชียลสำหรับลิงก์แบบจุดต่อจุด (ไดรเวอร์หนึ่งตัว ตัวรับสูงสุดสิบตัว) ไดรเวอร์ส่งสัญญาณบนสายคู่สมดุล ตัวรับมองเห็น ความต่าง ระหว่างสายและไม่ไวต่อสัญญาณรบกวนโหมดร่วมตลอดทาง ลิงก์แบบ full-duplex ใช้สองคู่ -- คู่ละทิศทาง RS-422 ส่งสัญญาณได้ระยะหลายสิบเมตรถึงหนึ่งกิโลเมตรขึ้นอยู่กับอัตราบอด และชิป RS-422 transceiver อยู่ระหว่าง TX / RX ของกล้องกับสายคู่สมดุล

  • RS-485 เป็น multi-drop รุ่นน้องของ RS-422 -- ใช้สัญญาณดิฟเฟอเรนเชียลเหมือนกัน แต่ออกแบบมาให้รองรับไดรเวอร์และตัวรับรวมสูงสุด 32 ตัวบนบัสเดียว ลิงก์ส่วนใหญ่เป็น half-duplex บนสายคู่เดียว โดยไดรเวอร์และตัวรับของแต่ละโหนดใช้สายร่วมกัน และซอฟต์แวร์เป็นผู้ตัดสินว่าใครจะพูด ใช้ในระบบบัสอัตโนมัติอุตสาหกรรม (Modbus, DMX512, Profibus) ที่สายสัญญาณยาวและสภาพแวดล้อมมีสัญญาณรบกวน ชิป RS-485 transceiver อยู่ระหว่าง TX / RX ของกล้องกับสายคู่ดิฟเฟอเรนเชียล

ทั้งสองยังคงส่งเฟรม UART ที่ระดับบิตพื้นฐาน การตั้งค่า machine.UART ของกล้อง (อัตราบอด บิต พาริตี บิตหยุด) เหมือนกันโดยไม่คำนึงว่าชั้นฟิสิคัลใดรับส่งสัญญาณอยู่อีกฝั่งของ transceiver