หน้าแรก
วิธีการสั่งซื้อสินค้า
แจ้งชำระเงิน
บทความ
เว็บบอร์ด
เกี่ยวกับเรา
ติดต่อเรา
หน้าแรก
>
บทความ
>
การสื่อสารแบบ SPI
ค้นหาบทความที่นี่
บทความทั้งหมด
การสื่อสารแบบ SPI
5 ปีที่ผ่านมา
โดย
เจ้าของร้าน
Publish : 20 March 2020
หนึ่งในการสื่อสารระหว่าง Arduino กับเซ็นเซอร์หรืออุปกรณ์ต่าง ๆ ก็คงเป็น SPI ย่อมาจาก Serial Peripheral Interface เป็นการสื่อสารในระยะสั้น ๆ (ระยะทางของสายเชื่อมต่อไม่เกิน 10 ฟุต = ประมาณ 3 เมตร : อ้างอิง
ข้อมูลใน forum ของ microchip
) ซึ่งถูกพัฒนาโดย Motorola ในช่วงกลางยุค 80 เป็นการสื่อสารในรูปแบบ Full-Duplex โดยใช้ Master - Slave โดยมี Master ได้เพียงตัวเดียวเท่านั้น โดย Master นั้นจะเป็นตัวหลักในการรับส่งข้อมูลต่าง ๆ ซึ่งสัญญาณที่ถูกส่งจาก Master นั้นจะวิ่งไปหาอุปกรณ์ Slave ทุกตัว การจะให้ Slave ตัวใดทำงานตามคำสั่งนั้นจะถูกเลือกด้วยสัญญาณของสาย Slave-Select (SS) หรืออีกชื่่อคือ Chip-Select (CS)
สำหรับสายสัญญาณที่ใช้โดยปกติจะมี 4 เส้น คือ
SCK - Serial Clock
คือสัญญาณนาฬิกาที่ถูกส่งออกจาก Master เพื่อเป็นสัญญาณอ้างอิงในการทำงาน
MOSI - Master Out Slave In
คือสัญญาณข้อมูลที่ถูกส่งออกจาก Master ไปเข้ายัง Slave
MISO - Master In Slave Out
คือสัญญาณข้อมูลที่ถูกส่งออกจาก Slave ไปยัง Master
SS - Select Slave
สัญญาณเลือก Slave (แบบ Active LOW)
หากมีการใช้งาน Slave หลายตัว ใน Slave แต่ละตัวนั้นจะมีสายสัญญาณ SS ประจำตัว และใช้ SCK, MOSI, MISO ร่วมกัน
การทำงาน
(ในบทความนี้เป็นการอธิบายในภาพรวมให้พอมองภาพออกเท่านั้น การทำงานจริงของ SPI จะมี SCK_CPOA และ SCK_CPOL และมีการทำงาน 4 โหมด หากต้องการเรียนรู้เพิ่มเติมในเชิงลึกควรไปศึกษา หรือมีโอกาสครั้งหน้าจะนำมาเขียนบทความอธิบายครับ)
การสื่อสารแบบ SPI นั้นจะทำงานโดยต้องมี Master 1 ตัว และ Slave 1 หรือหลายตัวตามที่ได้กล่าวไปแล้ว ซึ่งหากในการทำงานนั้นมี Slave เพียงแค่ตัวเดียวก็อาจทำงานโดยให้ SS เป็น LOW ตลอดเพื่อให้ Slave นั้นทำงานตลอดเวลา แต่เมื่อทำงานกับ Slave หลายตัวนั้น SS ของ Slave แต่ละตัวจะถูกตั้งสัญญาณเป็น HIGH และเมื่อจะเรียกใช้ Slave ตัวใดก็จะเปลี่ยนสถานะ SS ของตัวนั้นเป็น LOW เพียงตัวเดียวเท่านั้น เมื่อรับส่งสัญญาณข้อมูลกันเสร็จ SS ก็จะถูกกลับสถานะมาเป็น HIGH ตามเดิม
หลักการส่งข้อมูลของการสื่อสารแบบ SPI เริ่มจาก Master จะส่งสัญญาณนาฬิกาไปกับสายสัญญาณ SCK (โดยทั่วไปเป็นสัญญาณระดับ MHz) จากนั้นจะเลือกว่าต้องการให้ Slave ตัวใดทำงานและจะกลับสถานะ SS ของตัวนั้นเป็น LOW จากนั้น Master จะส่งสัญญาณข้อมูลไปตาม MOSI และรอให้ Slave ส่งสัญญาณข้อมูลกลับมาตาม MISO และเนื่องจาก SPI เป็นการสื่อสารแบบ Full-Duplex ในระหว่างที่ Master กำลังส่งสัญญาณไปยัง Slave อยู่นั้น ตัว Slave สามารถส่งข้อมูลกลับไปยัง Master และ Master ก็สามารถรับข้อมูลไปพร้อมกับการส่งข้อมูลที่เหลือได้ทันที ไม่ต้องรอให้ข้อมูล MOSI หมดก่อนแล้ว MISO จึงเริ่มส่งได้ หลังจากรับส่งข้อมูลเรียบร้อยแล้ว Master จึงกลับสถานะให้ SS เป็น HIGH เพื่อไปเรียกใช้ Slave ตัวอื่นตามขั้นตอนที่กล่าวมานี้ไปเรื่อย ๆ ตามคำสั่งที่เขียนไว้นั่นเอง
อธิบายจากตัวอย่างกราฟสัญญาณ ด้านบน Master เปิดใช้ Slave 1 จากนั้นจึงส่งสัญญาณ 8-bit ไปหา Slave 1 และ Slave 1 ทำการส่งสัญญาณกลับมา 8-bit จึงปิดการใช้งาน Slave 1 ด้วยการกลับ SS1 เป็น HIGH และทำงานต่อมารูปล่าง หลังจากปิด SS1 ผ่านไป 2 ลูกสัญญาณนาฬิกา Master ก็เรียกใช้งาน Slave 2 โดยให้ SS2 เป็น LOW จากนั้นจึงส่งสัญญาณไปหา Slave 2 จำนวน 2-byte และ Slave 2 ก็ส่งข้อมูลสวนกลับไปเป็นจำนวน 2-byte จากนั้นจึงหยุดใช้งานโดยการกลับ SS2 เป็น HIGH
ข้อดีของการใช้ SPI
- เป็นการสื่อสารแบบ Full-Duplex ทำให้สามารถส่งสัญญาณสวนทางกันได้ทันที
- ส่งด้วย Push-Pull drivers ทำให้สัญญาณชัดเจนและมีความเร็วสูง
- อัตราการส่งข้อมูลสูง(สูงกว่าแบบ I2C หรือ SMBus) ไม่จำกัดความเร็วของสัญญาณนาฬิกา(ตราบที่ Slave จะรองรับได้)
- มีความยืดหยุ่นในการรับส่งข้อมูล ไม่จำกัดข้อมูลเพียงแค่ 8-bit สามารถปรับแต่ง เพิ่มลดขนาด รูปแบบของข้อมูลที่จะสื่อสารได้
- การเชื่อมต่ออุปกรณ์ทำได้ง่าย ใช้พลังงานน้อยกว่าแบบ I2C และ SMBus ตัว Slave ไม่ต้องมีอุปกรณ์ Oscillator เนื่องจากใช้สัญญาณนาฬิกาจาก Master ร่วมกันหมดทุกตัว
- Slave ไม่ต้องมี Address ประจำตัว
- ไม่ต้องใช้วงจรรับส่งเหมือน CAN BUS
- ใช้สัญญาณ SS แยกกันใน Slave แต่ละตัวเท่านั้น ส่วนสายสัญญาณอีก 3 เส้นที่เหลือใช้ร่วมกันหมด (ยกเว้นอุปกรณ์บางตัวที่สามารถใช้ SPI Daisy Chain Config. สามารถใช้ SS ร่วมกันได้)
- สัญญาณในสายแต่ละเส้นเดินในทิศทางเดียว ทำให้แยกสัญญาณทางไฟฟ้าได้ง่าย
- การเขียนโปรแกรมทำได้ง่าย
ข้อเสียของ SPI
- ใช้สายสัญญาณมากกว่า I2C
- จำเป็นต้องใช้ SS ในการเลือกอุปกรณ์ขึ้นมาทำงาน
- Slave ไม่สามารถกำหนดการไหลของการทำงานได้ ทั้งหมดจะขึ้นอยู่กับ Master
- ไม่มีการตอบรับจาก Slave Hardware
- รองรับให้มี Master เพียงแค่ตัวเดียว
- ไม่มีการตรวจสอบความผิดพลาดของสัญญาณ
- ไม่สามารถตรวจสอบความสอดคล้องของข้อมูลได้เนื่องจากรูปแบบข้อมูลไม่มีมาตรฐานที่ชัดเจน
- สามารถรับส่งข้อมูลได้ในระยะสั้นเท่านั้น
- ไม่สามารถทำ hot swapping ได้ (การถอดเปลี่ยนอุปกรณ์ตัวใหม่แล้วทำงานต่อทันทีโดยไม่ต้องรีเซ็ตระบบ)
การนำไปใช้งาน
- เซ็นเซอร์ต่าง ๆ เช่น อุณหภูมิ, ความชื้น, จอสัมผัส
- อุปกรณ์ควบคุม เช่น Digital Potentiometer, DAC
- เลนส์กล้องถ่ายรูป เช่น Canon EF Mount
- หน่วยความจำ flash, EEPROM
- Real Time Clock Module
- จอแสดงผล LCD
- SD Card, MMC Card
สำหรับสัปดาห์นี้ก็จบไปแล้วนะครับกับเรื่องราวของการสื่อสารแบบ SPI ซึ่งก็ได้ใช้กันอยู่บ่อย ๆ ในการเขียน Arduino หรือ MCU ตัวอื่น ๆ ก็เป็นข้อมูลเบื้องต้นสำหรับความเป็นมา การใช้งานและข้อมูลอื่น ๆ สำหรับตอนต่อไปจะเป็นเรื่องอะไร ติดตามกันต่อนะครับ วันนี้สวัสดี
Footnote :
สายสัญญาณต่าง ๆ อาจมีชื่อที่สกรีนลงบนอุปกรณ์หรือเขียนอ้างอิงอื่น ๆ แต่มีความหมายเดียวกัน ดังนี้
SCK - อาจสกรีนเป็น SCLK
MOSI - อาจสกรีนเป็น SIMO, MTSR || บน Slave อาจสกรีนเป็น - SDI, DI, DIN, SI || บน Master อาจสกรีนเป็น SDO, DO, DOUT, SO
MISO - อาจสกรีนเป็น SOMI, MRST || บน Slave อาจสกรีนเป็น -
SDO, DO, DOUT, SO
|| บน Master อาจสกรีนเป็น SDI, DI, DIN, SI
SS - อาจสกรีนเป็น SS: S̅S̅, SSEL, CS, C̅S̅, CE, nSS, /SS, SS#
tips
,
spi
,
spi serial
,
serial
,
การสื่อสาร
,
การสื่อสารแบบ spi
Share
Share :
COPY
Privacy Policy
|
Cookie Policy
|
Copyright © 2025
fitrox.lnwshop.com
All rights reserved.
ตะกร้า
(
0
)
▲
▼
รายการสั่งซื้อของฉัน
เข้าสู่ระบบด้วย
เข้าสู่ระบบ
สมัครสมาชิก
ยังไม่มีบัญชีเทพ
สร้างบัญชีใหม่
ไม่มีค่าใช้จ่าย
สมัครสมาชิก (ฟรี)
รายการสั่งซื้อของฉัน
ข้อมูลร้านค้านี้
Fitrox Electronics
ไฟทร็อก อิเล็กทรอนิกส์ จำหน่ายอุปกรณ์อิเล็กทรอนิกส์ บอร์ดไมโครคอนโทรลเลอร์ และอุปกรณ์สำหรับโปรเจคต่างๆ อ.เมือง จ.เชียงใหม่ (หลัง มช.)
เบอร์โทร :
0897245633
อีเมล :
fitrox.electronics@gmail.com
ส่งข้อความติดต่อร้าน
เกี่ยวกับร้านค้านี้
ค้นหาสินค้าในร้านนี้
ค้นหา
หรือค้นหาอย่างละเอียด
ค้นหาสินค้า
สินค้าที่ดูล่าสุด
{{pdata.name}}
ดูสินค้าทั้งหมดในร้าน
สินค้าที่ดูล่าสุด
บันทึกเป็นร้านโปรด
Join เป็นสมาชิกร้าน
แชร์หน้านี้
แชร์หน้านี้
↑
TOP
เลื่อนขึ้นบนสุด
คุณมีสินค้า
0
ชิ้นในตะกร้า
สั่งซื้อทันที
สินค้าในตะกร้า ({{total_num}} รายการ)
ขออภัย ขณะนี้ยังไม่มีสินค้าในตะกร้า
ราคาสินค้าทั้งหมด
฿ {{price_format(total_price)}}
- ฿ {{price_format(discount.price)}}
ราคาสินค้าทั้งหมด
{{total_quantity}} ชิ้น
฿ {{price_format(after_product_price)}}
ราคาไม่รวมค่าจัดส่ง
ดูสินค้าในตะกร้า
เริ่มการสั่งซื้อ
➜
เลือกซื้อสินค้าเพิ่ม
พูดคุย-สอบถาม
อีเมล fitrox.electronics@gmail.com
โทร 0897245633
channel/UCnHfpCdqN1RkzAfEH_lRLvw?
1924052434588436
Add @zpq2828r