WeAct BlackPill 跑 CircuitPython 使用自选外部 Flash
动机¶
就是想用便宜的Flash。另外之前在CircuitPython 6.x时代也修改过了,但是之前买的拆机
Flash 质量实在太差,当U盘很不稳,不得已从库存的新Flash中挑了一片 MX25L6406EM2I
。
才发现某创商城搞活动时卖的 Flash 是停产/EOL产品。
修改¶
这个很容易,关键是要知道修改哪里。在CPY 6.x时代,所有的Flash配置都在一个个
结构体中(存疑,可能记错了),驱动大部分是可以通用的。而在CPY 7.x时代,所有的Flash
都有一个自己的 toml
配置文件,定义了其中的各个参数。
准备一份源码。
git clone https://github.com/adafruit/circuitpython.git
cd circuitpython
make fetch-submodule
CPY 7.x的Flash配置文件在 data/nvm.toml
子模块下。以我的Flash为例,依葫芦
(MX25L1606
,MX25L3206E
)画瓢,新建
data/nvm.toml/flash/macronix/MX25L6406E.toml
。另外我严重怀疑 MX25L1606
的最
大时钟频率配置错了,少了个0。
# Settings for the Macronix MX25L6406E 8MiB SPI flash.
# Datasheet: https://www.macronix.com/Lists/Datasheet/Attachments/8630/MX25L6406E,%203V,%2064Mb,%20v1.9.pdf
total_size = 0x800000 # 8 MiB
start_up_time_us = 5000
manufacturer_id = 0xc2
memory_type = 0x20
capacity = 0x17
max_clock_speed_mhz = 80
quad_enable_bit_mask = 0x40
has_sector_protection = false
然后修改对应板子的配置文件。
diff --git a/ports/stm/boards/stm32f411ce_blackpill_with_flash/mpconfigboard.mk b/ports/stm/boards/stm32f411ce_blackpill_with_flash/mpconfigboard.mk
index 9da716374..bf048775e 100644
--- a/ports/stm/boards/stm32f411ce_blackpill_with_flash/mpconfigboard.mk
+++ b/ports/stm/boards/stm32f411ce_blackpill_with_flash/mpconfigboard.mk
@@ -5,7 +5,7 @@ USB_MANUFACTURER = "WeAct"
SPI_FLASH_FILESYSTEM = 1
#See supervisor/shared/external_flash/devices.h for options
-EXTERNAL_FLASH_DEVICES = GD25Q16C,W25Q64FV,W25Q32JVxQ,W25Q64JVxQ
+EXTERNAL_FLASH_DEVICES = GD25Q16C,W25Q64FV,W25Q32JVxQ,W25Q64JVxQ,MX25L6406E
LONGINT_IMPL = MPZ
INTERNAL_FLASH_FILESYSTEM = 0
再之后编译。不得不提这编译的速度貌似比NRF52快多了。
make -C mpy-cross
cd ports/stm
make BOARD=stm32f411ce_blackpill_with_flash -j$(nproc)
最后刷固件。
dfu-util -l # 列出当前的 DFU 设备
dfu-util -a 0 -D build_stm32f411ce_blackpill_with_flash/firmware.bin -s 0x08000000:leave
Very easy,不是么~
结语¶
好像也没什么好说的。啊对,珍爱开发板,远离拆机Flash。