Ural 0 4 октября, 2017 Опубликовано 4 октября, 2017 · Жалоба Всем доброго времени суток. Работаю с N25Q256 по интерфейсу SPI extended. Идентификатор микросхемы командой READ ID считывается верно. Пытаюсь записать/читать в память. Для этого ставлю выставляю бит Write Enable в статусном регистре. Проверяю - бит установлен. Пишу массив из 32-х байт по нулевому адресу. Последующее считывание статусного регистра показывает, что бит занятости (busy) устанавливается на какое-то время, т.е. команда выполняется. После того, как бит занятости сбрасывается, пытаюсь считать эти же 32 байта по нулевому адресу. Считываются нули. Собственно в этом и проблема. При этом, если перед командой чтения, проверить статусный регистр, то выяснится, что бит Write Enable там уже сброшен. Как будто его нужно выставлять перед каждой записью. Можно было бы предположить, что после команды записи, SPI перестает правильно все читать: и статусный регистр, и данные. Но при этом команда READ ID правильно считывает идентификатор девайса, т.е. она не поломалась. В общем такие пироги. Буду благодарен за помощь в разрешении вопроса. Прошу простить за вопрос - а перед записью данных в сектор 0 (вероятно, командой программирования страницы Page Program 0x02) Вы сектор очищаете (стираете) командой Sector Erase 0x20? Или Вы в этот сектор еще никогда не записывали и считается, что сектор чист? Действительно, бит Write Enable сбрасывается аппаратно после КАЖДОЙ операции записи/программирования или стирания. Т.е. перед каждой операцией записи/программирования/стирания нужно посылать команду Write Enable 0x06. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 187 4 октября, 2017 Опубликовано 4 октября, 2017 · Жалоба Считываются нули. Собственно в этом и проблема. Видимо сектор надо было предварительно стереть. Как будто его нужно выставлять перед каждой записью. Так и есть. Почитайте даташит на чип. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RoadRunner 0 4 октября, 2017 Опубликовано 4 октября, 2017 · Жалоба Прошу простить за вопрос - а перед записью данных в сектор 0 (вероятно, командой программирования страницы Page Program 0x02) Вы сектор очищаете (стираете) командой Sector Erase 0x20? Или Вы в этот сектор еще никогда не записывали и считается, что сектор чист? Я только стер всю флеш командой Bulk Erase. Думал, что этого достаточно. Я вообще не думал, что это необходимо - в доке вроде указаний на то, что обязательно стирать перед записью нет. Там только везде напоминают, что Write Enable надо выставить. Попробую стереть предварительно, отпишусь, что получится. Спасибо за совет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RoadRunner 0 9 октября, 2017 Опубликовано 9 октября, 2017 (изменено) · Жалоба Да, действительно, после предварительного стирания командой Sector Erase 0x20 все заработало. Большое спасибо за помощь!) Изменено 9 октября, 2017 пользователем RoadRunner Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться