Доброго дня. Начал изучать i2c и на отладке установлена EEPROM 24LC04B. Столкнулся с тем что не получаю от неё бит ACK. По скольку работаю в первый раз то не могу понять не исправна же сама микросхема/отладка или я выставил не верные адреса/тайминги
А что может не так быть? По симуляции выход уходит в 'z' , да и как я понял slave же может всё равно просто на землю уронить линию, даже если мастер оставит высокий уровень.
Осцилогоафа нету проверить. Делал на ардуинке i2c сканер и получал примерно такую же картину, из за чего сейчас в ступоре, ведь по моей логике всё должно было работать...
да и как я понял slave же может всё равно просто на землю уронить линию, даже если мастер оставит высокий уровень.
Каким образом? Сопротивление верхнего ключа master против сопротивления нижнего ключа slave. Что будет посередине? Будет хрень, интерпретация которой логическим анализатором непредсказуема.
да и как я понял slave же может всё равно просто на землю уронить линию, даже если мастер оставит высокий уровень.
Каким образом? Сопротивление верхнего ключа master против сопротивления нижнего ключа slave. Что будет посередине? Будет хрень, интерпретация которой логическим анализатором непредсказуема.
Trioni писал(а):
По симуляции выход уходит в 'z'
так это симуляция или реальное устройство?
1) Думал будет просто 'кз' через подтягивающий резистор и транзистор slave => линия просто лежит в нуле
2) устройство.
(Код и симуляцию скину после работы уже только. Не думал что дойдёт)
Какое-то странно длинное старт-условие.... Хотя конечно криминала здесь нет.
Разрешение картинки такое, что понять по ней что-либо трудно. Например - не происходят ли фронты по SDA и SCL одновременно? Это может восприниматься ведомым как стоп-условие и тогда он конечно не станет выставлять ACK. Внутри ведомого фронт по SDA может чуть запоздать, и это будет выглядеть для него как СТОП.
Разрешение картинки такое, что понять по ней что-либо трудно. Например - не происходят ли фронты по SDA и SCL одновременно? Это может восприниматься ведомым как стоп-условие и тогда он конечно не станет выставлять ACK. Внутри ведомого фронт по SDA может чуть запоздать, и это будет выглядеть для него как СТОП.
Скрин симуляции, вроде наложений нет, один такт scl разбивал на 4 мини-тактка
Читаете или пишете в EEPROM? Какая частота SCL? Программной реализацией I2C или аппаратной? Являются ли выводы SDA и SCL открытым стоком? Есть подтягивающие резисторы? Куда они включены и какое значение? Фото экспериментальной установки? Хотя бы фрагмент реализации I2C?
Напр. данные ниже взяты из лог. анализатора. Детали комуникации видны, а также распознавание функций в I2C (к PCF8574). В вашем случае что есть что, только догадываемся и предполагаем.
,
Последний раз редактировалось veso74 Сб дек 07, 2024 11:10:32, всего редактировалось 1 раз.
Изначально же сказал: на устройстве не получаю бит ACK. Симуляцию скинул просто вместо сотен строчек кода, ясное дело там никакого ответного сигнала не будет.
Скрин симуляции, вроде наложений нет, один такт scl разбивал на 4 мини-тактка
Не понял - а какое отношение имеет эта картинка к скриншоту осциллографа из первого поста? Там совершенно ясно видны совершенно другие временные соотношения. К тому-же - даже по этой картинке - разве не видите странностей? Между рисками "1 мкс" и "19 мкс" попадает примерно ~8.5 периодов SCLK. Т.е. = 8.5/18e-6 = ~472 кГц. При том что по даташиту 24LC04B умеет максимум 400 кГц. Не многовато вы хотите от 24LC04B? На такую осц. она имеет полное право отвечать NACK.
Симуляцию скинул просто вместо сотен строчек кода, ясное дело там никакого ответного сигнала не будет.
Да уж.... с логикой явно серьёзные проблемы....
Вы когда придёте к врачу лечить какую-то болячку, например - перелом, тоже скажете: "Доктор, давайте не будем делать рентген перелома, я вам просто нарисую как я думаю выглядит кость, а вы по моему рисунку и лечите".
Ну наверно можно завершать. Нормальных ответов я так и не получу всё равно. А скидывать код на 300+ строк вызовет лишь очередной виток вопросов о вечном, а если скину краткие выдержки то вопросы что "код не весь".
Про тайминги отвечал ещё в первом посте. Где на картинке видно "T = 10uS", скрин симуляции был прилеплен что бы показать итоговое значение кода (например что sda уходит в Z-стейт) (далее уже самостоятельно не раз менял тайминги проверяя на 100 и 400кГц - отсюда и разности между картинкой и симуляцией)
Ну наверно можно завершать. Нормальных ответов я так и не получу всё равно.
Чтобы получить "нормальный ответ", нужно сначала задать "нормальный вопрос". Чего вы до сих пор так и не сделали. И даже как видно - не стремитесь это сделать. Причём тут некий "код на 300+ строк", которым вы всё пугаете - вообще не понятно.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения