เลือกหน้า

โปรโตคอลการสื่อสารในบอร์ด KidBright32

ในการสื่อสารระหว่างบอร์ด KidBright32 กับอุปกรณ์ต่อพวงต่างๆ แต่ละชนิดก็จะมีโปรโตคอลการสื่อสารต่างๆที่แตกต่างกันออกไป เช่นการสื่อสารระหว่างบอร์ด KidBright32 กับ KidBrightIDE, การสื่อสารระหว่างบอร์ด KidBright32 กับ เซนเซอร์ต่างๆ หรือแม้กระทั้งการการสื่อสารระหว่างบอร์ด KidBright32 กับการ์ดเก็บข้อมูล SD Card ต่างก็ใช้โปรโตคอลการสื่อสาร(Communication Protocol)ที่ต่างกัน

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

 

Universal Asynchronous Receiver Transmitter

       โปรโตคอลการสื่อสารแรก คือ Universal Asynchronous Receiver Transmitter
หรือเรียกสั้นๆว่า UART(ยู-อาร์ท) เป็นโปรโตคอลการสื่อสารที่สำคัญที่สุดเพราะ UART เป็นการสื่อสารที่ KidBrightIDE ใช้โปรแกรม KidBright32 นั้นแอง โดย UART จะถูกแปลงเป็น USB ด้วย IC FT231 และใช้ผ่าน Micro USB port

 Figure 1     รูปภาพแสดง Micro USB port ที่ใช้การสื่อสารแบบ UART

เรามาดูหลักการสื่อสารแบบ UART กันหน่อย ว่าการสื่อสารเค้ามีหลักการเชื่อมอย่างไร และการสื่อสารมีส่วนประกอบอะไรบ้าง

Figure 2  การเชื่อมต่อของสายสัญญาณ UART ภายในบอร์ด KidBright32

การเชื่อมต่อของการสื่อสารแบบ UART จะต้องต่อขา TX ที่มีหน้าที่ส่งข้อมูลของฝั่งหนึ่ง ไปยังขา RX ที่มีหน้าที่รับข้อมูลของอีกฝั่งหนึ่ง โดยบอร์ด KidBright32 จะสื่อสารกับ IC FT231 ด้วยการสื่อสารแบบ UART แล้ว IC FT231 จะแปลงการสื่อสารดังกล่าวไปเป็น USB เพื่อสื่อสารกับ KidBrightIDE บนคอมพิวเตอร์ต่อไปครับต่อไปครับ

ต่อไปเรามาดูส่วนประกอบของการส่งข้อมูลแต่ละครั้งผ่าน UART กัน UART จะเป็นส่งข้อมูลที่ละ bit ผ่านสายสัญญาณ โดยประกอบไปด้วย 4 ส่วนคือ

  1. Start bit: ทำหน้าที่บอกจุดเริ่มต้นของข้อมูล
  2. data bits: ข้อมูลที่ต้องการรับส่ง
  3. Parity bit: ทำหน้าที่ใช้ตรวจสอบความถูกต้องของข้อมูล
  4. Stop bit: ทำหน้าที่บอกจุดสิ้นสุดของข้อมูล

Figure 3  รูปภาพแสดง Frame ของการส่งข้อมูลของ UART

ความเร็วในการสื่อสารผ่าน UART หมายถึงความเร็วในการส่งข้อมูลจะนับเป็นจำนวน bit ต่อวินาที หรือเรียกว่า Baud rate โดยที่จะต้องกำหนดให้ตรงกันระหว่างตัวรับและตัวส่ง ปรกติจะมีค่าเท่ากับ 9600, 14400, 19200, 28800, 38400, 57600, หรือ 115200

 

The Inter-integrated Circuit

        2 การสื่อสารชนิด I2(The Inter-integrated Circuit)  (อ่านว่า ไอ-แสควร์-ซี) เป็นโปรโตคอลการสื่อสารระหว่างบอร์ด KidBright32 และอุปกรณ์เซนเซอร์ภายนอก โดยใช้สายสัญญาณเพียง 3 เส้น คือ สาย Serial data (SDA)  สาย Serial clock (SCL)และสารกราวนด์  การส่งและรับข้อมูลจะทำทีละ Bit โดยใช้สัญญาณ Clock เป็นตัวกำหนดจังหวะการทำงาน การเชื่อมต่อ I2C นี้จะสามารถเชื่อมต่ออุปกรณ์เซนเซอร์ได้หลายตัวบาสายสัญญาณชุดเดียวกัน โดยมีลักษณะการการเชื่อมต่ออุปกรณ์ดังนี้

Figure 4  รูปแสดงการต่อสายสัญญาณในโปรโตคอลการสื่อสารแบบ I2C

สำหรับบอร์ด KidBright32 มีช่องการสื่อสารแบบ I2C มาให้ใช้งานกันถึง 2 ช่องการใช้งานคือ I2C0 (SDA0, SCL0) และ I2C1 (SDA1, SCL1) อยู่ในตำแหน่งตามรูป

Figure 5  รูปภาพแสดงช่องการสื่อสารแบบ I2C

การสื่อสารแบบ I2C จะเป็นการสื่อสารระหว่าง KidBright32 กับอุปกรณ์เซนเซอร์ทีละ 1 ตัว โดย KidBright32 จะทำหน้าที่เป็น Master และอุปกรณ์เซนเซอร์จะทำหน้าที่เป็น Slave ซึ่งอุปกรณ์เซนเซอร์ที่อยู่ในสายสัญญาณ I2C ชุดเดียวกัน จะต้องมีเลขรหัสประจำตัว(address) ที่ไม่ซ้ำกัน เพื่อให้ I2C สามารถเชื่อมต่ออุปกรณ์เซนเซอร์ได้หลายตัวพร้อมๆกันนั้นเอง

ต่อไปเรามาดูลักษณะสัญญาณของการสื่อสารข้อมูลแต่ละครั้งผ่าน I2C กันบ้าง ขบวนการสื่อสารผ่าน I2C จะเริ่มต้นด้วย

  1. บอร์ด KidBright32 ส่งสถานะเริ่มต้น (START Conditions) และสร้างสัญญาณ Clock ที่ SCL
  2. บอร์ด KidBright32 ส่งรหัสควบคุม (Control Byte) ซึ่งประกอบด้วย รหัสประจำตัว(Address) และ Mode(R/W) ในการอ่านหรือเขียนข้อมูล R=1, W=0
  3. อุปกรณ์เซนเซอร์ตัวที่มีรหัสประจำตัวดังกล่าว จะรับทราบว่าบอร์ด KidBright32 ต้องการจะสื่อสารข้อมูลและจะส่งสถานะรับรู้ Acknowledge(ack) เพื่อบอกกับบอร์ด KidBright32 ว่าพร้อมที่จะสื่อสารด้วย
  4. บอร์ด KidBright32 เริ่มอ่านหรือเขียนข้อมูลระหว่างอุปกรณ์เซนเซอร์
  5. เมื่ออุปกรณ์เซนเซอร์สื่อสารเสร็จสมบูรณ์จะส่งสถานะรับรู้ Acknowledge(ack) แจ้งให้บอร์ด KidBright32 รับรู้ว่าการสื่อสารมีความถูกต้อง
  6. เมื่อบอร์ด KidBright32 รับหรือส่งข้อมูลครบถ้วนแล้วก็จะ ส่งสถานะสิ้นสุดการสื่อสาร (STOP Conditions)

Figure 6  รูปภาพพแสดงลักษณะ Frame ในการสื่อสารบบ I2C

การส่งสถานะเริ่มต้น เมื่อต้องการสื่อสาร KidBright32 จะต้องส่งสถานะเริ่มต้น (START Conditions) คือให้ SDA เปลี่ยนลอจิกจากสถานะ ‘1’ มาเป็นสถานะ ‘0’ ในขณะที่คงค่าลอจิกของสัญญาณ SCL ไว้ที่ ‘1’

การส่งสถานะสิ้นสุดการสื่อสาร เมื่อต้องการจบสื่อสาร KidBright32 จะต้องส่งสถานะสิ้นสุดการสื่อสาร (STOP Conditions) คือให้ SDA เปลี่ยนสถานะจากลอจิก ‘0’ มาเป็นลอจิก ‘1’ ในขณะที่คงค่าลอจิกของสัญญาณ SCL ไว้ที่ ‘1’

ความเร็วในการสื่อสารของการสื่อสารแบบ I2C หมายถึงความเร็วในการส่งข้อมูลจำนวน bit ต่อวินาที โดยมาตราฐานจะแยกออกเป็น standard mode: 100 Kbit/s, full speed: 400 Kbit/s, fast mode: 1 Mbit/s และ high speed: 3.2 Mbit/s สำหรับอุปกรณ์ทั่วๆ ไป จะรองรับความเร็ว 100Kbit/s และ/หรือ 400Kbit/s

 

Serial Peripheral Interface

        3 Serial Peripheral Interface (SPI) (เอส-พี-ไอ) เป็นโปรโตคอลการสื่อสารที่มีความเร็วข้อมูลสูงสุดในทั้งสามโปรโตคอลการสื่อสารนี้ เพื่อให้บอร์ด KidBright32 สามารถสื่อสารกับอุปกรณ์เซนเซอร์ที่มีการส่งข้อมูลจำนวนมากๆ หรือต้องการความเร็วสูงๆได้ เช่น การสื่อสารกับจอแสดงผล(LCD), อุปกรณ์จัดเก็บข้อมูล(Flash memory), Analog-to-digital converters(ADC) เป็นต้น สายสัญญาณของการสื่อสารแบบ SPI จะประกอบไปด้วยสัญญาณ 4 สัญญาณคือ

  1. Serial Clock(SCK): เป็นสัญญาณ Clock ที่ถูกสร้างโดยบอร์ด KidBright32
  2. Master-Out Slave-In(MOSI): เป็นสัญญาณสำหรับส่งข้อมูลออกจากบอร์ด KidBright32 ไปยังอุปกรณ์เซนเซอร์
  3. Master-In Slave-Out(MISO): เป็นสัญญาณสำหรับส่งข้อมูลออกจากอุปกรณ์เซนเซอร์กลับไปยังบอร์ด KidBright32
  4. Slave Select, Chip Select (SS, CS): เป็นสัญญาณที่สร้างโดยบอร์ด KidBright32 เพื่อบอกให้รู้ว่าต้องการสื่อสารกับอุปกรณ์เซนเซอร์ตัวใด ในกรณีที่มีอุปกรณ์ที่ใช้ SPI มากกว่าหนึ่งตัว

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

Figure 7  รูปแสดงการต่อสายสัญญาณในระบบการสื่อสารแบบ SPI

สำหรับบอร์ด KidBright32 มีช่องการสื่อสารแบบ SPI มาให้ใช้งาน 1 ช่อง อยู่ในตำแหน่งดังภาพต่อไปนี้ สายสัญญาณ SCK อยู่ที่จุดบัดกรี 18, สายสัญญาณ MOSI อยู่ที่จุดบัดกรี 23, สายสัญญาณ MISIO อยู่ที่จุดบัดกรี 19 ส่วนสายสัญญาน SS เราสามารถเลือกใช้ช่อง OUTPUT ใดๆ ที่ว่างจากการใช้งานมาใช้งานได้

Figure 8  รูปภาพแสดงช่องการสื่อสารแบบ SPI

การเชื่อมต่อของโปรโตคอลการสื่อสารแบบ SPI หากต้องการสื่อสารทั้งสองทิศทางจำเป็นจะใช้สายสัญญาณทั้ง MISO และ MOSI แต่หากเป็นการสื่อสารทิศทางเดียวแล้วจะสามารถใช้เฉพาะสายสัญญาณที่ต้องการได้ การใช้งาน SPI จำเป็นจะต้องตั้งค่าโหมดการทำงาน Clock Polarity (CPOL) และ Clock Phase (CPHA) ของบอร์ด KidBright32 ให้ตรงต้องตามความต้องการของอุปกรณ์เซนเซอร์ที่ต้องการสื่อสารด้วย โดยสามารถตั้งได้แตกต่างกันทั้งหมด 4 แบบ คือ

  1. โหมด 0: CPOL = 0 และ CPHA = 0
  2. โหมด 1: CPOL = 0 และ CPHA = 1
  3. โหมด 2: CPOL = 1 และ CPHA = 0
  4. โหมด 3: CPOL = 0 และ CPHA = 1

การตั้งค่า CPOL และ CPHA มีผลต่อลำดับในการสื่อสารข้อมูลในแต่ละ bit เมื่อสัญญาณ SCK มีการเปลี่ยนแปลง แสดงได้ตามรูปภาพต่อไปนี้

Figure 9  รูปภาพแสดงโหมดการทำงานต่างๆ และ Frame ของการสื่อสารแบบ SPI

ลำดับการสื่อสารจะเริ่มจากบอร์ด KidBright32 ทำการเลือกอุปกรณ์เซนเซอร์โดยสั่งให้สัญญาณในสายสัญญาณ SS(หรือ CS)  ของอุปกรณ์เซนเซอร์ที่ต้องการสื่อสารด้วยมีค่าเป็นลอจิก ‘0’  จากนั้นเริ่มการส่งข้อมูลในสายสัญญาณ MOSI หรือรับสัญญาณ ในสายสัญญาณ MISO ซึ่งการส่งหรือรับข้อมูลจะมีความสัมพันธ์กับสัญญาณ SCK ตามที่กำหนดในแต่ละโหมดการทำงานของการสื่อสาร SPI เมื่อทำการสื่อสารรับส่งข้อมูลเรียบร้อยแล้วบอร์ด KidBright32 ทำการจบการสื่อสารกับอุปกรณ์เซนเซอร์ ด้วยการสั่งให้สัญญาณในสายสัญญาณ SS(หรือ CS) ของอุปกรณ์เซนเซอร์ให้มีสถานะเป็นลอจิก ‘1’  ถือเป็นการสิ้นสุดการสื่อสาร

ความเร็วใข้อมูลการสื่อสารแบบ SPI จะนับเป็นจำนวน bit ต่อวินาที โดยส้วนใหญ่ผู้ใช้จะสามารถกำหนดได้ตากผู้ใช้งาน เช่น 4 Mbit/s, 8 Mbit/s, 10 Mbit/s หรืออาจจะใช้ 20 Mbit/s ขึ้นอยู่กับความเร็วของอุปกรณ์ที่ต้องการสื่อสารด้วย แต่เนื่องจากการสื่อสารแบบ SPI เป็นการสื่อสารที่มีความเร็วสูงหากสายต่อระหว่างบอร์ด KIdBright32 และอุปกรณ์มีความยาวมากเกินไปอาจทำให้การสื่อสารที่ความเร็วสูงไม่สำเร็จได้

อีกเรื่องหนึ่งที่ต้องให้ความสำคัญคือระดับแรงดับของลอจิก ‘1’ และลอจิก ‘0’ ที่จะใช้สื่อสารกับบอร์ด KidBright32 จะต้องอยู่ในช่วงแรงดันไฟฟ้าที่ถูกต้อง คือ 0 ถึง 3.3 โวลต์ เนื่องการบอร์ด KidBright32 ทำงานอยู่ในช่วงแรงดันดังกล่าว หากอุปกรณ์ที่นำมาต่อใช้งาน ใช้แรงดันที่แตกต่างไป ก็จำเป็นจะต้องใช้โมดูล Voltage Level Converter มาแปรงระดับแรงดันให้เหมาะสมก่อน มิเช่นนั้นอาจทำให้บอร์ด KidBright32 ชำรุดเสียหายได้

หลังจากที่น้องๆได้รู้จักโปรโตคอลการสื่อสารที่อยู่ในบอร์ด Kidbright32 กันแล้วก็หวังว่าน้องๆจะสามารถเลือกใช้ได้อย่างถูกต้องและมีประสิทธิภาพและเหมาะสมกับงานที่ต้องการพัฒนานะครับ