-
- Победил ... для меня это не очевидно было... POV(370 знак., 16.01.2024 12:09)
- А разве WEL не read-only? О.о Это же "индикаторный" бит. Зачем его
пытаться переписывать? - reZident(16.01.2024 13:39)
- Ридонли если писать через SR. А через 06 он как раз взводится. И
вот для данного чип эта операция требует контроля BUSY. Предварение
командой 50 устранило необходимость контроля. Мне кажется, всё
вышло в итоге логично... POV(711 знак., 16.01.2024 17:06, картинка, картинка)
- Все это интересно, но биты WEL и BUSY не являются non-volatile, о чем я уже писал ниже по топику. И вообще это называется "замазать" проблему, а не решить ее. На 99% уверен, что где-то ошибка в программе имеется. reZident(1 знак., 16.01.2024 17:19, ссылка)
- Тут непонятка с микросхемой. ТС утверждает, что после команды 06h
Enable Write, выставляется бит бизи на время, характерное для
записи во флеш. Он его не пытается прямо переписать, но обнаружил
занятие микросхемы после 06h. - Nikolay_Po(16.01.2024 13:43)
- А по-моему он путает WEL и WIP. - reZident(16.01.2024 13:50)
- Нет, именно wel, который взводится команде разрешения записи. - POV(16.01.2024 13:53)
- То бишь после команды WREN, результатом которой должна быть
установка бит WEL, вначале устанавливается бит WIP (сигнализируя о
процессе записи), а WEL устанавливается лишь через 5мс, после чего
(или одновременно с ним) WIP сбрасывается. Я все правильно понял? - reZident(16.01.2024 14:59)
- Что за WIP? Я просто контролирую BUSY. POV(1 знак., 16.01.2024 16:57, картинка)
- Позиционно это тот же самый бит, но в документации производителя он
называется WIP. reZident(2 знак., 16.01.2024 17:04, ссылка, картинка)
- Мы всё еще говорим о ZD25Q? Я не вижу в описании такого бита.
Конкретно чип ZD25Q64B если буковки на что-то влияют. POV(2 знак., 16.01.2024 17:10, ссылка, картинка)
- На снимке, бит WEL не подписан как Non-Volatile, значит, его
изменение не должно было приводить к попытке какой-либо записи.
Интересно проверить такую гипотезу: бит WEL сохраняется при
выключении питания из-за ошибки на кристалле. Можно проверить так: Nikolay_Po(347 знак., 16.01.2024 18:32)
- Не останется. Условия для сброса WEL перечислены, power-up указано в том числе. reZident(1 знак., 16.01.2024 19:45, картинка)
- Ага. Я смотрел datasheet на м/с другого объема - ZD25Q80, ZD25Q16, ZD25WQ80. Там везде - WIP, а не BUSY. - reZident(16.01.2024 17:15)
- На снимке, бит WEL не подписан как Non-Volatile, значит, его
изменение не должно было приводить к попытке какой-либо записи.
Интересно проверить такую гипотезу: бит WEL сохраняется при
выключении питания из-за ошибки на кристалле. Можно проверить так: Nikolay_Po(347 знак., 16.01.2024 18:32)
- Мы всё еще говорим о ZD25Q? Я не вижу в описании такого бита.
Конкретно чип ZD25Q64B если буковки на что-то влияют. POV(2 знак., 16.01.2024 17:10, ссылка, картинка)
- Позиционно это тот же самый бит, но в документации производителя он
называется WIP. reZident(2 знак., 16.01.2024 17:04, ссылка, картинка)
- Не обязательно. WEL может устанавливаться в ОЗУ сразу, но
параллельно, начинается запись в SR в связи с изменением статуса по
команде. И, пока эта запись не завершиться (BUSY), команда на
выполнение следующей записи не принимается. Может быть так (это
домысел). Может, WIP вообще не устанавливается, но, по факту,
запись происходит. - Nikolay_Po(16.01.2024 15:29)
- Это все ваши домыслы. Потому, что WEL не является non-volatile
битом статусного регистра. Но даже и volatile-биты статуса (BPx)
копируются в "ОЗУ" при подаче питания и далее читается их состояние
из этого самого "ОЗУ". Для изменения WEL и WIP в процессе
функционирования SerialFlash запись их состояния в "ПЗУ" не
требуется и более того - невозможна. reZident(526 знак., 16.01.2024 15:35)
- В описании на ZD25Q64B такого текста нет, формулировки иные POV(762 знак., 16.01.2024 17:24)
- Формулировка другая, а суть та же. Non-volatile это условно "ПЗУ", а volatile - условно "ОЗУ". Биты WEL и BUSY - тип volatile. WEL это индикатор готовности High Voltage Generator (как я предполагаю) к записи данных, т.е. состояние выхода какого-нибудь триггера или компаратора. - reZident(16.01.2024 17:53)
- Мысль в том, что WEL, из-за ошибки конструктора, почему-то попал в
non-volatile биты. Факты говорят об этом. Может, самой записи и не
происходит, но таймер записи отрабатывает вместе с BUSY. Обходной
путь - дать 50h перед 06h. Это экономит ~5мс и гарантирует
отсутствие протирания флеш SR, если запись всё-таки происходит. Nikolay_Po(43 знак., 16.01.2024 15:41, ссылка)
- Если бы ваше предположение (о записи в "ПЗУ" состояния SR при
изменении бита WEL) было верно, то чип был бы забракован и м/с не
выпустили бы в тираж. Потому, что заявленный ресурс в 100К записей
был бы выработан уже после 25 циклов записи всего объема 8Мбитной
SerialFlash. - reZident(16.01.2024 16:09)
- И потом, 100к это гарантированный ресурс. При нормальных условиях, и 1000к может отработать до отказа. Не во всех применениях требуется полный ресурс. Так что "авось прокатит". Помним, что мы лаоваи. - Nikolay_Po(16.01.2024 16:20)
- Проходил ли контроль чип ТС? Смотря где покупать. Может, как раз отбраковку и приобрели, нечаянно. - Nikolay_Po(16.01.2024 16:19)
- Если бы ваше предположение (о записи в "ПЗУ" состояния SR при
изменении бита WEL) было верно, то чип был бы забракован и м/с не
выпустили бы в тираж. Потому, что заявленный ресурс в 100К записей
был бы выработан уже после 25 циклов записи всего объема 8Мбитной
SerialFlash. - reZident(16.01.2024 16:09)
- В описании на ZD25Q64B такого текста нет, формулировки иные POV(762 знак., 16.01.2024 17:24)
- Это все ваши домыслы. Потому, что WEL не является non-volatile
битом статусного регистра. Но даже и volatile-биты статуса (BPx)
копируются в "ОЗУ" при подаче питания и далее читается их состояние
из этого самого "ОЗУ". Для изменения WEL и WIP в процессе
функционирования SerialFlash запись их состояния в "ПЗУ" не
требуется и более того - невозможна. reZident(526 знак., 16.01.2024 15:35)
- Что за WIP? Я просто контролирую BUSY. POV(1 знак., 16.01.2024 16:57, картинка)
- То бишь после команды WREN, результатом которой должна быть
установка бит WEL, вначале устанавливается бит WIP (сигнализируя о
процессе записи), а WEL устанавливается лишь через 5мс, после чего
(или одновременно с ним) WIP сбрасывается. Я все правильно понял? - reZident(16.01.2024 14:59)
- Нет, именно wel, который взводится команде разрешения записи. - POV(16.01.2024 13:53)
- А по-моему он путает WEL и WIP. - reZident(16.01.2024 13:50)
- Ридонли если писать через SR. А через 06 он как раз взводится. И
вот для данного чип эта операция требует контроля BUSY. Предварение
командой 50 устранило необходимость контроля. Мне кажется, всё
вышло в итоге логично... POV(711 знак., 16.01.2024 17:06, картинка, картинка)
- Не победил. Что-то не то! Не должно быть никакой записи, требующей
5мс! Есть возможность снять логическим анализатором, что творится
на шине (CS, SCK, DI, DO)? Микросхема такая же, что и те, с
которыми я работаю (Winbond). Nikolay_Po(1175 знак., 16.01.2024 13:23)
- И цитата всё же должна быть иная т.к. команда 06 POV(69 знак., 16.01.2024 13:36, картинка)
- По моему все логично. 1) Команда разрешения записи WREN -> 2)
проверка бита WEL, ожидаем его установку -> 3) запись данных
-> 4) ожидаем завершения записи, проверяя бит WIP. Зачем бит
WEL пытаться перезаписать-то? - reZident(16.01.2024 13:49)
- Не нужно проверки бита WEL. Просто первой транзакцией командуем 06,
следующей - сразу пишем. Так оно работает в W25Q. Почему Z25Q
требует ожидания - вопрос! И я подозреваю, что идёт реальная запись
в SR, коей быть не должно и не должно требоваться задержки перед
командой записи страницы. - Nikolay_Po(16.01.2024 13:53)
- Бит есть, значит проверка не помешает. Подозреваю, что между командой разрешения записи и началом записи должны включиться генераторы повышенного напряжения, что занимает время вовсе не наносекунды. - reZident(16.01.2024 14:19)
- на fm25V и at25 код работал. А тут вот или ждать окончания записи
wel или надеяться что команда 50 исключает запись, не насилуя
флешку. - POV(16.01.2024 13:56)
- Если после команд 50h+06h нет бизи, а следующая команда на запись
принимается сразу, значит, лишней записи во флеш нет, можно быть
спокойным. - Nikolay_Po(16.01.2024 14:20)
- гуд - POV(16.01.2024 14:21)
- Возможно, я спас ваши флешки :) - Nikolay_Po(16.01.2024 13:57)
- Если после команд 50h+06h нет бизи, а следующая команда на запись
принимается сразу, значит, лишней записи во флеш нет, можно быть
спокойным. - Nikolay_Po(16.01.2024 14:20)
- Не нужно проверки бита WEL. Просто первой транзакцией командуем 06,
следующей - сразу пишем. Так оно работает в W25Q. Почему Z25Q
требует ожидания - вопрос! И я подозреваю, что идёт реальная запись
в SR, коей быть не должно и не должно требоваться задержки перед
командой записи страницы. - Nikolay_Po(16.01.2024 13:53)
- Это если в микросхеме баг или недоработка алгоритма. Похоже, что по
команде Write Enable, вместо того, чтобы просто временно взвести
бит WEL, происходит ещё и запись в регистр статуса SR, что
блокирует последующую запись. И, если так, то нельзя исключать, что
потом, после автоматического сброса WEL после записи, изменение
статуса опять записывается во флеш и нужно ещё ждать. Nikolay_Po(110 знак., 16.01.2024 13:42)
- Если команда 50 присутствует, то работает сразу, без паузы. Видать
где-то внутри микрухи этот бит в РАМе сидит вне зависимости от
запомненного в SR. - POV(16.01.2024 13:54)
- Для этого команда 50h и нужна, чтобы писать в ОЗУ, а не во флеш.
Чтобы не протереть флеш. Другое дело, что в нормальных чипах от
Winbond, снятие/установка WEL по командам происходит без теневой
записи SR и, поэтому, не требует спец. команды 50h для нормальной
работы. - Nikolay_Po(16.01.2024 13:57)
- "Энергонезависимые" (non-volatile) биты статуса (типа BPx) при
подаче питания автоматически копируются в "ОЗУ". Далее работа идет
с их (потенциально volatile) копией. Команда Write Enable for
Volatile Status Register (50h) позволяет изменить состояние
"энергонезависимых" бит статуса без их записи в энергонезависимую
память, то бишь изменить именно volatile-копию. Для бита WEL,
который мало того, что read-only, но еще и чисто "индикаторый" эта
команда разрешения записи (50h) reZident(196 знак., 16.01.2024 15:30)
- Угу. Так в теории и так у Winbond W25Q. А вот у конкретного
экземпляра Z25Q, попытка разблокировки возможности записи командой
06h, вызывает занятие чипа на время записи. А вот использование 50h
перед 06h, устраняет занятость чипа и, вероятно, устраняет лишнюю
запись в SR. Nikolay_Po(718 знак., 16.01.2024 15:37)
- Вы же не работали с ZD32 и судите о ситуации лишь со слов POV. Но
дело в том, что POV находится внутри этой ситуации. И пока из нее не вышел истина может ускользать в
виде программной ошибки, которую он пока не замечает. При
программировании такое случается сплошь и рядом - глаз "замылился".
Поэтому бывает полезен некий "аудит" программы от независимого
человека. - reZident(16.01.2024 15:48)
- Согласен. - Nikolay_Po(16.01.2024 15:55)
- Вы же не работали с ZD32 и судите о ситуации лишь со слов POV. Но
дело в том, что POV находится внутри этой ситуации. И пока из нее не вышел истина может ускользать в
виде программной ошибки, которую он пока не замечает. При
программировании такое случается сплошь и рядом - глаз "замылился".
Поэтому бывает полезен некий "аудит" программы от независимого
человека. - reZident(16.01.2024 15:48)
- Угу. Так в теории и так у Winbond W25Q. А вот у конкретного
экземпляра Z25Q, попытка разблокировки возможности записи командой
06h, вызывает занятие чипа на время записи. А вот использование 50h
перед 06h, устраняет занятость чипа и, вероятно, устраняет лишнюю
запись в SR. Nikolay_Po(718 знак., 16.01.2024 15:37)
- "Энергонезависимые" (non-volatile) биты статуса (типа BPx) при
подаче питания автоматически копируются в "ОЗУ". Далее работа идет
с их (потенциально volatile) копией. Команда Write Enable for
Volatile Status Register (50h) позволяет изменить состояние
"энергонезависимых" бит статуса без их записи в энергонезависимую
память, то бишь изменить именно volatile-копию. Для бита WEL,
который мало того, что read-only, но еще и чисто "индикаторый" эта
команда разрешения записи (50h) reZident(196 знак., 16.01.2024 15:30)
- Для этого команда 50h и нужна, чтобы писать в ОЗУ, а не во флеш.
Чтобы не протереть флеш. Другое дело, что в нормальных чипах от
Winbond, снятие/установка WEL по командам происходит без теневой
записи SR и, поэтому, не требует спец. команды 50h для нормальной
работы. - Nikolay_Po(16.01.2024 13:57)
- Если команда 50 присутствует, то работает сразу, без паузы. Видать
где-то внутри микрухи этот бит в РАМе сидит вне зависимости от
запомненного в SR. - POV(16.01.2024 13:54)
- По моему все логично. 1) Команда разрешения записи WREN -> 2)
проверка бита WEL, ожидаем его установку -> 3) запись данных
-> 4) ожидаем завершения записи, проверяя бит WIP. Зачем бит
WEL пытаться перезаписать-то? - reZident(16.01.2024 13:49)
- И всё же этот бит имеет отображение в SR. А тому для записи нужно
время. Я всего лишь ввёл проверку занятости после команды 50 и всё
взлетело. POV(1 знак., 16.01.2024 13:26, картинка)
- Не путайте изменение значения бита статуса по команде от изменения с записью регистра во флеш. Nikolay_Po(625 знак., 16.01.2024 13:37)
- Так! А зачем вы вообще использовали команду 50? Вам, по-хорошему,
частая запись в статус вообще не нужна. Туда пишут разок, чтобы
залочить, например, бутлоадер. Для обычных записи-стирания, к
регистру статуса обращаются только для чтения. А для разрешения
записи, используют команду 06h. - Nikolay_Po(16.01.2024 13:36)
- Я выше поправил. Я использую команду 6. - POV(16.01.2024 13:37)
- ОК. Тогда что будет, если перед командой 06h дать команду 50h? Я
ожидаю, что бизи не будет, а последующая запись или стирание -
заработают. Nikolay_Po(89 знак., 16.01.2024 13:39)
- Да, так пишет без бузи. Спасибо. Цитируемый абзац не весь прочитал,
всё в последней строчке раскрыто )) - POV(16.01.2024 13:52)
- Ура! Мои старания не пропали даром! Донёс! Nikolay_Po(228 знак., 16.01.2024 13:55)
- Да, так пишет без бузи. Спасибо. Цитируемый абзац не весь прочитал,
всё в последней строчке раскрыто )) - POV(16.01.2024 13:52)
- ОК. Тогда что будет, если перед командой 06h дать команду 50h? Я
ожидаю, что бизи не будет, а последующая запись или стирание -
заработают. Nikolay_Po(89 знак., 16.01.2024 13:39)
- Я выше поправил. Я использую команду 6. - POV(16.01.2024 13:37)
- И цитата всё же должна быть иная т.к. команда 06 POV(69 знак., 16.01.2024 13:36, картинка)
- А разве WEL не read-only? О.о Это же "индикаторный" бит. Зачем его
пытаться переписывать? - reZident(16.01.2024 13:39)
- Победил ... для меня это не очевидно было... POV(370 знак., 16.01.2024 12:09)