-
- Скорее предположу проблему на стороне проца. Софтверную или глюк
аппаратного I2C. - LightElf(25.09.2023 11:56)
- Ещё припоминается вариант с недоделанным deinit модуля в HAL (в
частности USB). Приходилось делать Reset модуля в RCC. А тут
какой-то "Ввод" по кнопе - может вааще в обработчике прерывания
кто-то транзакцию на шине, которая в фоне, рвёт - Vit(26.09.2023 17:45)
- у меня нет трансакций по I2C в фоне. Чтение ЕЕПРОМ только при
запуске. Запись вообще даже без прерываний. Обработка события
нажатия кнопок в прерывании, это да. Но выполнение действий по ним
уже чисто программно в основном цикле. Там и вызывается функция
записи. - Лaгyнoв(27.09.2023 14:27)
- А если кнопка дребезжит? Они, пока новые, ведут себя прилично. А у усталой видел дребезг 180 мс. - maik-vs(29.09.2023 11:32)
- у меня нет трансакций по I2C в фоне. Чтение ЕЕПРОМ только при
запуске. Запись вообще даже без прерываний. Обработка события
нажатия кнопок в прерывании, это да. Но выполнение действий по ним
уже чисто программно в основном цикле. Там и вызывается функция
записи. - Лaгyнoв(27.09.2023 14:27)
- Ещё припоминается вариант с недоделанным deinit модуля в HAL (в
частности USB). Приходилось делать Reset модуля в RCC. А тут
какой-то "Ввод" по кнопе - может вааще в обработчике прерывания
кто-то транзакцию на шине, которая в фоне, рвёт - Vit(26.09.2023 17:45)
- спасибо всем. Значит ЕЕПРОМ не способна удержать SCL. По резистору
подтяжки (его номиналу), его пайке и дорожкам человек носом всё
излазил. Остается какой странное защелкивание. Резистора
последовательного с питанием нет, это да. Но керамика прям на
ножках есть. - Лaгyнoв(24.09.2023 14:33)
- Замыкание (непротрав) с каким-то другим проводом ПП. Tyмблep(96 знак., 28.09.2023 11:47)
- тоже такие мысли мелькали, но дивайс пока не доступен - Лaгyнoв(28.09.2023 12:34)
- Что можно сделать в первую очередь 1) Проверить воспроизводимость дефекта и посмотреть что происходит на SDA. 2) Проверить работу на 100 кГц вместо 400. 3) Если понимание так и не пришло, то в конце чтения (последнего) байта данных, вместо выдачи девятого бита NACK, выдавать сразу STOP - TWIster(25.09.2023 07:30, )
- Вывод как о рации на танке. ЭТА EEPROM имеет однонаправленный пин.. Без защелкивания он не должен садить линию - Vit(25.09.2023 06:11)
- Замыкание (непротрав) с каким-то другим проводом ПП. Tyмблep(96 знак., 28.09.2023 11:47)
- Нарывался на это у термодатчиков и MLX90640. Первые держали линию на время измерения (но могли и после не отпустить), вторые - в случае внутренней ошибки. Лечится это лишь отключением питания. - Eddy_Em(24.09.2023 10:55)
- Если микросхема EEPROM исправна, то её SCL ВСЕГДА вход! По крайней мере в классических сериях классических производителей (зоопарк подражателей не принимается в расчёт. Они и Z-состояние могут замутить. Хрен их знает что им взбрендит.). P.S. Про тиристорный эффект т.н. "защёлкивания" в подложке кристалла верно замечено. Стандартное решение: RC цепочка между ножкой питания EEPROM( Uсс) и шиной её питания выручает). Причина нестандартного поведения (скорей всего) во вне SERGHIO(1 знак., 23.09.2023 22:45)
- Тупое предположение: Tyмблep(316 знак., 23.09.2023 22:08)
- я бы прокачал, когда дивайс будет в руках, а он пока в деревне - Лaгyнoв(24.09.2023 14:25)
- Самое любопытное, что топикстартером является Лагунов, но ему
видимо похер описанная им же проблема и наш холивар! :-))) - reZident(23.09.2023 22:28)
- просто я в Турции до 2 октября, а дивайс в Алейске Алт. края. Но вроде (тьфу-тьфу) пока всё нормально там. - Лaгyнoв(24.09.2023 14:24)
- Микросхему выкусил, новую вкусил и % забил, чо там было. - mse homjak(24.09.2023 11:13)
- Это значит, что проблема в софте. Tyмблep(552 знак., 24.09.2023 14:30)
- Дедушка третий сон уже видит. - Toчкa oпopы(23.09.2023 22:53)
- Может, вывод E2 висит, адрес не прокатывает, а при получении NACK у тебя I2C в контроллере всё бросает, оставляя клок в нуле - Vit(23.09.2023 21:58)
- гугление по "eeprom scl stuck" не принесло ничего вразумительного.
то есть как бы такого не бывает. - Alex68(23.09.2023 19:35)
- Можно и по удержанию, и по удлиннению поискать. Кстати, вот ST'шник
более подробно объясняет про 9 бит. И я с ним согласен, что это не
9, а "до 9, пока шина не встанет в состояние "оба высоких" после
очередного импульса". Если предположить, что шина загнулась от
помех, воспринятых ведомым как лишний или отсутствующий тактовый
импульс... Toчкa oпopы(867 знак., 23.09.2023 21:38, ссылка)
- Первая ссылка не имеет отношения к проблеме ТС. STOP-условие нельзя сформировать пока SCL стоит в нуле. До тех пор, пока линия SCL не освободится, можно хоть задрыгаться сигналом SDA. По второй ссылке ничего интересного (ее можно посмотреть в ). Там текст программы для работы с AT24C04 и не явно заданный вопрос: почему я не могу ничего прочитать из EEPROM? reZident(11 знак., 23.09.2023 22:20, ссылка)
- мы тута выясняем, кто из двух обоих - память или МК поставил шину раком. таки выходит что память физически не могла. а про пересброс питания памяти и так всюду написано. - Alex68(23.09.2023 22:11)
- Можно и по удержанию, и по удлиннению поискать. Кстати, вот ST'шник
более подробно объясняет про 9 бит. И я с ним согласен, что это не
9, а "до 9, пока шина не встанет в состояние "оба высоких" после
очередного импульса". Если предположить, что шина загнулась от
помех, воспринятых ведомым как лишний или отсутствующий тактовый
импульс... Toчкa oпopы(867 знак., 23.09.2023 21:38, ссылка)
- If the SCL line is stuck low Alex68(334 знак., 23.09.2023 19:32)
- нет проблем, перепуском питания ситуация исправляется - Лaгyнoв(24.09.2023 14:27)
- хм. и правда странное. не поленился почитать щитодат. оно и правда не умеет драйвить SCL, ничего про ето в щите не сказано. так что проблема не в памяти, во всяком разе штатно так не должно быть. - Alex68(23.09.2023 19:17)
- М/с EEPROM физически не может стопорить шину по SCL поскольку SCL у
нее это вход. Если EEPROM заблокировала SCL в состоянии 0, то значит у нее этот
вход неисправен, либо произошло тиристорное защелкивание. Либо вы
неправильно идентифицировали состояние блокировки и проблема в
самом МК, в его ПО или неисправность 2 рода - замыкание на соседнюю
дорожку. - reZident(23.09.2023 18:54)
- Может. Это называется стрейчинг. Вот в SMBUS его уже нет. - POV(23.09.2023 18:56)
- Шо це такэ? Поясните. Каким образом чистый вход может
самостоятельно управлять своим состоянием? Про мультимастера
рассказывать не стоит. Я немного знаком со спецификацией I2C. - reZident(23.09.2023 18:57)
- Клок удерживается в нуле слейвом если тот хочет притормозить обмен. - POV(23.09.2023 19:00)
- *"№;%%: я же просил не пересказывать мне спецификацию I2C! Где вы
видите у конкретного slave в виде м/с EEPROM возможность как-либо удерживать SCL? reZident(2 знак., 23.09.2023 19:04, картинка, картинка)
- Автор микросхемы тоже знает спецификацию i2c, и мог заложить эту
функцию. С проблемами унутри м/с этот функционал мог проявится
(ранее просто не замечалось) т.к. какие-то внутренние процесс
начали проходить долго или не проходить совсем. - POV(23.09.2023 19:08)
- Я с вас худею :-( Input это просто вход, а не Input/output, как у
SDA. У всех виденных мной EEPROM SCL это вход. И не тормозят EERPOM обмен по шине. Потому, что они поддерживают
любую частоту тактирования в пределах своей спецификации, а
готовность к чтению/записи наличием/отсутствием ACK подтверждают. - reZident(23.09.2023 19:16)
- Input - это функциональное назначение пина. Никто не мешает влепить
туда транзистор и занулять шину как того требует стандарт. POV(108 знак., 23.09.2023 19:30, ссылка)
- Цитата из спецификации I2C-bus достаточное доказательство для Фомы
Неверующего? В самом первом абзаце написано, что большинство slave
не имеют управления сигналом SCL и не могут "растягивать" тактовый
сигнал. Clock stretching это опция, а не обязательное требование спецификации. reZident(1 знак., 23.09.2023 19:39, картинка)
- Как это препятствует фантазиям авторов м/с? Есть опция и они ее
захотели? Получите! - POV(23.09.2023 19:43)
- Ну точно ведь - реинкарнация Фомы Неверующего! :-))) - reZident(23.09.2023 19:55)
- Проверял это лет 20 тому назад в I2C режиме на AT17. Она - могла удерживать SCL в нуле. Только вот
записи куда-то делись. На память - начинала она это при повышенной
скорости I2C и пониженном питании. Т.е. как раз "не успевала". - Toчкa oпopы(23.09.2023 20:54)
- Ну AT17 несколько "специфичная" EPROM. Она ведь для загрузки FPGA предназначена. Поэтому некоторые из м/с этой серии сами тактовый сигнал генерить умеют. Соответственно вывод DCLK у них может быть или входом или выходом. Но в любом случае об этом явно в datasheet указано - либо Input, либо Input/Output. reZident(2 знак., 23.09.2023 21:07, картинка, картинка)
- Проверял это лет 20 тому назад в I2C режиме на AT17. Она - могла удерживать SCL в нуле. Только вот
записи куда-то делись. На память - начинала она это при повышенной
скорости I2C и пониженном питании. Т.е. как раз "не успевала". - Toчкa oпopы(23.09.2023 20:54)
- Ну точно ведь - реинкарнация Фомы Неверующего! :-))) - reZident(23.09.2023 19:55)
- Как это препятствует фантазиям авторов м/с? Есть опция и они ее
захотели? Получите! - POV(23.09.2023 19:43)
- Цитата из спецификации I2C-bus достаточное доказательство для Фомы
Неверующего? В самом первом абзаце написано, что большинство slave
не имеют управления сигналом SCL и не могут "растягивать" тактовый
сигнал. Clock stretching это опция, а не обязательное требование спецификации. reZident(1 знак., 23.09.2023 19:39, картинка)
- Input - это функциональное назначение пина. Никто не мешает влепить
туда транзистор и занулять шину как того требует стандарт. POV(108 знак., 23.09.2023 19:30, ссылка)
- Я с вас худею :-( Input это просто вход, а не Input/output, как у
SDA. У всех виденных мной EEPROM SCL это вход. И не тормозят EERPOM обмен по шине. Потому, что они поддерживают
любую частоту тактирования в пределах своей спецификации, а
готовность к чтению/записи наличием/отсутствием ACK подтверждают. - reZident(23.09.2023 19:16)
- Автор микросхемы тоже знает спецификацию i2c, и мог заложить эту
функцию. С проблемами унутри м/с этот функционал мог проявится
(ранее просто не замечалось) т.к. какие-то внутренние процесс
начали проходить долго или не проходить совсем. - POV(23.09.2023 19:08)
- *"№;%%: я же просил не пересказывать мне спецификацию I2C! Где вы
видите у конкретного slave в виде м/с EEPROM возможность как-либо удерживать SCL? reZident(2 знак., 23.09.2023 19:04, картинка, картинка)
- Клок удерживается в нуле слейвом если тот хочет притормозить обмен. - POV(23.09.2023 19:00)
- Шо це такэ? Поясните. Каким образом чистый вход может
самостоятельно управлять своим состоянием? Про мультимастера
рассказывать не стоит. Я немного знаком со спецификацией I2C. - reZident(23.09.2023 18:57)
- Может. Это называется стрейчинг. Вот в SMBUS его уже нет. - POV(23.09.2023 18:56)
- вот чисто пальцем в небо. не может ли быть такой износ ячеек, либо
сбой внутреннего автомата записи, что время записи возросло, и
микросхема таким макаром тормозит хост - мол, постой, милок, я не
все записала. - Alex68(23.09.2023 18:43)
- м/с запаяна месяц назад, из 4 млн циклов там и тысячи еще нет - Лaгyнoв(24.09.2023 14:29)
- Скорее предположу проблему на стороне проца. Софтверную или глюк
аппаратного I2C. - LightElf(25.09.2023 11:56)