DEV Community

Cover image for 讓 MicroPython 完全釋放 ESP32-S3 N16R8 的威力
codemee
codemee

Posted on

讓 MicroPython 完全釋放 ESP32-S3 N16R8 的威力

ESP32-S3 N16R8 的開發板搭載有 16MB 的 flash 和 8MB 的 psram, 不過如果你使用 MicroPython 網站上的 bin 檔, 會得到以下的結果:

>>> import esp
>>> esp.flash_size()
8388608
>>> import micropython
>>> micropython.mem_info()
stack: 736 out of 15360
GC: total: 64000, used: 16096, free: 47904, max new split: 188416
 No. of 1-blocks: 346, 2-blocks: 41, max blk sz: 32, max free sz: 2982
>>> import gc
>>> gc.mem_alloc() + gc.mem_free()
252416
>>>
Enter fullscreen mode Exit fullscreen mode

flash 只有 8MB, 而載入系統後記憶體看起來只有 252KB, 那我的 psram 跑哪裡去了?

解放 psram

這是因為韌體檔有分兩個版本:

如果改用支援 8 線 SPI ram 版本的韌體, 得到的結果如下:

>>> import esp
>>> esp.flash_size()
8388608
>>> import micropython
>>> micropython.mem_info()
stack: 736 out of 15360
GC: total: 64000, used: 15440, free: 48560, max new split: 8257536
 No. of 1-blocks: 340, 2-blocks: 40, max blk sz: 32, max free sz: 3023
>>> import gc
>>> gc.mem_alloc() + gc.mem_free()
8321536
Enter fullscreen mode Exit fullscreen mode

可以看到雖然 flash 還是只有 8MB, 但是可用的記憶體已經暴增到接近 8MB 了, 這表示 psram 已經啟用了。

解放 flash

最後要再找回來的就是少掉的 8MB flash, 這主要是因為原本的韌體就是被編譯成 8MB 的空間, 必須要把韌體重新延伸為 16MB, 還好, 已經有善心人心幫我們使用 Python 做好了工具--mp-image-tool-esp32, 安裝方式如下:

  1. 從 github 上複製專案:

    git clone https://github.com/glenn20/mp-image-tool-esp32
    cd mp-image-tool-esp32
    
  2. 安裝相依的套件:

    pip install -r requirements.txt
    

利用以下的指令就可以把韌體檔案變成 16MB 空間的大小:

python .\mp-image-tool-esp32 -f 16M ..\..\firmware\ESP32_GENERIC_S3-SPIRAM_OCT-20240222-v1.22.2.bin
Enter fullscreen mode Exit fullscreen mode

選項 -f 就是用來指定韌體大小, 它會產生一個和原始韌體檔案同名但加上 "-16MB" 的檔案, 使用這個韌體檔就可以把 16MB 的 flash 通通解放了:

>>> import esp
>>> esp.flash_size()
16777216
>>> import micropython
>>> micropython.mem_info()
stack: 736 out of 15360
GC: total: 64000, used: 15440, free: 48560, max new split: 8257536
 No. of 1-blocks: 340, 2-blocks: 40, max blk sz: 32, max free sz: 3023
>>> import gc
>>> gc.mem_alloc() + gc.mem_free()
8321536
Enter fullscreen mode Exit fullscreen mode

不論是 flash 還是 psram, 通通都到位了。

Top comments (0)