Проблема со связью I2C EEPROM

У меня есть микроконтроллер STM32L, подключенный к M24LR64E, I2C EEPROM. Раньше у меня эта настройка работала, но потом я кое-что изменил (разметка, прошивка) и как-то напортачил с I2C, и теперь она не работает.

Я использую его с режимом I2C_DutyCycle_2 на частоте 100 кГц, подтяжка 4,7 кГц на линиях SDA и SCL. Все на плате работает на 3.3v. Ниже показан снимок обеих линий SCL/SDA в моем прицеле, к сожалению, у меня нет логического анализатора, с которым можно было бы поиграться.

Снимок начала данных I2C

Большинство снимков I2C, которые я нашел в Google, кажутся очень «хорошими» с прямоугольными сигналами нарастания/падения, а мой выглядит совсем иначе.

Какие-либо предложения? Подходит ли прикрепленное изображение для шины I2C?

Большое спасибо.

Похоже, проблема точно есть. Какова длина автобусных маршрутов сейчас? Есть ли на шине последовательное сопротивление или шунтирующая емкость? Вы уверены, что используете резисторы 4,7k? (Вы их измеряли?) Остается ли проблема при отключении EEPROM? Можете ли вы опубликовать увеличенный (более короткий временной масштаб) захват пары тактов, пожалуйста?
Следы автобуса имеют длину один сантиметр, немного короче, чем были раньше. Шина начинается на выводе MCU, идет к подтягивающему резистору и заканчивается на выводе EEPROM. Резисторы 1210 SMD, ширина шины 0,2 мм. Да, я измерял их вне цепи. Сейчас собираюсь выпаять eeprom и проверить сигналы, спасибо. Я тоже сделаю увеличенные снимки. Большое спасибо.
Вот снимок начала, i36.tinypic.com/2hg6cmo.jpg . Точно такой же захват, как в основном посте, но с более коротким временным интервалом.
Еще два снимка с отпаянной от платы EEPROM: i37.tinypic.com/2hycpwg.jpg i36.tinypic.com/ay7pde.jpg
Хорошо спасибо. Судя по этим снимкам, в каждом цикле есть мошеннический сбой, по крайней мере, на тактовой линии. При длине шины 1 см, если что-то действительно не так, не должно быть проблем на частоте 100 кГц, а время нарастания/спада выглядит нормально, поэтому я думаю, что прошивку нужно внимательно изучить. Можете ли вы опубликовать соответствующие биты - код настройки I2C и процедуры отправки / получения, пожалуйста? В идеале код до и после перестал работать. Что-нибудь еще, по вашему мнению, стоит добавить (например, вы изменили основную/периферийную тактовую частоту?)
Вы проводите измерения с 10-кратным или 1-кратным увеличением?
10x на обоих каналах

Ответы (1)

Зафиксированный. Благодаря Оли Глейзеру я исправил процедуру настройки часов, и захваты теперь выглядят очень хорошо, но основная проблема (MCU не читает EEPROM) осталась. После многих часов отладки, проб/ошибок, таблиц данных, исправлений, форумов и т. д. я обнаружил, что каким-то образом я изменил АДРЕС ПОДЧИНЕННОГО УСТРОЙСТВА в своем коде, поэтому EEPROM не отвечал, потому что я не вызывал его должным образом!

Для любого будущего читателя 7-битный адрес устройства для этого устройства должен быть 0x53 или 1010011b (не забудьте правильный сдвиг влево и установите бит чтения/записи, чтобы получить полный байт).

Спасибо за всю помощь, и, как и ожидалось, я МНОГОЕ узнал из этой проблемы!