ตัวต้านทาน Pull-Up ของ I2C: แก้ไขข้อผิดพลาดที่ 100 kHz และ 400 kHz
ตัวต้านทาน Pull-Up ของ I2C ต้องเป็นไปตามทั้งขีดจำกัดเวลา Rise Time และข้อกำหนดการขับระดับสัญญาณต่ำ
เซนเซอร์ตอบสนองบนสายสั้น จากนั้นหายไปเมื่อเชื่อมต่อโมดูลที่สอง ต้นแบบทำงานที่ 100 kHz แต่รายงานข้อผิดพลาดที่ 400 kHz มีผู้แนะนำให้เปลี่ยนตัวต้านทานทุกตัวเป็น 4.7 kOhm ซึ่งอาจปรับปรุงวงจร แต่ไม่ได้อธิบายความล้มเหลวเดิมหรือสร้างการออกแบบการผลิตที่เชื่อถือได้
คู่มือนี้เปลี่ยนคำถามการแก้ไขปัญหาที่คุ้นเคยให้เป็นแผนการคำนวณและการวัด ครอบคลุมบัส Standard-mode และ Fast-mode ที่ใช้ตัวต้านทาน Pull-Up ทั่วไป รวมถึงโปรเจกต์ ESP32 และ STM32 ทั่วไป ตัวอย่างเชิงตัวเลขเป็นสถานการณ์ที่คำนวณขึ้น ไม่ใช่การวัดด้วยออสซิลโลสโคปหรือการรับประกันสำหรับบอร์ดใดบอร์ดหนึ่ง เอกสารข้อมูลอุปกรณ์ โดเมนแรงดัน และบัสที่ประกอบแล้วยังคงเป็นตัวกำหนดว่าค่าหนึ่งๆ เป็นที่ยอมรับได้หรือไม่
1. เหตุใดบัสจึงต้องมีตัวต้านทาน pull-up
ในการเชื่อมต่อ I2C แบบ open-drain ตามปกติ อุปกรณ์หนึ่งจะดึงสัญญาณลงต่ำหรือปล่อยสัญญาณ ตัวต้านทานจะนำสัญญาณที่ถูกปล่อยกลับเข้าหาแหล่งจ่าย pull-up ดังนั้นจึงเป็นส่วนหนึ่งของอินเทอร์เฟซทางไฟฟ้า มิใช่เพียงความสะดวกด้านซอฟต์แวร์ที่เป็นทางเลือก SDA และ SCL ต้องมีเส้นทาง pull-up ของตนเอง และอุปกรณ์ต้องมีอ้างอิงร่วมที่ถูกต้อง

ความต้านทานค่ามากดึงกระแสน้อยกว่าในขณะที่สายเป็น low แต่ชาร์จความจุของบัสได้ช้ากว่า ความต้านทานค่าน้อยยกสายให้สูงขึ้นได้เร็วกว่า แต่ทำให้ทุกเอาต์พุตที่ร่วมอยู่ในบัสต้องดูดกระแสมากขึ้น ค่าหนึ่งอาจล้มเหลวได้ทั้งสองด้านของข้อแลกเปลี่ยนนี้ การเปลี่ยนตัวต้านทานโดยพิจารณาเพียงว่าสแกนเนอร์ตรวจพบอุปกรณ์หรือไม่นั้นมองข้ามข้อจำกัดทางไฟฟ้านี้ไป
แยกตัวต้านทาน pull-up ของบัสออกจากตัวต้านทาน damping แบบอนุกรมที่เป็นทางเลือก และจากตัวต้านทานบนเอาต์พุตอินเทอร์รัปต์ที่ไม่เกี่ยวข้อง ตำแหน่งและวัตถุประสงค์ของสิ่งเหล่านี้แตกต่างกัน เริ่มจาก schematic จริงและชิ้นส่วนที่ติดตั้งจริง รวมถึงชิ้นส่วนที่ซ่อนอยู่บน breakout board
2. ทำไม 100 kHz จึงใช้ได้ ในขณะที่ 400 kHz ล้มเหลว
ความถี่สัญญาณนาฬิกาแบบ nominal ไม่ใช่การวัดเดียวกันกับ rise time ของสัญญาณ หลังจากเอาต์พุตปล่อยสาย ความต้านทานและความจุเป็นตัวกำหนดว่าแรงดันของสายจะข้ามเกณฑ์การรับสัญญาณได้เร็วเพียงใด การทำให้คาบสัญญาณนาฬิกาสั้นลงไม่ได้ทำให้กระบวนการชาร์จนั้นเร็วขึ้นโดยอัตโนมัติ
ข้อกำหนด I2C ของ NXP ระบุ rise time สูงสุดไว้ที่ 1000 ns สำหรับ Standard-mode และ 300 ns สำหรับ Fast-mode วิธีการกำหนดขนาด RC ของข้อกำหนดนี้วัดการเปลี่ยนสถานะระหว่าง 30% ถึง 70% ของแรงดัน pull-up การวัดแบบ 10% ถึง 90% ที่เป็นค่าเริ่มต้นของออสซิลโลสโคปตอบคำถามที่แตกต่างออกไป ดังนั้นควรกำหนดเกณฑ์หรือคำนวณช่วงเวลาที่ถูกต้องก่อนเปรียบเทียบผลลัพธ์
| โหมดบัส | นาฬิกาสูงสุด | เวลาขาขึ้นสูงสุด | สิ่งที่การตรวจสอบไม่ได้พิสูจน์ |
|---|---|---|---|
| Standard-mode | 100 kHz | 1000 ns | Other timing, voltage and protocol requirements still apply |
| Fast-mode | 400 kHz | 300 ns | Every connected device must support the selected mode |
| This guide's calculations | 100 kHz or 400 kHz | 30% to 70% thresholds | Not a Fast-mode Plus or High-speed design approval |
การลดความเร็วของนาฬิกาเป็นการทดลองวินิจฉัยที่มีประโยชน์ หากช่วยได้ ให้ตรวจสอบรูปคลื่นและงบเวลามากกว่าการประกาศว่าแก้ไขข้อบกพร่องแล้ว ข้อผิดพลาดเกี่ยวกับแอดเดรส ลำดับการจ่ายไฟ และข้อกำหนดธุรกรรมเฉพาะอุปกรณ์อาจยังคงอยู่ได้ แม้ว่าขอบสัญญาณจะดูดีขึ้นก็ตาม
3. คำนวณความต้านทานขั้นต่ำจากการขับระดับต่ำ
ขอบเขตความต้านทานด้านล่างมาจากความสามารถของเอาต์พุตในการคงระดับต่ำที่ถูกต้อง ใช้เงื่อนไขกระแสซิงก์ที่ระบุและแรงดันเอาต์พุตระดับต่ำสูงสุดสำหรับอุปกรณ์และสภาวะการทำงานที่เกี่ยวข้อง อย่าใช้กระแสสูงสุดสัมบูรณ์ของ GPIO หรือพิกัดกระแสของทั้งชิปแทนการรับประกันทางไฟฟ้านั้น
Rp(min) = (Vpullup - VOL(max)) / IOL
สำหรับบัส 3.3 V เพื่อเป็นตัวอย่าง สมมติว่าทุกเอาต์พุตที่อาจดึงสายให้เป็นต่ำถูกกำหนดไว้ที่สูงสุด 0.4 V ที่ 3 mA การคำนวณให้ค่าประมาณ 967 โอห์ม ความต้านทานที่เล็กกว่าจะต้องใช้กระแสมากกว่าที่สมมติไว้ที่แรงดันระดับต่ำนั้น ตัวอย่างนี้ไม่ได้ยืนยันว่า ESP32, STM32, เซนเซอร์ หรือบัฟเฟอร์ทุกตัวมีสเปกเหมือนกัน
ตรวจสอบไดรเวอร์ที่อ่อนที่สุดที่ใช้ได้ รวมถึงเป้าหมายที่ตอบรับบน SDA หรือยืด SCL เมื่อใช้คุณสมบัตินั้น ตัวควบคุมที่มีเอาต์พุตแรงไม่สามารถชดเชยอุปกรณ์อื่นที่ไม่เป็นไปตามข้อกำหนดระดับต่ำของตนได้ ความคลาดเคลื่อนของแหล่งจ่ายก็สำคัญเช่นกัน: ประเมินปลายสูงของรางพูลอัปเมื่อตรวจสอบกระแสพูลอัปที่แรงที่สุด
4. คำนวณความต้านทานสูงสุดจากความจุ
สำหรับแบบจำลอง RC อย่างง่าย ความสัมพันธ์ของเวลาขึ้นให้ขอบเขตความต้านทานด้านบน แอปพลิเคชันโน้ต SLVA689A ของ TI นำเสนอแนวทางการกำหนดขนาดเดียวกับข้อกำหนดของ NXP ความจุเป็นของสายบัสหนึ่งเส้น และรวมถึงขาของอุปกรณ์ เส้นทางเดินสาย คอนเนกเตอร์ การเดินสาย และภาระการวัด; ไม่ใช่เพียงความจุที่พิมพ์ไว้สำหรับเซนเซอร์ตัวเดียว
tr = 0.8473 x Rp x Cb
Rp(max) = tr(max) / (0.8473 x Cb)
ด้วยสมมติฐานค่าความจุของสาย 200 pF ขอบเขตบนที่คำนวณได้คือประมาณ 5.90 kOhm ที่ 100 kHz และ 1.77 kOhm ที่ 400 kHz จากนั้นนำผลลัพธ์เหล่านั้นมารวมกับขอบเขตล่าง 967 Ohm ก่อนหน้านี้ ในทั้งสองกรณีมี nominal window อยู่ แต่ช่วงดังกล่าวจะแคบลงมากเมื่อความเร็วบัสสูงขึ้น

ใช้หน่วยให้สอดคล้องกัน: วินาที, Ohm และฟารัดในสูตร สเปรดชีตที่ผสม pF กับฟารัดอาจให้ตัวเลขที่ดูสมเหตุสมผลแต่มีข้อผิดพลาดมหาศาล เขียนหน่วยกำกับไว้ข้างอินพุต และตรวจสอบผลลัพธ์หนึ่งรายการอย่างอิสระก่อนเลือกชิ้นส่วน
5. เปรียบเทียบ 4.7 kOhm, 2.2 kOhm และ 1.5 kOhm
คงสมมติฐาน 200 pF เดิมไว้ และคำนวณ rise time สำหรับค่าตัวต้านทานที่คุ้นเคยสามค่า การทำเช่นนี้แยกผลของความต้านทานออกมา แต่ไม่ได้หมายถึงบอร์ดที่วัดจริงสามบอร์ด ตารางเปรียบเทียบเฉพาะขีดจำกัด rise time แบบ RC ที่ระบุไว้ กับ nominal low-level bound ก่อนหน้านี้
| ความต้านทานแบบ pull-up | เวลาขึ้นที่คำนวณได้ | ขีดจำกัดเวลาขึ้นที่ 100 kHz | ขีดจำกัดเวลาขึ้นที่ 400 kHz |
|---|---|---|---|
| 4.7 kOhm | 796 ns | Within 1000 ns | Exceeds 300 ns |
| 2.2 kOhm | 373 ns | Within 1000 ns | Exceeds 300 ns |
| 1.5 kOhm | 254 ns | Within 1000 ns | Within 300 ns; check tolerances and VOL |

ผลลัพธ์อธิบายว่าทำไมการเปลี่ยน 4.7 kOhm เป็น 2.2 kOhm อาจปรับปรุงบัสได้โดยไม่ทำให้ตัวอย่าง 400 kHz นี้เป็นไปตามข้อกำหนด ค่า 1.5 kOhm เป็นตัวเลือกภายใต้สมมติฐาน ไม่ใช่คำแนะนำทั่วไป ควรคำนวณใหม่เมื่อแรงดัน เงื่อนไขการขับของอุปกรณ์ หรือความจุรวมเปลี่ยนแปลง
อย่าเลือกตัวต้านทานที่ค่าพอดีกับขีดจำกัดที่คำนวณไว้พอดี การผ่านเกณฑ์ตามค่า nominal ที่หายไปเมื่อใช้สายยาวขึ้นหรือใช้ล็อตชิ้นส่วนที่แตกต่างกัน ถือเป็นการประเมิน margin ที่ยังไม่สมบูรณ์ ให้เก็บการคำนวณไว้คู่กับโครงแบบบอร์ดเฉพาะที่ใช้ในการอนุมัติ
6. นับ pull-ups ที่ติดตั้งอยู่บนโมดูลแล้ว
โมดูลหลายตัวอาจมี pull-up ที่สมเหตุสมผลโดยสมบูรณ์ในแต่ละตัว แต่ยังคงสร้างโหลดรวมที่ไม่เหมาะสมได้ ตัวต้านทานที่ต่อจากสัญญาณเดียวกันไปยังรางเดียวกันจะทำงานแบบขนาน ให้คำนวณ SDA และ SCL แยกจากกัน เพราะเครือข่ายที่ติดตั้งไว้ของทั้งสองอาจไม่เหมือนกัน
1 / Rประสิทธิผล = 1 / R1 + 1 / R2 + ...
ตัวต้านทาน 4.7 kOhm สองตัวบนสายหนึ่งเส้นให้ค่า 2.35 kOhm สี่ตัวให้ค่า 1.175 kOhm ห้าตัวให้ค่า 940 Ohm ซึ่งต่ำกว่าค่าต่ำสุด illustrative 967 Ohm จากตัวอย่าง 3.3 V ของเรา การเพิ่มโมดูลอาจเพิ่ม capacitance และเสริมความแข็งแรงของ pull-up พร้อมกัน ดังนั้นพฤติกรรมที่เกิดขึ้นจึงไม่อธิบายได้ด้วยจำนวนอุปกรณ์เพียงอย่างเดียว

ตรวจสอบแผนภาพวงจรของโมดูลและชิ้นส่วนที่ติดตั้งก่อนเปลี่ยนจัมเปอร์หรือถอดตัวต้านทาน จัดทำเอกสารรายการชิ้นส่วนที่ประกอบสุดท้ายไว้ให้ครบถ้วน เพื่อไม่ให้โมดูลทดแทนเปลี่ยนแปลงเครือข่ายโดยไม่ตั้งใจ การวัดความต้านทานขณะปิดไฟอาจช่วยได้ แต่เส้นทางสารกึ่งตัวนำอื่นอาจส่งผลต่อค่าที่อ่านได้ ควรตีความร่วมกับแผนภาพวงจร
7. ตรวจสอบโดเมนแรงดันก่อนเปลี่ยนค่าความต้านทาน
ราง pull-up กำหนดระดับสูงเมื่อปล่อยสาย การ pull-up ที่ 5 V ไม่ได้ปลอดภัยสำหรับอินพุตที่รองรับเฉพาะ 3.3 V เพียงเพราะตัวต้านทานจำกัดกระแส ตรวจสอบขีดจำกัดแรงดันที่ขา threshold ของอินพุต พฤติกรรมเมื่อปิดไฟ และกระแส injection ที่อนุญาต (ถ้ามี) ในเอกสารของอุปกรณ์รุ่นนั้นโดยตรง
การทำงานแบบ open-drain ช่วยให้อุปกรณ์แชร์สายร่วมกันได้ แต่ไม่ใช่การแปลงระดับแรงดันโดยอัตโนมัติ อาจจำเป็นต้องใช้ translator เฉพาะทางหรือวงจร discrete ที่ผ่านการตรวจสอบ บัสที่มี buffer หรือผ่าน translator อาจมีเซกเมนต์แยกกัน มี capacitance, offset และข้อกำหนด pull-up ที่แตกต่างกัน อย่าใช้การคำนวณ RC แบบรวมก้อนเดียวกับอุปกรณ์ที่มีสถาปัตยกรรมเปลี่ยนแบบจำลองทางไฟฟ้า
การจัดลำดับการจ่ายไฟ (power sequencing) ก็ควรตรวจสอบเช่นกัน อุปกรณ์เป้าหมายที่ปิดอยู่ขณะที่บัสยังมีไฟอาจ clamp สายหรือรับกระแสผ่านโครงสร้างป้องกัน ขึ้นอยู่กับการออกแบบ ทดสอบลำดับที่ตั้งใจและดูข้อกำหนดเมื่อปิดไฟ การเพิ่มความแรงขับหรือรีสตาร์ท firmware ซ้ำๆ ไม่ใช่สิ่งทดแทนการแก้ไขการเชื่อมต่อทางไฟฟ้าที่เข้ากันไม่ได้
8. มอง internal pull-ups เป็นตัวเลือกการออกแบบที่ต้องจัดทำเอกสารกำกับ
pull-up ภายในนั้นสะดวก แต่ความต้านทานและความแปรปรวนของ pull-up เหล่านี้อาจไม่เหมาะกับความจุของบัสและความเร็ว การเปิดแฟล็กการกำหนดค่าไม่ใช่หลักฐานว่าอินเทอร์เฟซที่ประกอบแล้วเป็นไปตามข้อกำหนด rise time ตรวจสอบช่วงที่กำหนดและรวมช่วงดังกล่าวเมื่อคำนวณการต่อขนานใด ๆ กับตัวต้านทานภายนอก
เอกสาร I2C ของ ESP32 จาก Espressif แนะนำ pull-up ภายนอกที่เหมาะสม และระบุว่า pull-up ภายในมีกำลังไม่เพียงพอสำหรับการทำงานที่ความเร็วสูงขึ้น เอกสารยังระบุการตรวจสอบ pull-up ว่าเป็นส่วนหนึ่งของการวินิจฉัย probe timeout นั่นเป็นคำแนะนำการแก้ปัญหาที่มีประโยชน์ ไม่ใช่ข้อความที่บ่งชี้ว่า timeout ทุกกรณีมีสาเหตุเดียวกัน
สำหรับ STM32 หรือ MCU อื่น ให้ใช้ข้อมูลทางไฟฟ้าของชิ้นส่วนเฉพาะ คู่มืออ้างอิง และ errata ที่เกี่ยวข้อง ชื่อตระกูลไม่ได้บ่งบอกลักษณะของพิน พฤติกรรมของเพอริเฟอรัล หรือตัวต้านทานที่ติดตั้งบนบอร์ด บันทึกการกำหนดค่าซอฟต์แวร์ร่วมกับค่าฮาร์ดแวร์ เพื่อให้การอัปเดตเฟิร์มแวร์ไม่เปลี่ยนเครือข่ายบัสที่มีผลโดยไม่รู้ตัว
9. วัดขอบสัญญาณ ณ ตำแหน่งที่ตัวรับมองเห็น
ใช้ oscilloscope ตรวจสอบรูปคลื่นแอนะล็อกที่จุดปลายที่เกี่ยวข้อง ด้วยโพรบที่เหมาะสมและการเชื่อมต่อกราวด์แบบสั้น พิจารณาโหลดของโพรบเมื่อตีความผลลัพธ์ logic analyzer สามารถเปิดเผยแอดเดรส acknowledgement และลำดับธุรกรรม แต่การถอดรหัสที่สะอาดไม่ใช่การวัด margin แบบแอนะล็อกที่สมบูรณ์
วัด rise time ของ SDA และ SCL โดยใช้วิธีกำหนด threshold ที่กำหนด และตรวจสอบระดับต่ำเมื่ออุปกรณ์ต่าง ๆ เป็นตัวขับสัญญาณ มองหา ringing การดิ่งลงที่ไม่คาดคิด และความแตกต่างด้านเวลาระหว่างคอนโทรลเลอร์กับเป้าหมายที่อยู่ไกล ภาพหน้าจอเพียงภาพเดียวจากธุรกรรมที่ง่ายที่สุดไม่ได้ครอบคลุมทุกสภาวะการทำงาน
ทำการตรวจสอบที่เกี่ยวข้องซ้ำด้วยชุดสายไฟสุดท้าย โมดูลทั้งหมดที่ตั้งใจใช้ ขีดจำกัดการจ่ายไฟ และช่วงอุณหภูมิที่ต้องการ เก็บความเร็วบัส การติดตั้งตัวต้านทาน การตั้งหัววัด และเวอร์ชันเฟิร์มแวร์ไว้พร้อมข้อมูลที่บันทึก บันทึกเหล่านี้ทำให้การเปลี่ยนแปลงคอมโพเนนต์หรือโมดูลในภายหลังสามารถตรวจสอบย้อนหลังได้ แทนที่จะพึ่งความจำของใครบางคนว่าโปรโตไทป์เก่าทำงานได้
10. แยกความล้มเหลวทางไฟฟ้าออกจากข้อผิดพลาดด้านโปรโตคอล
การขาดการตอบรับ (acknowledgement) อาจเกิดจากแอดเดรสผิด เป้าหมายไม่มีไฟเลี้ยง ธุรกรรมที่อุปกรณ์ไม่รองรับ หรือปัญหาทางไฟฟ้า ควรอ่านธรรมเนียมการกำหนดแอดเดรสของอุปกรณ์และสิ่งที่ไลบรารีคาดหวังร่วมกัน เอกสารบางแห่งแสดงบิตแอดเดรสแตกต่างจากอาร์กิวเมนต์ API การคัดลอกตัวเลขโดยไม่ตรวจสอบธรรมเนียมนั้นอาจสร้างการวินิจฉัยผิดที่ดูน่าเชื่อถือ
| อาการที่สังเกตพบ | การตรวจสอบที่มีประโยชน์ขั้นแรก | หลีกเลี่ยงการสันนิษฐาน |
|---|---|---|
| Works slowly, fails at higher speed | Measure rise time, timing margins and supported mode | Every failure is solved by 2.2 kOhm |
| No acknowledgement at any speed | Power, address convention, pin mapping and waveform | The IC must be defective |
| Fails after adding a module | Parallel pull-ups, capacitance, addresses and rail compatibility | More pull-ups always help |
| SDA or SCL remains low | Identify the held line and inspect state, power and reset | A scanner or an arbitrary pulse loop will recover it |
การชนกันของที่อยู่ (address collisions) เป็นอีกสาเหตุหนึ่งที่บัสอาจล้มเหลวหลังการขยายเท่านั้น แยกอุปกรณ์ในแบบทดสอบที่ควบคุมได้และเปรียบเทียบที่อยู่ที่กำหนดค่าไว้ ให้เปลี่ยนตัวแปรทีละตัวในแต่ละครั้ง; การเปลี่ยนตัวต้านทาน อัปเดตเฟิร์มแวร์ และเปลี่ยนสายเคเบิลพร้อมกันทำให้ผลลัพธ์ที่สำเร็จอธิบายหรือทำซ้ำได้ยาก
11. หากไม่มีช่วงค่าความต้านทานที่ใช้ได้ ให้เปลี่ยนการออกแบบ
พิจารณา 400 pF ที่ 400 kHz ด้วยสมมติฐานตัวอย่างเดียวกันที่ 3.3 V, 0.4 V และ 3 mA ความต้านทานสูงสุดที่คำนวณได้คือประมาณ 885 Ohm ขณะที่ค่าต่ำสุดยังคงอยู่ที่ประมาณ 967 Ohm ไม่มีตัวต้านทานแบบพาสซีฟใดที่สอดคล้องกับข้อจำกัดตามค่าที่กำหนดทั้งสองข้อในแบบจำลองนั้น การเลือกค่ากึ่งกลางไม่ได้แก้ข้อขัดแย้งนี้
การเปลี่ยนแปลงการออกแบบที่เป็นไปได้ ได้แก่ การลดความจุ การทบทวนความเร็วที่รองรับ การเลือกไดรเวอร์ที่มีข้อกำหนดเหมาะสม หรือการใช้สถาปัตยกรรมบัฟเฟอร์ที่ผ่านการรับรอง แต่ละตัวเลือกมีข้อจำกัดของตัวเอง ไดรเวอร์ที่แรงขึ้นต้องได้รับการรองรับจากอุปกรณ์ที่เกี่ยวข้องทุกตัวที่ขับระดับต่ำ และบัฟเฟอร์ต้องมีการทบทวนแรงดัน ระยะเวลา และโทโพโลยีของตัวเอง

บัสที่ค้าง (stuck bus) เป็นปัญหาการกู้คืนสถานะแยกต่างหาก NXP อธิบายพัลส์นาฬิกาเก้าพัลส์สำหรับ SDA ที่ถูกดึงไว้ต่ำ โดยให้รีเซ็ตหรือปิด-เปิดไฟใหม่หากการกู้คืนล้มเหลว; SCL ที่ถูกดึงไว้ต่ำต้องใช้เส้นทางการกู้คืนที่แตกต่างออกไป ใช้คำแนะนำของอุปกรณ์และคอนโทรลเลอร์โดยไม่ขับต้านสายที่ถูกดึงไว้ บันทึกเรื่องบัสค้างของ TI ยังกล่าวถึงขอบนาฬิกาที่ผิดพลาด การรบกวน และเงื่อนไขการรีเซ็ต การกู้คืนควรทำควบคู่กับงานหาสาเหตุราก ไม่ใช่ปกปิดความล้มเหลวที่เกิดขึ้นซ้ำ
12. ระบุตัวต้านทาน ไม่ใช่เพียงค่าที่คุ้นเคย
สำหรับการปล่อยใช้งาน ให้จัดทำเอกสารระบุความต้านทาน ค่าความคลาดเคลื่อน แพ็กเกจ และข้อกำหนดที่เกี่ยวข้องด้านแรงดัน กำลัง หรืออุณหภูมิใดๆ ตรวจสอบมุมความคลาดเคลื่อนด้านความต้านทานต่ำเทียบกับความสามารถในการรับกระแส (sink capability) และมุมด้านความต้านทานสูงเทียบกับเวลาเพิ่มขึ้น (rise time) รวมความแปรผันของแหล่งจ่ายและค่าความจุสูงสุดที่มีเหตุผลรองรับ แทนการใช้ค่าประมาณ nominal ที่อุณหภูมิห้องในทุกกรณี
เป็นตัวอย่างการคำนวณ 1.5 kOhm ที่มีความคลาดเคลื่อนของความต้านทาน 5% จะสูงถึง 1.575 kOhm ที่ขอบบน ที่ 220 pF เวลาเพิ่มขึ้นที่จำลองได้มีค่าประมาณ 294 ns ซึ่งเหลือช่วงเผื่อต่ำกว่า 300 ns ไม่มาก; ความจุที่ยังไม่ได้นับเพิ่มเติมสามารถทำให้ช่วงเผื่อหายไปได้ ตัวอย่างนี้แสดงถึงความอ่อนไหวต่อพารามิเตอร์ ไม่ใช่ค่าที่ได้รับการรับรองสำหรับการผลิต
เมื่อจัดซื้อโมดูลหรือ IC ทางเลือก ให้ขอข้อมูล revision ของ schematic ที่แน่นอน ตัว pull-up ที่ติดตั้งไว้ ข้อมูลโดเมนแรงดัน และรหัสสั่งซื้อ ตรวจสอบให้แน่ใจว่าชิ้นส่วนทดแทนคงไว้ซึ่งข้อกำหนดอินเทอร์เฟซที่ได้รับการอนุมัติ ชิ้นส่วนที่ถูกกว่าซึ่งเปลี่ยนความแรงในการขับ (drive strength) พฤติกรรมของพิน หรือเครือข่ายตัวต้านทานของโมดูล ต้องได้รับการตรวจทานทางวิศวกรรมก่อนที่จะกลายเป็นการทดแทนในการจัดซื้อ
13. คำถามที่พบบ่อย
pull-up 4.7 kOhm เหมาะสมสำหรับ I2C เสมอหรือไม่?
ไม่ใช่ ความต้านทานที่ยอมรับได้ขึ้นอยู่กับแรงดันพูลอัป ความสามารถในการซิงก์กระแสของอุปกรณ์ ความจุของบัส และข้อกำหนดด้านเวลา ในตัวอย่าง 200 pF ที่ระบุ 4.7 kOhm ให้เวลา rise time ประมาณ 796 ns ซึ่งอยู่ในขีดจำกัด rise time ของ Standard-mode แต่สูงกว่าขีดจำกัดของ Fast-mode ยังต้องมีการตรวจสอบทางไฟฟ้าและโปรโตคอลอื่น ๆ อีก
เซ็นเซอร์ทุกตัวจำเป็นต้องมีพูลอัปหนึ่งคู่ของตัวเองหรือไม่
ไม่จำเป็นบนบัสเซกเมนต์ที่แชร์กันตามปกติ พูลอัปที่มีอยู่จะรวมกันทางไฟฟ้า ดังนั้นการเพิ่มคู่พูลอัปกับทุกโมดูลอาจทำให้ความต้านทานรวมต่ำเกินไป ควรสำรวจเครือข่ายที่ติดตั้งจริงบนแต่ละสัญญาณ เซกเมนต์ที่แยกด้วยบัฟเฟอร์หรือเลเวลทรานสเลตอาจต้องมีพูลอัปของตัวเองตามเอกสารประกอบอุปกรณ์ที่เกี่ยวข้อง
สามารถใช้พูลอัปภายในของ ESP32 ได้หรือไม่
อย่าสันนิษฐานว่าพูลอัปเหล่านั้นเพียงพอ Espressif แนะนำให้ใช้พูลอัปภายนอกที่เหมาะสมสำหรับบัส และเตือนเกี่ยวกับความแข็งแรงของพูลอัปภายในที่ความเร็วสูงขึ้น ควรประเมินคอนโทรลเลอร์ บอร์ด โหลด และการกำหนดค่าที่แน่นอน แล้ววัดรูปคลื่น การทดสอบด้วยโพรบเพียงครั้งเดียวที่สำเร็จไม่ถือเป็นการรับรองด้านเวลาหรือแรงดันที่สมบูรณ์
ตัวต้านทานที่เล็กลงจะแก้ปัญหาอุปกรณ์ I2C ที่หายไปได้หรือไม่
เฉพาะเมื่อปัญหาที่วินิจฉัยเข้ากันได้กับการเปลี่ยนแปลงนั้น และค่าความต้านทานใหม่ยังคงยอมรับได้ ค่าที่ต่ำลงจะเพิ่มกระแสในสถานะต่ำ ไม่สามารถแก้ไขแอดเดรสที่ไม่ถูกต้อง อุปกรณ์ที่ไม่มีไฟเลี้ยง ธุรกรรมที่ไม่รองรับ หรือแรงดันพูลอัปที่ไม่ปลอดภัยได้ ตรวจสอบรูปคลื่นแอนะล็อกและการกำหนดค่าก่อนเปลี่ยนชิ้นส่วน
ทำไมการต่อออสซิลโลสโคปจึงเปลี่ยนผลลัพธ์
โพรบจะเพิ่มภาระ และการต่อกราวด์ของโพรบอาจส่งผลต่อรูปคลื่นที่สังเกตได้ บนบัสที่ทำงานแบบ marginal สิ่งนี้อาจเปลี่ยนพฤติกรรมรวมถึงการวัดได้ ใช้วิธีการโพรบที่เหมาะสม บันทึกการตั้งค่า และพิจารณาค่าความจุไฟฟ้าของโพรบในแบบจำลอง เปรียบเทียบสิ่งที่สังเกตอย่างระมัดระวังแทนที่จะสมมติว่าเครื่องมือวัดไม่มีผลทางไฟฟ้าเลย
ฝ่ายจัดซื้อควรยืนยันอะไรสำหรับโมดูลทดแทน
ยืนยันอุปกรณ์และรีวิชันของบอร์ดให้ตรงกัน แรงดันสัญญาณที่อนุญาต ค่าพูลอัปที่ติดตั้ง และข้อกำหนดอินเทอร์เฟซ จัดให้มีแผนภาพวงจรที่อนุมัติและเงื่อนไขการทดสอบแก่ฝ่ายวิศวกรรม คอนเนกเตอร์ที่ตรงกันหรือฉลาก I2C ทั่วไปไม่ได้ยืนยันความสามารถในการใช้แทนกันทางไฟฟ้า หรือเป็นเหตุผลในการเปลี่ยน BOM การผลิตโดยไม่มีการทบทวน
14. แหล่งข้อมูลและคู่มือวิศวกรรมที่เกี่ยวข้อง
แหล่งข้อมูลหลักที่ตรวจสอบเมื่อวันที่ 30 ตุลาคม 2026:
- ข้อกำหนด NXP UM10204 I2C, Revision 7.0
- การคำนวณตัวต้านทานพูลอัป I2C TI SLVA689A
- การกำหนดค่าและการแก้ปัญหา I2C ของ Espressif ESP32
- การป้องกันบัสค้างและวิธีแก้ปัญหาเฉพาะหน้าของ TI SCPA069
เนื้อหาที่เกี่ยวข้องจาก Chip-seek:
ภาพถ่ายหน้าปก: Golonlutoj,MicroSTM32, CC BY-SA 3.0. การครอปและจัดเลย์เอาต์เชิงบรรณาธิการโดย Chip-seek ภายใต้สัญญาอนุญาตเดียวกัน STM32F103R6T6 ที่แสดงในภาพเป็นฮาร์ดแวร์จริง; ไม่ใช่บอร์ดที่ใช้สำหรับการคำนวณหรือข้อกล่าวอ้างเรื่องสต็อก