Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Увеличение памяти esp-01

Тема в разделе "Железные вопросы по esp8266", создана пользователем SpLab, 6 фев 2015.

  1. SpLab

    SpLab Новичок

    Сообщения:
    19
    Симпатии:
    4
    Подскажите пожалуйста реально ли поменять память на 8 Мб? Есть SPI-flash в корпусе so-8 на 8 Мб, хочу попробовать поставить в модули ESP-01 чтобы себя не ограничивать печальными 512 кб.
    Где у модуля находится bootloader? Если в чипе, то распознает ли он 8 Мб? А если в SPI-flash до достаточно ли клонировать содержимое штатной флешки на новую-большую?
     
  2. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.676
    Симпатии:
    1.282
    Загрузчик в чипе использует встроенную Boot ROM.
    Не все "SPI-flash в корпусе so-8" подходят. Используются QSPI интерфейс и во время работы куски программы постоянно считывается в память (кешируются с flash) кусками на момент выполнения этого куска. Памяти RAM у чипа мало. Область кэширования flash задается в заголовке первого блока прошивки (в первых 16 байтах). Вся информация есть и вы дублируете тему http://esp8266.ru/forum/threads/rasshirenie-flesh-pamjati.36/
     
  3. SpLab

    SpLab Новичок

    Сообщения:
    19
    Симпатии:
    4
    Спасибо, прочитал указанную Вами тему, нашел Ваш spi_flash_add.c/h и Web сервер. Буду разбираться. Честно говоря запутался, но так понял что с родным SDK без шаманства большие flash работать не будут. А не подскажете по Boot ROM какая-то информация есть, может укажете на какую нибудь документацию?
     
  4. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.676
    Симпатии:
    1.282
    Да. Официально поддерживается только 0,5 и 1Mb flash - на них даны загрузчики в SDK. Остальное совсем не гарантированно и неопределенно.
    Я использую любую flash как 512к для кода и всяких настроек, остальная часть - данные. И SDK всегда сообщаю, что у неё 512к flash. Иначе она лезет писать настройки выше 512к. Таким методом всё равно какой размер у Flash (куча хлама SDK работает в своей песочнице - первых 512к и не вылезает и не затирает данные выше) .
    1) Есть загрузчик esptool.py и описание к нему.
    2) Есть файл имен процедур в Boot ROM (в SDK в каталоге ld/eagle.rom.addr.v6.ld) и их адресов.
    На этом пока всё. Вопросы слишком общие и на них ответить в одном посту форума невозможно - сами разбирайтесь и конкретизируйте - возможно кто и ответит c дополнениями . :)
     
  5. SpLab

    SpLab Новичок

    Сообщения:
    19
    Симпатии:
    4
    Спасибо за правильно заданный вектор моего слепого тыканья :) Дизасемблировал BootFlash и загрузчик boot.bin - разбираюсь. Файл с адресами процедур eagle.rom.addr.v6.ld в этом огромное подспорье. Попутно изучаю архитектуру ядра и систему команд Xtensa. Да уж, это посложнее чем Cortex-M, особенно в части кэша. Так и не понял реализовали ли в ESP MMU. Но это не суть... Возникла пара более конкретных вопросов:
    Анализ доступной информации не дает повода усомниться в том, что на уровне SDK не поддерживаются SpiFlash отличные от 512кб. Заголовок образа прошивки предполагает как минимум 5 возможных объемов: 256 KB, 512 KB, 1024 KB, 2048 KB, 4096 KB. Загрузчик boot.bin также поддерживает эти же объемы. Так же есть документ ESP8266_IOT_Flash_read_write_guide_v0.2.pdf в котором не накладываются ограничения на объем Spiflash, оговаривая лишь что SystemDataArea должна быть расположена строго в последних 4-х секторах SpiFlash.
    Назначение и возможности кода InternalROM (BootROM) пока изучаю. Вы говорили о том, что именно "BIOS не поддерживает flash более 524288 байт". Действительно проблема должна быть именно в драйвере SpiFlash, который очевидно должен находиться либо в InternalROM, либо в первом секторе SpiFlash и очевидно должен поддерживать лишь предопределенный набор чипов, ID которых в нем и должны быть определены. Т.о. теоретически если правильно собрать бинарный образ прошивки, корректно настроив заголовок и поместив SystemDataArea в конец, а также использовать SpiFlash поддерживаемую в драйвере SpiFlash, то все должно корректно работать (ну в пределах кривости самого SDK).
    По какой информации Вы сделали вывод о том что именно код в InternalROM не поддерживает большие объемы SpiFlash ?
    InternalROM это OTP память или его можно писать?
    Частота процессора 80 или 160 МГц и можно ли ее задать через SDK?
    Пожалуй Вы правы и действительно безопаснее так делать, тем более что этого объема в большинстве случаев достаточно для кода, а данные сваливать выше 512 кб. Просто раз уж начал курить тему, то нужно разобраться. Тем более что теоретически SDK действительно лезет выше этого объема, но теоретически всеже только в последние 4 сектора.
     
  6. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.676
    Симпатии:
    1.282
    А какие гарантии этого? Я пробовал указывать 16Мегайт, как размер flash. При этом область записи смещается на последние сектора, но кещируемая область остается всего 1Мег. SDK перераспределяет и память, при старте. Функции работы с Flash в ROM работают на 16Мег, а использовать более меньшую flash по ценовой категории нет смысла - разница в центах. По этому выбор распределен между 512к и 16мег. При этом (16M Winbond) общее потребление падает и увеличивается быстродействие. Влияет скорость произвольной выборки секторов для кеша (и скорость записи страниц - но это менее актуально).
    Скорее всего это масочная или одноразовая flash.
    Примеры же даны.
    Код (Text):
    1.  
    2.  
    3.  
    4. #ifdef USE_CPU_SPEED
    5. #if    USE_CPU_SPEED > 80
    6.     REG_SET_BIT(0x3ff00014, BIT(0));
    7.     os_update_cpu_frequency(160);
    8. #else
    9.     REG_CLR_BIT(0x3ff00014, BIT(0));
    10.     os_update_cpu_frequency(80);
    11. #endif
    12.  
    Но SDK периодически сбрасывает 160MHz на 80.
    Работа с flash показана в Web_base\app\web\flash.c моей свалки http://esp8266.ru/forum/threads/razrabotka-biblioteki-malogo-webservera-na-esp8266.56/
    Пока, если действовать так, как там "накорябоно", то всё успешно.
    Тут дело в том, что пока ни одно описание или пожелание, исходящее от Espressif, не совпало с реальностью :) Кроме мелких исключений, если остальное не повлияет и вы пишите программу уровня "HelloWorld" :)
    От версии SDK всё гуляет как угодно.

    PS: Если хотите разобраться и оказать помощь другим, тогда почините esptool.py – в текущих версиях она стирает большую область, чем пишет. Там что-то неверно в параметрах при обращении к процедуре SPIEraseArea(???), находящуюся в ROM чипа…
     
    Последнее редактирование: 9 фев 2015
  7. SpLab

    SpLab Новичок

    Сообщения:
    19
    Симпатии:
    4
    В общем ясно, что все SDK очень сырое и ничего не гарантируется и лучше пока работать с тем что проверено, т.е. использовать Ваш вариант эмуляции 512 кБ. В остальном, по ходу разбора имеющихся сведений возникло множество вопросов, которые уже не имеют отношения непосредственно к теме увеличения памяти. Буду искать ответы в соответствующих ветках форумов.
    Я потихоньку реверсю интересующие меня функции InternalROM, ну могу за одно и попытаться приложить усилия и к этой проблеме если Вы опишите ее подробнее или дадите ссылку на ее описание/обсуждение.
     
  8. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    8.676
    Симпатии:
    1.282
    Это программа записи прошивки используемая в Unofficial Developer Kit.
    Описание https://github.com/themadinventor/esptool
    https://github.com/themadinventor/esptool/blob/master/esptool.py строка ~188, где формируются параметры запроса (и они правильные - делал распечатку, а что там глубже не разбирал).
    При записи файла прошивки она стирает размер значительно больший, чем размер записываемого файла. Т.е. затирает большую область секторов за адресами записи файла в flash и она не кратна страницам стирания, а кратна размерам сектора. Пример дан: при записи файла размером 33456 байт в начало flash, стирается область в 73728 байт. Т.е. явная ошибка и для её исправления требуется полный анализ процедуры SPIEraseArea в InternalROM.
    Не проявляется, если записывать файлы последовательно (они пишутся в область, где уже стерто, с повторным стиранием перед записью :) ) и последние файлы, к концу размера flash, имеют малый размер и не пишутся в самый конец flash, чтобы по кругу не затереть начало flash (так и решена пока). Размер стирания зависит от размера файла - у малых файлов размер области стирания за областью записи тоже выходит малым. Описания и обсуждения нет, по причине того, что очень мало людей пишет что-то на ESp8266.
     
    Последнее редактирование: 10 фев 2015

Поделиться этой страницей