表題の通りなのですが、STM32F401CCU6 に 64Mbit(8MByte) SPI FLASHを載せてmicropythonをWSL2(Debian12)でコンパイルしインストールしてみました。
ちなみに、python shellでのLチカサンプルは以下の通りです。pybにdelayが含まれていなかったのでutimeのsleep_msを使いました。
sudo apt-get install git build-essential binutils-arm-none-eabi gcc-arm-none-eabi cd ~ mkdir stm32 cd stm32 git clone https://github.com/micropython/micropython.git -b v1.21.0 micropython-v1.21.0 cd micropython-v1.21.0 git submodule update --init cd mpy-cross make -j6 cd ../ports/stm32/boards git clone https://github.com/xreef/stm32f401cc_micropython_firmware cp -a stm32f401cc_micropython_firmware/WeAct_F401CC WeAct_F401CC cd .. # mpconfigboard.hをバックアップ cp -a boards/WeAct_F401CC/mpconfigboard.h boards/WeAct_F401CC/mpconfigboard.h.orig以下をboards/WeAct_F401CC/WeAct_F401CC-mpconfigboard_h.patchとして保存します。
--- boards/WeAct_F401CC/mpconfigboard.h.orig 2023-11-15 06:20:45.685061505 +0900 +++ boards/WeAct_F401CC/mpconfigboard.h 2023-11-15 07:02:50.005053685 +0900 @@ -5,7 +5,7 @@ /* BOARD Ver 2.0 set 1 ,other set 0 like V1.3 V2.1+ */ #define VERSION_V20 (0) -#define USE_External_Flash (0) +#define USE_External_Flash (1) #if !BUILDING_MBOOT #define MICROPY_HW_SPIFLASH_ENABLE_CACHE (1) #endif @@ -16,7 +16,7 @@ #define MICROPY_PY_USOCKET (0) #define MICROPY_PY_NETWORK (0) #define MICROPY_PY_STM (0) -#define MICROPY_PY_PYB_LEGACY (0) +#define MICROPY_PY_PYB_LEGACY (1) #define MICROPY_HW_ENABLE_INTERNAL_FLASH_STORAGE (0) #define MICROPY_HW_ENABLE_RTC (1) @@ -25,6 +25,7 @@ #define MICROPY_HW_ENABLE_TIMER (1) #define MICROPY_HW_HAS_SWITCH (0) #define MICROPY_HW_ENABLE_SERVO (1) +#define MICROPY_HW_USB_HID (0) // HSE is 25MHz, CPU freq set to 84MHz @@ -101,7 +102,7 @@ // 4MB Flash 32Mbit // 8MB Flash 64Mbit // 16MB Flash 128Mbit -#define MICROPY_HW_SPIFLASH_SIZE_BITS (32 * 1024 * 1024) +#define MICROPY_HW_SPIFLASH_SIZE_BITS (64 * 1024 * 1024) #define MICROPY_HW_SPIFLASH_CS (pin_A4) #define MICROPY_HW_SPIFLASH_SCK (pin_A5) #if VERSION_V20保存したパッチを当て、コンパイルします。
patch -p0 < boards/WeAct_F401CC/WeAct_F401CC-mpconfigboard_h.patch make DEBUG=0 LTO=1 BOARD=WeAct_F401CC MICROPY_ROM_TEXT_COMPRESSION=1 CROSS_COMPILE=arm-none-eabi- -j 6 (前略) LINK build-WeAct_F401CC/firmware.elf text data bss dec hex filename 261380 16 31668 293064 478c8 build-WeAct_F401CC/firmware.elf GEN build-WeAct_F401CC/firmware.bin GEN build-WeAct_F401CC/firmware.hex GEN build-WeAct_F401CC/firmware.dfu今回はWSLのホームディレクトリ以下でビルドしたので、Windowsからは直接見えないためfirmware.???をたとえば以下のようにWindowsから見えるようにしてから、CubeProgrammerなどでターゲットに書き込みます。
mkdir -p /mnt/c/Temp cp -a build-WeAct_F401CC/firmware.??? /mnt/c/Temp/書き込み後母艦にUSBで接続します。正常に起動できていたらUSBシリアルデバイスとして認識されるのでTeraTermなどで115200/8/pn/1で接続しリセットすると以下のようになります。
MicroPython v1.21.0 on 2023-11-15; WeAct_Core with STM32F401CC Type "help()" for more information. >>>続いてspi flashが正常に機能しているか確認します。
>>> import os >>> os.listdir("/") ['flash'] >>> os.listdir("/flash") ['boot.py', 'main.py', 'pybcdc.inf', 'README.txt', 'System Volume Information'] >>>また母艦上では、USBStorageとしても認識されるので確認してみてください。
ちなみに、python shellでのLチカサンプルは以下の通りです。
>>> import pyb >>> myled = pyb.LED(1) >>> while True: ... myled.toggle() ... pyb.delay(500) ... ... ... (ennterを3回入力。停止はctrl+c。)401CCU6はRAMが64KByteなのですがFlashが8MByteあればそこそこつかえるのではないかなと思います。コンパイル+インストールし少し弄っただけですが、備忘録として挙げてみました。今回は以上です。それでは。
コメント
コメントを投稿