SPI หรือ Serial Peripheral Interface เป็นหนึ่งใน โปรโตคอล (Protocol) การสื่อสารที่สำคัญสำหรับการเชื่อมต่ออุปกรณ์ต่าง ๆ เข้ากับไมโครคอนโทรลเลอร์ (MCU) เช่น เซนเซอร์, หน้าจอแสดงผล (Monitor) , หรือ หน่วยความจำภายนอก ด้วยความสามารถในการส่งข้อมูลได้อย่างรวดเร็ว และมีความเสถียร SPI จึงเป็นที่นิยมใช้งานในระบบที่ต้องการการส่งข้อมูลแบบความเร็วสูง ไม่ว่าจะเป็นในโปรเจกต์ Internet of Things (IoT) , ระบบอัตโนมัติ หรืออุปกรณ์อิเล็กทรอนิกส์อื่น ๆ
ในบทความนี้จะพาทุกคนไปรู้จักกับ SPI ตั้งแต่ความหมาย, หลักการทำงาน, ประเภท, ข้อดีข้อเสีย และการนำไปใช้งานจริง เพื่อให้ทุกคนเข้าใจ SPI ได้มากขึ้นกว่าเดิมตามมาอ่านกันเลย ...
SPI หรือ Serial Peripheral Interface เป็นโปรโตคอลการสื่อสารที่ใช้ในการแลกเปลี่ยนข้อมูลระหว่าง ไมโครคอนโทรลเลอร์ (MCU) , เซนเซอร์ และอุปกรณ์เสริมต่าง ๆ ซึ่งทำหน้าที่เหมือนภาษาที่อุปกรณ์ทั้งหมดสามารถเข้าใจร่วมกันได้ โดยพื้นฐานแล้ว SPI จะใช้สายสัญญาณ 4 เส้นในการสื่อสาร ได้แก่ MOSI (Master Out Slave In), MISO (Master In Slave Out), SCK (Serial Clock) และ SS (Slave Select) ซึ่งเปรียบเสมือนถนนที่ข้อมูลเดินทางไปมา
ภาพจาก : https://www.electronicwings.com/avr-atmega/atmega1632-spi
SPI มีจุดเด่นที่ความเร็ว และประสิทธิภาพสูง เนื่องจากไม่ต้องใช้โครงสร้างระบุที่ซับซ้อนเหมือนโปรโตคอลอื่น ๆ เช่น I2C ทำให้การสื่อสารระหว่างอุปกรณ์เป็นไปอย่างรวดเร็ว
SPI ใช้สายสัญญาณ 4 เส้นในการสื่อสาร ได้แก่ MOSI (Master Out Slave In), MISO (Master In Slave Out), SCK (Serial Clock), และ SS (Slave Select) โดยแต่ละสายก็มีหน้าที่ดังนี้
โดยการทำงานของ SPI มีขั้นตอนดังนี้
ภาพจาก : https://www.youtube.com/watch?v=0nVNwozXsIc
อุปกรณ์หลัก (Master) จะเริ่มการสื่อสารโดยการตั้งค่าพารามิเตอร์ต่าง ๆ เช่น ความเร็วของสัญญาณนาฬิกา, รูปแบบของข้อมูล และการเลือกขา Chip Select (CS) ที่ใช้ในการสื่อสาร
อุปกรณ์หลักจะเลือกอุปกรณ์รอง (Slave) ที่ต้องการสื่อสารด้วยการเปิดใช้งานขา Chip Select (SS) ที่เชื่อมต่อกับอุปกรณ์นั้น
อุปกรณ์หลักสร้างสัญญาณนาฬิกา (SCK) เพื่อกำหนดจังหวะการรับ-ส่งข้อมูลระหว่างตัวเอง และอุปกรณ์รองที่ถูกเลือก
อุปกรณ์หลักส่งข้อมูลแบบบิตต่อบิตผ่านสาย Master Out Slave In (MOSI) โดยข้อมูลแต่ละบิตจะถูกซิงโครไนซ์ (Synchronize) กับสัญญาณนาฬิกา
ขณะเดียวกัน อุปกรณ์รองจะรับข้อมูลผ่านสาย MOSI และสามารถส่งข้อมูลกลับไปยังอุปกรณ์หลักผ่านสาย Master In Slave Out (MISO) ได้พร้อมกัน
ทั้งอุปกรณ์หลัก และอุปกรณ์รองสามารถส่ง และรับข้อมูลในเวลาเดียวกัน (Full-Duplex) ทำให้การสื่อสารรวดเร็วและมีประสิทธิภาพ
เมื่อการแลกเปลี่ยนข้อมูลเสร็จสิ้น อุปกรณ์หลักจะยกเลิกการเลือกขา Chip Select เพื่อสิ้นสุดการสื่อสารกับอุปกรณ์รอง
ภาพจาก : https://iot-kmutnb.github.io/blogs/arduino/arduino-spi-master-slave/
การตั้งค่า SPI ประกอบด้วยหลายพารามิเตอร์ที่สามารถปรับเปลี่ยนได้ เพื่อให้สามารถควบคุมการทำงานของการสื่อสาร SPI ให้เหมาะสมกับการใช้งานที่ต้องการ
กำหนดสถานะของสัญญาณนาฬิกาเมื่อไม่ได้ใช้งาน โดยเลือกได้ว่าจะให้นาฬิกานิ่งอยู่ที่ระดับสูง (CPOL=1) หรือระดับต่ำ (CPOL=0) อุปกรณ์ทั้งสองต้องตั้งค่าให้ตรงกันเพื่อให้การสื่อสารเป็นไปอย่างราบรื่น
ระบุช่วงเวลาที่ข้อมูลจะถูกเก็บ และเลื่อนในแต่ละรอบของสัญญาณนาฬิกา โดยสามารถตั้งค่าให้เก็บข้อมูลที่ขอบแรก (CPHA=0) หรือขอบหลัง (CPHA=1) ของสัญญาณนาฬิกาได้
ภาพจาก : https://stackoverflow.com/questions/73699021/understanding-spi-cpol-and-cpha
กำหนดว่าจะส่งบิตที่สำคัญที่สุด (MSB) หรือบิตที่สำคัญน้อยที่สุด (LSB) ก่อน อุปกรณ์ที่สื่อสารกันต้องตั้งค่าให้ตรงกันเพื่อให้เข้าใจข้อมูลที่ส่งไปมาได้ถูกต้อง
ระบุอัตราความถี่ของสัญญาณนาฬิกาที่ใช้ในการสื่อสาร SPI โดยปกติจะวัดเป็นเฮิรตซ์ (Hz) สามารถปรับเปลี่ยนได้เพื่อให้ตรงกับข้อกำหนดเวลาในการสื่อสารของอุปกรณ์
กำหนดขนาด และรูปแบบของข้อมูลแต่ละเฟรมที่ส่งผ่าน SPI รวมถึงจำนวนบิตต่อเฟรม และการตั้งค่าเพิ่มเติมอื่น ๆ
SPI มีขาเลือกอุปกรณ์หลายขา เพื่อให้อุปกรณ์หลักเลือกอุปกรณ์รองสำหรับการสื่อสาร การตั้งค่านี้จะกำหนดวิธีการเปิด และปิดการใช้งานขาเลือกอุปกรณ์ในระหว่างการส่งข้อมูล
SPI รองรับการสื่อสารทั้งแบบ Full-Duplex (สามารถส่ง และรับข้อมูลพร้อมกัน) และ Half-Duplex (สลับระหว่างการส่ง และรับข้อมูล)
ภาพจาก : https://www.comms-express.com/infozone/article/half-full-Duplex/
SPI สามารถตั้งค่าให้มีระบบตรวจจับข้อผิดพลาด และซิงโครไนซ์สัญญาณนาฬิกาได้ เพื่อให้มั่นใจว่าการสื่อสารเป็นไปอย่างเสถียร โดยเฉพาะในสภาพแวดล้อมที่มีสัญญาณรบกวน หรือการสื่อสารระยะไกลจนเกินไป
ซึ่งการปรับแต่งการตั้งค่าเหล่านี้จะช่วยให้การสื่อสาร SPI ทำงานได้อย่างเหมาะสม ทั้งในด้านความเร็ว, การซิงโครไนซ์ และความเข้ากันได้กับทุกอุปกรณ์ที่เชื่อมต่ออยู่
ประเภทของ SPI มีหลายรูปแบบ โดยแต่ละประเภทมีความแตกต่าง และความสามารถเฉพาะตัว ซึ่งคุณสมบัติของแต่ละประเภทก็จะมีดังนี้
ประเภท | รายละเอียด |
Standard SPI | เป็นรูปแบบที่พบบ่อยที่สุด คือมีอุปกรณ์หลักเพียงตัวเดียวสื่อสารกับอุปกรณ์รองหลายตัว โดยใช้ขาเลือกอุปกรณ์แยกกัน ทำงานในโหมด Full-Duplex ซึ่งสามารถส่ง และรับข้อมูลพร้อมกันได้ |
Single SPI (SSI) | SSI มีอุปกรณ์หลักสื่อสารกับอุปกรณ์รองตัวเดียว โดยใช้ขาเลือกอุปกรณ์ร่วมกันทั้งหมด การกำหนดค่าฮาร์ดแวร์จึงง่ายขึ้น แต่จะสื่อสารกับอุปกรณ์รองได้ทีละตัวเท่านั้น |
Multi-master SPI | ในแบบ Multi-master จะมีอุปกรณ์หลักหลายตัวที่สามารถเริ่มการสื่อสารได้อย่างอิสระ ช่วยเพิ่มความซับซ้อนในการกำหนดค่าเครือข่าย แต่ต้องมีการประสานกันอย่างเหมาะสมเพื่อหลีกเลี่ยงการชนกันของข้อมูล |
Daisy Chain SPI | Daisy Chain เชื่อมต่ออุปกรณ์รองหลายตัวเป็นสายโซ่ ข้อมูลจะถูกส่งผ่านอุปกรณ์แต่ละตัวไปตามลำดับ วิธีนี้ลดจำนวนขาเลือกอุปกรณ์ที่ต้องใช้ แต่มีโอกาสเกิดความล่าช้าขณะที่ข้อมูลเดินทางผ่านทุกอุปกรณ์ในโซ่ |
Quad SPI (QSPI) | QSPI เพิ่มความเร็วในการส่งข้อมูลโดยใช้สายข้อมูล 4 เส้น ทำให้การสื่อสารเร็วขึ้น เหมาะสำหรับงานที่ต้องการความเร็วสูง เช่น หน่วยความจำแฟลช หรือจอแสดงผล |
SPI Bus | SPI Bus ใช้สายข้อมูลร่วมกัน ทำให้อุปกรณ์หลัก และรองหลายตัวสามารถสื่อสารกันได้ภายในชุดเดียว มีการใช้สัญญาณควบคุมเพิ่มเติมเพื่อจัดลำดับการสื่อสาร |
Enhanced SPI (eSPI) | eSPI เป็น SPI รุ่นปรับปรุงที่มีฟีเจอร์พิเศษ เช่น อัตราการส่งข้อมูลที่สูงขึ้น, การขยายพื้นที่แอดเดรส และฟังก์ชันการจัดการระบบ และความปลอดภัย เหมาะสำหรับระบบฝังตัว, เซิร์ฟเวอร์, และอุปกรณ์เครือข่าย |
ภาพจาก : https://www.pinterest.com/pin/716635359437447462/
ภาพจาก : https://embeddedwala.com/Blogs/DigitalCommunication/spi-vs-i2c
SPI (Serial Peripheral Interface) และ I2C (Inter-Integrated Circuit) เป็นโปรโตคอลการสื่อสารแบบอนุกรมที่นิยมในระบบฝังตัว โดยมีจุดเด่น และข้อจำกัดต่างกัน SPI มีความเร็วในการสื่อสารสูงกว่าหลาย MHz ซึ่งเหมาะกับงานที่ต้องการการส่งข้อมูลปริมาณมาก หรือความเร็วสูง เช่น จอแสดงผล และหน่วยความจำ แต่ต้องใช้สายสัญญาณ 4 เส้น และแต่ละอุปกรณ์รองต้องมีสาย SS แยกกัน ทำให้การเชื่อมต่ออุปกรณ์หลายตัวค่อนข้างยุ่งยาก
ในขณะที่ I2C ใช้สายเพียง 2 เส้น (SDA และ SCL) ทำให้สามารถเชื่อมต่ออุปกรณ์หลายตัวได้ง่ายกว่า โดยใช้การระบุที่อยู่ (Address) แทนการใช้ขา SS แยก แต่ความเร็วจะต่ำกว่าที่เพราะมีอัลกอริทึมที่ซับซ้อนกว่า นอกจากนี้ SPI รองรับโหมดการสื่อสารแบบ Full-Duplex ที่สามารถส่ง และรับข้อมูลพร้อมกัน ในขณะที่ I2C ทำงานแบบ Half-Duplex ส่ง และรับข้อมูลสลับกัน จึงเหมาะกับงานที่ไม่ต้องการความเร็วสูงมาก เช่น การเชื่อมต่อเซนเซอร์ หรือโมดูลอุปกรณ์ทั่วไป
SPI ถูกใช้อย่างแพร่หลายในระบบอิเล็กทรอนิกส์ที่ต้องการการสื่อสารที่มีประสิทธิภาพ และความเร็วสูง ตัวอย่างการใช้งานที่พบบ่อยก็จะมีดังนี้
SPI ใช้ในระบบควบคุมอุตสาหกรรมสำหรับ การสื่อสารระหว่างตัวควบคุมลอจิกแบบโปรแกรมได้ (PLC), เซนเซอร์ และอุปกรณ์ควบคุมอื่น ๆ เพื่อใช้ในการควบคุมกระบวนการในโรงงาน
SPI ใช้ในระบบอิเล็กทรอนิกส์ในรถยนต์เพื่อสื่อสารระหว่างไมโครคอนโทรลเลอร์, เซนเซอร์ และหน่วยควบคุมอิเล็กทรอนิกส์ (ECU) ทำให้เกิดฟังก์ชันต่าง ๆ เช่น ควบคุมเครื่องยนต์, การวินิจฉัยอาการรถยนต์, และระบบความบันเทิงบนรถ
ภาพจาก : https://www.makerguides.com/master-slave-spi-communication-arduino/
SPI เป็นที่นิยมใช้ในระบบสมองกลฝังตัว เพื่อสื่อสารระหว่างไมโครคอนโทรลเลอร์ และอุปกรณ์เสริมต่าง ๆ เพราะความง่าย, ประสิทธิภาพ และความยืดหยุ่นทำให้มันเป็นที่นิยมนั่นเอง
ภาพจาก : https://www.makerguides.com/master-slave-spi-communication-arduino/
SPI เป็นโปรโตคอลการสื่อสารแบบอนุกรมที่สำคัญต่อการเชื่อมต่อไมโครคอนโทรลเลอร์กับอุปกรณ์เสริมต่าง ๆ ด้วยความสามารถในการสื่อสารที่รวดเร็ว และมีประสิทธิภาพ ทำให้ SPI เหมาะกับการใช้งานที่ต้องการการส่งข้อมูลความเร็วสูง การใช้ SPI ก็มีข้อสังเกตบางประการ เช่น การจัดการสัญญาณ Chip Select ที่ซับซ้อนในกรณีที่มีอุปกรณ์หลายตัว และข้อจำกัดในเรื่องความยาวสายสัญญาณที่ใช้ในการสื่อสาร
แต่ด้วยความยืดหยุ่นในการตั้งค่า และการใช้งาน ทำให้ SPI เป็นโปรโตคอลที่ได้รับความนิยม และมีประสิทธิภาพในการใช้งาน ช่วยให้ไมโครคอนโทรลเลอร์สื่อสารกับอุปกรณ์อิเล็กทรอนิกส์ต่าง ๆ ได้เป็นอย่างดีเลยทีเดียว
|