ทาส i2c สามารถรองรับต้นแบบ i2c ได้กี่ตัว?


17

มีทาส i2c มากที่สุดที่ต้นแบบ i2c สามารถขับได้หรือไม่ อะไรคือปัจจัย จำกัด ทางกายภาพ?


1
คุณมีที่อยู่ 7 บิต นั่นหมายความว่าคุณสามารถจัดการทาสได้มากถึง 127 คน
Botnic

ขอบคุณ มีปัจจัย จำกัด ทางกายภาพเช่นไดรฟ์ปัจจุบันความจุหรืออะไรทำนองนั้นที่ป้องกันจำนวนทาสให้มากถึง 127 หรือไม่?
user768421

1
@Botnic ไม่สนใจสวิตช์ i2c ฮับบัฟเฟอร์ตัวทำซ้ำและอุปกรณ์ i2c ใด ๆ ที่ช่วยให้คุณขยายบัสได้อย่างสมบูรณ์
Passerby

คำตอบ:


22

ปัจจัย จำกัด ซอฟต์แวร์คือขนาดของที่อยู่ที่ใช้สำหรับทาส: 7 บิตหรือ 10 บิตซึ่งรองรับอุปกรณ์ 127 และ 1,023 ตามลำดับ ทางกายภาพมีข้อ จำกัด สองประการ ครั้งแรกขนาดทางกายภาพของรถบัสเพราะรถบัสมีไว้สำหรับการวิ่งระยะสั้นเท่านั้น (ส่วนอินเตอร์ IC) หากบัสมีขนาดใหญ่เกินไปจะมีเอฟเฟกต์การโหลดแบบ capacitive และความล่าช้าในการแพร่กระจายซึ่งจำเป็นต้องได้รับการจัดการ ประการที่สองอุปกรณ์บางอย่างไม่สามารถรองรับที่อยู่ I2C ได้อย่างเต็มรูปแบบ ตัวอย่างเช่นเครื่องวัดการหมุนวน MPU6050 รองรับสองที่อยู่เท่านั้นและอุปกรณ์บางเครื่องสำรองที่อยู่เฉพาะสำหรับวัตถุประสงค์พิเศษ


2
คุณมีข้อผิดพลาดแบบออฟไลน์ การกำหนดแอดเดรส 7 บิตรองรับ 128 แอดเดรส (0 ถึง 127) การกำหนดแอดเดรส 10 บิตรองรับ 1024 แอดเดรส (0 ถึง 1,023)
CurtisHx

3
นี่ไม่ใช่ข้อผิดพลาดเดียว มันเป็น "off by 6 error" เพราะมีที่อยู่ที่สงวนไว้ 7 แห่งไม่ใช่ที่อยู่เดียว
kruemi

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

ตัวเลขเหล่านี้ค่อนข้างถูกต้องอย่างไรก็ตามจำเป็นต้องมีข้อแม้ มีที่อยู่ที่สงวนไว้เล็กน้อยเช่น 1111 XXX และ 0000 XXX ซึ่งหมายความว่า 7-bit = 2 ^ 7 - 16 = 112 ที่อยู่ที่สามารถใช้งานได้ 10 บิตคือเต็มรูปแบบ 2 ^ 10 1024 8 บิตไม่ได้ (ไม่ควรเป็นอย่างนั้น) โดยทั่วไปจะรวมบิต R / W ด้วย บน 7 บิต nxp.com/docs/en/user-guide/UM10204.pdf
busfault

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

10

จำนวนสูงสุดของโหนดถูก จำกัด ด้วยพื้นที่ที่อยู่และโดยความจุบัสรวม 400 pF ซึ่ง จำกัด ระยะการสื่อสารที่ใช้งานได้จริงเพียงไม่กี่เมตร

อ่านเพิ่มเติมได้ที่I²C


9

การกำหนดที่อยู่ จำกัด จำนวนของอุปกรณ์ - บางอย่างสามารถใช้การระบุที่อยู่ 10 บิต (ใช้ค่อนข้างน้อย) ซึ่ง จำกัด จำนวนที่อยู่ไว้ที่ 1024 มีจำนวนที่อยู่ 'สำรอง' จำนวนหนึ่ง

I2C (เมื่อเทียบกับ "รถบัสสายสอง" หรือสิ่งที่คนอื่นต้องการที่จะเรียกรถโดยสารที่คล้ายกัน) ควรเป็นไปตาม NXP (néeฟิลิปส์) มาตรฐานUM10204 I2C บัสข้อกำหนดและคู่มือการใช้ นั่นควรเป็นเอกสารอ้างอิงหลักของคุณไม่ใช่การตีความและชุดย่อยต่าง ๆ ที่มีอยู่ในที่อื่น

จำนวนสูงสุดของอุปกรณ์จะได้รับอิทธิพลจากความสามารถของไดรฟ์ของเอาต์พุตที่อ่อนแอที่สุด (ซึ่งจะเป็นตัวกำหนดตัวต้านทานแบบดึงต่ำสุด) การเดินสายและความจุอินพุตและโหมดการทำงาน / ความถี่ ดูหัวข้อ 7.2 การใช้งานสูงกว่าค่าความจุบัสสูงสุดที่อนุญาตหากค่าความจุสูงสุดต้องเกิน:

ป้อนคำอธิบายรูปภาพที่นี่


7

บัส i2c ส่วนใหญ่ถูก จำกัด โดยความจุของบัส (และความเร็วดังนั้น) และที่อยู่อุปกรณ์ที่สามารถเข้าถึงได้ และพื้นที่บอร์ดกายภาพ

แต่ไม่มีขีด จำกัด สูงสุดจริงเมื่อคุณคำนึงถึงบัฟเฟอร์บัสตัวขยายตัวทำซ้ำฮับมัลติเพล็กเซอร์สวิตช์ (หรือชื่ออื่น ๆ สำหรับอุปกรณ์ที่สามารถสลับระหว่างบัสได้หลายตัว) สิ่งเหล่านี้จะเพิ่มค่าใช้จ่ายของ i2c บางส่วนซึ่งสามารถเข้าถึงได้ผ่านทางบัส i2c เดียวกัน ตัวอย่าง PCA9548A เป็นสวิตช์บัส 8 บิต

ชิปตัวเดียวนี้สามารถเพิ่มจำนวนทาส i2c (127 * 8) ได้เป็นสี่เท่าในทางทฤษฎี และ PCA9548A สามารถกำหนดค่าได้ถึง 8 ที่อยู่บนบัสเดียวดังนั้นอุปกรณ์ 8 * 8 * 127 (คณิตศาสตร์อาจปิด) และนั่นก็เป็นเพียงกับอุปกรณ์นี้และไม่มาก

ไม่มีข้อ จำกัด ทางทฤษฎีหากคุณปรับความจุ


5

I2C ระบุความยาวที่อยู่ 2, 7 และ 10 บิตซึ่งให้ทฤษฎีสูงสุด 128 และ 1024 ที่อยู่ที่แตกต่างกันตามลำดับ

อย่างไรก็ตามมีที่อยู่ที่สงวนไว้ไม่กี่อย่างเช่น 0x00 (การโทรทั่วไป) ซึ่งจะเป็นการ จำกัด พื้นที่ที่อยู่เพิ่มเติม

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

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

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

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


เป็นเวลาเกือบสามปีแล้วที่คุณทำงานบนรถบัส i2c ที่ยาวมาก ๆ พวกเขาทำงานได้ดีไหม
wallyk

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

5

ข้อ จำกัด เบื้องต้นเกี่ยวกับจำนวนทาสที่ผู้ขับขี่สามารถขับได้โดยทั่วไปนั้นมาจากปัจจัยทางไฟฟ้าเช่นความจุของบัส, การรั่วไหล, ความแรงของการขับเป็นต้นถ้าใครสามารถสร้างทาสที่มีค่าความเป็นกาฝากเป็นศูนย์และไม่มีการรั่วไหล ด้วยร่องรอยบอร์ดความจุศูนย์แล้วความจุบัสจะไม่เป็นปัจจัย แต่ในทางปฏิบัติแล้วไม่มีข้อสันนิษฐานใด ๆ

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

หากต้องการเพิ่มความสามารถในการให้ต้นแบบกำหนดรหัสของทาสที่เชื่อมต่อทั้งหมดหนึ่งสามารถจองช่วง ID พิเศษบางอย่างสำหรับวัตถุประสงค์ดังกล่าว ตัวอย่างเช่นหนึ่งอาจกล่าวได้ว่าถ้าไบต์แรกของรหัสคือ FF ดังนั้นสี่ไบต์ถัดไปจะเป็นรูปแบบและสี่หลังจากนั้น ID อุปกรณ์ควรยังคงเชื่อมต่ออยู่ (และรับไบต์ ID สุดท้าย) หากส่วนของ ID ที่ระบุโดยมาสก์ตรงกับที่ให้ไว้ในคำสั่ง วิธีนี้จะช่วยให้ต้นแบบสามารถระบุอุปกรณ์อย่างน้อยหนึ่งรายการที่ใช้ 64 ธุรกรรมและอุปกรณ์เพิ่มเติมที่ใช้ 62 รายการหรือน้อยกว่าในการทำธุรกรรมแต่ละรายการ อาจไม่ใช่วิธีที่เป็นไปได้ที่เร็วที่สุดในการระบุอุปกรณ์ แต่ก็ไม่ได้เลวร้ายหากได้รับพื้นที่การค้นหาของ ID อุปกรณ์หลายพันล้านรายการ


2

คำตอบสั้น ๆ : มันขึ้นอยู่กับ

หากคุณมีอุปกรณ์ (ทั่วไป) ที่มีที่อยู่ 7 บิตสูงสุด 104 อุปกรณ์ (ที่อยู่ 128 แห่ง - ที่อยู่ที่สงวนไว้ (0x00-0x07 และ 0xF0-0xFF ถูกสงวนไว้)) (มีข้อ จำกัด บางอย่าง) หากคุณมีอุปกรณ์ (ทั่วไปน้อยกว่า) ที่รองรับ 10 บิต การกำหนดแอดเดรสสูงสุด 1024 อุปกรณ์ (คุณสามารถผสมอุปกรณ์ 7 บิตและ 10 บิตและเข้าถึงอุปกรณ์ได้สูงสุด 1136 เครื่อง)

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

หากคุณต้องการเชื่อมต่ออุปกรณ์ต่าง ๆ ในระยะทางที่ไกลกว่าฉันแนะนำให้ใช้ FieldBus! I2C ใช้สำหรับการสื่อสารภายในอุปกรณ์ (เช่นชุดทีวี) ฉันใช้ I2C กับ RaspberyPi ด้วยสายเคเบิลภายนอกสูงถึง 50 ซม. (แม้จะเป็น T-Sections คุณไม่ควรมีในระบบบัส) มันทำงานได้ดีอย่างน่าประหลาดใจ


0

จำนวนอุปกรณ์ที่เชื่อมต่อกับบัสถูก จำกัด ด้วยความจุบัสที่อนุญาตทั้งหมด 400 pF เนื่องจากไอซีส่วนใหญ่ที่มีอินเตอร์เฟซI²Cใช้เทคโนโลยี CMOS พลังงานต่ำและความต้านทานสูงไอซีจำนวนมากจึงสามารถเชื่อมต่อกับบัสI²Cก่อนถึงความจุสูงสุด


1
นี่ไม่ได้ตอบคำถามของ OP ในคฤหาสน์ที่สมบูรณ์ พยายามตอบทุกแง่มุมของคำถามแม้ว่าจะใช้ค่าโดยประมาณ ระบุและ / หรือปล่อยลิงค์ไปยังแหล่งข้อมูลของคุณ
Sparky256

0

ด้วยชิปมัลติเพล็กเซอร์ที่เพิ่มขึ้น (เช่น TCA9544A) หรือบัฟเฟอร์ (เช่น PCA9515B) คุณสามารถเอาชนะข้อ จำกัด ทั้งหมด - ทั้งความจุของบัสและการกำหนดแอดเดรส

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

หากคุณมีสายไฟที่ยาวคุณสามารถวางบัฟเฟอร์ไว้ตรงกลางและเอาชนะขีด จำกัด ของความจุ


ไม่คุณจะยังคงถูก จำกัด : 4 Channels / Multiplexer ต่อช่องคุณมี 4 Subchannels จากนั้นคุณมี Subsubchannels, Subsubsubchannels และอีกมากมาย คุณมี 3 ที่อยู่บรรทัดต่อแชท witcher: คือ 4 ^ (2 ^ 3) = 65536 ช่อง ต่อช่องคุณมี 2 ^ 8 - 7 - 8 + 2 ^ 10 = 1265 อุปกรณ์ / ช่องสัญญาณ (เมื่อคุณใช้บัฟเฟอร์) (-7 สำหรับที่อยู่ที่สงวนไว้และ -8 สำหรับที่อยู่หลายจุด) 1265 * 65536 = 82903040 อุปกรณ์สูงสุด
12431234123412341234123

แก้ไข: ขออภัยมีข้อผิดพลาด: มันคือ 2 ^ 7 - 7 - 8 + 2 ^ 10 = 1137 อุปกรณ์ / ช่อง = 1137 * 65536 = 74514432 อุปกรณ์ แต่อาจมีความเป็นไปได้มากขึ้นเมื่อคุณใช้ IO-Expander ในการเปิดและปิดบัฟเฟอร์บางอย่าง (การใช้งานจริงในรูปแบบไกลเท่าไหร่ แต่เป็นไปได้ทางทฤษฎี)
12431234123412341234123
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.