แสดงบทความที่มีป้ายกำกับ พอร์ตสื่อสาร แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ พอร์ตสื่อสาร แสดงบทความทั้งหมด
วันพุธที่ 1 มีนาคม พ.ศ. 2560
วันอาทิตย์ที่ 26 กุมภาพันธ์ พ.ศ. 2560
ตารางสรุปการเชื่อมต่อแบบ Serial communication
| 1-Wire | I2C | SMBus | SPI | MicroWire/PLUS? | M-Bus (EN1434) | CAN (ISO11898) | LIN Bus | |
| Network Concept | single master, multiple slaves | multiple masters, multiple slaves | multiple masters, multiple slaves | single master, multiple slaves | single master, multiple slaves | single master, multiple slaves | multiple masters, multiple slaves | single master, multiple slaves |
| Number of Signal Lines | 1 (IO) | 2, (SCL, SDA) | 2, (SMBCLK, SMBDAT) | 4, (active-low CS, SI, SO, SCK) | 4, (active-low CS, DI, DO, SK) | 2 (lines can be swapped) | 2 (CAN_H, CAN_L, terminated) | 1 (LIN) |
| Optional signals | N/A | N/A | SMBSUS#, SMBALERT# | N/A | N/A | N/A | 2nd GND, Power, Shield | N/A |
| Network Size | Up to 300 m (with suitable master circuit) | Limited by max. 400pF bus capacitance requirement | Limited by max. 400pF bus capacitance requirement | N/A (circuit board level) | N/A (circuit board level) | Max. 350m per segment of max. 250 slaves; max. 180nF | 40m @1M bps1000m @ 50k bps (example) | Up to 40m, max. 10nF total load |
| Network Interface | open drain, resistive or active master pull-up | open drain, resistive or active master pull-up | open drain, resistive or active master pull-up | Push-pull with tristate | Push-pull with tristate | M to S: voltage drive S to M: current load |
Differential open drain/source or open coll./emitter | open drain, resistive master pull-up |
| Network Voltage | From 2.8 to 6.0 V, device specific | From 1.8 to 5.5V, device specific | 2.7V to 5.5V | From 1.8V to 5.5V, device specific | From 1.8V to 5.5V, device specific | ~40V | VDD-VD (diode drop); ~4.5V max. | 8 to 18V |
| Logic Thresholds | Vary with network voltage | Fixed level: >1.5V, >3.0 V VDD-related level: <30%, >70% of VDD | <0.8V, >2.1V | VDD-related level: <20% (30%), >70% of VDD (inconsistent) | Fixed level: <0.8V, >2.0V; VDD-related level: <20% (30%), >70% (80%) of VDD (inconsistent) | Master to slave: 24V, 36V nominalSlave to master: <1.5mA, >11mA | Differential: <50mV (recessive), >1.5V (dominant); driver specification | VDD-related level: <20%, >80% of VDD (driver spec.)<40%, >60% of VDD (receiver spec.) |
| Transmission | LS bit first, half-duplex | MS bit first plus Acknowledge bit, half-duplex | MS bit first plus Acknowledge bit, half-duplex | MS bit first, full-duplex | MS bit first, full-duplex | LS bit first, half-duplex, acknowledge response | MS bit first, half-duplex | LS bit first, half-duplex |
| Address Format | 56 bits | 7 bits, (10 bits defined but not implemented) | 7 bits, (10 bits defined but not implemented) | N/A | N/A | 8 bits (primary address), 64 bits (secondary address) | Message identifier 11 bits (standard format), 29 bits (extended format) | Message identifier 8 bits, including 2 parity bits |
| Network Inventory | Automatic, supports dynamic topology change | N/A; slave addresses hard-coded in firmware | ARP, Address Resolution Protocol (Rev. 2.0 only) | N/A; slave select (active-low CS) hard-coded in firmware | N/A; slave select (active-low CS) hard-coded in firmware | Automatic | N/A; message-based protocol, not address based | N/A; message-based protocol, not address based |
| Gross Data Rate | Standard: ~0 to 16.3k bps Overdrive: ~0 to 142k bps) | Standard: ~0 to 100k bps; Fast: ~0 to 400k bps; High-Speed: ~0 to 3.4M bps | 10k to 100k bps | ~0 to ~10 M bps (device specific) | ~0 to ~5 M bps (device specific) | 300, 2400, 9600 bps | ~0 to 1M bps | ~1k to ~20k bps |
| Access Time | Standard: ~ 5.4ms Overdrive: ~0.6ms (at maximum speed) | Standard: ~95?sFast: ~23?s(at maximum speed) | ~95?s @ 100k bps | N/A | N/A | Primary address, 2400 bps: 13.75ms (short frame), 27.5ms (long frame) | At 1M bps 19?s (standard) or 39?s (extended) from start of frame to 1st data bit | At 20k bps 1.7ms from start of frame to 1st data bit |
| Data Protection | 8-bit and 16-bit CRC | N/A | PEC Packet Error Code (Rev.1.1, 2.0) | N/A | N/A | Even parity, check sum, frames | 15-bit CRC, frames, frame acknowledge | Check sum, frames |
| Collision Detection | Yes, through non-matching CRC | Yes (multi-master operation only) | Yes (Rev. 2.0 only) | N/A | N/A | Yes ("medium" and "strong" collisions) | Yes: CSMA/CD | Yes, through check sum |
| Slave supply | Parasitic (typical), VDD (exception) | VDD only | VDD only | VDD only | VDD only | Parasitic and/or local supply | VDD only, local or remote source | Parasitic only |
คุณสมบัติของมาตรฐานต่าง ๆ
RS-232, RS-423, RS-422 and RS-485
Table ข้างล่างนี้เป็นการสรุปคุณสมบัติของมาตรฐานต่าง ๆ ที่นิยมใช้กันทั่วไป
|
Specification
|
RS-232
|
RS-423
|
RS-422
|
RS-485
|
|
| Mode of operation |
Single-ended
|
Single-ended
|
Differential
|
Differential
|
|
| Total number of drivers and receivers on one line |
1Tx
1Rx
|
1Tx
10Rx
|
1Tx
10Rx
|
1Tx
32Rx
|
|
| Maximum cable length |
50Ft
|
4,000Ft
|
4,000Ft
|
4,000Ft
|
|
| Maximum data rate |
20Kbps
|
100Kbps
|
10Mbps
|
10Mbps
|
|
| Maximum driver output voltage |
+/-25V
|
+/-6V
|
-0.25V to +6V
|
-7V to +12V
|
|
| Driver output signal level (loaded min.) | Loaded |
+/-5V to +/-15V
|
+/-3.6V
|
+/-2V
|
+/-1.5V
|
| Driver output signal level (loaded max.) | Unloaded |
+/-25V
|
+/-6V
|
+/-6V
|
+/-6V
|
| Driver load impedance (ohms) |
3K to 7K
|
>=450
|
100
|
54
|
|
| Max. Driver current in high Z state | Power on |
N/A
|
N/A
|
N/A
|
+/-100uA
|
| Max. Driver current in high Z state | Power off |
+/-6mA @ +/-2V
|
+/-100uA
|
+/-100uA
|
+/-100uA
|
| Slew rate (max.) |
30V/uS
|
Adjustable
|
N/A
|
N/A
|
|
| Receiver input voltage range |
+/-15V
|
+/-12V
|
-10V to +10V
|
-7V to +12V
|
|
| Receiver input sensitivity |
+/-3V
|
+/-200mV
|
+/-200mV
|
+/-200mV
|
|
| Receiver input resistance (ohms) |
3K to 7K
|
4K min.
|
4K min.
|
>=12K
| |
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
รูป 2‑2 แสดงการรับข้อมูลของ LTC1661 ผ่าน SPI จาก Microcontroller เพื่อต้องการปรับแรงดันไฟฟ้า เมื่อสังเกตลักษณะสัญญาณนาฬิกา เมื่ออยู่ในสถานะ Idle ค่าของสัญญาณมีสถานะ Low และอ่านบิตข้อมูลที่อยู่บน MOSI เมื่อพบขอบขาขึ้น (1st Edge Capture) ข้อมูลหนึ่งชุดมีขนาดจำนวน 16 บิต ซึ่งประกอบด้วยค่าดิจิตอล 10 บิต ที่ต้องการแปลงเป็นค่าแรงดันไฟฟ้า และ Control Code จำนวน 4 บิตสำหรับควบคุมการทำงานไอซี LTC1661ดังรูป 2‑3 สำหรับความถี่ของสัญญาณนาฬิกาสูงสุดที่ไอซี LTC1661 สามารถทำงานได้คือ 16.7 MHz
เป็นวิธีการสื่อสารอนุกรมแบบ 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‑2 แสดงการรับข้อมูลของ LTC1661 ผ่าน SPI จาก Microcontroller เพื่อต้องการปรับแรงดันไฟฟ้า เมื่อสังเกตลักษณะสัญญาณนาฬิกา เมื่ออยู่ในสถานะ Idle ค่าของสัญญาณมีสถานะ Low และอ่านบิตข้อมูลที่อยู่บน MOSI เมื่อพบขอบขาขึ้น (1st Edge Capture) ข้อมูลหนึ่งชุดมีขนาดจำนวน 16 บิต ซึ่งประกอบด้วยค่าดิจิตอล 10 บิต ที่ต้องการแปลงเป็นค่าแรงดันไฟฟ้า และ Control Code จำนวน 4 บิตสำหรับควบคุมการทำงานไอซี LTC1661ดังรูป 2‑3 สำหรับความถี่ของสัญญาณนาฬิกาสูงสุดที่ไอซี LTC1661 สามารถทำงานได้คือ 16.7 MHz
I2C
I2C ย่อมาจาก Inter IC Communication คิดค้นโดย Philip semiconductor หรือ NXP semiconductorจุดประสงค์เพื่อรับส่งข้อมูลความเร็วต่ำระหว่างอุปกรณ์ ต่างๆ เช่นเครื่องบันทึกเสียง โทรศัพท์มือถือ รวมถึงหน่วยความจำอย่าง EEPROM เป็นต้น การสื่อสารแบบ I2C มีจุดเด่นคือ การเชื่อมต่อกันเป็นระบบบัสและรับส่งข้อมูลระหว่างอุปกรณ์ได้เป็นจำนวนมาก โดยใช้สายสัญญาณเพียงสองเส้นดังรูป 1-1 ซึ่งสามารถลดจำนวนสายสัญญาณและขนาดของอุปกรณ์ จึงเป็นที่นิยมในระบบสมองกลฝังตัวขนาดเล็ก
เป็นการสื่อสารแบบอนุกรมแบบ Synchronous ด้วยสายสัญญาณเพียง 2 เส้น คือ สายสัญญาณข้อมูล SDA (Serial Data Line) และสายสัญญาณนาฬิกา SCL (Serial Clock Line) โดย I2C แบ่งการทำงานออกเป็น 4 โหมดตามความเร็วในการรับส่งข้อมูลดังนี้
1. Normal Mode: 100Kbps
2. Fast Mode: 400Kbps
3. Fast Mode Plus: 1Mbps
4. High Speed Mode: 3.4 Mbps
ตัวอย่างการต่อใช้งาน I2C
จากภาพแสดงให้เห็นว่าในการใช้งาน I2C สามารถต่อใช้งานกับอุปกรณ์ได้มากกว่าหนึ่งตัวบนสายสัญญาณ 1 ชุด (2 เส้น) โดยเลือกติดต่อกับอุปกรณ์ใดได้ด้วยการกำหนดแอดเดรสทางฮาร์ดแวร์ให้กับ อุปกรณ์ตัวนั้นและต้องมีการ Pull-Up ให้กับสายสัญญาณทั้ง 2 เส้น
ภาวะที่เกิดขึ้นบนบัส I2C
มีด้วยกัน 5 สภาวะดังนี้
1. บัสว่าง เป็นสภาวะที่มาสเตอร์ทำให้ SDA และ SCL เป็น“1” ทั้งคู่ เพื่อที่จะเริ่มต้นการสื่อสาร
2. สภาวะเริ่มต้น Start เกิดขึ้นเมื่อมาสเตอร์ทำให้ SDA เปลี่ยนจาก“1” เป็น “0” ก่อน แล้วจึงเปลี่ยน SCL จาก “1” เป็น“0”
3. สภาวะบิตข้อมูล เกิดขึ้นโดยตัวส่งทำให้ SDA เป็นบิตข้อมูล “0” หรือ “1” ก่อน แล้วมาสเตอร์ทำให้เกิดสัญญาณนาฬิกาขึ้นที่ SCL ตัวรับจึงรับข้อมูลในช่วงดังกล่าว
4. สภาวะบิตรับรู้ ้ ACK หรือ Acknowledge เกิดขึ้นโดยตัวส่งทำให้ SDA เป็น “1” ก่อนแล้วมาสเตอร์ทำให้เกิดสัญญาณนาฬิกาขึ้นที่ SCL เมื่อตัวรับรับรู้แล้วก็จะทำให้ SDA เป็น “0”
5. สภาวะหยุด Stop เกิดขึ้นเมื่อมาสเตอร์ทำให้ SCL เปลี่ยนจาก“0” เป็น “1” ก่อน แล้วจึงเปลี่ยน SDA จาก “0” เป็น
“1”
รูปแบบสถานะในการรับ-ส่งข้อมูล

Start เป็นสถานะที่บอกเริ่มต้นการรับ-ส่งข้อมูล โดยการเปลี่ยนสัญญาณของ SDA จาก High ไปเป็น Low โดยที่ SCL ยังคงเป็น High อยู่
Control Byte ประกอบไปด้วย 3 ส่วน คือ
- ID ของอุปกรณ์จำนวน 4 บิต ซึ่งถูกกำหนดมาโดยผู้ผลิต IC หรืออุปกรณ์ I2C
- Device Address ขนาด 3 บิต สามารถกำหนดได้เองจากการจ่าย Logic หรือต่อขาให้กับ IC
- Mode ขนาด 1 บิต ใช้กำหนดว่าเป็นการ Read หรือ Write Data กับอุปกรณ์ IC
ACK หรือ Acknowledge เป็นบิตที่ใช้บอกว่า IC มีการตอบสนองต่อคำสั่งที่ได้รับมาแล้ว
DATA คือ ข้อมูลที่ต้องการเขียนหรืออ่านออกมาจาก IC ขึ้นกับ Mode ที่เราได้ตั้งค่าเอาไว้
STOP เป็นสถานะที่บอกให้อุปกรณ์รู้ว่าสิ้นสุดการรับส่งข้อมูลแล้ว โดย SDA จะเปลี่ยนจาก Low เป็น High ในขณะที่ SCL ยังเป็น High อยู่

การสื่อสารแบบ I2C มีรูปแบบดังรูป 1-2 และมีขั้นตอนการรับส่งข้อมูลเป็นลำดับ ดังนี้
การเข้าถึงแบบ 7 บิต(7-bit addressing)
ข้อมูลไบต์แรกที่เกิดขึ้นหลังจากสภาวะเริ่มต้นคือ ข้อมูลที่ใช้อ้างอุปกรณ์ที่ต้องการติดต่อโดยมีรูปแบบแสดงในรูป
ใน 7 บิตบนรวมทั้งบิต LSB ด้วยจะเป็นข้อมูลแอดเดรสของอุปกรณ์สเลฟที่ต้องการติดต่อ โดยแบ่งเป็น บิตกำหนดแอดเดรสคงที่(fix address bit) จำนวน 4 บิต ซึ่งข้อมูลนี้อุปกรณ์แต่ละตัวจะถูกกำหนดมาจากผู้ผลิต ไม่สามารถเปลี่ยนแปลงแก้ไขได้ ถัดมาอีก 3 บิตเป็นบิตกำหนดแอดเดรสที่สามารถโปรแกรมได้(programmable address bit) โดยผู้ใช้งานต้องกำหนดสถานะลอจิกให้แก่ขา A0-A2 ของอุปกรณ์ที่มีการเชื่อมต่อแบบบัส I2C ส่วนในบิต LSB ที่ใช้กำหนดการอ่านหรือเขียนข้อมูลกับอุปกรณ์สเลฟตัวนั้น ๆ หากบิต LSB เป็น "0" หมายถึงต้องการเขียนข้อมูลไปยังอุปกรณ์นั้น ถ้าเป็น "1" จะเป็นการอ่านข้อมูลจากอุปกรณ์สเลฟ
ข้อมูลในไบท์ต่อมาคือ ข้อมูลควบคุม(control byte) ในอุปกรณ์แต่ละตัวจะมีการกำหนดข้อมูลควบคุมที่แตกต่างกันไป ยกตัวอย่างเช่น ไอซีเมมโมรีของทีวีตระกูล 24Cxx จะต้องส่งข้อมูลแอดเดรสของหน่วยความจำก่อนที่จะทำการส่งข้อมูลไป
ข้อมูลในไบท์ต่อมาคือ ข้อมูลที่ทำการถ่ายทอดจริง(data)
หลังจากการถ่ายทอดข้อมูลในแต่ละไบท์ อุปกรณ์สเลฟที่ได้รับการติดต่อต้องส่งสัญญาณรับรู้ตอบกลับมาด้วยทุกครั้ง
การเข้าถึงแบบ 10 บิต(10-bit addressing)
จะมีข้อมูลเพิ่มเติิมขึ้นมาเล็กน้อย โดยในไบท์แรกหลักจากสภาวะเริ่มต้น ต้องกำหนดให้ 5 บิตบนมีข้อมูลเป็น 11110 ส่วนอีก 2 บิตถัดมาเป็นบิตแอดเดรสของอุปกรณ์ที่ต้องการติดต่อ ในบิต LSB ของข้อมูลไบท์แรกยังคงเป็นการกำหนดว่า ต้องการอ่านหรือเขียนข้อมูลกับอุปกรณ์สเลฟตัวที่ต้องการติดต่อด้วย ข้อมูลไบท์ต่อมาเป็นข้อมูลแอดเดรสในไบท์ที่ 2 ของอุปกรณ์ที่ต้องการติดต่อด้วย ข้อมูลไบท์ถัดไปจึงเป็นข้อมูลควบคุม ข้อมูลหลังจากนี้ก็จะเป็นข้อมูลจริงที่ใช้ในการติดต่อ
เช่นเดียวกัน กับการเข้าถึงแบบ 7 บิตหลังจากถ่ายทอดข้อมูลครบทุกไบท์ ต้องมีสภาวะรับรู้เกิดขึ้น เพื่อให้ขบวนการถ่ายทอดข้อมูลสามารถดำเนินต่อไปได้
ลำดับการทำงาน (Timing Diagram) ก็จะเริ่มต้นด้งนี้ครับ
1. ในสภาวะที่ยังไม่เริ่มทำงาน อุปกรณ์ทุกตัวจะมีแรงดันระดับสูง (H)
2. เมื่อเริ่มจะส่งข้อมูล SDA จะลดลงไปที่ระดับแรงดันศูนย์ (L) ในขณะที่ SCL ยังอยู่ที่ ็H จะเห็นในช่องที่แรงเงาสีเหลืองซ้ายสุด โดย SCL จะค้างที่ H นาน 0.6 ไมโครวินาที (tHDSTA: Hold Time to Start Condition) ผ่านช่วงเวลานี้ไปเป็นอันรู้กันว่า Master จะเริ่มสั่งการ (แต่ตอนนี้ยังไม่รู้นะครับว่าจะสั่ง Slave ตัวไหน เพราะอาจมีหลายตัวต่ออยู่บนบัส)
3. ตอนนี้ SCL จะลงไปที่ L จาก นั้น ระหว่างที่รอสัญญาณขาขึ้นของ Clock แรกอีก 1.3 ไมโครวินาที SDA จะเริ่มกำหนดค่า Bit แรก โดย Master จะส่งค่าบิตแรกไปพร้อมกับสัญญาณ Clock และไอซีที่เป็น Slave บนบัสจะเริ่มอ่านค่าในจังหวะที่ SCL เป็น H
4. จากนั้นก็จะเป็นอย่างนี้ไปอีกเพื่อส่งค่า Address ของไอซีที่ต้องการจะติดต่อด้วยไปรวมทั้งสิ้น 7 บิตและตามด้วยบิตที่ 8 ซึ่งจะระบุว่าจะสั่งให้ Slave รอคำสั่ง (Write ระบุโดย SDA เป็น H) หรือจะรออ่านค่าที่ส่งมาจาก Slave (Read ระบุค่าโดย SDA เป็น L)
5. บิตที่ 9 จะเป็นการตอบรับจาก Slave ที่มี Address ตรงกับที่ Master ส่งไป ถ้ามี Slave ตอบรับ (Acknoledge) โดยการดึงสัญญาณ SDA ลง L ก็แปลได้ว่ามี Slave พร้อมจะสื่อสารด้วย แต่ถ้าไม่มี คือ SDA ค้างที่ H แปลว่า (Not Acknowledge) Master ไม่มีใครคุยด้วย
6. หลังจาก Acknowledge กันเรียบร้อย (สมมุติว่ามีสัญญาณตอบรับ) จะเป็นช่วงเวลาที่ SCL ถูกดึงลง L เป็นเวลาสั้นๆ และ SDA จะถูกปล่อยว่าง ก่อนที่ Slave ที่ติดต่อด้วยจะเริ่มส่งค่า Bit แรกมาที่ SDA
7. จากนั้นสัญญาณ SCL จาก Master จะปล่อยออกมาเพื่ออ่านค่าสัญญาณบนสาย SDA ในจังหวะที่ SCL เป็น H และรับค่าเช่นนี้ไปเรื่อยๆ จน Data ครบ 8 บิตแรก ตามจังหวะสัญญาณ SCL
8. เมื่อ Data ครบ 8 บิตแรกแล้ว Master จะให้สัญญาณ Acknowledge โดยดึงสัญญาณเป็น L เพื่อแสดงให้ Slave รู้ว่า Master จะรอ Data อีก 8 บิตต่อไป (ในกรณีที่ข้อมูลที่ Slave ต้องการส่งเป็นแบบ 16 บิต)
9. จะกลับเข้าการทำงานในข้อ 6 และอ่านข้อมูลไปจนครบบิตที่ 9 - 16
10. จากนั้นเมื่อถึงจังหวะการ Acknowledge ในบิตที่ 9 คราวนี้ Slave ไม่ต้องการส่งข้อมูลต่อแล้ว เพราะครบ 16 บิตแล้ว Slave จะ ไม่ตอบสนองแล้ว สาย SDA จะถูกปล่อยให้เป็น H
11. จากนั้น Master จะรู้แล้วว่าข้อมูลมาครบถ้วน 16 บิต Master ก็จะสั่งหยุดโดยการส่งสัญญาณ ขาขึ้นในสาย SDA พร้อมๆกับ SCL เป็น H ก็เป็นอันรู้กันว่าคือ Stop bit หมายถึงส่งข้อมูลครบ Byte แรก ซึ่งเป็น Address ของ Slave ตัวที่ Master ต้องการคุยด้วย
มันก็เข้าใจยากอยู่ครับ ลองอ่านดูช้าๆ และดูรูป timing diagram ด้านบนประกอบนะครับ
ทีนี้ถ้าต้องการอ่านคู่มือจริง ต้นตำหรับจาก NXP Semiconductor ก็ไปที่นี่เลยครับ
สังเกตอีกนิดจะเห็นว่า สัญญาณ Start และ Stop จะส่งโดย Master เท่านั้น โดย Start คือ ให้ SDA เปลี่ยนจาก H เป็น L ในจังหวะที่ SCL เป็น H ส่วนการ Stop ก็คิอให้ SDA เปลี่ยนจาก L เป็น H ในจังหวะที่ SCL เป็น H และที่ว่ามาทั้งหมด Master จะเป็นตัวปล่อยสัญญาณ SCL ครับ
อ่านแล้วคงจะรู้สึกยาก ก็ไม่ต้องกังวลครับ เพราะเราไม่ต้องเขียนโปรแกรมที่คุมสัญญาณแต่ละเส้นเอง Arduino เขาทำ Library ที่ชื่อว่า Wire มาให้แล้ว สบายครับ เราแค่เลือก Address ของอุปกรณ์ให้ถูก แล้วปล่อยให้ Wire.h จัดการส่ง รับค่าให้เราครับ
Library ที่ชื่อ wire.h ก็ไม่ต้องไปหา download ให้ยุ่งครับ มันมีอยู่แล้วใน Arduino IDE เรียกใช้กันได้เลย เพียงแค่ Add ชื่อไว้ตอนเริ่มต้น Sketch ที่จะใช้ก็เท่านั้น รายละเอียดวิธีใช้งาน Library wire.h ก็ดดูได้ที่นี่ครับ
Functions ต่างๆ ของ wire.h ก็ดูตามนี้เลยครับ
รูป 1-1 การเชื่อมต่ออุปกรณ์ แบบ I2C บัส [2, p.1]
1. Normal Mode: 100Kbps
2. Fast Mode: 400Kbps
3. Fast Mode Plus: 1Mbps
4. High Speed Mode: 3.4 Mbps
ตัวอย่างการต่อใช้งาน I2C
จากภาพแสดงให้เห็นว่าในการใช้งาน I2C สามารถต่อใช้งานกับอุปกรณ์ได้มากกว่าหนึ่งตัวบนสายสัญญาณ 1 ชุด (2 เส้น) โดยเลือกติดต่อกับอุปกรณ์ใดได้ด้วยการกำหนดแอดเดรสทางฮาร์ดแวร์ให้กับ อุปกรณ์ตัวนั้นและต้องมีการ Pull-Up ให้กับสายสัญญาณทั้ง 2 เส้น
ภาวะที่เกิดขึ้นบนบัส I2C
มีด้วยกัน 5 สภาวะดังนี้
1. บัสว่าง เป็นสภาวะที่มาสเตอร์ทำให้ SDA และ SCL เป็น“1” ทั้งคู่ เพื่อที่จะเริ่มต้นการสื่อสาร
2. สภาวะเริ่มต้น Start เกิดขึ้นเมื่อมาสเตอร์ทำให้ SDA เปลี่ยนจาก“1” เป็น “0” ก่อน แล้วจึงเปลี่ยน SCL จาก “1” เป็น“0”
3. สภาวะบิตข้อมูล เกิดขึ้นโดยตัวส่งทำให้ SDA เป็นบิตข้อมูล “0” หรือ “1” ก่อน แล้วมาสเตอร์ทำให้เกิดสัญญาณนาฬิกาขึ้นที่ SCL ตัวรับจึงรับข้อมูลในช่วงดังกล่าว
4. สภาวะบิตรับรู้ ้ ACK หรือ Acknowledge เกิดขึ้นโดยตัวส่งทำให้ SDA เป็น “1” ก่อนแล้วมาสเตอร์ทำให้เกิดสัญญาณนาฬิกาขึ้นที่ SCL เมื่อตัวรับรับรู้แล้วก็จะทำให้ SDA เป็น “0”
5. สภาวะหยุด Stop เกิดขึ้นเมื่อมาสเตอร์ทำให้ SCL เปลี่ยนจาก“0” เป็น “1” ก่อน แล้วจึงเปลี่ยน SDA จาก “0” เป็น
“1”
รูปแบบสถานะในการรับ-ส่งข้อมูล
Start เป็นสถานะที่บอกเริ่มต้นการรับ-ส่งข้อมูล โดยการเปลี่ยนสัญญาณของ SDA จาก High ไปเป็น Low โดยที่ SCL ยังคงเป็น High อยู่
Control Byte ประกอบไปด้วย 3 ส่วน คือ
- ID ของอุปกรณ์จำนวน 4 บิต ซึ่งถูกกำหนดมาโดยผู้ผลิต IC หรืออุปกรณ์ I2C
- Device Address ขนาด 3 บิต สามารถกำหนดได้เองจากการจ่าย Logic หรือต่อขาให้กับ IC
- Mode ขนาด 1 บิต ใช้กำหนดว่าเป็นการ Read หรือ Write Data กับอุปกรณ์ IC
ACK หรือ Acknowledge เป็นบิตที่ใช้บอกว่า IC มีการตอบสนองต่อคำสั่งที่ได้รับมาแล้ว
DATA คือ ข้อมูลที่ต้องการเขียนหรืออ่านออกมาจาก IC ขึ้นกับ Mode ที่เราได้ตั้งค่าเอาไว้
STOP เป็นสถานะที่บอกให้อุปกรณ์รู้ว่าสิ้นสุดการรับส่งข้อมูลแล้ว โดย SDA จะเปลี่ยนจาก Low เป็น High ในขณะที่ SCL ยังเป็น High อยู่
การสื่อสารแบบ I2C มีรูปแบบดังรูป 1-2 และมีขั้นตอนการรับส่งข้อมูลเป็นลำดับ ดังนี้
- เพื่อเริ่มต้นสถานะการสื่อสารแบบ I2C อุปกรณ์ Master เริ่มจะส่งคำสั่ง START ซึ่งจะทำให้อุปกรณ์Slave ทุกตัวที่อยู่ใน Bus เตรียมพร้อมรับข้อมูลจากสายส่งข้อมูล (SDA)
- อุปกรณ์ Master ส่ง Address ขนาด 7 บิตและตามด้วยคำสั่งอ่านหรือเขียน (Read/Write) อีก 1บิต
- อุปกรณ์ Slave ทุกตัวใน Bus จะตรวจสอบ Address ในสายส่งข้อมูลว่าตรงกับ Address ของตนหรือไม่หากตรงกัน จะส่งสัญญาณ ACK ขนาด 1 บิต กลับไปยังอุปกรณ์ Master เพื่อเตรียมพร้อมด่าเนินการต่อไป
- การรับส่งข้อมูลระหว่าง Master และ Slave ที่ระบุ Address จะด่าเนินการอย่างต่อเนื่อง ในกรณีที่Master ส่งคำสั่ง Read อุปกรณ์ Slave จะส่งข้อมูลเป็นชุดๆ ชุดละ 8 บิต (1 ไบต์) เมื่ออุปกรณ์Master จะส่งสัญญาณ ACK เมื่อได้รับทุกๆ ไบต์
- อุปกรณ์ Master จะส่งคำสั่ง STOP เพื่อสิ้นสุดสถานะการสื่อสารแบบ I2C
รูป 1-2 รูปแบบการสื่อสารแบบ I2C
การเข้าถึงแบบ 7 บิต(7-bit addressing)
ข้อมูลไบต์แรกที่เกิดขึ้นหลังจากสภาวะเริ่มต้นคือ ข้อมูลที่ใช้อ้างอุปกรณ์ที่ต้องการติดต่อโดยมีรูปแบบแสดงในรูป
ใน 7 บิตบนรวมทั้งบิต LSB ด้วยจะเป็นข้อมูลแอดเดรสของอุปกรณ์สเลฟที่ต้องการติดต่อ โดยแบ่งเป็น บิตกำหนดแอดเดรสคงที่(fix address bit) จำนวน 4 บิต ซึ่งข้อมูลนี้อุปกรณ์แต่ละตัวจะถูกกำหนดมาจากผู้ผลิต ไม่สามารถเปลี่ยนแปลงแก้ไขได้ ถัดมาอีก 3 บิตเป็นบิตกำหนดแอดเดรสที่สามารถโปรแกรมได้(programmable address bit) โดยผู้ใช้งานต้องกำหนดสถานะลอจิกให้แก่ขา A0-A2 ของอุปกรณ์ที่มีการเชื่อมต่อแบบบัส I2C ส่วนในบิต LSB ที่ใช้กำหนดการอ่านหรือเขียนข้อมูลกับอุปกรณ์สเลฟตัวนั้น ๆ หากบิต LSB เป็น "0" หมายถึงต้องการเขียนข้อมูลไปยังอุปกรณ์นั้น ถ้าเป็น "1" จะเป็นการอ่านข้อมูลจากอุปกรณ์สเลฟ
ข้อมูลในไบท์ต่อมาคือ ข้อมูลควบคุม(control byte) ในอุปกรณ์แต่ละตัวจะมีการกำหนดข้อมูลควบคุมที่แตกต่างกันไป ยกตัวอย่างเช่น ไอซีเมมโมรีของทีวีตระกูล 24Cxx จะต้องส่งข้อมูลแอดเดรสของหน่วยความจำก่อนที่จะทำการส่งข้อมูลไป
ข้อมูลในไบท์ต่อมาคือ ข้อมูลที่ทำการถ่ายทอดจริง(data)
หลังจากการถ่ายทอดข้อมูลในแต่ละไบท์ อุปกรณ์สเลฟที่ได้รับการติดต่อต้องส่งสัญญาณรับรู้ตอบกลับมาด้วยทุกครั้ง
การเข้าถึงแบบ 10 บิต(10-bit addressing)
จะมีข้อมูลเพิ่มเติิมขึ้นมาเล็กน้อย โดยในไบท์แรกหลักจากสภาวะเริ่มต้น ต้องกำหนดให้ 5 บิตบนมีข้อมูลเป็น 11110 ส่วนอีก 2 บิตถัดมาเป็นบิตแอดเดรสของอุปกรณ์ที่ต้องการติดต่อ ในบิต LSB ของข้อมูลไบท์แรกยังคงเป็นการกำหนดว่า ต้องการอ่านหรือเขียนข้อมูลกับอุปกรณ์สเลฟตัวที่ต้องการติดต่อด้วย ข้อมูลไบท์ต่อมาเป็นข้อมูลแอดเดรสในไบท์ที่ 2 ของอุปกรณ์ที่ต้องการติดต่อด้วย ข้อมูลไบท์ถัดไปจึงเป็นข้อมูลควบคุม ข้อมูลหลังจากนี้ก็จะเป็นข้อมูลจริงที่ใช้ในการติดต่อ
เช่นเดียวกัน กับการเข้าถึงแบบ 7 บิตหลังจากถ่ายทอดข้อมูลครบทุกไบท์ ต้องมีสภาวะรับรู้เกิดขึ้น เพื่อให้ขบวนการถ่ายทอดข้อมูลสามารถดำเนินต่อไปได้
ลำดับการทำงาน (Timing Diagram) ก็จะเริ่มต้นด้งนี้ครับ
1. ในสภาวะที่ยังไม่เริ่มทำงาน อุปกรณ์ทุกตัวจะมีแรงดันระดับสูง (H)
2. เมื่อเริ่มจะส่งข้อมูล SDA จะลดลงไปที่ระดับแรงดันศูนย์ (L) ในขณะที่ SCL ยังอยู่ที่ ็H จะเห็นในช่องที่แรงเงาสีเหลืองซ้ายสุด โดย SCL จะค้างที่ H นาน 0.6 ไมโครวินาที (tHDSTA: Hold Time to Start Condition) ผ่านช่วงเวลานี้ไปเป็นอันรู้กันว่า Master จะเริ่มสั่งการ (แต่ตอนนี้ยังไม่รู้นะครับว่าจะสั่ง Slave ตัวไหน เพราะอาจมีหลายตัวต่ออยู่บนบัส)
3. ตอนนี้ SCL จะลงไปที่ L จาก นั้น ระหว่างที่รอสัญญาณขาขึ้นของ Clock แรกอีก 1.3 ไมโครวินาที SDA จะเริ่มกำหนดค่า Bit แรก โดย Master จะส่งค่าบิตแรกไปพร้อมกับสัญญาณ Clock และไอซีที่เป็น Slave บนบัสจะเริ่มอ่านค่าในจังหวะที่ SCL เป็น H
4. จากนั้นก็จะเป็นอย่างนี้ไปอีกเพื่อส่งค่า Address ของไอซีที่ต้องการจะติดต่อด้วยไปรวมทั้งสิ้น 7 บิตและตามด้วยบิตที่ 8 ซึ่งจะระบุว่าจะสั่งให้ Slave รอคำสั่ง (Write ระบุโดย SDA เป็น H) หรือจะรออ่านค่าที่ส่งมาจาก Slave (Read ระบุค่าโดย SDA เป็น L)
5. บิตที่ 9 จะเป็นการตอบรับจาก Slave ที่มี Address ตรงกับที่ Master ส่งไป ถ้ามี Slave ตอบรับ (Acknoledge) โดยการดึงสัญญาณ SDA ลง L ก็แปลได้ว่ามี Slave พร้อมจะสื่อสารด้วย แต่ถ้าไม่มี คือ SDA ค้างที่ H แปลว่า (Not Acknowledge) Master ไม่มีใครคุยด้วย
6. หลังจาก Acknowledge กันเรียบร้อย (สมมุติว่ามีสัญญาณตอบรับ) จะเป็นช่วงเวลาที่ SCL ถูกดึงลง L เป็นเวลาสั้นๆ และ SDA จะถูกปล่อยว่าง ก่อนที่ Slave ที่ติดต่อด้วยจะเริ่มส่งค่า Bit แรกมาที่ SDA
7. จากนั้นสัญญาณ SCL จาก Master จะปล่อยออกมาเพื่ออ่านค่าสัญญาณบนสาย SDA ในจังหวะที่ SCL เป็น H และรับค่าเช่นนี้ไปเรื่อยๆ จน Data ครบ 8 บิตแรก ตามจังหวะสัญญาณ SCL
8. เมื่อ Data ครบ 8 บิตแรกแล้ว Master จะให้สัญญาณ Acknowledge โดยดึงสัญญาณเป็น L เพื่อแสดงให้ Slave รู้ว่า Master จะรอ Data อีก 8 บิตต่อไป (ในกรณีที่ข้อมูลที่ Slave ต้องการส่งเป็นแบบ 16 บิต)
9. จะกลับเข้าการทำงานในข้อ 6 และอ่านข้อมูลไปจนครบบิตที่ 9 - 16
10. จากนั้นเมื่อถึงจังหวะการ Acknowledge ในบิตที่ 9 คราวนี้ Slave ไม่ต้องการส่งข้อมูลต่อแล้ว เพราะครบ 16 บิตแล้ว Slave จะ ไม่ตอบสนองแล้ว สาย SDA จะถูกปล่อยให้เป็น H
11. จากนั้น Master จะรู้แล้วว่าข้อมูลมาครบถ้วน 16 บิต Master ก็จะสั่งหยุดโดยการส่งสัญญาณ ขาขึ้นในสาย SDA พร้อมๆกับ SCL เป็น H ก็เป็นอันรู้กันว่าคือ Stop bit หมายถึงส่งข้อมูลครบ Byte แรก ซึ่งเป็น Address ของ Slave ตัวที่ Master ต้องการคุยด้วย
มันก็เข้าใจยากอยู่ครับ ลองอ่านดูช้าๆ และดูรูป timing diagram ด้านบนประกอบนะครับ
ทีนี้ถ้าต้องการอ่านคู่มือจริง ต้นตำหรับจาก NXP Semiconductor ก็ไปที่นี่เลยครับ
สังเกตอีกนิดจะเห็นว่า สัญญาณ Start และ Stop จะส่งโดย Master เท่านั้น โดย Start คือ ให้ SDA เปลี่ยนจาก H เป็น L ในจังหวะที่ SCL เป็น H ส่วนการ Stop ก็คิอให้ SDA เปลี่ยนจาก L เป็น H ในจังหวะที่ SCL เป็น H และที่ว่ามาทั้งหมด Master จะเป็นตัวปล่อยสัญญาณ SCL ครับ
อ่านแล้วคงจะรู้สึกยาก ก็ไม่ต้องกังวลครับ เพราะเราไม่ต้องเขียนโปรแกรมที่คุมสัญญาณแต่ละเส้นเอง Arduino เขาทำ Library ที่ชื่อว่า Wire มาให้แล้ว สบายครับ เราแค่เลือก Address ของอุปกรณ์ให้ถูก แล้วปล่อยให้ Wire.h จัดการส่ง รับค่าให้เราครับ
Library ที่ชื่อ wire.h ก็ไม่ต้องไปหา download ให้ยุ่งครับ มันมีอยู่แล้วใน Arduino IDE เรียกใช้กันได้เลย เพียงแค่ Add ชื่อไว้ตอนเริ่มต้น Sketch ที่จะใช้ก็เท่านั้น รายละเอียดวิธีใช้งาน Library wire.h ก็ดดูได้ที่นี่ครับ
Functions ต่างๆ ของ wire.h ก็ดูตามนี้เลยครับ
- begin()
- requestFrom()
- beginTransmission()
- endTransmission()
- write()
- available()
- read()
- onReceive()
- onRequest()
| Board | I2C / TWI pins |
| Uno,Ethernet | A4 (SDA), A5 (SCL) |
| Mega2560 | 20 (SDA), 21 (SCL) |
| Leonardo | 2 (SDA), 3 (SCL) |
| Due | 20 (SDA), 21 (SCL), SDA1, SCL1 |
วันพฤหัสบดีที่ 23 กุมภาพันธ์ พ.ศ. 2560
RS-422 and RS-485 Standards Overview and System
มาตรฐาน RS-422 หรือ RS-422-A ถูกกำหนดขึ้นโดยสมาคมผู้ประกอบการอุตสาหกรรมอิเล็กทรอนิกส์หรือ EIA เช่นเดียวกันกับมาตรฐาน RS-232 โดยมีจุดมุ่งหมายที่จะแก้ปัญหาเรื่องความยาวของสายสื่อสารโดยใช้การส่งสัญญาณแบบผลต่าง (Differential) แทนที่จะใช้การส่งสัญญาณแบบอ้างอิงกับจุดกราวนด์ (หรือสายดิน) เช่นเดียวกันกับ RS-232 การส่งสัญญาณแบบ Differential นี้ช่วยลดปัญหาสัญญาณรบกวนจาก 2 ปัจจัยด้วยกัน ได้แก่ ปัญหาแรงดันกราวนด์ 2 ฝั่งสายไม่เท่ากัน อันเกิดจากกระแสไฟฟ้าที่ไหลในสายกราวนด์ที่ยาวมากๆ ก่อให้เกิดความต่างศักดิ์ และปัญหาสัญญาณรบกวนที่เกิดจากแม่เหล็กไฟฟ้าเหนี่ยวนำในสาย โดยหากสายไฟที่ใช้ถูกตีเกลียวและวางไว้ใกล้กัน เมื่อมีแรงดันเหนี่ยวนำจะปรากฏแรงดันรบกวนบนสายทั้งสองเท่าๆ กันเป็นผลให้ ตัวรับที่อ่านความต่างศักดิ์ระหว่างสายอ่านข้อมูลได้เช่นเดิม ทั้งสองปัจจัยนี้เองเป็นสาเหตุที่ทำให้ความต้านทานต่อสัญญาณรบกวนของการสื่อสารแบบ RS-232 ด้อยกว่า RS-422) ตามมาตรฐานRS-422 นี้จะใช้สายสัญญาณทั้งหมด 4 เส้น (2 เส้นสำหรับการส่งสัญญาณ และอีก 2 เส้นสำหรับรับสัญญาณ) และสามารถใช้ความยาวสายสัญญาณได้ถึง 4,000 ฟุต (หรือ 1.2 กม.) ที่ความเร็ว 100,000 บิทต่อวินาที และการสื่อสารเป็นแบบ 2 ทางพร้อมกัน (Full Duplex)
มาตรฐาน RS-485 กำหนดโดยสมาคมผู้ประกอบการอุตสาหกรรมอิเล็กทรอนิกส์หรือ EIA เป็นมาตรฐานการเชื่อมต่อสัญญาณแบบอนุกรม (Serial Communication) มีลักษณะการเชื่อมต่อเป็นแบบหลายจุด (Multi-point) หรือ Multi-drop สายสัญญาณที่ใช้มีทั้งแบบที่เป็น 2 สายและแบบที่เป็น 4 สาย การต่อแบบหลายจุดนี้ทำให้สามารถมองสายสัญญาณเป็นบัสนำสัญญาณได้ (Signal Bus) จำนวนคอมพิวเตอร์หรืออุปกรณ์ที่สามารถอยู่บน RS-485 บัสหนึ่งถูกกำหนดไว้ที่ 32 ตัว ในกรณีที่ต้องการเพิ่มจะต้องมีตัวทวนสัญญาณ (Signal Repeater) หรือใช้ตัวส่ง-รับสัญญาณที่มีอิมพิแดนซ์ (ความต้านทานเสมือน) สูงขึ้น ซึ่งเราอาจเพิ่มจำนวนจุดเชื่อมต่อขึ้นได้ถึง 128 จุด ความยาวของสายสัญญาณตามมาตรฐาน RS-485 นี้สามารถยาวได้ถึง 1.2 กม เช่นเดียวกับมาตรฐาน RS-422 แต่การสื่อสารจะเป็นแบบสองทางไม่พร้อมกัน (Half Duplex) มีเพียงคอมพิวเตอร์หรืออุปกรณ์ตัวเดียวเท่านั้นที่สามารถส่งสัญญาณออกได้ ณ เวลาหนึ่งๆ ส่วนที่เหลือจะเป็นผู้รับสัญญาณ หรือผู้ฟัง
ในระบบเครือข่าย RS-422/485 นั้นไม่มีข้อกำหนดในหัวข้อรูปแบบการเชื่อมต่อ การออกแบบการเชื่อมต่อมักขึ้นอยู่กับความต้องการของระบบ
ระบบ 2 สาย และ 4 สาย (Two-wire and Four-wire System)
ระบบ RS-422 ใช้ 1 คู่สายสำหรับแต่ละสัญญาณ เช่น 1 คู่สายสำหรับสายส่ง , 1 คู่สายสำหรับสายรับ และในบางกรณีอาจมี 1 คู่สายทำหน้าที่ควบคุมการทำ tri-state ( handshake line ) ในการทำ tri-stated ของ RS-485 มีความสามารถทำให้การรับ-ส่งข้อมูลผ่านสายสัญญาณคู่เดียวกันได้หรือมีลักษณะการสื่อสารแบบ Half-duplex
รูปแบบการเชื่อมต่อในลักษณะ 2 สายจะช่วยลดค่าใช้จ่ายในการเชื่อมต่อระบบได้เนื่องจากใช้สายน้อยกว่า(สายสัญญาณ 2 สายและสายกราวด์ 1 สาย) ในการต่อแบบ 2 สายของอุปกรณ์ RS-485 จะมีข้อกำหนดการเชื่อมต่อทั้งแบบภายในและภายนอก ในการเชื่อมต่อภายในจะมีขั้วต่อ A และ B (ในบางครั้งแทนด้วย – และ + ) ให้ทำการเชื่อมต่อเข้ากับสายส่ง
รูปแบบการเชื่อมต่อแบบ 4 สายจะมีขั้ว A และ B ทั้งที่ตัวส่งและตัวรับ ผู้ใช้สามารถส่งข้อมูลให้กับตัวรับโดยผ่านสาย 2 เส้นและส่งข้อมูลกลับผ่านสายอีก 2 สาย สายกราวด์ยังเป็นสายที่มีความสำคัญต่อระบบจำเป็นต้องใช้เป็นจุดอ้างอิงในการรักษาระดับแรงดันคอมมอนหรือ Vcm (แรงดันที่วัดระหว่างสายสัญญาณแต่ละเส้นเทียบกับสายกราวด์) ระบบสามารถทนแรงดันคอมมอนได้ที่ค่าหนึ่ง ดังนั้นจำเป็นต้องรักษาแรงดันดังกล่าวให้อยู่ในช่วงที่อุปกรณ์รับได้ ถ้าไม่มีสายกราวด์ในระบบจะทำให้เกิดสัญญาณรบกวน ( noise ) และระบบจะไม่มีความมั่นคง
- การเชื่อมต่อ RS422 แบบ Full Duplex เป็นการรับส่งข้อมูลแบบ 2 ทิศทาง สามารถรับส่งได้พร้อมกันตลอดเวลา
โดยแต่ละชุดจะมีสายสัญญาณชุดละ 2 คู่ ( 4 เส้น ) ลักษณะการรับส่งคล้ายกับการพูดคุยโทรศัพท์ทั่วไป โดยต่อสัญญาณจากวงจรรับเข้ากับวงจรส่งของทั้ง 2 ฝ่าย แต่ในการรับส่งแบบนี้จะใช้กับอุปกรณ์แบบ “Point-to-Point”คือมีตัวต้นทางและปลายทางอย่างละ 1 ตัว เหตุผลที่ใช้การสื่อสารแบบ RS422ก็เพื่อเพิ่มระยะทางการรับส่งให้ได้ไกลมากขึ้น โดยไม่ต้องดัดแปลงแก้ไขโปรแกรมเลย
การต่อสาย RS422 แบบ Full Duplex
การเชื่อมต่อ RS422 แบบ Simplex เป็นการรับส่งข้อมูลแบบทิศทางเดียว โดยกําหนดทิศทางไว้คงที่ โดยทิศทาง
นั้นอาจเป็นรับเข้าอย่างเดียวหรือส่งออกอย่างเดียว ซึ่งวิธีนี้จะใช้สายสัญญาณ 1 คู่ ( 2 เส้น ) ข้อดีที่พิเศษคือ วงจรทางด้านภาคส่ง 1 ชุด สามารถต่อเข้ากับวงจรทางด้านรับได้มากถึง 32 ชุด โดยใช้สายเพียงคู่เดียว
การต่อสาย RS422 แบบ Simplex
การต่อสาย RS422 แบบรับหลายตัวพร้อมกัน
การเชื่อมต่อแบบ RS485
จะต่อกันแบบขนานทั้งระบบ วิธีการต่อแบบนี้ต้องมีการจัดอันดับความสําคัญของอุปกรณ์ที่ต่ออยู่ในระบบ คือ ให้มีอุปกรณ์ทําหน้าที่เป็นตัวแม่่ (Master) 1 ตัว สําหรับทําหน้าที่เป็นตัวกลางในการรับส่งข้อมูลเองทั้งหมด หรือเป็นเพียงการจัดลําดับการรับส่งให้กับอุปกรณ์ตัวอื่นๆ ส่วนตัวลูก (Slave) ในครั้งแรกต้องกําหนดให้เป็นการรับข้อมูลไว้ตลอดเวลา ตัวแม่จะทําหน้าที่ Scan ตัวลูกทีละตัว เพื่อตรวจสอบว่ามีข้อมูลที่ต้องการส่งหรือไม่ ถ้ามีต้องส่งถึงตัวใด แล้วตัวแม่จึงสั่งให้อุปกรณ์ตัวที่ระบุนั้นคอยรับข้อมูลโดยตรงเอง แล้วตัวแม่จะเปลี่ยนทิศทางมาเป็นรับข้อมูลเพื่อปล่อยสายสัญญาณให้ว่าง เพื่อที่อุปกรณ์ทั้งสองตัวที่ได้รับอนุญาตจะได้รับส่งข้อมูลกันต่อไป เมื่อทั้งคู่ทําการรับส่งข้อมูลกันเสร็จแล้ว ตัวลูกต้องส่งคําสั่งมาบอกตัวแม่่ให้ทราบว่า เสร็จแล้ว เพื่อตัวแม่จะได้ Scan ตัวอื่นต่อไป
การต่อสาย RS485 แบบขนาน
ต่อกันแบบ Point-to-Point วิธีนี้ใช้รับส่งข้อมูลระหว่างอุปกรณ์ 2 ตัว ใช้สายสัญญาณ 1 คู่ โดยอุปกรณ์ทั้ง2 ตัวต้องควบคุมทิศทางให้เป็นทั้งรับและส่ง โดยการสื่อสารต้องมีข้อกําหนดการรับส่งข้อมูลด้วย ซึ่งอุปกรณ์ทั้ง 2 ตัวนี้ต้องผลัดกันรับผลัดกันส่งข้อมูล ไม่สามารถรับส่งในเวลาเดียวกันได้
การต่อสาย RS485 แบบ Point –to-Point
ข้อมูลอ้างอิง : B&B Electronic.
สมัครสมาชิก:
ความคิดเห็น (Atom)




















.jpg)



