I2C працює лише при зондуванні або завантаженні 1Mohm


9

Я намагаюся усунути комунікації між msp430fr5847 (головним) та веденим датчиком з невідомим мікросхемою I2C (частина промислового датчика)

У мене виникають проблеми з новою партією датчиків, коли мої дані повертаються з усіма нулями, проте при спробі усунення несправностей з моїм логікою Pro Saleae (2Mohm, 10pf) або моїм осцилографом (10Mohm, 50pf) система прекрасно працює при зондуванні штифт ПДД

Подальше усунення несправностей схема працює правильно, якщо я додаю резистор 1Mohm між SDA і землею, але не працює, якщо лише додати 10pf або 100pf конденсатор.

Я використовую резистори 4.7k на моїй 3.3V залізниці.

Що може спричинити цю проблему та що можна зробити для усунення несправностей без ненавмисного виправлення проблеми.


EDIT: 19.07.2017 Ось швидкий слід моїх сигналів.

Щось ще я забув зазначити, що лише зондування ПДД змушує плату працювати, зондуючи SCL або моя лінія переривання не примушує її працювати належним чином.

Слід обстеження ПДД та СКЛ


РЕДАКТ: 21.07.2017

Діаграма згущується, виявляється, що підключення іншого осцилоскопа не змушує схему працювати належним чином, і видно, що різниця полягає лише в тому, що ACK не передається.

Нова картина масштабу

На малюнку вище сині та зелені сліди - це SCL та SDA, коли схема працює неправильно. Жовті та рожеві сліди - це те, коли я також підключаю свою логіку Saleae до ПІД-контакту та заземленню, але без підключення USB (намагаюся уникати заземлення).

Щоб додати трохи більше фону на датчик, це промисловий датчик тиску, який ми купуємо у виробника. Ми раніше розробляли та тестували ці друковані плати за допомогою нашої першої партії датчиків. Нещодавно ми отримали нову партію і зараз стикаємося з цими проблемами. Я трохи провів розслідування, і я сильно підозрюю (після гуглінгу унікальних шукаючих пропозицій з аркуша), що внутрішній датчик використовує ZSC31014 або подібну, PDF-таблицю ТУТ


РЕДАКЦІЯ: 26.07.2017

Тож сподіваємось, що останній внесок у вирішенні цього питання, згідно з детальною відповіддю SamGibson, я здійснив виправлення встановлення високого біта адреси, щоб замаскувати глюкінг в кінці стартового біта.

Це працювало здебільшого з даними, що надходять, як очікувалося, однак тепер виявляється, що в першій команді читання після запису (якщо це правильний термін для групи біт i2c), підлеглий намагається АСК на один біт рано (в положення біта запису). Я можу сказати, що це раб тягне лінію вниз, додаючи невеликий (47 Ом) резистор послідовно з лінією SDA.

Як правило, я починаю це як нове запитання, але коли я додаю ту саму сферу, яка не вплинула на вищезгадане усунення несправностей, ця проблема, здається, відходить, це справді є проблемою на кордоні, навіть якщо я додаю датчик області, без підключення його до сфери питання вирішується, тому я припускаю, що це ємність.

Сюжет випуску без додаткового обсягу

Ділянка без розмаху

Сюжет випуску з приєднаним зондом, але не приєднаним до сфери застосування, відзначаючи дещо більшу напругу, коли ведений знімає біт запису замість біта ACK.

З доданою сферою застосування


1
У вас є якісь сліди сфери
Кевін Вайт

1
Ви ненароком перевернули сигнал годинника?
Енді ака

6
Переконайтесь, що шина I2C має та використовує загальний провід заземлення (MSP до датчика I2C). Необхідні 3 дроти: SDA, SCL і GND, з SDA і SCL підтягуються до Vcc (можливий 4-й провід) через підтягуючі резистори.
Кріс Кнудсен

1
@Hugoagogo - Yikes! І SDA, і SCL ненормально, по-різному. Я припускаю, що слід за новими несправними датчиками? Якщо так, чи можете ви надати слід зі старими робочими датчиками? Можливо, різниця може бути не такою великою, тобто у вас були проблеми раніше, але вона просто працювала. Більше довідкової інформації може виявити корисні дані, наприклад, як ви знаєте, що це "нові" мікросхеми I2C, вважаючи, що чіп є "невідомим"? Я здогадуюсь, що було зроблено зворотну інженерію, щоб дозволити MSP430 (яким ви керуєте?) Використовувати сенсор (який ви не контролюєте?). Наскільки це відрізняється від "оригінальної" конфігурації?
SamGibson

1
Ну, я згоден із СамГібсоном. Я б не так швидко сказав, що шипи - це помилки вимірювання. Я думаю, вам слід спробувати дослідити це трохи далі і спробувати усунути їх, якщо вони походять з ваших параметрів вимірювання або знайти причину, чому вони там є. Зрештою, вони ніби вирівнюються із спадаючими краями SCL. Я б також спробував підключити датчик безпосередньо на друкованій платі. Це може допомогти вам виключити, що проблеми викликані кабелем або відстані датчика від основної плати.
нікагійський

Відповіді:


11

Я думаю , що знайшов відповідь. Виявляється, це відома проблема, але я лише виявив, що після того, як я вирішив, де проблема, і шукав її!

Ось процес, який я пройшов, тож ви можете прослідкувати за ним (і, якщо необхідно, ви зможете адаптувати своє дослідження, якщо побачите результати, які відрізняються від моїх припущень). Суть полягає в тому, що, мабуть, існує несумісність між (принаймні деякою) поведінкою MSP430 I²C і необхідною поведінкою I²C пристроєм, яким ви підозрюєтесь, що є Slave I²C, IDT ZSC31014 . Наявність таблиці для цього пристрою має вирішальне значення для розуміння цього, тому дякую, що знайшли його.

Хороша новина полягає в тому, що для цієї проблеми (щонайменше) є два обходи, які я поясню наприкінці.

Діаграма згущується, виявляється, що підключення іншого осцилоскопа не змушує схему працювати належним чином, і видно, що різниця полягає лише в тому, що ACK не передається.

Нові сліди корисні, дякую, хоча я трактую їх дещо інакше.

(Сигнал підкреслення SCL, який стосувався мене на початковому сліді, все ще присутній на останньому сліді. Цікаво, що нижня стрілка на SCL здається більшою, ніж нижня стрілка на SDA, особливо враховуючи різні вертикальні шкали між сигналами SCL та SDA на Останній слід. Я б все-таки запропонував дослідити, що SCL підкреслює, врешті-решт, але я не вважаю, що це пов'язано з основною проблемою.)

Є два "глюки" в SDA:

  • Збій безпосередньо перед імпульсом АСК або безпосередньо після нього не є рідкістю, коли майстер ІСС звільняє управління ПДР, щоб дозволити Рабу виконувати АСК, а потім Ведучий може знову запустити ПДР. Тому я ігнорую це.

  • Саме ранній зліт SDA, перед першим імпульсом SCL, є більш незвичним. З точки зору амплітуди цього раннього виходу ПДР (див. Пізніше) і того, що він виникає лише до цього першого імпульсу SCL (позначений 0), але не виникає перед пізнішими імпульсами SCL, де ми могли б побачити збої в SDA (як SCL імпульси з міткою 4, 5, 6 або 7), ми знаємо, що це не артефакт вимірювання, а не з'єднання з SCL (наприклад).

(Для подальшого ознайомлення, ранній глюк ПДД нагадує щонайменше 2 В за останнім слідом, тому з Vdd на 3,6 В з попередніх коментарів, це робить амплітуду збою від ПДР принаймні (2 / 3,6) = 0,55 х Vdd. Порівняйте це з відповідні пороги логічного рівня I2C, обговорені пізніше.)

Ігноруючи різницю ACK, я вважаю, що я бачу ще одну різницю між двома наборами слідів на другому скріншоті. Амплітуда цього раннього глюка ПДД здається дещо іншою, порівнюючи верхній слід ПДР C1(жовто-іш?) Та 2-й слід СДД M3(синій). Зараз я вважаю, що відмінності в амплітуді ранніх проблем ПДР - це те, що може спричинити появу або зникнення вашої проблеми, як я пояснюю нижче.

Ще більша роздільна здатність конкретно про глюк допомогла б (це одна з проблем у спробі працювати над проблемами "віддалено" - я не можу керувати "сферою себе!"). Я припускаю, що коли ви збільшуєте масштаб, це виглядає як початок нормальної ²C логіки "1" (тобто RC-крива на висхідній грані, особливо якщо ви тимчасово зробите підтяжки слабкішими, наприклад, 10 к), за винятком того, що це не ' t досягти повної позитивної напруги, перш ніж вона знову буде переведена на логіку "0". Це те, що показано на іншій веб-сторінці, пов’язаній пізніше. Якщо ви бачите різну форму вашого глюку, то мій пізній аналіз може не застосовуватися.

Майстер I²C контролює шину в точці цієї глюки, між початком I²C та першим тактовим імпульсом SCL (який ви позначили "0", хоча це MSbit). Це змусило мене підозріло ставитися до поведінки MSP430, хоча при низькому рівні SCL в цей момент глюк ПДД не повинен впливати на пристрої, сумісні з I²C, оскільки вони будуть чекати, коли SCL підніметься до того, як наступний раз прочитає стан SDA.

Отже, чи справді I²C Slave дійсно сумісний з IC? Виявляється, ZSC31014 є " метушливим " та менш толерантним, ніж деякі інші пристрої I²C , саме в той час, коли я вважаю, що MSP430 виробляє цю проблему!

У ZSC31014 листках перераховані 3 областей , в яких вони допускають поведінку I²C пристроїв є «іншими». На вас також можуть вплинути перші два в цьому списку в інші часи (це не є частиною цього аналізу), але це третій пункт, який я позначив нижче червоним кольором, який пов'язаний з тим раннім глюком ПДР:


витяг із листа даних ZSC31014


Амплітуда цього раннього глюку ПДД є критичною . Якщо цей глюк не зростає достатньо, щоб ZSC31014 був визнаний логікою "1", перш ніж він знову впаде, тоді ви все в порядку - пристрій повинен бачити падіння на ПДД, щоб зламати це "правило", і це може бути тільки падіння край , якщо він вже був визнаний в якості логічної «1».

Що-небудь, що впливає на амплітуду цього глюка ПДД, як-от додаткове навантаження 'діапазону чи логічного аналізатора на сигнал SDA, може бути достатньо для того, щоб ZSC31014 не визнавав глюк таким, що досягає логіки "1", а отже, і не "падає" ПДР ", що є третім пунктом у списку, може відбутися (у добрий день, залежно від напруги, температури тощо). Однак, як ви з’ясували, різниця між різними осцилоскопами є достатньою для того, щоб деякі з них додавали достатнього навантаження, щоб зупинити проблему, а інші - ні. Цей параметр повинен бути дуже маргінальним!

Це підтверджує моє занепокоєння, що ваші попередні "робочі" партії датчиків можуть працювати "лише просто", оскільки MCU-модулі MSP430 для цих "робочих" налаштувань, ймовірно, також створюватимуть глюки 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 х Vdd. Ця гіпотетична друга партія з більшою ймовірністю сприйматиме збій ПДР як падаючу межу ПДР, порушуючи цю третю точку в їхньому списку, але не порушує їх специфікації.

(Багато проблем, над якими я працював протягом багатьох років, були такими: Є два пристрої, жоден з яких не порушує окремо специфікацію, що має лазівки, - але один метушливий і менш толерантний, у точці, де іншому потрібні підключені пристрої, щоб бути більш толерантними через свою незрозумілу поведінку! Кожен з цих двох пристроїв добре взаємодіє з більшістю інших пристроїв, але є ненадійними (або повністю виходять з ладу), коли підключаються один до одного.)

Отже, що ти можеш зробити? Я подумав два варіанти:

  • Не використовуйте MSP430 - використовуйте інший MCU, який не створює такого раннього глюку SDA. Однак я думаю, що ви вклали багато часу в програмне забезпечення і не хочете перенести код в інший MCU, якщо цього не вдасться уникнути.

  • "Біт-баг" протокол I²C на MSP430, замість використання вбудованого апаратного модуля I²C. Таким чином, ви повністю контролюєте сигнали I²C і можете запобігти виникненню цих збоїв. Однак, очевидно, буде певна робота над створенням власних підпрограм I²C, їх налагодження, і отриманий код може бути більшим, ніж при використанні апаратного модуля MSP430 I²C, який сам по собі може бути проблемою, якщо вам не вистачає Flash-місця.

Тоді я пішов шукати проблеми MSP430 I²C, і я виявив, що ця комбінація MSP430 + ZSC31014 є відомою проблемою, завдяки тому, що раніше виникли проблеми з ПДР від MSP430! Перегляньте цю тему на форумі TI E2E MSP430:

Форум TI E2E: Імпульси зломлення MSP430 I2C спричиняють проблеми для периферійних мікросхем I2C

Згадане там рішення полягає в тому, щоб змінити ISC-адресу ZSC31014 таким чином, щоб SDA був високим на той момент, коли позитивний глюк міг відбутися, а оскільки SDA підвищений, то в будь-якому разі, в SDA немає фактичних збоїв:

Наше вирішення полягає в тому, щоб налаштувати чіп ZSC на адресу з його набором біт 6 (наприклад, ми зараз використовуємо 0x42) - це перетворює імпульс глюка в приємний чистий "високий" біт для тривалості адреси 6, який позбавляється проблемного падаючого краю.

Це ж рішення фактично є зворотним наведенням на таблицю даних ZSC31014, у червоному полі, яке я позначив. Вони кажуть, що проблему з ПДР слід запобігати, якщо перший біт (що є MSbit) адреси ZSC31014 I²C 0 - тому не робіть MSbit адреси I²C "0", а не "1" встановіть біт 6 у 7-бітній I²C-адресу!

Оскільки цей потік форуму TI E2E та таблиця даних ZSC31014 фокусуються на I²C-адресі, то, можливо, жодний злам SDA не виникає, або це не проблема, якщо він трапляється під час надсилання інших даних по шині. Вам потрібно буде це дослідити.

Тому, ігноруючи перший спосіб використання іншого MCU, два (більш практичні) способи вирішення:

  • Біт-треск шини MSP430 I²C, написавши власний код, щоб не створити цей глюк на SDA, або
  • Змініть ISC-адресу ZSC31014 таким чином, щоб встановлено біт 6 її 7-бітної адреси, це означає, що SDA вже високий, коли б іллют стався в іншому випадку, тому жоден фактичний глюк не виникає в SDA, коли адресовано ZSC31014 (якщо припустити, що і глюк SDA не відбувається після інших запуску подій I²C під час передачі даних, або якщо такий трапляється, ZSC31014 не "засмучується").

Сподіваюся, що це допомагає!


2
Це приголомшлива і дуже корисна відповідь, перш ніж я відзначу як прийняте, чи є якийсь спосіб, як я можу дати вам ще одну репутацію за дотримання цього за допомогою усунення несправностей. Я також актуалізую своє запитання з моїм вирішенням, коли я зроблю його.
Hugoagogo

1
@Hugo - Це дуже добра думка :-) Я вважаю, що це можна зробити, запропонувавши щедроту, де причиною щедрості було б " винагорода за існуючий відповідь ". Я не є експертом у цьому процесі, тому не можу сказати багато іншого. Звичайно, я був би радий отримати додатковий представник (на аналіз та рецензування пішло кілька годин ;-)), але якщо ви не хочете користуватися щедрою або не можете зрозуміти процес , тоді не хвилюйтеся, все одно це позитивна карма :-) Сподіваюся, моя відповідь працює!
SamGibson

@Hugo - я не знаю, чи отримуєте ви повідомлення про оновлення відповідей, але просто FYI, я додав абзац про SCL та його підкреслення (все ще головоломка, але я сумніваюся, що це пов’язано з основною проблемою), і я ' Ви оцінили, що амплітуда "раннього виходу ПДР" в останньому діапазоні діапазону як мінімум 0,55 х Vdd, що добре перебуває в "невизначеній" області напруги, де різні датчики (або різні партії датчиків ;-)) могли розглядати що як логіка "1" чи ні, не порушуючи їх специфікації. Я скоро буду в офлайні, тому знову удачі!
СамГібсон

1
Знову подякував за допомогу. У понеділок, коли я знаходжусь, я поїду з
щедротою

Чи зможу я змусити вас зважити останнє оновлення питання.
Hugoagogo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.