ESP8266のFlashチップ


ESP8266モジュールはいずれもESP8266EXチップ+Flashメモリーで構成されています。
FlashメモリーのチップID(16進数の6文字)は以下のスケッチで調べることができます。
/*
 * Chip ID & Chip Size get
 */

void setup() {
  delay(1000);
  Serial.begin(115200);
}

void loop() {
  uint32_t chipId;
  uint32_t chipSize;
  uint32_t chipSizeK;
  int chipSizeM;
    /*
     * Chip ID
     * 00 - always 00 (Chip ID use only 3 byte)
     * 17 - 2^xx is size in Byte
     * 40 - memory Type
     * C8 - manufacturer ID
     */
  chipId = ESP.getFlashChipId();
  Serial.print("getFlashChipId=");
  Serial.print(chipId,HEX);
  delay(100);
 
  chipSize = ESP.getFlashChipSizeByChipId();
  chipSizeK = chipSize/1024;
  chipSizeM = chipSizeK/1024;
  Serial.print(" getFlashChipSizeByChipId=");
  Serial.print(chipSize);
  Serial.print("Bytes[");
  Serial.print(chipSizeM);
  Serial.print("MBytes]");
  delay(100);
 
  chipSize = ESP.getFlashChipRealSize();
  chipSizeK = chipSize/1024;
  chipSizeM = chipSizeK/1024;
  Serial.print(" getFlashChipRealSiz=");
  Serial.print(chipSize);
  Serial.print("Bytes[");
  Serial.print(chipSizeM);
  Serial.println("MBytes]");
  delay(1000);
}

チップIDの最初の2文字が容量(2のXX乗を示す16進数 14=1MByte 15=2MByte 16=4MByte 17=8MByte)
次の2文字がチップのシリーズ(モデル)番号
最後の2文字がチップベンダーです。
こ ちらを参照すれば、チップIDから容量、シリーズ番号、チップベンダーが分かります。
また、こ ちらではチップベンダー、シリーズ番号、容量の順に並んでいます

また、各チップベンダーが公開しているデータシートには、以下のように表記されていることがあります。
M7-M0:ベンダーコード(MANUFACTURER ID)
ID15-ID0:シリーズ番号+容量

例えば、Winbond W25Q32の場合は以下の様に表記されています。
M7-M0:EFH
ID15-ID0:4016h(W25Qシリーズの32MBit版)

ESP-01
getFlashChipId=1440C8 getFlashChipSizeByChipId=1048576Bytes[1MBytes] getFlashChipRealSiz=1048576Bytes[1MBytes]

ESP-01S(2種類ありました)
getFlashChipId=1440EF getFlashChipSizeByChipId=1048576Bytes[1MBytes] getFlashChipRealSiz=1048576Bytes[1MBytes]
getFlashChipId=146085 getFlashChipSizeByChipId=0Bytes[0MBytes] getFlashChipRealSiz=1048576Bytes[1MBytes]

ESP-07(AI-Thinker)
getFlashChipId=1440E0 getFlashChipSizeByChipId=1048576Bytes[1MBytes] getFlashChipRealSiz=1048576Bytes[1MBytes]

ESP-07(DIY MORE)
getFlashChipId=146085 getFlashChipSizeByChipId=0Bytes[0MBytes] getFlashChipRealSiz=1048576Bytes[1MBytes]

ESP-07S
getFlashChipId=1640EF getFlashChipSizeByChipId=4194304Bytes[4MBytes] getFlashChipRealSiz=4194304Bytes[4MBytes]

ESP-11
getFlashChipId=1440E0 getFlashChipSizeByChipId=1048576Bytes[1MBytes] getFlashChipRealSiz=1048576Bytes[1MBytes]

ESP-12E(AI-Thinker)
getFlashChipId=1640EF getFlashChipSizeByChipId=4194304Bytes[4MBytes] getFlashChipRealSiz=4194304Bytes[4MBytes]

ESP-12E(DOIT AM)
getFlashChipId=16301C getFlashChipSizeByChipId=0Bytes[0MBytes] getFlashChipRealSiz=4194304Bytes[4MBytes]

ESP-12F(AI-Thinker)
getFlashChipId=1640E0 getFlashChipSizeByChipId=4194304Bytes[4MBytes] getFlashChipRealSiz=4194304Bytes[4MBytes]

ESP-12F(DOIT AM)
getFlashChipId=164020 getFlashChipSizeByChipId=0Bytes[0MBytes] getFlashChipRealSiz=4194304Bytes[4MBytes]

ESP-12S(2種類ありました)
getFlashChipId=1640EF getFlashChipSizeByChipId=4194304Bytes[4MBytes] getFlashChipRealSiz=4194304Bytes[4MBytes]
getFlashChipId=16301C getFlashChipSizeByChipId=0Bytes[0MBytes] getFlashChipRealSiz=4194304Bytes[4MBytes]

ESP-12L
getFlashChipId=164020 getFlashChipSizeByChipId=4194304Bytes[4MBytes] getFlashChipRealSiz=4194304Bytes[4MBytes]

ESP-13
getFlashChipId=1640E0 getFlashChipSizeByChipId=4194304Bytes[4MBytes] getFlashChipRealSiz=4194304Bytes[4MBytes]

ESP-100
getFlashChipId=1740EF getFlashChipSizeByChipId=0Bytes[0MBytes] getFlashChipRealSiz=8388608Bytes[8MBytes]

ESP-201
getFlashChipId=1440E0 getFlashChipSizeByChipId=1048576Bytes[1MBytes] getFlashChipRealSiz=1048576Bytes[1MBytes]

ESP-202
getFlashChipId=1640C8 getFlashChipSizeByChipId=4194304Bytes[4MBytes] getFlashChipRealSiz=4194304Bytes[4MBytes]

ESP-WROOM-02(4MBytes版)
getFlashChipId=1640A1 getFlashChipSizeByChipId=0Bytes[0MBytes] getFlashChipRealSiz=4194304Bytes[4MBytes]

ESP-WROOM-02(2MBytes版) 何種類かあるようです
getFlashChipId=1540EF getFlashChipSizeByChipId=2097152Bytes[2MBytes] getFlashChipRealSiz=2097152Bytes[2MBytes]
getFlashChipId=1540C8 getFlashChipSizeByChipId=2097152Bytes[2MBytes] getFlashChipRealSiz=2097152Bytes[2MBytes]

ESP-WROOM-02D
getFlashChipId=1540A1 getFlashChipSizeByChipId=0Bytes[0MBytes] getFlashChipRealSiz=2097152Bytes[2MBytes]

ESP-100(DOIT AM)
getFlashChipId=1740EF getFlashChipSizeByChipId=0Bytes[0MBytes] getFlashChipRealSiz=8388608Bytes[8MBytes]


アンテナが付属するESPシリーズのFlashメモリーのチップIDを調べてみました。
ESP-08のようにGPIOはたくさんあっても、アンテナが無いものはちょっと手が出せません。

ESP-WROOM-02は2016年ごろに突然仕様が変わり4M→2Mになりました。
未確認ですが2018年時点で4M版もまだ入手できるようです。
モデル ベンダー チップID チップベンダー チップ型番 チップ容量[MByte]
ESP-01 AI-THINKER 0x1440C8 GigaDevice GD25Q80B 1M
ESP-01S AI-THINKER 0x1440EF Winbond W25Q80 1M
AI-THINKER 0x146085 Puya Semiconductor P25Q80H 1M
ESP-07 AI-THINKER 0x1440E0 BergMicro BG25Q80 1M
DIY MORE 0x146085 Puya Semiconductor P25Q80H 1M
ESP-07S AI-THINKER 0x1640EF Winbond W25Q32 4M
ESP-11 AI-THINKER 0x1440E0 BergMicro BG25Q80 1M
ESP-12 AI-THINKER 0x1640EF Winbond W25Q32 4M
ESP-12E AI-THINKER 0x1640EF Winbond W25Q32 4M
DOIT AM 0x16301C EON Silicon Devices EN25Q32B 4M
ESP-12F AI-THINKER 0x1640E0 BergMicro BG25Q32 4M
DOIT AM 0x164020 XMC
XM25QH32B 4M
ESP-12S AI-THINKER 0x1640EF Winbond W25Q32 4M
AI-THINKER 0x16301C EON Silicon Devices EN25Q32B 4M
ESP-12L AI-THINKER 0x164020 XMC XM25QH32B 4M
ESP-13 AI-THINKER 0x1640E0 BergMicro BG25Q32 4M
ESP-100 DOIT.AM 0x1740EF Winbond W25Q64 8M
ESP-201 ??? 0x1440E0 BergMicro BG25Q80 1M
ESP-202 YISON 0x1640C8 GigaDevice GD25Q32 4M
ESP-WROOM-02 ESPRESSIF 0x1640A1 Shanghai Fudan Microelectronics Group Co.Ltd.
FM25Q32
4M
ESPRESSIF 0x1540EF Winbond W25Q16 2M
ESPRESSIF 0x1540C8 GigaDevice GD25Q16 2M
ESP-WROOM-02D ESPRESSIF 0x1540A1 Shanghai Fudan Microelectronics Group Co.Ltd. FM25Q16 2M
ESP-WROOM-02U ESPRESSIF 0x1540A1 Shanghai Fudan Microelectronics Group Co.Ltd. FM25Q16 2M



余談ですが、WinbondのW25Qシリー ズには以下の種類があります。
256MBit W25Q256
128MBit W25Q128
64MBit W25Q64
32MBit W25Q32
16MBit W25Q16
8MBit W25Q80
W25Q80というコードは80MBit(10MByte)と勘違いしそうなので、W25Q08の方が分かりやすいと思います。



ESP.getFlashChipId()
ESP.getFlashChipSizeByChipId()
ESP.getFlashChipRealSize()

これらの関数はEspClassと呼ばれていて、こ ちらにClass Referenceがあります。

最近、ESP.getFullVersion()とESP.getCoreVersion()のAPIが有ることが分かりました。
Class Referenceには載っていないAPIです。
void setup() {
  Serial.begin(115200);
  Serial.println();
  Serial.print("ESP.getFullVersion=");
  Serial.print(ESP.getFullVersion());
  Serial.println();
  Serial.print("ESP.getCoreVersion=");
  Serial.print(ESP.getCoreVersion());
  Serial.println();
}

void loop() {
}

このスケッチを実行すると、以下の様に表示されます。
ESP.getFullVersion=SDK:2.2.2-dev(38a443e)/Core:3.0.2=30002000/lwIP:STABLE-2_1_2_RELEASE/glue:1.2-48-g7421258/BearSSL:6105635
ESP.getCoreVersion=3.0.2

BearSSLはSSL/TSLのライブラリで、こちらにページが有り ます。
glueはどうもLWIP-V1とLWIP-V2の橋渡しを行うライブラリ(Link Layer)の様で、こちらに解説 が有ります。