Спасибо за правильно заданный вектор моего слепого тыканья
Дизасемблировал BootFlash и загрузчик boot.bin - разбираюсь. Файл с адресами процедур eagle.rom.addr.v6.ld в этом огромное подспорье. Попутно изучаю архитектуру ядра и систему команд Xtensa. Да уж, это посложнее чем Cortex-M, особенно в части кэша. Так и не понял реализовали ли в ESP MMU. Но это не суть... Возникла пара более конкретных вопросов:
Да. Официально поддерживается только 0,5 и 1Mb flash - на них даны загрузчики в SDK. Остальное совсем не гарантированно и неопределенно.
Анализ доступной информации не дает повода усомниться в том, что на уровне 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?
Я использую любую flash как 512к для кода и всяких настроек, остальная часть - данные. И SDK всегда сообщаю, что у неё 512к flash. Иначе она лезет писать настройки выше 512к. Таким методом всё равно какой размер у Flash (куча хлама SDK работает в своей песочнице - первых 512к и не вылезает и не затирает данные выше) .
Пожалуй Вы правы и действительно безопаснее так делать, тем более что этого объема в большинстве случаев достаточно для кода, а данные сваливать выше 512 кб. Просто раз уж начал курить тему, то нужно разобраться. Тем более что теоретически SDK действительно лезет выше этого объема, но теоретически всеже только в последние 4 сектора.