การสอนโปรโตคอลบัส I2C การเชื่อมต่อกับแอปพลิเคชัน

ลองใช้เครื่องมือของเราเพื่อกำจัดปัญหา





ปัจจุบันโปรโตคอลมีบทบาทสำคัญใน การออกแบบระบบฝังตัว . หากคุณต้องการขยายคุณสมบัติอุปกรณ์ต่อพ่วงของไมโครคอนโทรลเลอร์ความซับซ้อนและการใช้พลังงานจะเพิ่มขึ้นโดยไม่ต้องไปที่โปรโตคอล มีโปรโตคอลบัสหลายประเภทให้เลือกเช่น USART, SPI, CAN, โปรโตคอลบัส I2C ฯลฯ ซึ่งใช้สำหรับการถ่ายโอนข้อมูลระหว่างสองระบบ

I2C โปรโตคอล

I2C Bus คืออะไร?




การส่งและรับข้อมูลระหว่างอุปกรณ์สองเครื่องหรือมากกว่าสองเครื่องจำเป็นต้องใช้เส้นทางการสื่อสารที่เรียกว่าระบบบัส บัส I2C เป็นบัสอนุกรมสองสายแบบสองทิศทางซึ่งใช้ในการขนส่งข้อมูลระหว่างวงจรรวม I2C ย่อมาจาก“ Inter Integrated Circuit” เปิดตัวครั้งแรกโดยเซมิคอนดักเตอร์ของ Philips ในปี 1982 บัส I2C ประกอบด้วยความเร็วในการถ่ายโอนข้อมูลสามแบบเช่นมาตรฐานโหมดเร็วและโหมดความเร็วสูง บัส I2C รองรับอุปกรณ์พื้นที่แอดเดรส 7 บิตและ 10 บิตและการทำงานแตกต่างกันโดยมีแรงดันไฟฟ้าต่ำ

โปรโตคอลบัส I2c

โปรโตคอลบัส I2c



สายสัญญาณ I2C

สายสัญญาณ I2C

สายสัญญาณ I2C

I2C เป็นโปรโตคอลบัสอนุกรมที่ประกอบด้วยสายสัญญาณสองเส้นเช่นสาย SCL และ SDL ซึ่งใช้ในการสื่อสารกับอุปกรณ์ SCL ย่อมาจาก 'serial clock line' และสัญญาณนี้จะขับเคลื่อนโดย 'master device' เสมอ SDL ย่อมาจาก 'serial data line' และสัญญาณนี้ขับเคลื่อนโดยอุปกรณ์ต่อพ่วงหลักหรือ I2C ทั้งสาย SCL และ SDL เหล่านี้อยู่ในสถานะ open-drain เมื่อไม่มีการถ่ายโอนระหว่างอุปกรณ์ต่อพ่วง I2C

เอาต์พุตแบบเปิดท่อระบายน้ำ


ท่อระบายน้ำแบบเปิดคือ แนวคิดสำหรับทรานซิสเตอร์ FET ประเด็นที่ขั้วท่อระบายน้ำของทรานซิสเตอร์เป็นสถานะเปิด พิน SDL และ SCL ของอุปกรณ์หลักได้รับการออกแบบโดยให้ทรานซิสเตอร์อยู่ในสถานะเปิดดังนั้นการถ่ายโอนข้อมูลจะทำได้ก็ต่อเมื่อดำเนินการกับทรานซิสเตอร์เหล่านี้เท่านั้น ดังนั้นสายเหล่านี้หรือขั้วท่อระบายน้ำจึงเชื่อมต่อตัวต้านทานแบบดึงขึ้นอย่างละเอียดกับ VCC สำหรับโหมดการนำไฟฟ้า

อินเทอร์เฟซ I2C

มากมาย อุปกรณ์ทาสเชื่อมต่อกับไมโครคอนโทรลเลอร์ ด้วยความช่วยเหลือของบัส I2C ผ่าน I2C ระดับชิฟเตอร์ IC เพื่อถ่ายโอนข้อมูลระหว่างกัน โปรโตคอล I2C ใช้เพื่อเชื่อมต่ออุปกรณ์สูงสุด 128 เครื่องที่เชื่อมต่อทั้งหมดเพื่อสื่อสารกับสาย SCL และ SDL ของยูนิตหลักรวมถึงอุปกรณ์สเลฟ รองรับการสื่อสารแบบ Multimaster ซึ่งหมายความว่ามีการใช้ผู้เชี่ยวชาญสองคนในการสื่อสารกับอุปกรณ์ภายนอก

อัตราการถ่ายโอนข้อมูล I2C

โปรโตคอล I2C ทำงานสามโหมดเช่นโหมดเร็วโหมดความเร็วสูงและโหมดมาตรฐานซึ่งความเร็วข้อมูลในโหมดมาตรฐานอยู่ในช่วง 0Hz ถึง 100Hz และข้อมูลในโหมดเร็วสามารถถ่ายโอนด้วยความเร็ว 0Hz ถึง 400 KHz และโหมดความเร็วสูงด้วย 10 KHz ถึง 100KHz ข้อมูล 9 บิตจะถูกส่งสำหรับการถ่ายโอนแต่ละครั้งโดยที่เครื่องส่ง MSB ส่งไปยัง LSB 8 บิตและบิตที่ 9 เป็นบิตตอบรับที่ผู้รับส่งมา

อัตราการถ่ายโอนข้อมูล I2C

อัตราการถ่ายโอนข้อมูล I2C

การสื่อสาร I2C

โปรโตคอลบัส I2C มักใช้ในการสื่อสารหลักและแบบทาสโดยที่ต้นแบบเรียกว่า 'ไมโครคอนโทรลเลอร์' และทาสเรียกว่าอุปกรณ์อื่น ๆ เช่น ADC, EEPROM, DAC และอุปกรณ์ที่คล้ายกันในระบบฝังตัว จำนวนอุปกรณ์ทาสเชื่อมต่อกับอุปกรณ์หลักด้วยความช่วยเหลือของบัส I2C โดยที่ทาสแต่ละตัวประกอบด้วยที่อยู่ที่ไม่ซ้ำกันในการสื่อสาร ขั้นตอนต่อไปนี้ใช้เพื่อสื่อสารกับอุปกรณ์หลักกับทาส:

ขั้นตอนที่ 1: ขั้นแรกอุปกรณ์หลักจะออกเงื่อนไขการเริ่มต้นเพื่อแจ้งอุปกรณ์ทาสทั้งหมดเพื่อให้พวกเขาฟังบนสายข้อมูลอนุกรม

ขั้นตอนที่ 2: อุปกรณ์หลักจะส่งที่อยู่ของอุปกรณ์ทาสเป้าหมายซึ่งเปรียบเทียบกับที่อยู่ของอุปกรณ์ทาสทั้งหมดที่เชื่อมต่อกับสาย SCL และ SDL หากใครที่อยู่ตรงกันอุปกรณ์นั้นจะถูกเลือกและอุปกรณ์ทั้งหมดที่เหลือจะถูกตัดการเชื่อมต่อจากสาย SCL และ SDL

ขั้นที่ 3: อุปกรณ์ทาสที่มีแอดเดรสที่ตรงกันที่ได้รับจากมาสเตอร์จะตอบสนองด้วยการตอบรับไปยังมาสเตอร์หลังจากนั้นการสื่อสารจะถูกสร้างขึ้นระหว่างอุปกรณ์หลักและอุปกรณ์สเลฟบนบัสข้อมูล

ขั้นตอนที่ 4: ทั้งมาสเตอร์และทาสรับและส่งข้อมูลขึ้นอยู่กับว่าการสื่อสารนั้นอ่านหรือเขียน

ขั้นที่ 5: จากนั้นต้นแบบสามารถส่งข้อมูล 8 บิตไปยังผู้รับซึ่งตอบกลับด้วยการรับทราบ 1 บิต

การสอน I2C

การส่งและรับข้อมูลทีละขั้นตอนที่เกี่ยวกับพัลส์นาฬิกาเรียกว่าโปรโตคอล I2C เป็นโปรโตคอลระหว่างระบบและระยะทางสั้นซึ่งหมายความว่ามันถูกใช้ภายในแผงวงจรเพื่อสื่อสารอุปกรณ์หลักและอุปกรณ์ทาส

ข้อมูลเบื้องต้นเกี่ยวกับโปรโตคอล I2C

โดยทั่วไประบบบัส I2C ประกอบด้วยสายไฟสองเส้นที่ใช้ง่ายเพื่อขยายคุณสมบัติอุปกรณ์ต่อพ่วงอินพุตและเอาต์พุตเช่น ADC, EEROM และ RTC และ ส่วนประกอบพื้นฐานอื่น ๆ เพื่อสร้างระบบที่มีความซับซ้อนน้อยมาก

ตัวอย่าง: เนื่องจากไมโครคอนโทรลเลอร์ 8051 ไม่มี ADC ในตัวดังนั้นหากเราต้องการเชื่อมต่อเซ็นเซอร์อนาล็อกใด ๆ กับไมโครคอนโทรลเลอร์ 8051 เราต้องใช้อุปกรณ์ ADC เช่น ADC0804-1 ช่อง ADC, ADC0808-8 ช่อง ADC เป็นต้นโดยใช้ ADC เหล่านี้ เราสามารถเชื่อมต่อเซ็นเซอร์อะนาล็อกกับไมโครคอนโทรลเลอร์

โดยไม่ต้องใช้โปรโตคอลเพื่อขยายคุณสมบัติ I / O ของไมโครคอนโทรลเลอร์หรือโปรเซสเซอร์ใด ๆ เราสามารถไปที่อุปกรณ์ 8255 ICit 8 พิน ไมโครคอนโทรลเลอร์ 8051 เป็นไมโครคอนโทรลเลอร์ 40 พิน โดยใช้ 8255 IC เราสามารถขยายพอร์ต 3-I / O ด้วย 8 พินในแต่ละพอร์ต ด้วยการใช้อุปกรณ์ทั้งหมดเช่น RTC, ADC, EEPROM, Timers เป็นต้น - สำหรับการขยายวงจรอุปกรณ์ต่อพ่วง - ความซับซ้อนต้นทุนการใช้พลังงานและขนาดของผลิตภัณฑ์ก็เพิ่มขึ้นเช่นกัน

เพื่อแก้ไขปัญหานี้แนวคิดโปรโตคอลจึงเป็นภาพที่ช่วยลดความซับซ้อนของฮาร์ดแวร์และการใช้พลังงาน เราสามารถขยายคุณสมบัติได้มากขึ้นเช่นอุปกรณ์ต่อพ่วง I / 0, ADC, T / C และอุปกรณ์หน่วยความจำได้สูงสุด 128 อุปกรณ์โดยใช้โปรโตคอล I2C นี้
คำศัพท์ที่ใช้ในโปรโตคอล I2C

เครื่องส่ง: อุปกรณ์ที่ส่งข้อมูลไปยังบัสเรียกว่าเครื่องส่งสัญญาณ

ผู้รับ: อุปกรณ์ที่รับข้อมูลจากบัสเรียกว่าเครื่องรับ

อาจารย์: อุปกรณ์ที่เริ่มการถ่ายโอนเพื่อสร้างสัญญาณนาฬิกาและยุติการถ่ายโอนเรียกว่ามาสเตอร์

ทาส: อุปกรณ์ที่ส่งโดยต้นแบบเรียกว่าทาส

มัลติมาสเตอร์: มากกว่าหนึ่งต้นแบบสามารถพยายามควบคุมบัสในเวลาเดียวกันโดยไม่ทำให้ข้อความเสียหายเรียกว่า Multimaster

อนุญาโตตุลาการ: ขั้นตอนเพื่อให้แน่ใจว่าหากมีมาสเตอร์มากกว่าหนึ่งคนพร้อมกันพยายามควบคุมบัส - อนุญาตให้ทำเพียงหนึ่งเดียวเท่านั้นข้อความที่ชนะจะไม่เสียหาย

การซิงโครไนซ์: ขั้นตอนในการซิงโครไนซ์ซิงเกิ้ลนาฬิกาของอุปกรณ์สองเครื่องขึ้นไปเรียกว่าการซิงโครไนซ์

ลำดับคำสั่งพื้นฐานของ I2C

  1. เริ่มเงื่อนไขบิต
  2. หยุดเงื่อนไขบิต
  3. เงื่อนไขการรับทราบ
  4. การดำเนินการเขียน Master to Slave
  5. อ่าน Operation Slave to Master

เริ่มและหยุดเงื่อนไขบิต

เมื่อต้นแบบ (ไมโครคอนโทรลเลอร์) ต้องการพูดคุยกับอุปกรณ์ทาส (เช่น ADC) จะเริ่มการสื่อสารโดยออกเงื่อนไขเริ่มต้นบนบัส I2C จากนั้นออกเงื่อนไขการหยุด ระดับตรรกะเริ่มต้นและหยุดของ I2C จะแสดงในรูป

เงื่อนไขการเริ่มต้น I2C กำหนดเป็นการเปลี่ยนจากระดับสูงไปต่ำของเส้น SDA ในขณะที่สาย SCL อยู่ในระดับสูง เงื่อนไขการหยุด I2C เกิดขึ้นเมื่อสาย SDA สลับจากต่ำไปสูงในขณะที่สาย SCL สูง

I2C master จะสร้างเงื่อนไข S และ P เสมอ เมื่อต้นแบบ I2C เริ่มต้นเงื่อนไขเริ่มต้นบัส I2c จะถือว่าอยู่ในสถานะไม่ว่าง

เริ่มและหยุดเงื่อนไขบิต

เริ่มและหยุดเงื่อนไขบิต

การเขียนโปรแกรม:

เริ่มสภาพ:

sbit SDA = P1 ^ 7 // เริ่มต้นพิน SDA และ SCL ของไมโครคอนโทรลเลอร์ //
sbit SCL = P1 ^ 6
ความล่าช้าเป็นโมฆะ (int ไม่ได้ลงนาม)
เป็นโมฆะ main ()
{
SDA = 1 // การประมวลผลข้อมูล //
SCL = 1 // นาฬิกาสูง //
ล่าช้า ()
SDA = 0 // ส่งข้อมูล //
ล่าช้า ()
SCL = 0 // สัญญาณนาฬิกาต่ำ //
}
ความล่าช้าเป็นโมฆะ (int p)
{
ไม่ได้ลงนามข
สำหรับ (a = 0a<255a++) //delay function//
สำหรับ (b = 0b}

เงื่อนไขการหยุด:

เป็นโมฆะ main ()
{
SDA = 0 // หยุดประมวลผลข้อมูล //
SCL = 1 // นาฬิกาสูง //
ล่าช้า ()
SDA = 1 // หยุด //
ล่าช้า ()
SCL = 0 // สัญญาณนาฬิกาต่ำ //
}
ความล่าช้าเป็นโมฆะ (int p)
{
ไม่ได้ลงนามข
สำหรับ (a = 0a<255a++) //delay function//
สำหรับ (b = 0b}

เงื่อนไขการรับทราบ (ACK) และไม่รับทราบ (NCK)

แต่ละไบต์ที่ส่งผ่านบัส I2C จะตามด้วยเงื่อนไขการรับทราบจากเครื่องรับซึ่งหมายความว่าหลังจากที่ต้นแบบดึง SCL ให้ต่ำเพื่อส่งข้อมูล 8 บิตให้เสร็จสมบูรณ์ SDA จะถูกดึงให้ต่ำโดยตัวรับไปยังต้นแบบ หากหลังจากการส่งของเครื่องรับไม่ดึงสาย SDA LOW จะถือว่าเป็นเงื่อนไข NCK

การรับทราบ (ACK)

การรับทราบ (ACK)

การเขียนโปรแกรม

การรับทราบ
เป็นโมฆะ main ()
{
SDA = 0 // สาย SDA ไปต่ำ //
SCL = 1 // นาฬิกาสูงไปต่ำ //
ล่าช้า (100)
SCL = 0
}
ไม่มีการรับทราบ:
เป็นโมฆะ main ()
{
SDA = 1 // เส้น SDA ไปสูง //
SCL = 1 // นาฬิกาสูงไปต่ำ //
ล่าช้า (100)
SCL = 0
}

Master to Slave เขียนการดำเนินงาน

โปรโตคอล I2C ถ่ายโอนข้อมูลในรูปแบบของแพ็กเก็ตหรือไบต์ แต่ละไบต์ตามด้วยบิตตอบรับ

รูปแบบการถ่ายโอนข้อมูล

รูปแบบการถ่ายโอนข้อมูล

รูปแบบการถ่ายโอนข้อมูล

เริ่ม: โดยพื้นฐานแล้วลำดับการถ่ายโอนข้อมูลที่เริ่มต้นโดยต้นแบบที่สร้างเงื่อนไขเริ่มต้น

ที่อยู่ 7 บิต: หลังจากนั้นต้นแบบจะส่งที่อยู่ทาสในรูปแบบ 8 บิตสองรูปแบบแทนที่จะเป็นที่อยู่ 16 บิตเดียว

R / W: หากบิตอ่านและเขียนสูงการดำเนินการเขียนจะดำเนินการ

อนิจจา: หากดำเนินการเขียนในอุปกรณ์ทาสเครื่องรับจะส่ง ACK 1 บิตไปยังไมโครคอนโทรลเลอร์

หยุด: หลังจากเสร็จสิ้นการดำเนินการเขียนในอุปกรณ์ทาสไมโครคอนโทรลเลอร์จะส่งเงื่อนไขการหยุดไปยังอุปกรณ์ทาส

การเขียนโปรแกรม

เขียนการทำงาน

voidwrite (ถ่าน d ที่ไม่ได้ลงชื่อ)
{
ถ่าน k ที่ไม่ได้ลงนาม j = 0x80
สำหรับ (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
ล่าช้า (4)
SCL = 0
}
SDA = 1
SCL = 1
ล่าช้า (2)
c = SDA
ล่าช้า (2)
SCL = 0
}

Master to Slave อ่านการดำเนินการ

ข้อมูลจะถูกอ่านกลับจากอุปกรณ์ทาสในรูปแบบของบิตหรือไบต์ - อ่านบิตที่สำคัญที่สุดก่อนและอ่านบิตสุดท้ายที่มีนัยสำคัญน้อยที่สุด

รูปแบบการอ่านข้อมูล

รูปแบบการอ่านข้อมูล

รูปแบบการอ่านข้อมูล

เริ่ม: โดยพื้นฐานแล้วลำดับการถ่ายโอนข้อมูลจะเริ่มต้นโดยต้นแบบที่สร้างเงื่อนไขเริ่มต้น

ที่อยู่ 7 บิต: หลังจากนั้นต้นแบบจะส่งที่อยู่ทาสในรูปแบบ 8 บิตสองรูปแบบแทนที่จะเป็นที่อยู่ 16 บิตเดียว

R / W: หากบิตอ่านและเขียนอยู่ในระดับต่ำการดำเนินการอ่านจะดำเนินการ

อนิจจา: หากดำเนินการเขียนในอุปกรณ์ทาสเครื่องรับจะส่ง ACK 1 บิตไปยังไมโครคอนโทรลเลอร์

หยุด: หลังจากเสร็จสิ้นการดำเนินการเขียนในอุปกรณ์ทาสไมโครคอนโทรลเลอร์จะส่งเงื่อนไขการหยุดไปยังอุปกรณ์ทาส

การเขียนโปรแกรม

อ่านเป็นโมฆะ ()
{
ถ่านที่ไม่ได้ลงนาม j, z = 0x00, q = 0x80
SDA = 1
สำหรับ (j = 0j<8j++)
{
SCL = 1
ล่าช้า (100)
ธง = SDA
ถ้า (ธง == 1)
q)
q = q >> 1
ล่าช้า (100)
SCL = 0

ตัวอย่างที่ใช้ได้จริงของการเชื่อมต่อ ADC กับไมโครคอนโทรลเลอร์ 8051

ADC เป็นอุปกรณ์ที่ใช้ในการแปลงข้อมูลอนาล็อกให้อยู่ในรูปของดิจิตอลและดิจิตอลเป็นอนาล็อก ไมโครคอนโทรลเลอร์ 8051 ไม่มี ADC ในตัวดังนั้นเราจึงต้องเพิ่มภายนอกผ่านโปรโตคอล I2C PCF8591 เป็นมาตรฐาน I2C อนาล็อกเป็นดิจิตอล และตัวแปลงดิจิตอลเป็นอนาล็อก อุปกรณ์นี้สามารถรองรับช่องอินพุตแบบอะนาล็อกได้สูงสุด 4 ช่องพร้อมกับแรงดันไฟฟ้า 2.5 ถึง 6v

เอาต์พุตแบบอะนาล็อก

เอาต์พุตอะนาล็อกมาในรูปแบบของแรงดันไฟฟ้า ตัวอย่างเช่นเซ็นเซอร์อะนาล็อก 5v ให้ตรรกะเอาต์พุต 0.01v ถึง 5v
ค่าดิจิตอลสูงสุด 5v คือ = 256
ค่า 2.5v คือ = 123 ตามค่าแรงดันไฟฟ้าสูงสุด

สูตรของเอาต์พุตแบบอะนาล็อกคือ:

สูตรของผลลัพธ์ดิจิตอล:

การเชื่อมต่อ ADC กับไมโครคอนโทรลเลอร์ 8051

การเชื่อมต่อ ADC กับไมโครคอนโทรลเลอร์ 8051

รูปด้านบนแสดงการถ่ายโอนข้อมูลโดยใช้โปรโตคอล I2C จากอุปกรณ์ ADC ไปยังไมโครคอนโทรลเลอร์ 8051 พิน ADC ของ SCL และ SDA เชื่อมต่อกับพิน 1.7 และ 1.6 ของไมโครคอนโทรลเลอร์เพื่อสร้างการสื่อสารระหว่างกัน เมื่อเซ็นเซอร์ให้ค่าอะนาล็อกกับ ADC จะแปลงเป็นดิจิตอลและถ่ายโอนข้อมูลไปยังไมโครคอนโทรลเลอร์ผ่านโปรโตคอล I2C

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