-
- Просто код править лень, а все равно придется и лучше раньше, чем позже. Старые чипы памяти купить все сложнее. Всяких DDR-xx тоже касается. - Visitor(20.12.2023 21:57)
- Флеша тоже пишется побайтово. И даже побитиво. Такшта ненада
пугаться. - SciFi(20.12.2023 21:56)
- Здесь "пишется" нужно читать как "перезаписывается". EEPROM может перезаписываться побайтово, а у Flash
для перезаписи даже одного байта нужно предварительно стереть целый
сектор (вариант - субсектор или страницу). Ваш К.О. - reZident(20.12.2023 22:01)
- есть такой чип уникальный от ST - M25PE80. Вроде только у него есть
команда именно записи 0х0А (а не команда программирования 0х02 по
предварительно стертому месту). Причем запись - побайтовая (от 1 до
256 байт). Т.е. в любом месте байт перезаписывается из любого
состояния в любое. Я с этим влетел , когда впервые в жизни
применил, думал у всех SPI-flash так. :-) Оказалось только у этого
камня. - Лaгyнoв(21.12.2023 09:17)
- У Micron-овских чипов M25PExx есть возможность постраничного (кроме посекторного и субсекторного) стирания (страница - 256 байт). Поэтому в них реализована постраничная запись, аналогичная той, что была в DataFlash от Atmel серии AT45DBxx. Правда в DataFlash это было реализовано еще круче - там было два буфера (ОЗУ) которые можно было заполнять по-очереди. Соответственно когда один буфер записывается во Flash-память, второй буфер в это же время можно заполнять reZident(15 знак., 21.12.2023 10:35)
- Видимо, совместили в одной команде стирание страницы и запись.
Можно и программно это делать, но нужен ещё и буфер размером со
страницу. Страница 256 байт, что тоже в каком-то смысле экзотика.
Обычно 4096. - SciFi(21.12.2023 10:17)
- мне потом пришлось в пультах ввести чтение ID, чтоб знать - как с
кем работать. :-) - Лaгyнoв(21.12.2023 10:24)
- А надо было всего лишь вычислить общий знаменатель в смысле
функционала и использовать только его. - SciFi(21.12.2023 10:30)
- теперь просто применяем стандартные. Где везде пишу только по
стертому, а стираю по 4096 байт. Но есть старые экземпляры с
М25РЕ80. Которые понимают стирание только по 256. И сами команды
стирания разные. И эти экз. неизвестно где. Поэтому там продолжаю
читать ID для определения стирания. - Лaгyнoв(21.12.2023 11:31)
- Присоединяюсь к предыдущему оратору. M25PE80 умеет стирать по 4096.
Во всяком случае, в моём тырнете именно так. - SciFi(21.12.2023 12:08)
- код команды ДРУГОЙ (0хD8, а не 0х20) - Лaгyнoв(21.12.2023 12:35)
- Похоже, в старину были кривые чипы, а чуть позже подтянули до
стандарта и продолжили продавать под тем же номером: SciFi(1 знак., 21.12.2023 12:43, картинка)
- Вот сравнительная табличка для SPI SerialFlash разных
производителей. ЕМНИП Точка опоры когда-то публиковал. У м/с
некоторых производителей стирание только посекторное, где сектор имеет размер 64К. reZident(1 знак., 21.12.2023 12:57, ссылка)
- дурдом, ну и ладно. У нас сейчас технология отработана. В пульты
ставим говорушки, из которых забираем 16Мбит, а в них ставим
32Мбит. Поэтому уже у меня всегда один теперь производитель.
Какой-то нонейм, - Лaгyнoв(21.12.2023 14:50)
- Вроде бы современные флешки 25-й серии весьма похожи друг на друга.
Но иногда бывают курьёзы: SciFi(1 знак., 21.12.2023 19:08, ссылка)
- Я вот не так давно столкнулся с тем, что NUC970 отказался грузиться с W25Q80DVSING. Не читает с нее U-Boot, хоть тресни. Хотя через NuWriter флешка пишется-верифицируется без проблем. Пришлось купить ZD25WQ80BTIGT, с ними проблем нет. - LightElf(21.12.2023 19:57)
- такого (больше 10 сек) не видел, но на всякий случай (когда много
раз по 64К стираю, а это при инициализации, смене месяца и проч) в
крайнем знакоместе у меня сегмент по кругу бегает - типа не
волнуйтесь скоро закончим. - Лaгyнoв(21.12.2023 19:10)
- И правильно! По мере износа, время может расти. Кстати, обратите внимание на моё замечание касательно необходимости завершённости процедуры стирания. Nikolay_Po(1 знак., 21.12.2023 19:33, ссылка)
- Вроде бы современные флешки 25-й серии весьма похожи друг на друга.
Но иногда бывают курьёзы: SciFi(1 знак., 21.12.2023 19:08, ссылка)
- Ну вот мы и нашли неточность в этой табличке. Впрочем, продолжайте
наблюдение. - SciFi(21.12.2023 12:58)
- В чем неточность? - reZident(21.12.2023 13:00)
- В этой ветке вся информация уже есть, смотрите внимательнее. - SciFi(21.12.2023 13:04)
- "Ты не умничай, а пальцем покажи!" Вся информация в том, что
Лагунов ошибочно утверждает - команда стирания суб-сектора (4кБ) это 0xD8. А это не
так. Сейчас специально просмотрел описания разных SerialFlash пяти
производителей. У всех команда стирания сектора (где-то он правда блоком называется) размером 64кБ или 32кБ это код 0xD8. - reZident(21.12.2023 13:12)
- Хз. Но в ранних версиях M25PE80 не было команды 0x20. Если они в
поле, то да, нужно вычитывать ID. Это принципиальный момент, и тут
у него всё точно. - SciFi(21.12.2023 13:14)
- А можно этот datasheet приаттачить сюда для коллекции? Может
проблема в том, что путаница между M25Pxx и M25PExx? - reZident(21.12.2023 13:19)
- Вот, например: SciFi(2 знак., 21.12.2023 13:29, ссылка, картинка)
- И что? Ну не было деления на субсекторы - не было и такой команды для стирания. Мне вот это сообщение Лагунова возмутило своей неточностью => reZident(120 знак., 21.12.2023 13:36, ссылка)
- Вот, например: SciFi(2 знак., 21.12.2023 13:29, ссылка, картинка)
- А можно этот datasheet приаттачить сюда для коллекции? Может
проблема в том, что путаница между M25Pxx и M25PExx? - reZident(21.12.2023 13:19)
- Хз. Но в ранних версиях M25PE80 не было команды 0x20. Если они в
поле, то да, нужно вычитывать ID. Это принципиальный момент, и тут
у него всё точно. - SciFi(21.12.2023 13:14)
- "Ты не умничай, а пальцем покажи!" Вся информация в том, что
Лагунов ошибочно утверждает - команда стирания суб-сектора (4кБ) это 0xD8. А это не
так. Сейчас специально просмотрел описания разных SerialFlash пяти
производителей. У всех команда стирания сектора (где-то он правда блоком называется) размером 64кБ или 32кБ это код 0xD8. - reZident(21.12.2023 13:12)
- В этой ветке вся информация уже есть, смотрите внимательнее. - SciFi(21.12.2023 13:04)
- В чем неточность? - reZident(21.12.2023 13:00)
- дурдом, ну и ладно. У нас сейчас технология отработана. В пульты
ставим говорушки, из которых забираем 16Мбит, а в них ставим
32Мбит. Поэтому уже у меня всегда один теперь производитель.
Какой-то нонейм, - Лaгyнoв(21.12.2023 14:50)
- Вот сравнительная табличка для SPI SerialFlash разных
производителей. ЕМНИП Точка опоры когда-то публиковал. У м/с
некоторых производителей стирание только посекторное, где сектор имеет размер 64К. reZident(1 знак., 21.12.2023 12:57, ссылка)
- Похоже, в старину были кривые чипы, а чуть позже подтянули до
стандарта и продолжили продавать под тем же номером: SciFi(1 знак., 21.12.2023 12:43, картинка)
- код команды ДРУГОЙ (0хD8, а не 0х20) - Лaгyнoв(21.12.2023 12:35)
- Вы чего-то гоните или просто запамятовали. У M25PE80 есть
тричетыре разные команды для стирания - стирание страницы (256 байт), стирание субсектора (4К), стирание сектора (32К), стирание всей памяти. Стандартной/одинаковой для всех SerialFlash является команда посекторного стирания. В тех SerialFlash с которыми я работал сектор был размером 32К или 64К. Для сравнения набор команд M25PE80 и M25P80. reZident(2 знак., 21.12.2023 11:54, картинка, картинка)- 4К стирает команда 0хD8 в М25РЕ80 (всё верно), а обычных памятях (к
примеру 25GD32) 4К стирает команда 0х20. Которой в М25РЕ80 просто
нет вообще. - Лaгyнoв(21.12.2023 12:34)
- Опять ваша ошибка! Я же привел список команд в сообщении выше. 0xD8
это команда стирания сектора (sector), она одинаковая у подавляющего большинства SerialFalsh.
Но сектор у данной м/с имеет размер 64КБайт, а не 4КБайт. 4КБайт
это субсектор (subsector) и команда его стирания у M25PE80 - 0x20.
Страничное же стирание (по 256 байт) задается командой 0xDB. См.
внимательно! reZident(1 знак., 21.12.2023 12:50, картинка)
- Виноват. Действительно уже "запамятовал". Что есть на самом деле e
меня. Мне по ходу алгоритма надо стирать или по 64К, или более
мелкие кусочки. Стирание 64К действительно у всех - 0xD8. При этом
"мелкие кусочки" у М25РЕ80 - 256, а у всех остальных 4К. Признаю.
Поэтому и читаю ID там где не уверен в микросхеме. - Лaгyнoв(21.12.2023 15:10)
- Я хорошо запомнил потому, что был случай. reZident(817 знак., 21.12.2023 15:31)
- Виноват. Действительно уже "запамятовал". Что есть на самом деле e
меня. Мне по ходу алгоритма надо стирать или по 64К, или более
мелкие кусочки. Стирание 64К действительно у всех - 0xD8. При этом
"мелкие кусочки" у М25РЕ80 - 256, а у всех остальных 4К. Признаю.
Поэтому и читаю ID там где не уверен в микросхеме. - Лaгyнoв(21.12.2023 15:10)
- Опять ваша ошибка! Я же привел список команд в сообщении выше. 0xD8
это команда стирания сектора (sector), она одинаковая у подавляющего большинства SerialFalsh.
Но сектор у данной м/с имеет размер 64КБайт, а не 4КБайт. 4КБайт
это субсектор (subsector) и команда его стирания у M25PE80 - 0x20.
Страничное же стирание (по 256 байт) задается командой 0xDB. См.
внимательно! reZident(1 знак., 21.12.2023 12:50, картинка)
- 4К стирает команда 0хD8 в М25РЕ80 (всё верно), а обычных памятях (к
примеру 25GD32) 4К стирает команда 0х20. Которой в М25РЕ80 просто
нет вообще. - Лaгyнoв(21.12.2023 12:34)
- Присоединяюсь к предыдущему оратору. M25PE80 умеет стирать по 4096.
Во всяком случае, в моём тырнете именно так. - SciFi(21.12.2023 12:08)
- теперь просто применяем стандартные. Где везде пишу только по
стертому, а стираю по 4096 байт. Но есть старые экземпляры с
М25РЕ80. Которые понимают стирание только по 256. И сами команды
стирания разные. И эти экз. неизвестно где. Поэтому там продолжаю
читать ID для определения стирания. - Лaгyнoв(21.12.2023 11:31)
- А надо было всего лишь вычислить общий знаменатель в смысле
функционала и использовать только его. - SciFi(21.12.2023 10:30)
- мне потом пришлось в пультах ввести чтение ID, чтоб знать - как с
кем работать. :-) - Лaгyнoв(21.12.2023 10:24)
- Как хочу, так и читаю. Ваш К.О. :-) - SciFi(20.12.2023 22:04)
- есть такой чип уникальный от ST - M25PE80. Вроде только у него есть
команда именно записи 0х0А (а не команда программирования 0х02 по
предварительно стертому месту). Причем запись - побайтовая (от 1 до
256 байт). Т.е. в любом месте байт перезаписывается из любого
состояния в любое. Я с этим влетел , когда впервые в жизни
применил, думал у всех SPI-flash так. :-) Оказалось только у этого
камня. - Лaгyнoв(21.12.2023 09:17)
- Здесь "пишется" нужно читать как "перезаписывается". EEPROM может перезаписываться побайтово, а у Flash
для перезаписи даже одного байта нужно предварительно стереть целый
сектор (вариант - субсектор или страницу). Ваш К.О. - reZident(20.12.2023 22:01)