|
|
  |
Моделирование в Протеусе I2C памяти, Некорректное поведение модели |
|
|
|
Sep 2 2005, 11:17
|
Частый гость
 
Группа: Свой
Сообщений: 165
Регистрация: 11-01-05
Из: Украина, г. Одесса
Пользователь №: 1 896

|
Давеча один проектик для 51-го делал и проверял работоспособность в Протеусе. Задача выполнялась простая - записывать постранично (по 16 байт) в память типа 24с04 до упора, а затем считывать . Так вот были сделаны следующине наблюдения: Побайтовая запись-чтение проходят без проблем, а вот со страничным режимом происходит какая-то жопа.. Причём в Протеусе 6.1- 6.5 страничная запись вообще не работает (происходит запись только 1-2 первых байт), а в последнем 6.73 вроде бы уже записывает , но не всегда стабильно, а при последующем чтении и сравнение наблюдается куча несовпадений... Хотя даже когда запись прошла нормально (контролируется содержимое памяти) при чтении не всегда выводится правильная информация. Долго бился головой об стенку, раз 15 просматривал код программы и ПДФ на память (нашел правда несколько некорректных моментов), подключил лог.анализатор на шину I2C, смотрю лог обмена по шине - все нормано. Но всеравно продолжаются ошибки сравнения. После всего этого было принято решение сделать реальный девайс и проверить живьём.. Всё зароботало без проблем.
Кто-нить сталкивался с подобной траблой ?
|
|
|
|
|
Sep 2 2005, 12:22
|
Частый гость
 
Группа: Свой
Сообщений: 165
Регистрация: 11-01-05
Из: Украина, г. Одесса
Пользователь №: 1 896

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

Местный
  
Группа: Свой
Сообщений: 482
Регистрация: 5-07-05
Из: Санкт-Петербург
Пользователь №: 6 528

|
Впрочем, если в железе всё Ok, тогда действительно какая то фигня с Протеусом. Если хочется докопаться, проверьте компонет памяти.
PS: Рекомендую пользоваться, в дальнейшем, не таймаутом, а алгоритмом 2б. Он шустрее. К тому же, таймаут сильно зависит от Vdd а в 2б отлавливается момент, что страница записана, т.е. нет фиксированного таймаута.
--------------------
Для связи email: info собака qbit.su
|
|
|
|
|
Sep 2 2005, 13:10
|
Частый гость
 
Группа: Свой
Сообщений: 165
Регистрация: 11-01-05
Из: Украина, г. Одесса
Пользователь №: 1 896

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

Местный
  
Группа: Свой
Сообщений: 482
Регистрация: 5-07-05
Из: Санкт-Петербург
Пользователь №: 6 528

|
Цитата(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.
--------------------
Для связи email: info собака qbit.su
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|