มีคำแนะนำ pin-out I2C ที่ชัดเจนหรือไม่? ไม่ได้มองหา“ มาตรฐาน”


16

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


NXP กำหนดมาตรฐาน I2Cโดยไม่ระบุ pin-out สำหรับตัวเชื่อมต่อ I2C คือความเข้าใจของฉัน คำแนะนำเดียวจาก NXP ดูเหมือนจะเป็นการกล่าวถึงการวางกราวด์และ / หรือ Vss ระหว่าง SDA และ SCL หาก Vss / Gnd ดำเนินการข้ามการเชื่อมต่อระหว่างกัน

การสั่งซื้อโมดูล I2C ต่างๆทำให้ฉันมีความหลากหลายของ I2C pin-outs และภารกิจเล็กน้อยในการติดตามการเปลี่ยนริบบิ้นสายเคเบิลเล็ก ๆ น้อย ๆ ที่ฉันต้องทำเพื่อพวกเขา

เช่น

  • โมดูลโมโน OLED: SCL, SDA, GND, 5V (เห็นได้ชัดว่าไม่เหมาะเนื่องจากนาฬิกาและข้อมูลอยู่ติดกัน
  • เซนเซอร์โล่สำหรับ Arduino: SDA, SCL, GND, 5V (อีกครั้งไม่เหมาะรวมทั้งเปลี่ยน SCL / SDA)
  • โมดูล LCD สี: SCL, GND, 5V, SDA (Yay!)
  • ไม่มีชื่อ I2C repeater: SCL, 5V, GND, SDA (พวกเขาเปลี่ยนพินพาวเวอร์! ปล่อยให้ควันออกมาเกือบหมด)

ดังนั้นคำถามของฉันนี้ :
มีชัดเจน / เผด็จการแนวทางสำหรับ I2C 4 ขาขั้วต่อลำดับขาออกไปใช้งานที่ทั้ง Vss และ GND จะได้รับการดำเนินการจากโฮสต์ไปยังอุปกรณ์?

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

ชี้แจง:มองหาแนวทางเช่น "วาง Vss ให้ใกล้กับ SCL เพราะ ... " มากกว่ามาตรฐานที่กำหนดไว้ซึ่งไม่มีอยู่อย่างชัดเจน


3
ดังนั้นคำถาม
Anindo Ghosh

1
จากคำถามของคุณเองเห็นได้ชัดว่าไม่มีมาตรฐาน ... และถ้าเป็นเช่นนั้นเห็นได้ชัดว่าผู้คนไม่ได้ติดตามมัน คุณกำลังติดขัด : P
Toby Lawrence

1
@AnindoGhosh heh ถ้าเป็นฉันฉันอาจทิ้งโมดูลที่ซื้อล่วงหน้าและม้วนกระดานฝ่าวงล้อมของฉันเองด้วย pinout ที่เป็นมาตรฐานโดยใช้หัวโพลาไรซ์ อาจเป็นอะไรที่เหมือน 6 ​​พินโดยมี GND อยู่ถัดจาก SDA, SCL และ 5V ... จากนั้นใช้สายเคเบิลที่มีคู่บิดสามคู่เพื่อให้พื้นใกล้แต่ละสัญญาณเพื่อช่วยลดเสียงรบกวนและปฏิเสธการรบกวน
Toby Lawrence

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

1
@ ExcitingProjects ไม่ถูกต้องเกี่ยวกับสิ่งที่พวกเขาพูด I2C ไม่ได้มีไว้สำหรับสิ่งนี้และเผชิญกับความท้าทายหลายประการในการเชื่อมต่อระหว่างอุปกรณ์ มันเป็นเพียงสิ่งที่เกิดขึ้นที่นักออกแบบโมดูลเลือกที่จะใช้ I2C ฉันจะ "โกรธเคือง" เช่นกันถ้าฉันมีทางเลือก
Anindo Ghosh

คำตอบ:


16

ฉันเพิ่งเปิดตัวของตัวเองเท่าที่เชื่อมต่อ I2C ไป ตัวเชื่อมต่อนั้นไม่สำคัญมากตอนนี้ฉันแค่ใช้ส่วนหัวพิทช์ 100mil (โดยปกติแล้วจะเป็นเพศหญิงบนบอร์ดดังนั้นจึงไม่ pokey เมื่อไม่ได้เชื่อมต่อ) แต่ตัวเชื่อมต่อ 4plus pin จะทำ นอกจากนี้ฉันใช้P82B715จาก TI เป็นตัวขยายบัส I2C สิ่งนี้จะเอาชนะปัญหาด้านความจุที่เกี่ยวข้องกับการรัน I2C ที่ยาวลงซึ่งในขณะที่ผู้คนพูดว่า I2C นั้นไม่ได้มีไว้สำหรับการเริ่มต้น ฉันลองชุดค่าผสมหลายแบบเช่นในตัวอย่างที่คุณให้และฉันสังเกตเห็นว่าไม่มีความแตกต่างในประสิทธิภาพ ฉันเชื่อว่าเป็นเพราะ I2C ค่อนข้างช้าการรบกวนระหว่าง SDA และ SCL ไม่ใช่ปัญหามาก โดยทั่วไปเวลาที่เพิ่มขึ้นสำหรับแรงดันไฟฟ้า (เมื่อมีการรบกวนเกิดขึ้น) บนบัสจะมีขนาดเล็กกว่าความยาวเล็กน้อยมาก ดังนั้นนั่นอาจไม่ใช่สิ่งที่คุณต้องการจะได้ยิน แต่มีตัวเลือกมากขึ้น โดยส่วนตัวแล้วฉันไปกับ [VCC, SDA, GND, SCL] เพื่อส่งไปยัง / จากชิปนี้ได้อย่างง่ายดายและยังมีภูมิคุ้มกันต่อ VCC / GND มิกซ์เมื่อเสียบเข้าด้วยกัน


2
+1 + ยอมรับ ขอบคุณอาจเป็นคำตอบที่ปฏิบัติได้จริงที่สุดจนถึงตอนนี้ "interdevice I2C มีอยู่นี่คือวิธีที่ฉันใช้และทำไม" การหลีกเลี่ยงการมิกซ์ VCC / GND มีประโยชน์ จุดที่ดีในการหลีกเลี่ยงส่วนหัวขา pokey บนกระดานฉันได้ฉีกหมุดออกสองส่วนจากโมดูลเซ็นเซอร์บางส่วนโดยไม่ได้ตั้งใจ
Anindo Ghosh

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

11

เมื่อก่อตั้งขึ้นครั้งแรกบัส I2C (วงจรรวมระหว่าง)มีวัตถุประสงค์เพื่อเชื่อมต่อชิปในชุด PCB เดียว มันไม่ได้ตั้งใจจะใช้กับสายเคเบิลเพื่อเชื่อมต่อบอร์ดหลายบอร์ดเข้าด้วยกันดังนั้นจึงไม่มีการกำหนดขั้วต่อสำหรับจุดประสงค์นั้น

อินเทอร์เฟซภายนอกที่ใช้ I2C มาตรฐาน "มาตรฐาน" ที่ฉันทราบเท่านั้นคือACCESS.bus ที่มีอายุสั้นสำหรับการเชื่อมต่ออุปกรณ์ส่วนต่อประสานกับผู้ใช้กับคอมพิวเตอร์และVESA Display Data Channelใช้เพื่อดึงข้อมูลจอภาพผ่านขั้วต่อ VGA, DVI และ HDMI


ฉันเข้าใจว่าจุดประสงค์ดั้งเดิมนั้นแตกต่างกัน แต่เนื่องจาก I2C กำลังถูกใช้สำหรับโมดูลที่เชื่อมต่อด้วยสายเคเบิลจำนวนมากในตอนนี้ฉันหวังว่าจะมีใครบางคนได้เริ่มฐานข้อมูลความร่วมมือสำหรับการจัดทำเอกสาร Pin-outs ที่ใช้โดยผลิตภัณฑ์ต่างๆ ตลาด Arduino และบอร์ดไมโครคอนโทรลเลอร์อื่น ๆ
Anindo Ghosh

4

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

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

ที่สำคัญหากคุณมองหาความสะดวกในการพกพาและความเสถียรในอุปกรณ์เชื่อมต่อของคุณ I2C และ SPI ไม่ใช่ที่ที่คุณต้องการค้นหา


3
จะเกิดอะไรขึ้นถ้ามีใครกำลังมองหาแนวทางในการสร้างอุปกรณ์ของตัวเองซึ่งจะทำงานร่วมกับ (และชอบ) โมดูลอื่น ๆ ทั้งหมดเหล่านั้นที่นั่นเพื่อ 'duino? มีตลาดอยู่ที่นั่นไม่เห็นจุดที่สนใจ อนึ่งต้องมีการดึงขึ้นที่โฮสต์และเป็นทางเลือกที่อุปกรณ์ตามข้อมูลจำเพาะ
Anindo Ghosh

5
สิ่งที่ "ดี" เกี่ยวกับมาตรฐานคือมีให้เลือกมากมาย! คุณเลือกมาตรฐานที่มีตัวเชื่อมต่อที่กำหนดไว้อย่างดีเช่น MIDI, USB, RS232 (นอกเหนือจากสิ่งที่โมเด็มโมฆะโง่) และสร้างนักแปลในอุปกรณ์ของคุณเอง ตัวเลือกอื่นกำลังสร้างเวิร์กกรุ๊ปมาตรฐานผ่านองค์กรมาตรฐานเช่น IEEE การดึง "อุปกรณ์เสริม" บนอุปกรณ์ส่งผลกระทบต่อพฤติกรรมของรถบัสทั้งหมดทำให้ตรงประเด็น MIDI แยกอุปกรณ์ทุกตัวตามมาตรฐานดังนั้นอุปกรณ์ที่เข้ากันได้จะไม่ทำให้เกิดปัญหาเหล่านี้
Scott Seidman

1
+1 สำหรับจุดที่ตลก แต่แปลกจริงเกี่ยวกับมาตรฐาน! :-)
Anindo Ghosh

4

หลายคนใช้ขั้วต่อบางชนิดเพื่อส่งสัญญาณI²Cและกำลังไฟระหว่าง PCB สองตัว ตัวอย่างเช่น,

เคล็ดลับทั่วไปสำหรับการพกพาสัญญาณI²Cในระยะทางที่ไกลกว่า:

ps: ฉันเห็นว่าWikipedia: I²Cการเชื่อมต่อโครงข่ายมีการเชื่อมโยงกับคำถามนี้


3

ในขณะที่ไม่มีพินI²Cหรือมาตรฐานตัวเชื่อมต่อ แต่มีบางสถานที่ที่ใช้I²Cซึ่งเป็นมาตรฐาน บางอย่างที่นึกถึงคือโมดูลหน่วยความจำ (DIMM, SO-DIMM), ตัวเชื่อมต่อวิดีโอ ( DDCในDVI , VGA ) และSM-Bus (ใช่หน้าเว็บของพวกเขาดูเหมือนสิ่งที่เด็กสร้างขึ้นในช่วงกลางยุค 90) โดยเฉพาะอย่างยิ่งตัวเชื่อมต่อ SM-busนั้นได้รับการใส่รหัสและมีเพียงI²Cและกำลังไฟ แต่ SM-Bus จะมีข้อ จำกัด เพิ่มเติมดังนั้นในทางเทคนิคแล้วอุปกรณ์I²Cไม่ควรเชื่อมต่อกับ SM-Bus จริงทั้งหมด มีปลั๊กอีกสองสามอันที่มีกรรมสิทธิ์เช่นเซ็นเซอร์ Lego NXT


มันเป็นมาตรฐานที่ไม่มีมาตรฐาน ... สิ่งที่ฉันหวังไว้คือแนวทางปฏิบัติที่ได้รับการยอมรับจากนักออกแบบอุปกรณ์ซึ่งอาจทำตาม ตัวอย่างเช่น SMBus มีสาย + 5V ด้านนอกในขณะที่ NXP แนะนำให้ทั้ง + V และ GND อยู่ระหว่างร่องรอยสัญญาณ วิธีไหนดีกว่าและทำไม
Anindo Ghosh

2

ไม่มีมาตรฐาน

ไม่มีการปฏิบัติทั่วไป

ในเรื่องของการตัดสินใจว่าจะทำอย่างไร:

  1. รักษาสัญญาณบนบอร์ดเดียวเหมือนที่ตั้งใจไว้ตั้งแต่แรก สาย IIC นั้นมีอิมพีแดนซ์ค่อนข้างสูงเป็นแบบปลายเดี่ยวจึงอ่อนไหวต่อเสียงรบกวนและจะไม่ยุติสายส่ง IIC ไม่ได้มีไว้สำหรับการลงจากรถ

  2. หากคุณกำลังจะลงจากรถให้ใช้รถเมล์สั้น ๆ ไม่กี่นิ้วน่าจะโอเค เมตรขึ้นไปกำลังถามหาปัญหาจริงๆ

  3. อยู่ห่างจากแหล่งกำเนิดเสียงรบกวน อย่าห่อไว้รอบ ๆ มอเตอร์เช่นหรือพยายามเข้าไปใกล้ ๆ

  4. ใช้ตัวเชื่อมต่อที่ไม่สามารถติดตั้งไว้ด้านหลังได้ หากใครบางคนสามารถเสียบมันไว้ข้างหลังได้

  5. สายริบบิ้นน่าจะใช้ง่ายที่สุด คุณต้องมีสายไฟอย่างน้อยสามเส้น, SCL, SDA และกราวด์ การเพิ่มพลังงานอาจเป็นความคิดที่ดี ตรวจสอบให้แน่ใจว่าสายดินอยู่ระหว่าง SCL และ SDA เพื่อหลีกเลี่ยงการครอสทอล์ค สายไฟไม่ควรมีเสียงรบกวนดังนั้นติดไว้ที่ด้านหนึ่งมันไม่สำคัญเลย

  6. หลังจากพูดคุยกับคอนเนคเตอร์และติดตามปัญหาที่อาจเกิดขึ้นให้ตระหนักว่าจุดที่ 1 เป็นเพียงสิ่งเดียวที่คุณจำเป็นต้องรู้


ดังนั้นเราจะต้องมุ่งหน้าไปที่ทรายสำหรับทุก ๆ ร้อยสิ่งที่ผู้คนทำและขายให้กับผู้เริ่มต้นของ Arduino และไมโครคอนโทรลเลอร์อื่น ๆ ?
น่าตื่นเต้น

1

ตามปกติสำหรับโพสต์ใด ๆ ที่ถามว่าทำไมมาตรฐาน [nt]:
Fortunately, the charging one has been solved now that we've all standardized on mini-USB. [Or is it micro-USB? Shit.
จาก XKCD


บางทีถ้าคุณอ่านคำถามอย่างระมัดระวังมากขึ้นหรือหลายกระทู้ความคิดเห็นคุณอาจสังเกตเห็นว่ามันไม่ได้เป็นมาตรฐานที่ถูกแสวงหา แต่เป็นชุดของภูมิปัญญาในรูปแบบของแนวทางปฏิบัติซึ่งเป็นที่ยอมรับ
Anindo Ghosh

1
@AnindoGhosh - ฉันไม่เห็นวิธีการที่ทำให้แตกต่าง หากคุณแทนที่มาตรฐานด้วยแนวทางในการ์ตูนข้างต้นก็ใช้ได้เช่นกัน สถานการณ์ใดก็ตามที่มีหลายวิธีในการทำบางสิ่งบางอย่างโดยทั่วไปส่งผลให้หลายคนทำสิ่งนั้นหลายวิธี แม้ว่าจะไม่ใช่ "มาตรฐาน" อย่างเป็นทางการ
คอนเนอร์ Wolf
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.