Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AT25 после записи страниц в цикле не пишется или не читается.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Basilij
Господа Здравствуйте в новой теме!

В рамках другой темы память завелась. В рамках данной темы опишу проблему, возможно здесь кроется недопонимание элементарных истин.
Суть такова:
Подключаю память AT25DF или M25P16 библиотекой которая идёт в примерах от переферии ST, пишу страницу, 256 байт, считываю, всё отлично. Всё осциллографом вижу, по всем каналам. Id возвращает верно.

Но стоит хотя бы раз запустить АЦП и каждый 256 байт, запускать запись страницы..
система работает в цикле - 500 страниц пишет по 256 байт, считыват 500 по 256 байт..
пока я отлаживаю, смотрю код, проходит минута.
Решаю проверить что он пишет, сначала вижу что данные исходящего буфера отличны от входящего, а при следующих запусках программы всё, глухо. Пишет, ИД выдаёт, осциллографом при этом вижу что все линии работают, но вот при попытки чтения страницы... нули в ответ.. причём осциллографом это вообще никак не рисуется. Как будто память игнорирует.

Сначала такое было на AT25.. впаял M25... ситуация повторилась..
Один раз показалось что случайно с 6 вольтовой цепи подал сигнал через щуп на SI.. но опять же после этого ИД возвращается.. так что не должно было что либо сгореть, и это было уже после того как страницы перестали читаться.

Может есть какая-то скрытая функция и если записали объём превышающий к примеру сектор 4 кб она сектор автоматом блокирует.. бред конечно.. и в Даташите на эти микры такого невижу... но мало ли..

Подскажите кто что знает по данной проблеме..

Заранее всем спасибо за потенциально возможные комментарии.
aaarrr
А как же стирание? Если постоянно писать по старым данным, то и будут в итоге нули одни.
Basilij
Здравствуйте!

Стирание не делал, дело в том что в отладчике я могу несколько раз один и тот же код по порядку выполнять команды на один и тот же адрес, и всегда считывалось одно и тоже.
sFLASH_WritePage(bufOutput,PageAdress,256);
sFLASH_ReadBuffer(bufInput,PageAdress,256);
sFLASH_WritePage(bufOutput,PageAdress,256);
sFLASH_ReadBuffer(bufInput,PageAdress,256);

Ещё не понимаю один момент, когда первый раз мы туда вписали данные, то почему сейчас там нули!? Или при повторной попытке записать данные в предварительно неочищенную область записываются нули? тогда опять же почему мой код выше работал...

Попробов сейчас писать в страницу расположенную в другом секторе. Пишет. Значит память не сгорела. Буду пробовать очишать перед записью.
DmitryM
Цитата(Basilij @ Oct 17 2012, 12:19) *
Ещё не понимаю один момент, когда первый раз мы туда вписали данные, то почему сейчас там нули!?

Чистая flash содержит во всех ячейках 0xFF. При записи изменяются только нулевые биты, а единичные остаются как были. Без предварительного стирания в конце концов все биты будут нулевыми, если конечно не писать одно и тоже значание всегда. Это не EEPROM, это flash.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.