Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Моделирование в Протеусе I2C памяти
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
okela
Давеча один проектик для 51-го делал и проверял работоспособность в Протеусе.
Задача выполнялась простая - записывать постранично (по 16 байт) в память типа 24с04 до упора, а затем считывать . Так вот были сделаны следующине наблюдения:
Побайтовая запись-чтение проходят без проблем, а вот со страничным режимом происходит какая-то жопа.. Причём в Протеусе 6.1- 6.5 страничная запись вообще не работает (происходит запись только 1-2 первых байт), а в последнем 6.73 вроде бы уже записывает , но не всегда стабильно, а при последующем чтении и сравнение наблюдается куча несовпадений...
Хотя даже когда запись прошла нормально (контролируется содержимое памяти) при чтении не всегда выводится правильная информация.
Долго бился головой об стенку, раз 15 просматривал код программы и ПДФ на память (нашел правда несколько некорректных моментов), подключил лог.анализатор на шину I2C, смотрю лог обмена по шине - все нормано. Но всеравно продолжаются ошибки сравнения.
После всего этого было принято решение сделать реальный девайс и проверить живьём.. Всё зароботало без проблем.

Кто-нить сталкивался с подобной траблой ?
bzx
Несколько уточняющих вопросов.
1) Надеюсь, что начальный (первый) адрес, по которому Вы пишите при страничной записи в 24с04 кратен 16. Т.е. 00h, 10h, 20h и т.д.
2)После того как закончили запись страницы, т.е. после STOPа какие действия:
a) ждёте определённое время (как минимум время записи страницы);
б) обращаетесь к 24с04 и ловите ACK
okela
Цитата(bzx @ Sep 2 2005, 14:36)
Несколько уточняющих вопросов.
1) Надеюсь, что начальный (первый) адрес, по которому Вы пишите при страничной записи в 24с04 кратен 16. Т.е. 00h, 10h, 20h и т.д.
2)После того как закончили запись страницы, т.е. после STOPа какие действия:
  a) ждёте определённое время (как минимум время записи страницы);
  б) обращаетесь к 24с04 и ловите ACK
*


1. Да, конечно.
2. После записи страницы выжидается таймаут около 5мс, а затем производится чтение записанного.
bzx
Впрочем, если в железе всё Ok, тогда действительно какая то фигня с Протеусом. Если хочется докопаться, проверьте компонет памяти.

PS: Рекомендую пользоваться, в дальнейшем, не таймаутом, а алгоритмом 2б. Он шустрее. К тому же, таймаут сильно зависит от Vdd а в 2б отлавливается момент, что страница записана, т.е. нет фиксированного таймаута.
okela
Цитата(bzx @ Sep 2 2005, 15:59)
PS: Рекомендую пользоваться, в дальнейшем, не таймаутом, а алгоритмом 2б. Он шустрее. К тому же, таймаут сильно зависит от Vdd а в 2б отлавливается момент, что страница записана, т.е. нет фиксированного таймаута.
*


А можно поподробнее - что за алгоритм 2б.
bzx
Цитата(okela @ Sep 2 2005, 16:10)
А можно поподробнее - что за алгоритм 2б.
*

Я писал
Цитата(bzx @ Sep 2 2005, 14:36)
2)После того как закончили запись страницы, т.е. после STOPа какие действия:
  б) обращаетесь к 24с04 и ловите ACK
*

Т.е. после STOPа (закончили запись страницы), в цикле:
START, CONTROL BYTE и надо отлавливать состояние ACK=0 (страница записана и разрешёна запись следующей страницы)
если ACK=1, STOP и цикл повторяется. Выйти из цикла можно по таймауту. Это на всякий случай, например, отсутствует EEPROM.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.