I2C ใช้งานได้เมื่อโพรบหรือโหลดด้วย 1Mohm เท่านั้น


9

ฉันพยายามแก้ไขปัญหาการสื่อสารระหว่าง msp430fr5847 (หลัก) และเซ็นเซอร์ทาสที่มีชิป I2C ที่ไม่รู้จัก (ส่วนหนึ่งของเซ็นเซอร์อุตสาหกรรม)

ฉันมีปัญหากับเซ็นเซอร์รุ่นใหม่ที่ข้อมูลของฉันถูกส่งกลับด้วยศูนย์ทั้งหมด แต่เมื่อพยายามแก้ไขปัญหาด้วย Saleae logic pro ของฉัน (2Mohm, 10pf) หรือออสซิลโลสโคปของฉัน (10Mohm, 50pf) ระบบทำงานได้อย่างสมบูรณ์แบบ เข็ม SDA

การแก้ไขปัญหาเพิ่มเติมวงจรทำงานอย่างถูกต้องหากฉันเพิ่มตัวต้านทาน 1Mohm ระหว่าง SDA และกราวด์ แต่ไม่ทำงานหากเพิ่มตัวเก็บประจุ 10pf หรือ 100pf เท่านั้น

ฉันใช้ตัวต้านทานแบบดึงขึ้น 4.7k กับราง 3.3v ของฉัน

สิ่งที่อาจทำให้เกิดปัญหานี้และสิ่งที่สามารถทำได้เพื่อแก้ไขปัญหาโดยไม่แก้ไขปัญหาโดยไม่ได้ตั้งใจ


แก้ไข: 19/07/2017 นี่คือการติดตามขอบเขตอย่างรวดเร็วของสัญญาณของฉัน

สิ่งอื่นที่ฉันลืมพูดถึงคือการตรวจสอบ SDA เพียงอย่างเดียวเท่านั้นทำให้บอร์ดทำงานได้การตรวจสอบ SCL หรือสายขัดจังหวะของฉันไม่สามารถทำงานได้อย่างถูกต้อง

ขอบเขตการติดตามของ SDA และ SCL


แก้ไข: 21/07/2017

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

รูปภาพขอบเขตใหม่

ในภาพด้านบนร่องรอยสีน้ำเงินและสีเขียวคือ SCL และ SDA เมื่อวงจรทำงานไม่ถูกต้อง ร่องรอยสีเหลืองและสีชมพูมาจากตอนที่ฉันเชื่อมต่อลอจิก Saleae ของฉันกับ Pin SDA และกราวด์ แต่ไม่ต้องเสียบ USB (พยายามหลีกเลี่ยงการวนซ้ำกราวด์)

ในการเพิ่มพื้นหลังอีกเล็กน้อยบนเซ็นเซอร์มันเป็นเซ็นเซอร์ความดันอุตสาหกรรมที่เราซื้อจากผู้ผลิต ก่อนหน้านี้เราได้ออกแบบและทดสอบ PCB เหล่านี้ด้วยเซ็นเซอร์ชุดแรกของเรา เราเพิ่งได้รับแบทช์ใหม่และกำลังประสบปัญหาเหล่านี้ ฉันได้ทำการตรวจสอบมาเล็กน้อยและฉันสงสัยอย่างยิ่ง (หลังจากประโยคค้นหาที่ไม่ซ้ำกันของ Google จากแผ่นข้อมูล) ที่เซ็นเซอร์ภายในใช้ ZSC31014 หรือแผ่นข้อมูล PDF ที่คล้ายกันที่นี่


แก้ไข: 26/07/2017

ดังนั้นหวังว่าตอนสุดท้ายในการแก้ไขปัญหานี้ตามคำตอบโดยละเอียดของ SamGibson ฉันได้ดำเนินการแก้ไขการตั้งค่าที่อยู่บิตสูงเพื่อปกปิดการผิดพลาดที่จุดเริ่มต้น

สิ่งนี้ใช้งานได้เป็นส่วนใหญ่กับข้อมูลที่ผ่านมาอย่างที่คาดไว้ แต่ตอนนี้ปรากฏว่าในคำสั่ง read แรกหลังจากการเขียน (ถ้านั่นเป็นคำที่ถูกต้องสำหรับกลุ่มของบิต i2c) ทาสพยายาม ACK หนึ่งบิตก่อน (ใน ตำแหน่งของบิตการเขียน) ฉันสามารถบอกได้ว่ามันเป็นทาสที่ดึงสายลงผ่านการเพิ่มตัวต้านทานขนาดเล็ก (47 โอห์ม) ในอนุกรมด้วย SDA Line

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

พล็อตของปัญหาที่ไม่มีขอบเขตที่แนบมา

พล็อตที่ไม่มีขอบเขต

พล็อตปัญหาที่แนบมากับโพรบของขอบเขต แต่ไม่ได้เชื่อมต่อกับขอบเขตโดยสังเกตแรงดันไฟฟ้าที่สูงขึ้นเล็กน้อยเมื่อสลาฟดึงบิตการเขียนลงแทนที่จะเป็นบิต ACK

ด้วยขอบเขตที่แนบมา


1
คุณมีร่องรอยใด ๆ ขอบเขต
เควินสีขาว

1
คุณกลับสัญญาณนาฬิกาของคุณโดยไม่ได้ตั้งใจหรือไม่?
แอนดี้อาคา

6
ยืนยันว่าบัส I2C มีและใช้สายกราวด์ร่วม (MSP ถึงเซ็นเซอร์ I2C) ต้องการสาย 3 เส้น: SDA, SCL และ GND ที่มี SDA & SCL ดึงขึ้นเป็น Vcc (สายที่ 4 ที่เป็นไปได้) ผ่านตัวต้านทานแบบดึงขึ้น
Chris Knudsen

1
@Hugoagogo - Yikes! ทั้ง SDA และ SCL ผิดปกติด้วยวิธีที่ต่างกัน ฉันคิดว่าการติดตามอยู่กับเซ็นเซอร์ความล้มเหลวใหม่หรือไม่ ถ้าเป็นเช่นนั้นคุณสามารถหาร่องรอยด้วยเซ็นเซอร์ที่ใช้งานได้หรือไม่? บางทีอาจจะแตกต่างกันอาจจะไม่ใหญ่ดังนั้นเช่นคุณมีปัญหามาก่อน แต่มันก็เป็นเพียงแค่การทำงาน ข้อมูลพื้นฐานเพิ่มเติมอาจเปิดเผยข้อมูลที่เป็นประโยชน์เช่นคุณจะรู้ได้อย่างไรว่าชิปเหล่านี้เป็น "I2C ใหม่" ของชิปโดยพิจารณาว่าชิปนั้นเป็น "ไม่ทราบ" ฉันเดาว่าวิศวกรรมย้อนกลับบางอย่างได้ทำเพื่อให้ MSP430 (ที่คุณควบคุม?) ใช้กับเซ็นเซอร์ (ซึ่งคุณไม่ได้ควบคุม?) มันแตกต่างจากการกำหนดค่า "ดั้งเดิม" อย่างไร
SamGibson

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

คำตอบ:


11

ฉันคิดว่าฉันพบคำตอบแล้ว ปรากฎว่านี่เป็นปัญหาที่ทราบ แต่ฉันก็พบว่าหลังจากฉันตัดสินใจว่าปัญหานั้นอยู่ที่ไหนและค้นหาสิ่งนั้น!

นี่คือกระบวนการที่ฉันดำเนินการเพื่อให้คุณสามารถติดตามได้ (และหากจำเป็นคุณสามารถปรับการสอบสวนของคุณถ้าคุณเห็นผลลัพธ์ที่แตกต่างจากสมมติฐานของฉัน) บรรทัดล่างคือว่ามีที่ดูเหมือนจะเป็นความไม่ลงรอยกันระหว่าง (อย่างน้อยบางส่วน) MSP430 I²CพฤติกรรมและพฤติกรรมI²Cจำเป็นโดยอุปกรณ์ที่คุณสงสัยว่าจะเป็นI²Cทาสที่IDT ZSC31014 การมีแผ่นข้อมูลสำหรับอุปกรณ์นั้นมีความสำคัญอย่างยิ่งต่อการทำความเข้าใจสิ่งนี้ดังนั้นขอขอบคุณสำหรับการค้นหา

ข่าวดีก็คือว่ามี (อย่างน้อย) 2 วิธีแก้ปัญหาสำหรับปัญหานี้ซึ่งฉันจะอธิบายในตอนท้าย

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

ร่องรอยใหม่นั้นมีประโยชน์ขอบคุณแม้ว่าฉันจะตีความมันต่างออกไปเล็กน้อย

(สัญญาณ SCL undershoot ซึ่งเกี่ยวข้องกับฉันในการติดตามเริ่มต้นยังคงมีอยู่ในการติดตามล่าสุดมันน่าสนใจที่การ Undershoot บน SCL นั้นดูเหมือนจะดีกว่า Undershoot บน SDA โดยเฉพาะอย่างยิ่งการพิจารณาระดับแนวตั้งที่แตกต่างระหว่างสัญญาณ SCL และ SDA ใน การติดตามล่าสุดฉันยังคงแนะนำให้ตรวจสอบว่าในที่สุด SCL จะเปิดการทำงานของ Undershoot แต่ฉันไม่เชื่อว่าเกี่ยวข้องกับปัญหาหลัก)

มี "บกพร่อง" สองอันใน SDA:

  • ความผิดพลาดก่อนหรือหลังชีพจร ACK ไม่ใช่เรื่องแปลกเมื่อI²C Master ออกการควบคุม SDA เพื่อให้ Slave ดำเนินการ ACK จากนั้น Master อาจทำการ SDA อีกครั้ง ดังนั้นฉันไม่สนใจสิ่งนั้น

  • มันเป็นความผิดพลาด SDA ในช่วงต้นก่อนชีพจร SCL ครั้งแรกซึ่งผิดปกติมากขึ้น จากแอมพลิจูดของความผิดพลาด SDA ในช่วงต้น (ดูภายหลัง) และความจริงมันเกิดขึ้นก่อนที่ SCL พัลส์แรก (ติดป้าย 0) แต่ไม่เกิดขึ้นก่อน SCL ในภายหลังซึ่งเราจะสามารถเห็นความผิดพลาดใน SDA (เช่น SCL พัลส์ที่มีป้ายกำกับ 4, 5, 6 หรือ 7) เรารู้ว่าไม่ใช่สิ่งประดิษฐ์การวัดหรือการมีเพศสัมพันธ์จาก SCL (ตัวอย่าง)

(สำหรับการอ้างอิงในภายหลังข้อผิดพลาด SDA เริ่มต้นดูเหมือนอย่างน้อย 2V ในการติดตามล่าสุดดังนั้นด้วย Vdd ที่ 3.6V จากความคิดเห็นก่อนหน้าซึ่งทำให้แอมพลิจูดความผิดพลาด SDA อย่างน้อย (2 / 3.6) = 0.55 x Vdd เปรียบเทียบกับ เกณฑ์ระดับตรรกะ I2C ที่เกี่ยวข้องที่กล่าวถึงในภายหลัง)

ไม่สนใจความแตกต่าง ACK ฉันเชื่อว่าฉันเห็นความแตกต่างระหว่างร่องรอยสองชุดในภาพหน้าจอที่สองนั้น แอมพลิจูดของความผิดพลาด SDA ในช่วงต้นนั้นแตกต่างกันเล็กน้อยเมื่อเปรียบเทียบการติดตาม SDA ด้านบนที่มีป้ายกำกับC1(สีเหลือง - ish?) และการติดตาม SDA ลำดับที่ 2 M3(สีน้ำเงิน) ตอนนี้ฉันเชื่อว่าความแตกต่างในแอมพลิจูดของความผิดพลาด SDA ในช่วงต้นนั้นเป็นสิ่งที่อาจทำให้ปัญหาของคุณปรากฏหรือหายไปตามที่ฉันอธิบายด้านล่าง

ความละเอียดที่มากขึ้นโดยเฉพาะกับความผิดพลาดจะช่วยได้ (นั่นเป็นหนึ่งในปัญหาในการพยายามแก้ไขปัญหา "จากระยะไกล" - ฉันไม่สามารถใช้งาน 'ขอบเขตตัวเอง!) ฉันจะสมมติว่าเมื่อคุณซูมเข้าดูเหมือนว่าจุดเริ่มต้นของตรรกะI²Cปกติ "1" (เช่นเส้นโค้ง RC บนขอบที่สูงขึ้นโดยเฉพาะถ้าคุณทำ pull-ups ที่อ่อนแอลงเช่น 10k) ยกเว้นว่ามันจะไม่ได้ ' t ถึงแรงดันบวกเต็มก่อนที่จะถูกผลักไปยังตรรกะ "0" อีกครั้ง นั่นคือสิ่งที่ปรากฏบนหน้าเว็บอื่นที่เชื่อมโยงในภายหลัง หากคุณเห็นรูปร่างผิดปกติของคุณการวิเคราะห์ในภายหลังของฉันอาจไม่ได้ผล

I²C Master ควบคุมรถบัสที่จุดผิดพลาดระหว่างI²C Start และพัลส์นาฬิกา SCL แรก (ซึ่งคุณระบุว่า "0" แม้ว่าจะเป็น MSbit) นั่นทำให้ฉันสงสัยพฤติกรรมของ MSP430 แม้ว่า SCL จะมีน้อย ณ จุดนั้นความผิดพลาด SDA ไม่ควรส่งผลกระทบต่ออุปกรณ์ที่สอดคล้องกับI²Cเนื่องจากพวกเขาจะรอให้ SCL สูงขึ้นก่อนที่พวกเขาจะอ่านสถานะของ SDA ต่อไป

ดังนั้นI²C Slave นั้นเป็นไปตามI²C จริง ๆหรือไม่ ปรากฎว่า ZSC31014 เป็น " จุกจิก " และทนน้อยกว่าอุปกรณ์I²Cอื่น ๆ ในเวลาที่ฉันเชื่อว่า MSP430 กำลังผลิตผิดพลาดนั้น!

ZSC31014 แผ่นข้อมูลรายชื่อ 3 พื้นที่ที่พวกเขายอมรับพฤติกรรมI²Cของอุปกรณ์คือ "แตกต่าง" คุณอาจได้รับผลกระทบจากสองคนแรกในรายการนี้ในเวลาอื่น ๆ (นั่นไม่ใช่ส่วนหนึ่งของการวิเคราะห์นี้) แต่เป็นจุดที่สามที่ฉันทำเครื่องหมายไว้ด้านล่างเป็นสีแดงซึ่งเกี่ยวข้องกับความผิดพลาด SDA ในช่วงต้น:


แยกจากแผ่นข้อมูล ZSC31014


แอมพลิจูดของความผิดพลาด SDA เริ่มต้นนั้นสำคัญมาก หากความผิดพลาดนั้นไม่สูงพอที่จะรับรู้โดย ZSC31014 ว่าเป็นตรรกะ "1" ก่อนที่มันจะตกลงมาอีกครั้งคุณก็โอเค - อุปกรณ์จะต้องเห็นขอบที่ตกลงบน SDA เพื่อทำลาย "กฎ" นั้นและสามารถทำได้ล้มขอบถ้ามันได้รับการยอมรับว่าเป็นลอจิก "1"

สิ่งใดที่มีผลต่อแอมพลิจูดของความผิดพลาด SDA นั้นเช่นการโหลดเพิ่มเติมของ 'ขอบเขตหรือตัววิเคราะห์เชิงตรรกะบนสัญญาณ SDA อาจเพียงพอที่จะหยุดความผิดพลาดที่ ZSC31014 จำได้ว่าเป็นการเข้าถึงตรรกะ "1" และดังนั้นจึงไม่มี ขอบ SDA "ซึ่งเป็นจุดที่สามในรายการสามารถเกิดขึ้นได้ (ในวันที่ดีขึ้นอยู่กับแรงดันไฟฟ้าอุณหภูมิ ฯลฯ ) อย่างไรก็ตามตามที่คุณได้พบความแตกต่างระหว่างออสซิลโลสโคปที่แตกต่างกันนั้นเพียงพอที่จะหมายความว่าบางส่วนของพวกมันเพิ่มภาระมากพอที่จะหยุดปัญหาและสิ่งอื่น ๆ ไม่ได้ การตั้งค่านี้จะต้องมีความสำคัญมาก!

สิ่งนี้เป็นการยืนยันความกังวลของฉันว่าเซ็นเซอร์ "ทำงาน" รุ่นก่อนหน้าของคุณอาจเป็นเพียง "ทำงาน" เนื่องจาก MSP430 MCUs ในการตั้งค่า "ทำงาน" เหล่านั้นมีแนวโน้มที่จะสร้างข้อบกพร่อง SDA ทฤษฎีของฉันเกี่ยวกับความแตกต่างที่เป็นไปได้ระหว่างชุดของเซ็นเซอร์ซึ่งสามารถอธิบายพฤติกรรมที่แตกต่างที่คุณได้รายงาน (ชุดทำงาน "กับชุด" ไม่ทำงาน ") จะอธิบายต่อไป

น่าสนใจ ZSC31014 นั้นแตกต่างจากI²Cมาตรฐานในพื้นที่อื่นซึ่งไม่ได้กล่าวถึงในรายชื่อนั้นจากผู้ผลิตและนี่อาจอธิบายได้ว่าทำไมคุณถึงเห็นความแตกต่างระหว่างชุดเซ็นเซอร์

ตรรกะมาตรฐานI²Cเป็นเกณฑ์ (ลดความซับซ้อน) - ต่ำกว่า 0.3 x Vdd สำหรับตรรกะ "0" และสูงกว่า 0.7 x Vdd สำหรับตรรกะ "1" ดังแสดงในข้อมูลจำเพาะของI²C :


เกณฑ์ระดับตรรกะจากข้อกำหนด I2C


อย่างไรก็ตาม ZSC31014 มีขีด จำกัด ที่แตกต่างกัน 0.2 x Vdd และ 0.8 x Vdd ซึ่งหมายความว่า "ขอบเขตที่ไม่ได้กำหนด" ระหว่างขีด จำกัด เหล่านั้นมีขนาดใหญ่กว่าอุปกรณ์I²Cทั่วไป:


ขีด จำกัด ระดับตรรกะจากแผ่นข้อมูล ZSC31014


ที่มีขนาดใหญ่ "ภาคที่ไม่ได้กำหนด" เพิ่มโอกาสของการผิดพลาดเข้าพื้นที่ระดับแรงดันไฟฟ้าที่ไม่ได้กำหนดที่มันอาจจะได้รับการยอมรับว่าเป็นลอจิก "1" (จำสิ่งที่เหนือ 0.2 x Vdd อาจได้รับการยอมรับโดย ZSC31014 เป็นลอจิก "1" เนื่องจากอยู่ในภูมิภาคที่ไม่ได้กำหนดสิ่งใด ๆ ที่ได้รับอนุญาต - มีค่ามากกว่า 0.8 x Vdd เมื่อต้องได้รับการยอมรับว่าเป็นตรรกะ "1") และดังที่อธิบายไว้ก่อนหน้านี้หาก ZSC31014 รู้จักความผิดพลาดว่ามีตรรกะถึง "1" แล้วเมื่อมันตกลงไปที่ตรรกะ "0" อีกครั้งคุณได้ทำลาย "กฎ" ที่ทำเครื่องหมายเป็นสีแดงสำหรับพฤติกรรมI²Cที่ต้องการ โดย ZSC31014

เนื่องจากไม่ได้ระบุการรับรู้ระดับตรรกะในส่วนแรงดันไฟฟ้า "ไม่ได้กำหนด" ผู้ผลิตเซ็นเซอร์จะไม่ทำลายข้อกำหนดหากทำหนึ่งแบทช์ที่รับรู้ตรรกะ "1" เฉพาะเมื่อถึง 0.7 x Vdd แต่ให้แบทช์อื่นที่รับรู้ ตรรกะ "1" ต่ำสุดที่ 0.4 x Vdd ตัวอย่างเช่น ชุดที่สองสมมุติว่ามีแนวโน้มที่จะเห็นความผิดพลาด SDA เป็นขอบ SDA ที่ลดลงซึ่งเป็นการละเมิดจุดที่สามนั้นในรายการของพวกเขา แต่ยังไม่ได้ทำลายข้อกำหนดของพวกเขา

(ปัญหาหลายอย่างที่ฉันได้ทำในช่วงหลายปีที่ผ่านมาเป็นเช่นนี้: มีสองอุปกรณ์ซึ่งทั้งสองอย่างนั้นไม่แตกต่างกันไปตามข้อกำหนดที่มีช่องโหว่ - แต่ปัญหาหนึ่งคือจุกจิกและทนทานน้อยกว่าในจุดที่ อีกหนึ่งความต้องการอุปกรณ์ที่เชื่อมต่อจะเป็นมากขึ้นใจกว้างเพราะของพฤติกรรมปิดบัง! แต่ละคนของทั้งสองอุปกรณ์จะปรับการเชื่อมต่อกับส่วนใหญ่ของอุปกรณ์อื่น ๆ แต่ที่ไม่น่าเชื่อถือ (หรือล้มเหลวอย่างสิ้นเชิง) เมื่อเชื่อมต่อกับแต่ละอื่น ๆ .)

แล้วคุณจะทำอย่างไร ฉันคิดถึงสองตัวเลือก:

  • อย่าใช้ MSP430 - ใช้ MCU ตัวอื่นซึ่งไม่ได้สร้างความผิดพลาด SDA ก่อนหน้านั้น อย่างไรก็ตามฉันคาดว่าคุณจะลงทุนซอฟต์แวร์เป็นจำนวนมากและไม่ต้องการที่จะย้ายรหัสไปยัง MCU อื่นหากไม่สามารถหลีกเลี่ยงได้

  • "Bit-bang" โปรโตคอลI²Cบน MSP430 แทนที่จะใช้โมดูลฮาร์ดแวร์I²Cในตัว ด้วยวิธีนี้คุณอยู่ในการควบคุมทั้งหมดของสัญญาณI²Cและสามารถป้องกันความผิดพลาดนั้นได้ อย่างไรก็ตามมันจะเป็นงานที่ต้องสร้างกิจวัตรI²Cของคุณเองตรวจแก้จุดบกพร่องและโค้ดผลลัพธ์อาจใหญ่กว่าเมื่อใช้โมดูลฮาร์ดแวร์ MSP430 I²Cซึ่งตัวเองอาจเป็นปัญหาหากคุณมีพื้นที่แฟลชไม่เพียงพอ

จากนั้นฉันก็ค้นหาปัญหา MSP430 I²Cและฉันพบว่าการรวมกันของ MSP430 + ZSC31014 นี้เป็นปัญหาที่ทราบกันดีเนื่องจากปัญหา SDA ในช่วงต้นจาก MSP430! ดูกระทู้นี้ในฟอรั่ม TI E2E MSP430:

ฟอรัม TI E2E: MSP430 I2C ความผิดพลาดพัลส์ทำให้เกิดปัญหากับชิปต่อพ่วง I2C

วิธีแก้ปัญหาที่กล่าวถึงนั้นคือการเปลี่ยนที่อยู่ ZSC31014 I²Cเพื่อให้ SDA สูงในเวลาที่มีข้อผิดพลาดในเชิงบวกที่อาจเกิดขึ้นและเนื่องจาก SDA สูงขึ้นแล้วดังนั้นไม่มีความผิดพลาดจริงใน SDA:

วิธีแก้ปัญหาของเราคือการกำหนดค่าชิป ZSC ให้มีที่อยู่ด้วยชุดบิต 6 (เช่นตอนนี้เรากำลังใช้ 0x42) - นี่จะเปลี่ยนพัลส์ผิดพลาดเป็นบิต "สูง" ที่สะอาดสำหรับระยะเวลาบิตที่อยู่ 6 ที่สะอาด ของขอบน้ำตกที่มีปัญหา

วิธีแก้ปัญหาแบบเดียวกันคือการย้อนกลับของข้อเสนอแนะในแผ่นข้อมูล ZSC31014 ในกล่องสีแดงที่ฉันทำเครื่องหมายไว้ พวกเขาบอกว่าจะต้องป้องกันความผิดพลาด SDA หากบิตแรก (ซึ่งคือ MSbit) ของที่อยู่ ZSC31014 I²Cคือ 0 - ดังนั้นอย่าทำให้ MSbit ของที่อยู่I²Cเป็น "0" ทำให้เป็น "1" แทนเช่น กำหนดบิต 6 ในที่อยู่I²C 7 บิต!

เนื่องจากเธรดฟอรัม TI E2E และแผ่นข้อมูล ZSC31014 ทั้งคู่เน้นไปที่ที่อยู่I²Cดังนั้นบางทีความผิดพลาด SDA อาจจะไม่เกิดขึ้นหรือไม่มีปัญหาหากเกิดขึ้นระหว่างการส่งข้อมูลอื่น ๆ บนบัส คุณจะต้องตรวจสอบว่า

ดังนั้นการเพิกเฉยวิธีแก้ปัญหาแรกของการใช้ MCU ที่แตกต่างกันวิธีแก้ปัญหาทั้งสอง (มีประโยชน์มากกว่า) คือ:

  • บิตบัส MSP430 I²Cบัสโดยเขียนรหัสของคุณเองเพื่อที่คุณจะได้ไม่สร้างความผิดพลาดนั้นบน SDA หรือ
  • เปลี่ยนที่อยู่ ZSC31014 I²Cเพื่อให้บิต 6 ของที่อยู่ 7 บิตถูกตั้งค่าซึ่งหมายความว่า SDA นั้นสูงแล้วเมื่อมีข้อผิดพลาดเกิดขึ้นดังนั้นจึงไม่มีข้อผิดพลาดเกิดขึ้นจริงบน SDA เมื่อมีการแก้ไข ZSC31014 (สมมติว่า SDA จะไม่เกิดขึ้นหลังจากI²Cอื่น ๆ เริ่มเหตุการณ์ระหว่างการถ่ายโอนข้อมูลหรือหากเกิดขึ้น ZSC31014 จะไม่ได้รับ "อารมณ์เสีย")

หวังว่าจะช่วย!


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

1
@Hugo - เป็นความคิดที่ดีมาก :-) ฉันเชื่อว่ามันสามารถทำได้โดยเสนอเงินรางวัลที่เหตุผลความโปรดปรานจะเป็น " รางวัลคำตอบที่มีอยู่ " ฉันไม่ใช่ผู้เชี่ยวชาญในกระบวนการดังนั้นฉันจึงไม่สามารถพูดอะไรได้มากกว่านั้น แน่นอนฉันยินดีที่จะมีตัวแทนพิเศษ (ใช้เวลาสองสามชั่วโมงในการวิเคราะห์และเขียน ;-)) แต่ถ้าคุณไม่ต้องการใช้รางวัลหรือไม่สามารถเข้าใจกระบวนการ ไม่ต้องกังวลเลยมันเป็นกรรมที่ดีอยู่ดี :-) หวังว่าคำตอบของฉันจะใช้ได้!
SamGibson

@Hugo - ฉันไม่ทราบว่าคุณได้รับแจ้งการปรับปรุงคำตอบ แต่เพียง FYI ฉันได้เพิ่มวรรคเกี่ยวกับ SCL และ undershoot (ยังคงเป็นปริศนา แต่ฉันสงสัยว่ามันเกี่ยวข้องกับปัญหาหลัก) และฉัน ' และคาดเดาความกว้างของ "ความผิดพลาด SDA เริ่มต้น" ในการติดตามขอบเขตล่าสุดว่ามีค่าอย่างน้อย 0.55 x Vdd ซึ่งรวมถึงบริเวณแรงดันไฟฟ้า "ที่ไม่ได้กำหนด" ซึ่งเซ็นเซอร์ต่าง ๆ (หรือชุดเซ็นเซอร์ที่แตกต่างกัน;-)) ว่าเป็นตรรกะ "1" หรือไม่โดยไม่ทำลายข้อกำหนดของ ฉันจะออฟไลน์สักพักแล้วโชคดี!
SamGibson

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

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