By | February 23, 2022

บทความนี้เป็นบทความชุดแรกในชุดที่อธิบายถึงแง่มุมที่ ‘ละเอียดอ่อน’ ของโปรโตคอล I2C ซึ่งเดิมพัฒนาขึ้นโดยฟิลิปส์

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

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

ต่อไปนี้คือรายการโดยย่อของสิ่งที่จะกล่าวถึงในส่วนที่เหลือของซีรีส์:

  • ไม่มี START
  • ขาด STOP
  • เริ่มต้นซ้ำ
  • บิตข้อมูลที่ขาดหายไป
  • ไม่มี ACK/NAK
  • ข้อมูลหลัง NAK
  • ข้อผิดพลาดแบบแบ็คทูแบ็ค
  • ตัวต้านทานแบบดึงขึ้น
  • รถบัสประจำทาง
  • การใช้งานโดยใช้อุปกรณ์ต่อพ่วง TWI หรือ I2C แบบเต็มฮาร์ดแวร์
  • การใช้งานโดยใช้อุปกรณ์ต่อพ่วง USI
  • การใช้งานโดยใช้อุปกรณ์ต่อพ่วง USART
  • ความแตกต่างของ SMBus จาก I2C

ตอนนี้ไปสู่สิ่งที่ดี!

สำหรับบทความนี้ เราจะเน้นที่การใช้งาน 3 ประเภทที่คุณจะพบในการออกแบบในปัจจุบัน ได้แก่ ฮาร์ดแวร์ตัวเต็ม ฮาร์ดแวร์/ซอฟต์แวร์ผสม และซอฟต์แวร์ตัวเต็ม (หรือ ‘bit-bang’ ตามที่บางครั้งเรียกว่า)

ไมโครคอนโทรลเลอร์จำนวนมากในปัจจุบัน แม้แต่อุปกรณ์ระดับล่างบางรุ่นก็มีอุปกรณ์ต่อพ่วง I2C ที่เป็นฮาร์ดแวร์เต็มรูปแบบ Atmel อ้างถึง TWI ของพวกเขา Microchip เรียกพวกเขาว่า I2C; ผู้ขายรายอื่นใช้การตั้งชื่อที่คล้ายกัน เมื่อใช้แนวทางฮาร์ดแวร์เต็มรูปแบบ เป็นเรื่องยากที่จะสร้างข้อผิดพลาดของบัสใดๆ เว้นแต่คุณจะเข้าใจผิดว่าอุปกรณ์ต่อพ่วงทำงานอย่างไร หรือลำดับบัส I2C ที่ถูกต้องควรมีลักษณะอย่างไร โดยทั่วไปแล้ว วิธีการนี้จำเป็นต้องมีความเข้าใจในเชิงลึกน้อยที่สุดเกี่ยวกับตัวโปรโตคอลเอง

อุปกรณ์ต่อพ่วง USI ที่พบในอุปกรณ์ Atmel บางรุ่นเป็นการออกแบบฮาร์ดแวร์ขั้นต่ำซึ่งขึ้นอยู่กับการโต้ตอบของซอฟต์แวร์เพื่อให้ใช้งานได้อย่างสมบูรณ์ อุปกรณ์ต่อพ่วงอเนกประสงค์นี้สามารถใช้กับการกำหนดค่า I2C, SPI และ UART ได้จริง และเหมาะสำหรับอุปกรณ์ระดับล่างที่การเพิ่มอุปกรณ์ต่อพ่วงทั้งสามจะช่วยประหยัดต้นทุน แม้ว่าจะต้องมีการเข้ารหัสมากกว่าอุปกรณ์ต่อพ่วง TWI หรือฮาร์ดแวร์เต็มรูปแบบ I2C แต่ก็มีความยืดหยุ่นมากกว่าในบางแง่มุม แนวทางนี้ต้องการความเข้าใจในโพรโทคอลในเชิงลึกมากขึ้น เนื่องจากคุณต้องรับผิดชอบในการย้ายจากสถานะหนึ่งไปยังสถานะถัดไป และเป็นไปได้ที่จะไปในทิศทางที่ผิด

สุดท้าย การใช้แนวทางซอฟต์แวร์ 100% จำเป็นต้องมีความเข้าใจอย่างถ่องแท้เกี่ยวกับโปรโตคอล I2C ผู้จำหน่ายไมโครคอนโทรลเลอร์แทบทุกรายมีบันทึกการใช้งานและตัวอย่างโค้ดสำหรับการสร้างอุปกรณ์ I2C Master โดยใช้โซลูชันซอฟต์แวร์ล้วนๆ I2C เป็นโปรโตคอลแบบโอเวอร์คล็อก (แทนที่จะเป็นแบบตั้งเวลา) ต่างจาก UART ดังนั้นการขัดจังหวะในการดำเนินการของโปรโตคอลจึงเป็นที่ยอมรับได้ดี ทำให้สามารถให้บริการอินเตอร์รัปต์ได้โดยไม่ต้องกังวลว่าข้อมูลจะสูญหาย ความเร็วสูงสุดของโซลูชันที่ใช้ซอฟต์แวร์จะขึ้นอยู่กับความเร็วสัญญาณนาฬิกาของ CPU ในท้ายที่สุด และโดยทั่วไปแล้ว การใช้งานหลักจะสามารถเข้าถึงอัตรา 400KHz ได้อย่างง่ายดาย

การใช้งานอุปกรณ์ Slave แบบอิงซอฟต์แวร์นั้นท้าทายกว่ามาก หากไม่มีการรองรับฮาร์ดแวร์ ซอฟต์แวร์จะต้องตรวจสอบทั้งสาย SDA และ SCL พร้อมกันเพื่อตรวจจับขอบนาฬิกาและทราบสถานะของสาย SDA ในเชิงบวกก่อนที่จะขึ้นหรือลงของ SCL การตรวจจับเงื่อนไข START หรือ STOP มักจะต้องใช้การขัดจังหวะ มิฉะนั้น ซอฟต์แวร์จะต้องใช้งาน 100% กับการตรวจสอบ SCL และ SDA การใช้งาน Slave แบบใช้ซอฟต์แวร์มีแนวโน้มที่จะผูกมัดกับ CPU ซึ่งต้องใช้ MIPS หลายตัวเพื่อให้ได้การทำงานที่ 100KHz ดังนั้น การใช้งาน Slave เฉพาะซอฟต์แวร์ที่แท้จริงอาจไม่มีอยู่จริงสำหรับตระกูลไมโครคอนโทรลเลอร์บางตระกูล และรุ่นอื่นๆ อาจไม่สามารถเข้าถึงความเร็วบัส 100KHz ได้เต็มที่

เมื่อวางรากฐานฮาร์ดแวร์และซอฟต์แวร์นี้แล้ว เราจะเจาะลึกถึงตัวโปรโตคอลเองในบทความถัดไป ขอบคุณที่อ่าน!

(ลิขสิทธิ์ 2010 Robert G. Fries)