• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Расширение флеш-памяти

brig

New member
Модули ESP8266 оснащены относительно небольшой по емкости флеш-памятью. Микросхема W25Q40 (4 Mbit = 512 Кбайт) предназначена для хранения прошвики и размещения пользовательских данных, причем для последних остается весьма мало места (в прошивках LUA NodeMCU всего лишь около 4 Кбайт). Едва-едва хватает для простейшего веб-сервера.

Согласно документации (стр. 7), в модуле возможно применение микросхем емкостью до 128 Mbit (16 Мбайт), это уже существенно. Технологически выполнить такую замену несложно, я это уже сделал и предложил проверить это на форуме esp8266.com в разделе LUA nodeMCU:





Народ там сказал "хорошая идея", но реакции от разработчика LUA nodeMCU пока не последовало. А это проблема... Во-первых, это один человек, единственный держатель исходников, от которого зависит все дальнейшее развитие данного направления (почти неделю не проявляет активности на форуме). Во-вторых, выяснилось отсутствие поддержки со стороны прошивки работы с памятью объемом свыше 512 Кбайт. При заполнении этого объема прошивка по сути становится неработоспособной.

В связи с этим прошу местных корифеев собрать прошивку для тестирования модифицированного модуля с точки зрения возможности использования 16-мегабайтной флеш-памяти. Думаю, это многим будет интересно и полезно...
 

pvvx

Активный участник сообщества
Народ там сказал "хорошая идея", но реакции от разработчика LUA nodeMCU пока не последовало. А это проблема... Во-первых, это один человек, единственный держатель исходников, от которого зависит все дальнейшее развитие данного направления (почти неделю не проявляет активности на форуме).
Не делайте ставки на такие проекты. Во первых, как мне показалось по изучению кто и чего из разработчиков LUA nodeMCU - преследуются коммерческие интересы, а это сулит отказом в дальнейшем и т.д.

Во-вторых, выяснилось отсутствие поддержки со стороны прошивки работы с памятью объемом свыше 512 Кбайт. При заполнении этого объема прошивка по сути становится неработоспособной.

В связи с этим прошу местных корифеев собрать прошивку для тестирования модифицированного модуля с точки зрения возможности использования 16-мегабайтной флеш-памяти. Думаю, это многим будет интересно и полезно...
Пока у меня нет подходящей flash большего размера, а новые модули закрыты крышками... Т.е. проверить смогу не ранее, чем закажу типа на aliexpress и пришлют из Китая - это к месяцу ждать :(
 

brig

New member
Я о другом - о проверке принципиальной возможности расширения флеш-памяти данного устройства, о поддержке заявленных значений (до 16Мб) со стороны электроники модуля и SDK.
Не нужно делать полнофункциональную прошивку, можно слепить тестовую прошивку, которую можно хоть сегодня испытать на моем уже модифицированном модуле. Собственно, функционал от прошивки требуется простейший: заполнить всю доступную (кроме самой прошивки) область флеш-памяти байтами 0х55 (к примеру), выполнить контрольное чтение записанных байтов и сообщить о результате через UART. Ну, для полноты информации, можно также замерить время записи и чтения определенного объема данных, чтобы быть в курсе о скорости записи/чтения.
Я прошью, испытаю и сообщу результат.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Если у вас прошивка грузится, то ограничения могут быть только в библиотечных функциях SDK:
spi_flash_erase_sector(uint16 sec);
spi_flash_write(uint32 des_addr, uint32 *src_addr, uint32 size);
spi_flash_read(uint32 src_addr, uint32 *des_addr, uint32 size);
Но это исправимо. (Эти функции изначально лажовые - не могут работать с нечетными адресами - т.е. при чтении, к примеру, 7 байт по нечетному 4-м адресу вызовет "протектед".. так-же есть приколы с чтением по нечетным адресам самой flash - copyright (c) Espressif System :) - добавка, решающая эти глупости https://yadi.sk/d/U5beHWzBdUHKv )
Измерять ничего не требуется - времена записи и стирания указаны в спецификации к микросхеме flash.
 
Последнее редактирование:

brig

New member
Если у вас прошивка грузится.......
Какая прошивка? Не вижу никакой прошивки.
Я ведь попросил тестовую прошивку, а не разъяснения по функциям языка программирования, которым не владею...

времена записи и стирания указаны в спецификации к микросхеме flash
Это и ёжику понятно, но на практике многое зависит от способа записи/чтения:
- тактовой частоты SPI-интерфейса (какая в данном модуле?)
- применяемых инструкций обмена данными - стандарт, дуал или квадо (какие в данном модуле?)
- и т.д. и т.п...
Поэтому всегда полезно точно знать реальную (измеренную) скорость записи в Мбайт/сек.
 

pvvx

Активный участник сообщества
Это и ёжику понятно, но на практике многое зависит от способа записи/чтения:
- тактовой частоты SPI-интерфейса (какая в данном модуле?)
Какая установлена конфиге - SPI 20, 27, 40, 80 MHz.
применяемых инструкций обмена данными - стандарт, дуал или квадо (какие в данном модуле?)
Зависит от распознавания конкретного ID flash.
и штук 100500 их.
Поэтому всегда полезно точно знать реальную (измеренную) скорость записи в Мбайт/сек.
Ага - она ещё от температуры зависит. Можете проверить.
 

brig

New member
Какая установлена конфиге - SPI 20, 27, 40, 80 MHz.
Аж 80 MHz! Это при 26 MHz кварца на плате!?
Зависит от распознавания конкретного ID flash.
Точно зависит (есть такое в SDK), или догадки?
Разработчику реализации на низком (ассемблерном) уровне ничто не мешает применить стандартный - 1-битовый - обмен данными несмотря на схемную возможность применить квадо-обмен.
Могу назвать еще. Опыт работы с различными типами флеш имею (правда, в системах на AVR-микроконтроллерах).
Ага - она ещё от температуры зависит.
Иными словами, помощи в создании тестовой прошивки от вас ждать не следует?
 
Последнее редактирование:

Andy Korg

Moderator
Команда форума
Аж 80 MHz! Это при 26 MHz кварца на плате!?
Извинте что вмешиваюсь - но в чипе стоит PLL, можно много разных частот набрать :)
.....Но это исправимо. (Эти функции изначально лажовые - не могут работать с нечетными адресами - т.е. при чтении, к примеру, 7 байт по нечетному 4-м адресу вызовет "протектед".. так-же есть приколы с чтением по нечетным адресам самой flash - copyright (c) Espressif System :) - добавка, решающая эти глупости https://yadi.sk/d/U5beHWzBdUHKv )...
Большое спасибо за исправления.
 

pvvx

Активный участник сообщества
Да, проц работает на 160... задается... можно и раскочегарить больше...
Иными словами, помощи в создании тестовой прошивки от вас ждать не следует?
С таким подходом - не следует. Но...
А как вы собрались сливать flash в UART на стандартной скорости - годами? Вам в прошивке её установить к десятку MegaBAUD? :)
Точно зависит (есть такое в SDK), или догадки?
Прошивка обращается для работы с flash к закрытым процедурам.
В них разбирается тип flash, её размер и прочие данные.
Разработчики SDK поленились и не дали полноценных функций и информации, как обращаться к flash.
Закрытая процедура, на стандартной flash дает spi_flash_get_id() = 0x001340c8. Из чего можно догадаться, что это не WINBOND W25Q40Bxx, а что-то исключительно китайское и вполне возможно не имеющее никаких доступных спецификаций и документов, т.к. производитель = всея Китай (индекс написан и нарисован на flash - вроде GD25Q40BTIG). :p
При чтении за пределами стандартного размера flash, данные для SDK процедуры, возвращают код ошибки. Другой флешки, влезающей в позиции, у меня пока нет. WINBOND-овские имеют больший размер между рядами ног и не садятся, а паять "на соплях" я не люблю.
Чтобы узнать, в каком режиме работает flash, включаем осциллограф и смотрим:
Esp8266_flash_40Mhz.gif
Видим, что CLK идет на ~40MHz, как я и установил в загрузчике. Все четыре шины данных работают - показана только одна. Т.е. режим "квадро". Flash читается всегда, при обращении к разным процедурам, т.к. программа "кешируется" из неё.
Можно включить и логический анализатор на 1ГГц - но лень раскидывать провода.
 
Последнее редактирование:

CHERTS

Moderator
Команда форума
Можно использовать внешнюю память по I2C, как раз последние 2 дня этим и занимаюсь, под руками только AT24C512, так что использую её, написал библиотеку + пример работы, запись-чтение побайтно, запись-чтение блоками.
Кому интересно, забирайте отсюда https://github.com/CHERTS/esp8266-i2c_24xx32
Новый пример войдет в мой Developer Kit v1.0.4
 

brig

New member
в чипе стоит PLL, можно много разных частот набрать
Откуда такие сведения? В спецификации на ESP8266 такого нет. Поделитесь, пожалуйста, источником информации.
Люди, исследовавшие этот вопрос, говорят только о скоростях, кратно меньших тактовой частоте контроллера...
 

pvvx

Активный участник сообщества
Откуда такие сведения? В спецификации на ESP8266 такого нет. Поделитесь, пожалуйста, источником информации.
Люди, исследовавшие этот вопрос, говорят только о скоростях, кратно меньших тактовой частоте контроллера...
То наверно неправильные люди. По WiFi флешка у меня читается за 500 килобайт в секунду...
 

Andy Korg

Moderator
Команда форума
Откуда такие сведения? В спецификации на ESP8266 такого нет. ...
Лень искать подробности о ядре Xtensa, просто помню, что там стоит полноценный PLL. Но настаивать не буду.

Можно использовать внешнюю память по I2C, как раз последние 2 дня этим и занимаюсь, под руками только AT24C512, так что использую её, написал библиотеку + пример работы, запись-чтение побайтно, запись-чтение блоками....
Интересно было посмотреть, спасибо за код. Вопросец небольшой - Вы используете битбанг для эмуляции шины. Вроде бы в спецификации китайские товарищи писали о поддержке шины I2C, но и все, больше нигде не встречал упоминаний. Может быть Вы видели что-нибудь про аппаратный I2C?
 

brig

New member
А как вы собрались сливать flash в UART на стандартной скорости - годами?
Зачем это? Во-первых, данные можно "генерировать" непосредственно в цикле записи; для тестирования неважно какие данные писать-читать. Во-вторых, как уже сказали ниже, можно делать обмен данными с ПК через канал WI-FI.

При чтении за пределами стандартного размера flash, данные для SDK процедуры, возвращают код ошибки.
Это уже существенно...
Значит, следует либо ждать раскрытия SDK в этой части, либо обращаться к разработчикам с просьбой модифицировать данные процедуры, либо плюнуть на затею расширить флеш-память устройства таким способом (заменой микросхемы).
Хотя... на той же платформе выпускаются модули с флеш-памятью на 16Мбит.

WINBOND-овские имеют больший размер между рядами ног и не садятся, а паять "на соплях" я не люблю.
Да ладно... Там всего-то надо подогнуть ножки на треть миллиметра, так что все культурно, без "соплей".

Все четыре шины данных работают - показана только одна. Т.е. режим "квадро".
Ну вот... очень ценные данные. Спасибо!
 

brig

New member
По WiFi флешка у меня читается за 500 килобайт в секунду...
500 килобайт в секунду - это 4 Мбит в секунду. Не впечатляет на фоне только что обнаруженных 40MHz CLK плюс задействованный режим "квадро" SPI-интерфейса. Что-то не соответствует друг другу в этих сведениях. Ограничения скорости обмена со стороны Wi-Fi здесь быть не должно...
 

hav0k

New member
> print(node.heap())
19472

Всю можно использовать? Если так то выжить можно кое как. Все таки не 4 кб.
 

pvvx

Активный участник сообщества
500 килобайт в секунду - это 4 Мбит в секунду. Не впечатляет на фоне только что обнаруженных 40MHz CLK плюс задействованный режим "квадро" SPI-интерфейса. Что-то не соответствует друг другу в этих сведениях. Ограничения скорости обмена со стороны Wi-Fi здесь быть не должно...
Это с учетом передачи по tcp cо встроенного http сервера. На большее данный чип и SDK не тянут.
Вы же хотели через COM-порт :) По тому помочь вам не могу - я работаю с flash на ESP8266 из Браузера...
Test_speed.gif
 
Последнее редактирование:
Сверху Снизу