# 讓 MicroPython 完全釋放 ESP32-S3 N16R8 的威力
# # 記憶體和存儲
# 1. **內存:**
# - 512 KB SRAM
# - 8 MB PSRAM(Octal SPI)
# 2. **閃存:**
# - 16MB(Quad SPI)
#https://dev.to/codemee/rang-micropython-wan-quan-shi-fang-esp32-s3-n16r8-de-wei-li-5d3b
'''
#used ...ESP32_GENERIC_S3-20241129-v1.24.1.bin
# 這是標準的 ESP32-S3 固件,適用於未配備外部 SPI RAM 的模組。
SRAM 可用內存: 212.9844 Kbytes
SRAM 已分配內存: 1.53125 Kbytes
SRAM 總內存: 214.5156 Kbytes
Flash 大小: 8192.0 Kbytes
'''
#----------------------------------------------------
'''
#used ...ESP32_GENERIC_S3-SPIRAM_OCT-20241129-v1.24.1.bin
# 此固件包含對外部 SPI RAM 的支援,允許 ESP32-S3 使用額外的記憶體。
SRAM 可用內存: 8125.0 Kbytes
SRAM 已分配內存: 1.515625 Kbytes
SRAM 總內存: 8126.516 Kbytes
Flash 大小: 8192.0 Kbytes
可以看到雖然 flash 還是只有 8MB, 但是可用的記憶體已經暴增到接近 8MB 了,
這表示 psram 已經啟用了
'''
'''
#------------------------------------------------------
解放 flash
最後要再找回來的就是少掉的 8MB flash, 這主要是因為原本的韌體就是被編譯成 8MB 的空間,
必須要把韌體重新延伸為 16MB,
還好, 已經有善心人心幫我們使用 Python 做好了工具--mp-image-tool-esp32,
安裝方式如下:
pip install mp-image-tool-esp32
system terminal ---DOS
mp-image-tool-esp32 -f 16M D:\Dropbox\MicroPython_Esp32\ESP32_S3\ESP32_GENERIC_S3-SPIRAM_OCT-20241129-v1.24.1.bin
@@@ ESP32_GENERIC_S3-SPIRAM_OCT-20241129-v1.24.1.bin-->
ESP32_GENERIC_S3-SPIRAM_OCT-20241129-v1.24.1-16MB.bin
#used ...ESP32_GENERIC_S3-SPIRAM_OCT-20241129-v1.24.1-16MB.bin
# # SRAM 可用內存: 8124.984 Kbytes
# # SRAM 已分配內存: 1.53125 Kbytes
# # SRAM 總內存: 8126.516 Kbytes
# # Flash 大小: 16384.0 Kbytes
'''
'''
wokwi esp32
{
"type": "wokwi-esp32-devkit-v1",
"id": "esp",
"top": -33.7,
"left": 23.8,
"attrs": { "env": "micropython-20231005-v1.21.0" }
}
RAM 可用內存: 169.0313 Kbytes
SRAM 已分配內存: 1.484375 Kbytes
SRAM 總內存: 170.5156 Kbytes
Flash 大小: 4096.0 Kbytes
MicroPython v1.21.0 on 2023-10-05; Generic ESP32 module with ESP32
'''
'''
{
"type": "board-esp32-s3-devkitc-1",
"id": "esp",
"top": 4,
"left": -1.2,
"attrs": { "env": "micropython-20231227-v1.22.0", "flashSize": "16" }
}
SRAM 可用內存: 4028.766 Kbytes
SRAM 已分配內存: 1.75 Kbytes
SRAM 總內存: 4030.516 Kbytes
Flash 大小: 16384.0 Kbytes
文件系統資訊:
文件總存儲空間: 6.0 Mbytes
文件可用存儲空間: 5.988281 Mbytes
'''
import gc
import esp
# 強制進行垃圾回收
gc.collect()
# 顯示SRAM記憶體資訊
free_memory = gc.mem_free()/1024 # 可用內存
used_memory = gc.mem_alloc()/1024 # 已分配的內存
print("SRAM 可用內存:", free_memory, "Kbytes")
print("SRAM 已分配內存:", used_memory, "Kbytes")
print("SRAM 總內存:", free_memory + used_memory, "Kbytes")
# 顯示晶片詳細資訊
esp_info = esp.flash_size()/1024 # 顯示閃存大小
print("Flash 大小:", esp_info, "Kbytes")
# 檢查文件系統的存儲空間
fs_stat = os.statvfs("/") # 獲取根目錄的文件系統統計數據
print("文件系統資訊:") # 文件系統資訊
print(f"文件總存儲空間: {fs_stat[0] * fs_stat[2]/(1024*1024)} Mbytes") # 總存儲空間
print(f"文件可用存儲空間: {fs_stat[0] * fs_stat[3]/(1024*1024)} Mbytes") # 可用存儲空間