ไทย

สำรวจ UART และ SPI โปรโตคอลการสื่อสารแบบอนุกรมที่จำเป็น ทำความเข้าใจหลักการ ความแตกต่าง การใช้งาน ข้อดีและข้อเสีย

การสื่อสารแบบอนุกรมที่ถูกเปิดเผย: เจาะลึก UART และ SPI

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

ทำความเข้าใจเกี่ยวกับการสื่อสารแบบอนุกรม

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

การสื่อสารแบบอะซิงโครนัสเทียบกับการสื่อสารแบบซิงโครนัส

การสื่อสารแบบอนุกรมสามารถจัดกลุ่มได้เป็นสองประเภทกว้างๆ ได้แก่ อะซิงโครนัสและซิงโครนัส การสื่อสารแบบอะซิงโครนัส เช่น UART ไม่ต้องการสัญญาณนาฬิการ่วมกันระหว่างผู้ส่งและผู้รับ แต่ใช้อักขระเริ่มต้นและหยุดเพื่อกำหนดเฟรมข้อมูลแต่ละไบต์ การสื่อสารแบบซิงโครนัส เช่น SPI และ I2C ใช้สัญญาณนาฬิการ่วมกันเพื่อซิงโครไนซ์การส่งข้อมูลระหว่างอุปกรณ์

UART: Universal Asynchronous Receiver/Transmitter

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

หลักการของ UART

การสื่อสาร UART เกี่ยวข้องกับการส่งข้อมูลในเฟรม โดยแต่ละเฟรมประกอบด้วยสิ่งต่อไปนี้:

ผู้ส่งและผู้รับต้องตกลงเกี่ยวกับอัตราการส่งข้อมูล บิตข้อมูล พาริตี และบิตหยุดสำหรับการสื่อสารที่ประสบความสำเร็จ อัตราการส่งข้อมูลทั่วไป ได้แก่ 9600, 115200 และอื่นๆ อัตราการส่งข้อมูลที่สูงขึ้นช่วยให้สามารถส่งข้อมูลได้เร็วขึ้น แต่ยังเพิ่มความไวต่อข้อผิดพลาดในการจับเวลาด้วย

การใช้งาน UART

ข้อดีของ UART

ข้อเสียของ UART

ตัวอย่าง UART: Arduino และ Serial Monitor

ตัวอย่างทั่วไปของการทำงานของ UART คือการใช้ Serial Monitor ใน Arduino IDE บอร์ด Arduino มีอินเทอร์เฟซ UART ในตัวที่ช่วยให้สามารถสื่อสารกับคอมพิวเตอร์ผ่าน USB ได้ ส่วนย่อยโค้ด Arduino ต่อไปนี้แสดงให้เห็นการส่งข้อมูลไปยัง Serial Monitor:

void setup() {
  Serial.begin(9600); // เริ่มต้นการสื่อสารแบบอนุกรมที่ 9600 baud
}

void loop() {
  Serial.println("Hello, world!"); // ส่งข้อความ "Hello, world!" ไปยัง Serial Monitor
  delay(1000); // รอ 1 วินาที
}

โค้ดง่ายๆ นี้จะส่งข้อความ "Hello, world!" ไปยัง Serial Monitor ทุกวินาที ฟังก์ชัน Serial.begin(9600) จะเริ่มต้นอินเทอร์เฟซ UART ที่อัตราการส่งข้อมูล 9600 ซึ่งต้องตรงกับการตั้งค่าใน Serial Monitor

SPI: Serial Peripheral Interface

SPI (Serial Peripheral Interface) เป็นโปรโตคอลการสื่อสารแบบอนุกรมแบบซิงโครนัสที่ใช้กันทั่วไปสำหรับการสื่อสารระยะสั้นระหว่างไมโครคอนโทรลเลอร์และอุปกรณ์ต่อพ่วง เป็นที่รู้จักกันในเรื่องความเร็วสูงและความต้องการฮาร์ดแวร์ที่ค่อนข้างง่าย

หลักการของ SPI

SPI ใช้สถาปัตยกรรมแบบ master-slave โดยที่อุปกรณ์หนึ่ง (master) ควบคุมการสื่อสารและอุปกรณ์หนึ่งเครื่องขึ้นไป (slaves) ตอบสนองต่อคำสั่งของ master บัส SPI ประกอบด้วยสัญญาณหลักสี่สัญญาณ:

ข้อมูลจะถูกส่งในลักษณะซิงโครนัสด้วยสัญญาณนาฬิกา master จะเริ่มต้นการสื่อสารโดยดึงสาย SS/CS ของ slave ที่ต้องการให้ต่ำ ข้อมูลจะถูกเลื่อนออกจาก master บนสาย MOSI และเข้าไปใน slave ที่ขอบขึ้นหรือลงของสัญญาณ SCK พร้อมกัน ข้อมูลจะถูกเลื่อนออกจาก slave บนสาย MISO และเข้าไปใน master ซึ่งช่วยให้สามารถสื่อสารแบบดูเพล็กซ์เต็มรูปแบบได้ หมายความว่าสามารถส่งข้อมูลได้ทั้งสองทิศทางพร้อมกัน

โหมด SPI

SPI มีโหมดการทำงานสี่โหมด ซึ่งกำหนดโดยพารามิเตอร์สองตัว ได้แก่ Clock Polarity (CPOL) และ Clock Phase (CPHA) พารามิเตอร์เหล่านี้กำหนดสถานะของสัญญาณ SCK เมื่อไม่ได้ใช้งานและขอบของสัญญาณ SCK ที่ข้อมูลถูกสุ่มตัวอย่างและเลื่อน

อุปกรณ์ master และ slave ต้องได้รับการกำหนดค่าให้ใช้โหมด SPI เดียวกันสำหรับการสื่อสารที่ประสบความสำเร็จ หากไม่เป็นเช่นนั้น ข้อมูลจะยุ่งเหยิงหรือการสื่อสารล้มเหลว

การใช้งาน SPI

ข้อดีของ SPI

ข้อเสียของ SPI

ตัวอย่าง SPI: การเชื่อมต่อกับเครื่องวัดความเร่ง

เครื่องวัดความเร่งจำนวนมาก เช่น ADXL345 ยอดนิยม ใช้ SPI สำหรับการสื่อสาร ในการอ่านข้อมูลความเร่งจาก ADXL345 ไมโครคอนโทรลเลอร์ (ทำหน้าที่เป็น master) จำเป็นต้องส่งคำสั่งไปยังเครื่องวัดความเร่ง (ทำหน้าที่เป็น slave) เพื่ออ่านรีจิสเตอร์ที่เหมาะสม pseudocode ต่อไปนี้แสดงให้เห็นกระบวนการ:

  1. เลือก ADXL345 โดยดึงสาย SS/CS ให้ต่ำ
  2. ส่งที่อยู่รีจิสเตอร์ที่จะอ่าน (เช่น ที่อยู่ของข้อมูลความเร่งแกน X)
  3. อ่านข้อมูลจากสาย MISO (ค่าความเร่งแกน X)
  4. ทำซ้ำขั้นตอนที่ 2 และ 3 สำหรับแกน Y และ Z
  5. ยกเลิกการเลือก ADXL345 โดยดึงสาย SS/CS ให้สูง

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

UART เทียบกับ SPI: การเปรียบเทียบ

ตารางต่อไปนี้สรุปความแตกต่างที่สำคัญระหว่าง UART และ SPI:

คุณสมบัติ UART SPI
ประเภทการสื่อสาร อะซิงโครนัส ซิงโครนัส
สัญญาณนาฬิกา ไม่มี นาฬิการ่วมกัน
จำนวนสายไฟ 2 (TX, RX) 4 (MOSI, MISO, SCK, SS/CS) + 1 SS/CS ต่อ slave
อัตราข้อมูล ต่ำกว่า สูงกว่า
ดูเพล็กซ์เต็มรูปแบบ โดยทั่วไป Half-Duplex (แม้ว่าจะสามารถจำลองดูเพล็กซ์เต็มรูปแบบด้วยซอฟต์แวร์ที่ซับซ้อน) ดูเพล็กซ์เต็มรูปแบบ
การตรวจจับข้อผิดพลาด บิตพาริตี (ไม่บังคับ) ไม่มี (ต้องใช้การนำไปใช้ซอฟต์แวร์)
จำนวนอุปกรณ์ 2 (แบบจุดต่อจุด) หลาย (Master-Slave)
ความซับซ้อน ง่ายกว่า ซับซ้อนกว่า
ระยะทาง ยาวกว่า สั้นกว่า

การเลือกโปรโตคอลที่เหมาะสม

การเลือกระหว่าง UART และ SPI ขึ้นอยู่กับข้อกำหนดเฉพาะของการใช้งาน พิจารณาปัจจัยต่อไปนี้:

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

ข้อควรพิจารณาขั้นสูง

I2C (Inter-Integrated Circuit)

แม้ว่าบทความนี้จะเน้นไปที่ UART และ SPI แต่สิ่งสำคัญคือต้องกล่าวถึง I2C (Inter-Integrated Circuit) เป็นอีกหนึ่งโปรโตคอลการสื่อสารแบบอนุกรมทั่วไป I2C เป็นโปรโตคอลแบบสองสายที่รองรับอุปกรณ์ master และ slave หลายเครื่องบนบัสเดียวกัน มักใช้สำหรับการสื่อสารระหว่างวงจรรวมบนแผงวงจร I2C ใช้การกำหนดที่อยู่ ซึ่งแตกต่างจาก SPI ทำให้เครือข่ายอุปกรณ์ขนาดใหญ่เรียบง่าย

TTL เทียบกับ RS-232

เมื่อทำงานกับ UART สิ่งสำคัญคือต้องเข้าใจความแตกต่างระหว่างระดับแรงดันไฟฟ้า TTL (Transistor-Transistor Logic) และ RS-232 ลอจิก TTL ใช้ 0V และ 5V (หรือ 3.3V) เพื่อแสดงถึงลอจิกต่ำและสูงตามลำดับ RS-232 ในทางกลับกัน ใช้แรงดันไฟฟ้า ±12V การเชื่อมต่อ UART TTL กับ UART RS-232 โดยตรงอาจทำให้อุปกรณ์เสียหาย ต้องใช้ตัวเปลี่ยนระดับ (เช่น ชิป MAX232) เพื่อแปลงระหว่างระดับแรงดันไฟฟ้า TTL และ RS-232

การจัดการข้อผิดพลาด

เนื่องจาก UART และ SPI มีกลไกการตรวจจับข้อผิดพลาดที่จำกัด จึงเป็นสิ่งสำคัญที่จะต้องนำการจัดการข้อผิดพลาดไปใช้ในซอฟต์แวร์ เทคนิคทั่วไป ได้แก่ checksums, cyclic redundancy checks (CRCs) และกลไกหมดเวลา

บทสรุป

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