อุปกรณ์หลายๆตัว นั้น สื่อสารผ่าน UART ส่ง packets ของ pre-defined size นั้น บรรจุ
ข้อมูลเพิ่มเติมเกี่ยวกับการเริ่มและจบ ข้อความการยืนยันหรือว่า ข้อความที่ได้รับได้อย่างถูกต้อง.
สำหรับตัวอย่าง, เพื่อเริ่ม การติดต่อ, การติดต่อสื่อสาร อุปกรณ์ ส่ง สัญญาณลงต่ำ, เริ่มต้น
การแสดง ของชุดข้อมูล . Long-term, อย่างไรก็ตาม,นี้หมายความว่า this means that UART
เป็นการเปรียบเทียบอย่างช้าๆเพื่อจะ synchronized จากการ communication
เนื่องจากเพียงส่วนนึง ของข้อมูลที่ส่งไปแล้ว สำหรับอุปกรณ์’ การใช้งาน(ส่วนที่เหลือ
เป็น การสื่อสาร สำหรัีบตัวเอง )
เมื่อ เริ่มต้นการใช้งาน ชUART serial communication บนอุปกรณ์ embedded platforms
เช่น Arduino, ผู้ใช้ไม่สามารถ จัดการ กับการสื่อสารในระดับ บิต. แทน,รูปแบบ
บ่อยครั้งต้องการ provides ระดับสูง higher level software libraries นั้นเป็น อย่างเดียว
ลักษณะ รุปแบบ ของ กระบวนการติดต่อสื่อสาร ผู้ใช้ มี เพื่อรับมือ. ใน Arduino platform,
ผู้ใช้งาน สามารถใช้ Serial และ SoftwareSerial libraries เพื่อใช้กำเนินการ UART สื่อสาร
เพื่อโครงงานของพวกเค้า
ต่อไปนี้คือ C++สั้น สำหรับอ้างอิ้ง การใช้งาน Arduino Serial and SoftwareSerial
การเริ่มต้นและการใช้งาน
สิงสำคัญอย่างนึงทิศทางเพื่อบันทึกทุกระหว่างที่ UART communication เป็น นั้นมันคือ
ผุ้ออกแบบ การสื่อสาร ระหว่าง สองอุปกรณ์ในเวลานั้น. เนื่องจาก protocol ส่งค่า bits
เพียงอย่างเดียว จะแสดง เมื่อเริ่มต้น ข้อความ, เนื้อหาข้อความ, และ สิ้นสุดข้อความ,
ที่นั้น there is ไม่มีวิธี no method of สร้างความแตกต่างในการส่งสัญญาหลายๆอย่าง และ
รับข้อมูล อุปกรณ์ บน สายเดียวกัน. ถ้ามากกว่า 1อุปกรณ์ พยายามที่จะส่ง ข้อมูลบน
สายเดียวกัน , bus contention occurs, และอุปกณณืรับข้อมูล จะ will ส่วนใหญ่
จะรับข้อมูลขยะ ใช้งานไม่ได้
ขอกจากนี้ UART เป็น half-duplex, อันซึ่งหมายความว่าการสื่อสารสามารถเกิดขึ้นได้สองทาง,
อุปกรณ์ทั้งคู่ ไม่สามารถส่งข้อมูลวึ่งกันแหละกันในเวลาเดียวกัน. ในโครงการที่ สอง Arduinos
เป็น การสื่อสารแต่ละอันผ่านการเชื่อต่อแบบอณุกรม, จากตัวอย่าง,
นี้ต้องการจะหมายถึงในเวลาที่กำหนด, มีเพียงอันเดียว the Arduinos สามารถ “talking”
ถึงส่วนอื่นๆ . สำคัญที่สุด applications, อย่างไรก็ตาม ,ความจริงนี้ เป็น สัมพันธ์
ไม่สำคัญเสียเปรียบ อย่างไรก็ตาม.
2. SPI
ต่อไป communication protocol พวกเราจะควบคุมถึง Serial Peripheral Interface (SPI).
SPI แตกต่าง จาก UART ในหลายวิธีที่สำคัญ :
Synchronous(เชื่อมต่อ)
ปฎิบัติตมโมเดลอย่าง master-slave ,ที่ไหน where ที่นั้น there เป็นอุปกรณ์ตัวหลักหนึ่งเดียวและ slave devices หลายตัว
มากกว่าสองสายต้องการเพื่อเพิ่มการดำเนินงาน
hardware ไดอาแกรมการเชื่อมต่อของ SPI มีเล็กน้อยกว่าความซับซ่อน, and และรุปลักษณ์บางอย่างงี้:
Figure 4. Hardware connection diagram for SPI
featureแรก เกี่ยวกับ SPI ที่จะต้องทราบ นั้นมันเป็นการติดตาม โมงเดล master-slave.
นี้หมาความว่า นั้นเป็นการสื่อสาร โดยอาศัย หนึ่ง device กำหนด เป็นตัว master,
and devicesอื่นๆเป็น slaves. การสร้างนี้ ลำดับขั้น ระหว่าง the devices มีความหมาย
ที่ ซึ่ง device มีประสิทธิภาพ “in control”ของคนอื่นๆ . เราจะพูดถึง master-slave model
นี้ ในไม่ช้า เมื่อเราอธิบายอะไรของ a sample communicationระหว่าง master และ
slave device อาจจะดูเหมือน.
พวกเราบันทึกแบบง่ายนั้นคือ multiple slaves สามารถติดต่อได้กับ
can be single master device. hardware diagram for ระบบดังกล่าว
อาจจะมีลักษณะเหมือนดังนี้:
Figure 5. Multiple-slaves connected to a single master
SPI ไม่จำเป็นที่จะต้องแยกการส่ง และรับข้อมูล เพื่อแต่ละ slave นั้นคือการเชื่อไปถึงmaster.
หนึ่งเส้น common receive (MISO) และ หนึ่งเส้น common transmit (MOSI),
รวมมี หนึ่ง common clock (SCK) เป็นการเชื่อมต่อ ระหว่าง ทั้ง the slaves and the master.
The master device ติดสินใจ ที่ slave มันทีการติดต่อมีตลอดแยกเส้น สำหรับแต่ละ slave.
นี้คือวิธีนั้นแต่ละ additional slave นั้นคือ the master communicates มีความต้องการ
อื่น GPIO pin บน master’คือด้านข้าง.
SPI เป็นการ synchronous, ที่หมายความว่า นั้นคือการ communication ระหว่าง master
และ slave ปิดออกโดยสัญญาณนาฬิกา(a square wave of fixed-frequency)
กำหนดโดยmaster device. นี้แหละ พวกเราเห็น หนึ่งใน ความผลกระทยสำคัญ ของ
โมเดล master-slave. master device ขับเคลื่อน การติดต่อจาก communication
การระบุ ความเร็วในกาติดต่อ ตลอดจนสัญญาณนาฬิกา , และ slaves การโต้ตอบ จาก
และความเร็วcommunicating . นี้คือคำจำกัดความของ ความเร็วทำงานเพื่อ
ความเร็วในการสื่อสารr masterตัดสินใจ (within the maximum speed tolerable by the slave
devices).
ใน SPI,2 ความสามารถเฉาะของ สัญญาณ นาฬิกา พิจารณา ที่การเริ่ม และจบของ
การถ่านทอดข้อมูล: the clock polarity (CPOL) และ clock phase (CPHA). CPOL
โอยอ้างอิ้ง idle state (either low or high) ของ clock signal. To conserve power,
อุปกรณ์ จะ ให้ สัญญาณเส้น นาฬิกา ที่ idle state เมื่อไม่มี communicating กับตัว slaves,
และ 2 options ใช้ได้เพื่อ idle state เป็นทั้งสอง lowหรือ high. CPHA อ้างไปที่ขอบ ของ
clock signal ขึ้นบน ข้อมูลใดถูกจับ. นี้ square wave มีสองมุม
(the rising edge and the falling edge), และขึ้นอยุ่กับ บน CPHA ตั้งค่าข้อมูล
จับทั้งขอบบนและที่ตกขอบ.
There are four แตกต่าง อยู่ร่วมกัน ของ CPOL และ CPHA, นั้นสามารถ สรุปในตาราง
Wikipedia แสดง การทำงาน graphically เป้นตัวแทนของ CPOL และ CPHA การตั้งค่า
และ and ความสัมพันธ์ของพวกเค้ากับข้อมูลที่ส่ง
Figure 6. CPOL and CPHA settings visualized / ©Wikipedia
ตอนนี้เราจะมาโพกัส บน SPI การใช้งานบน Arduino โดยใช้ Arduino เป้น master device
(SPI.h). SPI digital pin เชื่อมต่อ จาก SCK, MOSI, และ MISO เป็นกำหนดไว้ล่วงหน้า
Arduino boards. เมื่อ Arduino Uno, เชื่อต่อ มีรายละเอียดดังนี้:
SCK: GPIO 13 or ICSP 3
MOSI: GPIO 11 or ICSP 4
MISO: GPIO 12 or ICSP 1
SS: GPIO 10
ทั้งหลาย digital pin สามารถใช้ SS pin. รวมถึงเลือกอุปกรณ์, this digital pin จะขับเคลื่อนต่ำ.
Figure 7. The MOSI, MISO, และ SCK pins เป็นแตกออกบน ICSP headers
เช่นกันบน GPIO 11, GPIO 12, และ GPIO 13
ต่อไปนี้คือ สั้น C++ อ้างถึง r Arduino SPIเริ่มต้นและการใช้งาน.
SPI เป็น full-duplex, :ซึ่ง วิธี นั้น communication เสมอ เกิดขึ้น สองทิศทาง,งานที่เกิดขึ้นถ้า application ต้องการเท่านั้น ถ่ายเทข้อมูล เกิดขึ้นในหนึ่งทิศทาง. SPI full-duplex data transfer เป็น ปรกติการดำเนินการ พร้อม a shift register. (Check out the appendix for a tutorial on shift registers!) นี้หมายถึง นั้น เนื่องจาก แต่ละ การอ่านบิต bits หลังจากมัน ยกขึ้นมากกว่า ที่เดียว.สิ่งที่สำคัญที่สุด บิตเป็น ต่อมาภายหลังปิด และ ส่งกลับไปตลอด SPI เชื่อมต่อกับอุปกรณือื่นๆ !
3. I2C
Inter-integrated circuit (I2C), เด่นกัน อย่างใดอย่างนึง “i-squared-c” หรือ “i-two-c,” เป็น
final communication protocol สุดท้าย เราจะควบคุมใน tutorialนี้. แม้ว่ามันหลายตัว
ดำเนินการ implementation เป็นวับซ้อนที่สุด ของใน three protocols, I2C ที่อยู่หลากหลาย
ข้อเสียในส่วนของ communication protocols อื่นๆ, ให้ มันเป็น
ได้เปรียเหนือผุ้อื่นในบ้างแอพพลิเคชั่น. เหล่านี้รวมถึง:
ความสามารถเชื่อมต่อตัวมาสเตอร์หลายๆตัวกับตัวslavesหลายตัวได้
Synchronicity (เหมือนกัน SPI), ซึ่งหมายความถึงการสื่อสารด้วยความเร็วสูง
ความเรียบง่าย: ความต้องการทั้งหมดในการทำงานสองสายไฟและ resistors บางตัว
ที่ระดับฮาร์มแวร์ , I2Cมี two-wire เขื่อต่อ—มีทั้งหมดสองเส้น wires ต้องการ dเพื่อ I2C เชื่อมต่อ
เป็ร data line (ที่เชื่อมกับ SDA) และเส้นสัญญาณนาฬิกา (ที่เชื่อมต่อ SCL).
ข้อมูลและ เส้นสัญญาณนาฬิกาเป็นการ เพิ่ม ใน ช่วงสภาวะเดินเบา, และเมื่อ ข้อมูล ต้องการ
ส่งข้อมูลมากกว่าเชื่อมต่อ,เส้นแสดง pulled ต่ำ ผาสยล้างอย่าง MOSFET วงจร.
เพื่อวัตถุประสงค์ ของ tutorial นี้, we เราจะพูดคุยเกี่ยวกับ MOSFET การทำงาน
ในวงจร I2C. ความจริงที่สำคัญ ที่จะไปในระบบนั้นเป็น open-drain, ซึ่งหมายความว่า
เส้นทั้งหลายนั้นสามารถ ขับ low จากอุปกรณ์ต่างๆ. ดังนั้นเมื่อใช้งาน I2Cในโครงงานต่างๆ,
มันมีหน้าที่หลักเพื่อเพิ่ม pull-up resistors (มักจะใช้ 4.7kΩ) เพื่อให้แน่ใจว่า ไลย์นั้น
จริงๆแล้ว pulled highในสถานะ idle state.
Figure 8. I2C hardware connection diagram
I2C เป็นพิเศษเนื่องจากมันแก้ปัญหาของการเชื่อมต่อหลายๆอุปกรณ์ slave ผ่านการกำหนด
addres. เหมือนกับในการเชื่อมต่อแบบ SPI, I2C ทำให้ ผู้ใช้ของ โมเดล master-slave
เพื่อกำหนด “ลำดับชั้น”ของการสื่อสาร. อย่างไรก็ตาม,แทนของ การเลือก
slavesตลอดแยกดิจิตรอลไลย์, masters เลือก slaves ตลอด ของพวกเขา byte addresses.
การกำหนดเหล่านี้ อาจมีลักษณะดังนี้: 0x1B. ซั่งหมายความว่าการทำการเชื่อต่อนั้นนอกจาก
slaves จนถึง master จะไม่ ต้องการ digital linesเพิ่มเติม. ตราบเท่าที่ แต่ละ slaveมี
เป็นลักษณะเฉพาะ address, application จะยังคงเป็นสามารถ แยก slaves ในสิ่งเหล่านี้
addresses ลำพัง. เราสามารถคิดว่าaddress เหล่านี้ใช้เป้นชื่อ. เพื่อติดต่อ slave’s ฟังก์ชั่น ,
master แค่ เชื่อต่อ name, และ slave ตอบสนองเพียงอย่างเดียว.
address และ data portions ของ การสื่อสารแบบ I2C line อาจจะรุปร่างลักาณะแบบนี้.
Figure 9. ที่อยู่และส่วนข้อมูลของการสื่อสารอาจมีลักษณะอย่างไร / ©tessel.io
แจ้งให้ทราบ ACK และ NACK bits บนการสื่อสาร ของline. bits เหล่านี้ แสดงว่า ไม่ว่าจะหรือ
ไม่มี ตำแหน่ง address slave ตอยสนองเพื่อการสื่อสาร—
วิธีการของอย่างเป็นไปตามกำหนดเวลาเพื่อทำการตรวจสอบ ไม่ว่าจะหรือไม่มีการสื่อสาร เป็น
เกิดขึ้นตามที่คาดไว้. แน่นอนว่าบิตเหล่านี้ไม่เกี่ยวข้อง สำหรับ address หรือ ข้อมูล บิตเพื่อการส่ง
,แต่ใน โครงการขนาดใหญ่ ของการ สื่อสาร, พวกเราใส่ เวลาในการพิจารณาน้อยมาก เพื่อสื่อสาร
เมื่อเทียบ เพื่อมการเริ่มต้นต่างๆและ end bits และ pausesนั้น เกิดขึ้น ใน protocols ชอบใช้กันใน
UART.
I2C มี slaves ได้อย่างอิสระเพื่อตักสินใจในการเชื่อมต่อความต้องการในคำขออาจจะมีลักษณะ
เดียวกันเช่น. ความแตกต่าง slaves จำเป็นต้องแตกต่างจาก bytes เพื่อเป้นการเขียนเกินกว่าใน
ความต้องการที่มากกว่า SDA lineเพื่อเขียน และ ขอร้อง iข้อมูลจากพวกเขา.
accelerometer modules บางตัว ,เพื่อเป็นตัวอย่าง, bytes เป็นการเขียน เพื่อ แสดงว่า ที่
hardware ลงทะเบียน the master ต้องการเพื่อ read ก่อน บ้าง อ่าน คำขอแล้ว.
สำหรับรายละเอียดเหล่านี้, ผุ้ใช้งานต้องอ้างถึง slaves’ datasheets เพื่อ device addresses,
register addresses, และตั้งค่า device .
บนตัว Arduino, I2C การดำเนินงาน เกิดขึ้น ตลอด ใน Wire library (Wire.h). Arduino can
สามารถ configured เป็นทั้ว I2C master หรือ slave device. บนตัว Arduino Uno,
มีการเชื่อมต่อดังนี้:
SDA: Analog Pin 4
SCL: Analog Pin 5
Figure 9. I2C (Wire) SDA คือ Analog Pin 4 (A4). SCLคือAnalog Pin 5 (A5).
นี้แดสงบทสรุป C++ อ้างอิง จาก Arduino I2C การเชียนชื่อย่อและใช้
Multiple masters สามารถเชื่อมต่อควบคุม I2C bus เพียงแค่เชื่อมต่อ SDA และ SCL lines ไปยัง
bus’s lines. อย่างไรก็ตาม, เพียง masterตัวเดียว สามารถสื่อสารกับ can slaves ในขณะนั้น,
เนื่องจากมีอุปกรณ์หลายอย่างต้องเชื่อมต่อ ซึ่งกันและกันนำไปสู่ bus ดารยืนยัน. เหมือนกับ,
การสื่อสารไม่สามารถเกิดขึ้น สองทิศทางจาก masterถึง slave และจาก slaveถึง master
ในเวลาเดียวกันเนื่องจาก นั้นต้องการ นำไปสู้ การยืนยัน bus. สิ่งนี้ทำให้ I2C half-duplex,
เหมือนกับ UART!
สุดท้ายแล้ว, อุปกรณื master ที่หลากหลาย ไม่สามารถสื่อสารซึ่งกันและกันมากกว่านี้ I2C bus.
ใน applications ที่ไหน หลากหลาย masters เป็น การเชื่อมต่อ ถึง slaves, masters อาจสื่อสาร
ด้วยกันมากกว่า แยก bus หรือ ผ่านทาง แยก การสื่อสาร protocol.
ถ้าคุณสร้างมันผ่านช่วยสอนนี้,คุณจะ มีเครื่องมือทั้งหมด ที่คุณต้องใช้งานในUART, SPI, และ
I2C communication protocols! ตรวจสอบ บ้างอย่างที่ออกไป โครงงานของArduino
ของเราเพื่อ examplesต่อไป บน การใช้ protocols! เหล่านี้
(บทความทดลองแปล)
ที่มา(สามารถอ่านเพิ่มเติมได้)