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

Определение размера памяти ESP8266

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

Метки:
  1. Agasfer

    Agasfer Новичок

    Сообщения:
    3
    Симпатии:
    1
    Вроде часто спрашивают, как определить размер установленной памяти.
    Нашел в дебрях инета скетч для Arduino. При старте ESP8266 пишет в терминал размер памяти в Байтах(!)

    Код (раскрыть)
    Код (Text):
    1.  
    2. extern "C" {
    3. #include "c_types.h"
    4. #include "ets_sys.h"
    5. #include "os_type.h"
    6. #include "osapi.h"
    7. #include "spi_flash.h"
    8. }
    9.  
    10. size_t fs_size()
    11. {
    12. // returns the flash chip's size, in BYTES
    13. uint32_t id = spi_flash_get_id();
    14. uint8_t mfgr_id = id & 0xff;
    15. uint8_t type_id = (id >> 8) & 0xff; // not relevant for size calculation
    16. uint8_t size_id = (id >> 16) & 0xff; // lucky for us, WinBond ID's their chips as a form that lets us calculate the size
    17. return 1 << size_id;
    18. }
    19. void setup() {
    20.   Serial.begin(9600);
    21.   Serial.print("Flash Size = ");
    22.   Serial.println(fs_size());
    23. }
    24.  
     
    Avton нравится это.
  2. tolyan23

    tolyan23 Новичок

    Сообщения:
    14
    Симпатии:
    2
    некоторые модули при старте сами пишут размер свой памяти. достаточно открыть терминал на скорости 76000 (да это не опечатка скорость нестандартная) я использую doclight терминал.
    При запуске модуль пишет
    ets Jan 8 2013,rst cause:2, boot mode:(3,6)<CR><LF>
    <CR><LF>
    load 0x40100000, len 1396, room 16 <CR><LF>
    tail 4<CR><LF>
    chksum 0x89<CR><LF>
    load 0x3ffe8000, len 776, room 4 <CR><LF>
    tail 4<CR><LF>
    chksum 0xe8<CR><LF>
    load 0x3ffe8308, len 540, room 4 <CR><LF>
    tail 8<CR><LF>
    chksum 0xc0<CR><LF>
    csum 0xc0<CR><LF>
    <CR><LF>
    2nd boot version : 1.4(b1)<CR><LF>
    SPI Speed : 40MHz<CR><LF>
    SPI Mode : DIO<CR><LF>
    SPI Flash Size & Map: 8Mbit(512KB+512KB)<CR><LF>
    jump to run user1 @ 1000<CR><LF>
    (однако более старый модуль остановился на строчке csum 0xc0<CR><LF> )
     
    Andr нравится это.
  3. Виктор59

    Виктор59 Новичок

    Сообщения:
    22
    Симпатии:
    0
    Попробуй ESPlorer там есть кнопка chip info. она показывает реальный размер памяти
     
  4. casius

    casius Новичок

    Сообщения:
    26
    Симпатии:
    0
    Вот у меня валялись два модуля ESP-07 куплены в начале 2015 года. Решил посмотреть их память.
    Пользуюсь программой ESPlorer v0.2.0-rc2.
    К компьютеру подключаю через обычный USB-TTL переходник. Прошивка на ESP "базовая" Version:0.9.2.4
    Не получается узнать количество памяти. Модуль коннектится нормально. На нажатие кнопки "chip info" пишет:
    ready
    print(node.chipid())

    wrong syntax

    ERROR

    Как же мне узнать кол-во установленной памяти?
     
  5. vad7

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

    Сообщения:
    398
    Симпатии:
    48
  6. casius

    casius Новичок

    Сообщения:
    26
    Симпатии:
    0
    В общем, прешил на прошивку AT21SDK95-2015-01-24. Запустил ESPlorer, показывает следующее:
    wdt reset
    load 0x40100000, len 816, room 16
    tail 0
    chksum 0x8d
    load 0x3ffe8000, len 788, room 8
    tail 12
    chksum 0xcf
    ho 0 tail 12 room 4
    load 0x3ffe8314, len 288, room 12
    tail 4
    chksum 0xcf
    csum 0xcf

    2nd boot version : 1.2
    SPI Speed : 40MHz
    SPI Mode : QIO
    SPI Flash Size : 4Mbit
    jump to run user1

    Я так понимаю, что памяти у моего модуля: 512 кбайт(4 мегабита)?
     

    Вложения:

  7. vad7

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

    Сообщения:
    398
    Симпатии:
    48
    Может и врать, где-то читал, что при загрузке у кого-то выдавалось стандартное значение при большей памяти.
    Хотя, если судить по модели и дате покупки модуля, врядли в нем больше 512к.
     
  8. dimnsk

    dimnsk Новичок

    Сообщения:
    23
    Симпатии:
    2
    Для Arduino IDE команда
    ESP.getFlashChipSize()
     
  9. dimnsk

    dimnsk Новичок

    Сообщения:
    23
    Симпатии:
    2
  10. Mоnk

    Mоnk Читатель

    Сообщения:
    130
    Симпатии:
    8
    С этой командой непонятки.
    Если в Arduino IDE указать Flash Size 512К или 1М получаю после прошивки 524288 и 1048576 соответственно.
    А эскиз из первого поста и ESPFlashDownloadTool_v3.3.6 показывают 4194304 и 32Mbit соответственно.
     
    zalex7777 нравится это.
  11. Mоnk

    Mоnk Читатель

    Сообщения:
    130
    Симпатии:
    8
    Есть еще интересная команда
    ESP.getFlashChipRealSize()
    Вроде работает.
     
  12. lookingooder

    lookingooder Читатель

    Сообщения:
    27
    Симпатии:
    6
    Всем доброго дня. Подниму топик.
    Я заказал на Алиэкспресс чипы памяти Winbond W25Q32FVSSIG для апгрейда Sonoff Basic до 4GB. Но продавец прислал чипы с маркировкой SST25VF64C (8GB) и я искал способ проверить работу и реальный размер памяти. ESP.getFlashChipRealSize() возвращает 2048 байт .
    Нашел в сети пример для SPIFFS и на его основе написал программу, которая создает файлы по 100kB в SPIFFS до тех пор пока не выдаст ошибку "невозможно создать файл". Это показывает приблизительный размер памяти. Оказалось, что размер моих чипов очень похож на 8GB.
    Вот програмка - весь вывод отдает в Serial. Не уверен на 100%, что все правильно, делал по-быстрому, т.к. нужно закрывать заказ. Но проверял на нескольких разных ESP платах от 1 до 16GB - результаты похожи на правду. И интересные результаты - первые файлы записываются по 3-4 сек, последние - до 3-х и больше минут (на 80 MHz). Как это объяснить?

    Код (C):
    1. //Based on example from
    2. // https://circuits4you.com/2018/01/31/example-of-esp8266-flash-file-system-spiffs/
    3.  
    4.  
    5. // FLASH MODE: DOUT
    6.  
    7.  
    8. /*
    9. * ESP8266 SPIFFS Basic Reading and Writing File
    10. *
    11. */
    12.  
    13. #include <ESP8266WiFi.h>
    14. #include <FS.h>   //Include File System Headers
    15.  
    16. #define FILE_SIZE 100000    // change to desired value
    17. #define FILES_NUM 200            // change to desired value
    18. char filename[16] = "/file";
    19. char last_filename[16];
    20. char fileext[5] = ".txt";
    21. char str[11];
    22. int i;
    23. int start;
    24. int sec0;
    25. int sec1;
    26.  
    27. void setup()
    28. {
    29.   delay(1000);
    30.   Serial.begin(115200);
    31.   delay(1000);
    32.   Serial.println();
    33.  
    34.    Serial.println("***************************"); //  returns a String containing the core version
    35.    Serial.println("*** ESP8266 SPIFFS TEST ***"); //  returns a String containing the core version
    36.    Serial.println("***************************"); //  returns a String containing the core version
    37.  
    38.   Serial.printf("\nESP CHIP ID %08X\n", ESP.getChipId());
    39.   Serial.printf("\nFLASH CHIP ID %08X\n\n", ESP.getFlashChipId());
    40.  
    41.    Serial.print("ESP.getCoreVersion= ");
    42.    Serial.println(ESP.getCoreVersion()); //  returns a String containing the core version
    43.    Serial.print("ESP.getSdkVersion= ");
    44.    Serial.println(ESP.getSdkVersion());  // returns the SDK version as a char.
    45.    Serial.print("ESP.getFreeHeap()="); // returns the free heap size.
    46.    Serial.println(ESP.getFreeHeap()); // returns the free heap size.
    47.    Serial.printf("ESP.getCpuFreqMHz()="); // returns the CPU frequency in MHz as an unsigned 8-bit integer.
    48.    Serial.println(ESP.getCpuFreqMHz()); // returns the CPU frequency in MHz as an unsigned 8-bit integer.
    49.    Serial.print("ESP.getSketchSize()="); // returns the size of the current sketch as an unsigned 32-bit integer.
    50.    Serial.println(ESP.getSketchSize()); // returns the size of the current sketch as an unsigned 32-bit integer.
    51.    Serial.print("ESP.getFreeSketchSpace()="); // returns the free sketch space as an unsigned 32-bit integer.
    52.    Serial.println(ESP.getFreeSketchSpace()); // returns the free sketch space as an unsigned 32-bit integer.
    53.    Serial.print("ESP.getSketchMD5()="); //returns a lowercase String containing the MD5 of the current sketch.
    54.    Serial.println(ESP.getSketchMD5()); //returns a lowercase String containing the MD5 of the current sketch.
    55.    Serial.print("ESP.getFlashChipId()="); //returns the flash chip ID as a 32-bit integer.
    56.    Serial.print("ESP.getFlashChipSize()="); //returns the flash chip size, in bytes, as seen by the SDK (may be less than actual size).
    57.    Serial.println(ESP.getFlashChipSize()); //returns the flash chip size, in bytes, as seen by the SDK (may be less than actual size).
    58.    Serial.print("ESP.getFlashChipRealSize()="); //returns the real chip size, in bytes, based on the flash chip ID.
    59.    Serial.println(ESP.getFlashChipRealSize()); //returns the real chip size, in bytes, based on the flash chip ID.
    60.    Serial.print("ESP.getFlashChipSpeed()="); // returns the flash chip frequency, in Hz.
    61.    Serial.println(ESP.getFlashChipSpeed()); // returns the flash chip frequency, in Hz.
    62.    Serial.print("ESP.getCycleCount()="); //returns the cpu instruction cycle count since start as an unsigned 32-bit. This is
    63.    Serial.println(ESP.getCycleCount()); //returns the cpu instruction cycle count since start as an unsigned 32-bit. This is
    64.  
    65.  
    66.  
    67.   //Initialize File System
    68.   Serial.println("\n***** Init (Can be up to 30 sec or more...)");
    69.     sec0 = millis() / 1000;
    70.   if(SPIFFS.begin())
    71.   {
    72.         Serial.printf("*SPIFFS Initialize....ok. %03d sec\n", (millis() / 1000) - sec0);
    73.   }
    74.   else
    75.   {
    76.         Serial.printf("*SPIFFS Initialization...failed. %03d sec\n", (millis() / 1000) - sec0);
    77.   }
    78.  
    79.   //Format File System
    80.   Serial.println("\n***** Format (Can be long time too...)");
    81.     sec0 = millis() / 1000;
    82.   if(SPIFFS.format())
    83.   {
    84.         Serial.printf("*File System Formatted. %03d sec\n", (millis() / 1000) - sec0);
    85.   }
    86.   else
    87.   {
    88.         Serial.printf("*File System Formatting Error. %03d sec\n", (millis() / 1000) - sec0);
    89.   }
    90.  
    91.   //Create New File And Write Data to It
    92.   //w=Write Open file for writing
    93.   Serial.println("\n***** Write");
    94.  
    95.     for(int i1 = 1; i1 <= FILES_NUM; i1++)
    96.     {
    97.         sec0 = millis() / 1000;
    98.         snprintf(filename, 10, "/FILE_%03d%s", i1, fileext);
    99.         File f = SPIFFS.open(filename, "w");
    100.  
    101.         if (!f) {
    102.             Serial.printf("%s open failed. %03d sec\n", filename,  (millis() / 1000) - sec0);
    103.         }
    104.         else
    105.         {
    106.             //Write data to file
    107.             Serial.printf("Writing Data to %s\n", filename);
    108.             for(int i2=1; i2 <= (FILE_SIZE / 10); i2++)
    109.                 {
    110.                     snprintf(str, 11, "%03d_%05d ", i1, i2);
    111.                     f.print(str);
    112.                 }
    113.             f.close();  //Close file
    114.             Serial.printf("%s. %03d sec\n", str, (millis() / 1000) - sec0);
    115.             strcpy(last_filename, filename);        }
    116.     }
    117.  
    118.  
    119.   //Read File data
    120.       Serial.println("\n***** Read last written file");
    121.   File f = SPIFFS.open(last_filename, "r");
    122.  
    123.   if (!f) {
    124.             Serial.printf("%s open failed\n", last_filename);
    125.   }
    126.   else
    127.   {
    128.             Serial.printf("*Reading Data from %s\n", last_filename);
    129.       //Data from file
    130.         sec0 = millis() / 1000;
    131.       for(i=0;i<f.size();i++) //Read upto complete file size
    132.       {
    133.         Serial.print((char)f.read());
    134.       }
    135.       f.close();  //Close file
    136.             Serial.printf("\n*%s Closed. %03d sec\n", last_filename, (millis() / 1000) - sec0);
    137.   }
    138.  
    139.     Serial.printf("\n*****Finished.\nTotal time: %03d sec\n", (millis() / 1000) - start);
    140.   delay(5000);
    141. }
    142.  
    143. void loop()
    144. {
    145. }
     
  13. futsker

    futsker Новичок

    Сообщения:
    4
    Симпатии:
    0
    не, что-то не так. На моей LoLin v3 установлено 4Мбайта
    Программа показала
    ESP.getFlashChipId()=ESP.getFlashChipSize()=4194304
    ESP.getFlashChipRealSize()=4194304
    И при этом записала всего 9 файлов по 100Кбайт
     
  14. nikolz

    nikolz Гуру

    Сообщения:
    4.940
    Симпатии:
    454
    возьмите прогу разработчика ESP8266 DOWNLOAD TOOL
    она все вам покажет. в окошке DETECTED INFO
     
    futsker нравится это.
  15. Mоnk

    Mоnk Читатель

    Сообщения:
    130
    Симпатии:
    8
    А что у Вас в АрдуиноИДЕ в пункте "Инструменты-FlashSize" прописано?
     
  16. futsker

    futsker Новичок

    Сообщения:
    4
    Симпатии:
    0
    а вот здесь все правильно показала - QUAD 32Mbit
     
  17. futsker

    futsker Новичок

    Сообщения:
    4
    Симпатии:
    0
    4M
     
  18. Mоnk

    Mоnk Читатель

    Сообщения:
    130
    Симпатии:
    8
    SPIFFS - ?
     
  19. futsker

    futsker Новичок

    Сообщения:
    4
    Симпатии:
    0
    3M
     
  20. Mоnk

    Mоnk Читатель

    Сообщения:
    130
    Симпатии:
    8
    Тогда действительно не понятно, почему только 9 по 100...
     

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