SPI
นายจักรี ขอร่ม เลขที่ 2 กลุ่ม 1
24 กุมภาพันธ์ 2564
การสื่อสารอนุกรมแบบ SPI
SPI ย่อมาจาก Serial Peripheral Interface คือรูปของแบบการสื่อสารข้อมูลแบบอนุกรมแบบซิงโครนัสรูปแบบหนึ่ง ถูกพัฒนาขึ้นมาโดยโมโตโรล่าในกลางปี ค.ศ. 1980 เพื่อใช้ในการการสื่อสารระยะใกล้โดยเฉพาะในระบบสมองกลฝังตัว การสื่อสารอนุกรมแบบ SPI จะอาศัยสัญญาณนาฬิกาเป็นตัวกำหนดจังหวะการรับส่งข้อมูล สามารถส่งข้อมูลไปยังปลายทางและรับข้อมูลจากปลายทางกลับมาในครั้งเดียวกัน (Full Duplex) การสื่อสารอนุกรมแบบ SPI จะแบ่งอุปกรณ์ออกเป็น 2 ฝั่ง คือ Master เป็นตัวควบคุมการรับส่งข้อมูล และ Slave เป็นอุปกรณ์ที่รอรับคำสั่งจาก Master ในบัสการสื่อสารแบบอนุกรมแบบ SPI สามารถมี Slave มีได้มากกว่า 1 ตัว
การสื่อสารอนุกรมแบบ SPI ใช้สายสัญญาณทั้งหมดจำนวน 4 เส้น มีรายละเอียดดังนี้
– SCK (Clock Data) ใช้สำหรับส่งสัญญาณนาฬิกาจาก Master ไปยัง Slave Shared
– MISO (Master In Slave Out) ใช้สำหรับรับข้อมูลจาก Slave Shared
– MOSI (Master Out Slave In) ใช้สำหรับส่งข้อมูลจาก Master ไปยัง Slave Shared
– SS/CS (Slave Select/Chip Select) ใช้สำหรับเลือก Slave ที่ต้องการใช้งาน Not Shared
สำหรับอุปกรณ์ที่ใช้การสื่อสารอนุกรมแบบ SPI บางชนิดอาจมีชื่อเรียกแตกต่างกันไป ตัวอย่างเช่น
– Serial Clock
* SCLK : SCK
– Master Output Slave Input
* SIMO, MTSR
* SDI, DI, DIN, SI – on Slave devices
* SDO, DO, DOUT,SO – on Master devices
– Master Input Slave Output
* SOMI, MRST
* SDO, DO, DOUT, SO – on Slave devices
* SDI, DI, DIN, SI – on Master devices
– Slave Select
* SS, S̅S̅, SSEL, CS, C̅S̅, CE, nSS, /SS, SS#
จากรูป การเชื่อมต่อระบบด้วยการสื่อสารอนุกรมแบบ SPI แบบหลาย Slave และ การเชื่อมต่อระบบด้วยการสื่อสารอนุกรมแบบ SPI แบบหลาย Slave จะประกอบไปด้วย 2 ส่วนคือ 1. อุปกรณ์หลัก (Master) และ 2.อุปกรณ์ย่อย (Slave) ในระบบการสื่อสารอนุกรมแบบ SPI สามารถต่ออุปกรณ์ Slave ได้หลายอุปกรณ์ ภายในการสื่อสารอนุกรมแบบ SPI จะใช้สายสัญญาณ SCK MOSI และ MISO ร่วมกันแต่จะไม่ใช้สายสัญญาณ S̅S̅ ร่วมกัน เวลาที่ Master ต้องการสื่อสารกับ Slave จะส่งสัญญาณลอจิก LOW ไปยัง Slave ที่ต้องการสื่อสารเพื่อบ่งบอกว่าต้องการสื่อสารกับ Slave ตัวนั้น ทำให้สามารถเลือกสื่อสารกับ Slave ได้ถูกต้อง
รูปแบบสัญญาณใน SPI BUS
รูปแบบสัญญาณ SPI มี 4 รูปแบบ แตกต่างกันที่ขอบสัญญาณนาฬิกา (Clock Polarity) และเฟส (Phase)
– เมื่อ CPHA=0 และ CPOL=0 สัญญาณนาฬิกา (Clock) ในสถานะปกติจะเป็น Low และจะรับ-ส่งข้อมูลที่ขอบขาขึ้นของสัญญาณนาฬิกา (Rising Edge Clock)
– เมื่อ CPHA=0 และ CPOL=1 สัญญาณนาฬิกา (Clock) ในสถานะปกติจะเป็น High และจะรับ-ส่งข้อมูลที่ขอบขาลงของสัญญาณนาฬิกา (Falling Edge Clock)
– เมื่อ CPHA=1 และ CPOL=0 สัญญาณนาฬิกา (Clock) ในสถานะปกติจะเป็น Low และจะรับ-ส่งข้อมูลที่ขอบขาลงของสัญญาณนาฬิกา (Falling Edge Clock)
– เมื่อ CPHA=1 และ CPOL=1 สัญญาณนาฬิกา (Clock) ในสถานะปกติจะเป็น High และจะรับ-ส่งข้อมูลที่ขอบขาขึ้นของสัญญาณนาฬิกา (Rising Edge Clock)
ดังนั้น Mode ของ SPI มี 4 โหมด ดังรูป โหมดของการสื่อสารอนุกรมแบบ SPI
สำหรับพอร์ทการสื่อสารอนุกรมแบบ SPI ของบอร์ด ESPino32 จะมีทั้งหมด 4 ชุด คือ SPI0, SPI1, HSPI และ VSPI สามารถกำหนดความเร็วของพอร์ทการสื่อสารอนุกรมแบบ SPI ได้สูงสุด 80 MHz (ขึ้นอยู่กับพอร์ทที่ใช้งาน แนะนำใช้งานไม่เกิน 40 MHz) ซึ่งพอร์ต SPI0 และ SPI1 จะต่ออยู่กับหน่วยความจำไม่สามารถใช้งานได้ จึงเหลือ HSPI และ VSPI ที่สามารถใช้งานได้อย่างอิสระ มีตำแหน่งดังนี้
* ในกรณีที่ต่อ Slave Device มากกว่า 1 ตัว สามารถกำหนดขา GPIO ขาอื่นๆของบอร์ด ESPino32 มาแทนได้
สามารถดูตำแหน่งพอร์ทการสื่อสารแบบอนุกรมแบบ SPI ของบอร์ด ESPino32 เพิ่มเติมได้จากแถบสีเทาอ่อน(HSPI) และแถบสีส้ม(VSPI) ในรูป ESPino32 Pinout
การใช้งานการสื่อสารอนุกรมแบบ SPI
สำหรับการใช้งานการสื่อสารอนุกรมแบบ SPI จะไม่มีรูปแบบการสื่อสารที่เป็นมาตรฐาน จำเป็นต้องใช้รูปแบบของข้อมูลตามเอกสารของอุปกรณ์ที่ต้องการจะใช้งานร่วมกัน
ตัวอย่างการส่งข้อมูลแบบ SPI
การส่งข้อมูลแบบ SPI จำเป็นต้องมีสัญญาณนาฬิกา(SCK) จากไมโครคอนโทรเลอร์ และสายสัญญาณข้อมูลในการสื่อสาร ยกตัวอย่าง เช่น ให้ไมโครคอนโทรเลอร์ส่งอักษร ‘H’ (B01001000) ออกไปผ่านช่องทางการสื่อสารอนุกรมแบบ SPI จะต้องใช้สายสัญญาณนาฬิกาที่คอยควบคุมจังหวะการรับส่งข้อมูล (ตัวอย่างนี้ใช้ SPI Mode 0) จะมีสัญญาณที่สายต่างๆ ดังรูป ตัวอย่างการส่งอักษร ‘H’ แบบ SPI
ตัวอย่างการส่ง-รับข้อมูลแบบ SPI
การส่ง-รับข้อมูลแบบ SPI จะยังมีลักษณะเดียวกันกับการส่งข้อมูลแบบ SPI จะมีเอาต์พุตตอบกลับมาในสัญญาณนาฬิกาชุดถัดไป ยกตัวอย่าง เช่น ให้ไมโครคอนโทรเลอร์ส่งอักษร ‘H’ (B01001000) ออกไปผ่านช่องทางการสื่อสารอนุกรมแบบ SPI และรับข้อมูลตัวอักษร ‘H’ กลับมา จะมีสัญญาณที่สายต่างๆ ดังรูป ตัวอย่างการส่งอักษร ‘H’ และรับข้อมูลอักษร ‘H’ ด้วยการสื่อสารอนุกรมแบบ SPI
สำหรับการพัฒนาโปรแกรมการสื่อสารอนุกรมแบบ SPI บนแพลตฟอร์ม Arduino จะใช้งานผ่านไลบรารี่ SPI ที่ถูกติดตั้งมาบนโปรแกรม Arduino IDE เรียบร้อยแล้ว เมื่อผู้ใช้ต้องการพัฒนาโปรแกรมบนโปรแกรม Arduino IDE จึงสามารถเรียกใช้งานผ่านการ #include <SPI.h>
ฟังก์ชันการใช้งานการสื่อสารอนุกรมแบบ SPI ด้วยไลบรารี่ SPI
– SPISettings ฟังก์ชันสำหรับกำหนดพารามิเตอร์ของการสื่อสารอนุกรมแบบ SPI ใช้งานร่วมกับฟังก์ชัน SPI.beginTransmission()
– SPI.begin() ฟังก์ชันสำหรับเริ่มต้นใช้งาน SPI เริ่มต้นบัส SPI โดยกำหนดให้ ขา SCK, MOSI และ SS เป็นเอาต์พุต และ MISO เป็นอินพุต
– SPI.beginTransaction() ฟังก์ชันสำหรับเริ่มต้นใช้งาน SPI โดยใช้พารามิเตอร์จากฟังก์ชัน SPISettings ที่กำหนดไว้
– SPI.endTransmission() ฟังก์ชันสำหรับสิ้นสุดการใช้งานการสื่อสารอนุกรมแบบ SPI
– SPI. transfer() ฟังก์ชันสำหรับรับส่งข้อมูลแบบ SPI
– SPI. setBitOrder() ฟังก์ชันการลำดับข้อมูลมี 2 แบบให้เลือกคือ LSB และ MSB
ตัวอย่างการสื่อสารอนุกรมแบบ SPI กับไอซี MCP3008 Analog to Digital Converter
สำหรับตัวอย่างการสื่อสารอนุกรมแบบ SPI กับไอซี MCP3008 Analog to Digital Converter เป็นตัวอย่างเริ่มต้นการใช้งานการสื่อสารอนุกรมแบบ SPI ที่ทางทีมงานคิดว่าง่ายและเหมาะสำหรับผู้เริ่มใช้งานมากที่สุด โดยตัวอย่างนี้จะใช้บอร์ด ESPino32 ต่อเข้ากับไอซี MCP3008 10-bit Analog to Digital Converter ผ่านช่องทางการสื่อสารอนุกรมแบบ SPI แล้วทำการอ่านค่า Analog จากขาแอนะล็อกจากขาของไอซี MCP3008
จากเอกสารรายละเอียดของไอซี MCP3008 Analog to Digital Converter ต้องใช้ไมโครคอนโทรเลอร์ส่งชุดข้อมูลผ่านช่องทางการสื่อสารอนุกรมแบบ SPI (ขา MOSI) ไปยังตัวไอซี MCP3008 โดยชุดข้อมูลที่ต้องส่งไปมี 3 ชุด คือ ดังภาพ ชุดข้อมูลการสื่อสารของไอซี MCP3008
โดยสิ่งที่ต้องพิจารณาคือ Control Bit เพราะชุดข้อมูลนี้จะเลือกโหมดของ Analog to Digital Converter และเลือกขาที่ใช้งานในการอ่านค่า ADC ตามตาราง Control Bit
ตัวอย่างเช่นเลือกใช้ ADC ขา CH0 ในโหมด Single จะต้องส่งชุดข้อมูลของ Control Bit ไป ดังรูป เลือกใช้งาน ADC ch0 ในโหม Single
หลังจากที่ส่งชุดคำสั่งไปแล้วจะมีข้อมูลตอบกลับมาทางขา MISO เป็นข้อมูล 10 Bit ดังรูป เอาต์พุตจากไอซี MCP3008
จากนั้นนำชุดข้อมูลที่ได้ มาคำนวณเป็นตัวค่าแอนะล็อกได้ ดังรูป DIGITAL OUTPUT CODE CALCULATION
ความคิดเห็น
แสดงความคิดเห็น