วันอาทิตย์ที่ 26 กุมภาพันธ์ พ.ศ. 2560

SPI

SPI หรือ Serial Peripheral Interface
          เป็นวิธีการสื่อสารอนุกรมแบบ Synchronous อีกรูปแบบหนึ่ง ซึ่งทำงานในรูปแบบที่ให้อุปกรณ์ตัวหนึ่งทำหน้าที่เป็น Master ในขณะที่อีกตัวหนึ่งทำหน้าที่เป็น Slave และสามารถส่งข้อมูลในโหมด Full-duplex นั่นหมายความว่า สัญญาณสามารถส่งหากันได้ระหว่าง Master และ Slave ได้อย่างต่อเนื่อง รูปแบบข้อมูลการสื่อสารหรือ Protocol ของแบบ SPI นี้ ไม่ได้มาตรฐานกำหนดตายตัว ว่าข้อมูลที่ส่งหากันต้องอยู่ในรูปแบบหรือ Format แบบไหน เป็นการคิด Protocol การสื่อสารกันเอาเอง หรือดูจาก Datasheet ของอุปกรณ์
        ยกตัวอย่างอุปกรณ์ที่ใช้การสื่อสารแบบ SPI ได้แก่ โมดูลแปลงสัญญาณอนาล็อกเป็นดิจิตอล และโมดูลแปลงสัญญาณดิจิตอลเป็นอนาล็อก การติดต่อกับหน่วยความจำ EEPROM และ FLASHโมดูลนาฬิกาดิจิตอล หรือ Real Time Clock : RTC เซ็นเซอร์วัดอุณหภูมิ และความดัน อุปกรณ์อื่น ๆ เช่น signal mixer , Potentiometer , LCD controller , USART , CAN controller , USB controller , Amplifier



             รูป 1-1 การเชื่อมต่อการสื่อสารแบบ SPI ระหว่างอุปกรณ์ Master – Slave

รูป 1‑1 แสดงการเชือมต่อการสื่อสารแบบ SPI ระหว่างอุปกรณ์ Master – Slave โดยมีสายสัญญาณ สี่เส้น หรือ Four Wire ประกอบด้วย SCLK (Serial Clock) ใช้ส่งสัญญาณนาฬิกาจากอุปกรณ์ Master ไปยังอุปกรณ์ Slave เพื่อกำหนดจังหวะการรับส่งข้อมูลMOSI (Master Out Slave In) ใช้ส่งข้อมูลจากอุปกรณ์ Master ไปยังอุปกรณ์ SlaveMISO (Master In Slave Out) ใช้รับข้อมูลจากอุปกรณ์ Slave
\SS (Slave Select) หรือ ขา CS (Chip Select) ใช้ส่งสัญญาณ Low ไปยังอุปกรณ์ Slave ที่ต้องการรับส่งข้อมูล

      อุปกรณ์ Master ทำหน้าที่เป็นตัวควบคุมการสื่อสารทั้งหมด โดยควบคุมการสื่อสารตามสัญญาณนาฬิกา และสายสัญญาณ SS ตัวมาสเตอร์จะเป็นตัวที่ตัดสินใจเลือก รับ หรือ ส่งข้อมูลไปยังอุปกรณ์ Slave สัญญาณเส้น SS หรือ Slave select ในกรณี ที่มีตัว Slave มากกว่า 1 ตัว โดยการทำให้เส้น SS มีระดับสัญญาณเป็น Low เมื่อต้องการติดต่อกับ Slave ตัวใด จากรูป 1‑2 หากต้องการติดต่อสื่อสารกับอุปกรณ์ Slave ตัวใด ก็เพียงทำให้สัญญาณ SS ของ Slave ตัวนั้น มีระดับสัญญาณเป็น Low

        รูป 1-2 การเชื่อมต่อการสื่อสารแบบ SPI ระหว่างอุปกรณ์ Master – Slave หลายตัว

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

         ข้อดีของการสื่อสารแบบ SPI คือ สามารถสื่อสารแบบ Full Duplex กล่าวคือสามารถรับและส่งข้อมูลได้พร้อมๆ กัน เพราะมีสายสัญญาณรับและส่งข้อมูลโดยเฉพาะ รูปแบบการสื่อสารของ SPI ไม่ต้องกำหนด Address เพื่อระบุอุปกรณ์ที่ต้องการสื่อสารเหมือน I2C เนื่องจากใช้สายสัญญาณ SS เป็นตัวควบคุม จึงมีอัตราการรับส่งข้อมูลสูงกว่า I2C และเหมาะสำหรับการรับส่งข้อมูลแบบต่อเนื่อง หรือ Streaming อย่างไรก็ตาม หากมีอุปกรณ์ Slave หลายตัวดังรูป การสื่อสารแบบ SPI ต้องใช้สายสัญญาณมากกว่า I2C

    รูปแบบสัญญาณใน 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 การทำงานได้ 4 โหมด คือ

o Mode 0 = CPOL=0 และ CPHA=0
o Mode 1 = CPOL=0 และ CPHA=1
o Mode 2 = CPOL=1 และ CPHA=0
o Mode 3 = CPOL=1 และ CPHA=1

ตัวอย่างการใช้งาน DAC ผ่านการสื่อสาร SPI

ในบทนี้แสดงวิธีการใช้งานการสื่อสารแบบ SPI เพื่อควบคุมอุปกรณ์ต่างๆ โดยตัวอย่างนี้ใช้ไอซี LTC1661  ของบริษัท Linear Technology โมดูลแปลงสัญญาณดิจิตอลขนาด 10 บิตเป็นสัญญาณอนาล็อก 2 ช่องสัญญาณ แม้ว่า STM32F4Discovery มี DAC ให้ใช้งานได้ 2 ช่องสัญญาณ ผู้ใช้งานสามารถใช้อุปกรณ์นี้ได้ หากต้องการเพิ่มจำนวนช่องจ่ายแรงดันอนาล็อกได้

รูป 2-1 แสดงขาของไอซี LTC1661 [2]
รูป 2‑2 แสดงการรับข้อมูลของ LTC1661 ผ่าน SPI จาก Microcontroller เพื่อต้องการปรับแรงดันไฟฟ้า เมื่อสังเกตลักษณะสัญญาณนาฬิกา เมื่ออยู่ในสถานะ Idle ค่าของสัญญาณมีสถานะ Low และอ่านบิตข้อมูลที่อยู่บน MOSI เมื่อพบขอบขาขึ้น (1st Edge Capture) ข้อมูลหนึ่งชุดมีขนาดจำนวน 16 บิต ซึ่งประกอบด้วยค่าดิจิตอล 10 บิต ที่ต้องการแปลงเป็นค่าแรงดันไฟฟ้า และ Control Code จำนวน 4 บิตสำหรับควบคุมการทำงานไอซี LTC1661ดังรูป 2‑3 สำหรับความถี่ของสัญญาณนาฬิกาสูงสุดที่ไอซี LTC1661 สามารถทำงานได้คือ 16.7 MHz

รูป 2-2 รูปแบบการสื่อสารแบบ SPI ของไอซี LTC1661

รูป 2-3 ตารางแสดงคำอธิบายของ Control Code ของไอซี LTC1661

ไม่มีความคิดเห็น:

แสดงความคิดเห็น