手工打造基于MM32F5微控制器的MicroPython开发板
来源:安德鲁的设计笔记本时间:2023-06-16 13:09:18

引言

为MicroPython启用LittleFS文件系统的想法在我的脑袋里已经酝酿了大半年。随着MindSDK中QSPI驱动的完善,以及基于flash存储芯片的sfud组件和LittleFS组件的成功集成(感谢同事Hao的出色工作),使我得以在MM32F5微控制上运行的MicroPython项目中,使用基于flash存储芯片的LittleFS文件系统,替换掉基于SD卡的FatFS文件系统。经过刚刚过去两天一夜的编码和调试,终于大功告成!

在早期的MicroPython项目中使用的SD卡,本身也是一个独立的小零件,很容易丢失或者损坏,并且因为物理连接件的问题,有接触不良的风险,另外在开发板之外再购买SD卡也需要一定经济花销。使用开发板上集成的flash存储芯片取代SD卡存储设备,可以大大降低整个MicroPython开发板的成本,并且易于维护。至于用户体验,无论脚本文件存放在SD卡还是flash芯片上,开发板都能正常运行Python脚本,并且能够适配Thonny IDE,用户不会感到一丝丝的不快。借用星爷的一句话:“一个字,绝!”


(相关资料图)

在本文中,将讲述如何自己动手制作基于MM32F5微控制的最小系统板,并获取与之配套的预先编译好的MicroPython固件,以及使用图形界面开发环境Thonny IDE在MM32F5微控制器上使用Python进行开发的基本用法。帮助MicroPython的开发者自己动手制作一块基于微控制器的开发板。

MM32F5微控制器简介

MM32F5270 是上海灵动微电子第一款搭载了安谋科技ArmChina STAR-MC1 内核的 MCU产品,也是MM32F5系列的第一款产品,其工作频率可达 120MHz,内置256KB Flash 和 192KB RAM,配置浮点运算单元(Floating Point Unit, FPU)、数字信号处理单元(Digital Signal Processing,DSP)、信号间互联矩阵 MindSwitch、可配置逻辑单元 CLU、三角函数加速单元 CORDIC等算法加速单元,并集成了丰富的外设模块和充足的 I/O 端口。MM32F5270 相较于灵动原有产品全面提升了性能、存储容量、总线架构和外设配置,旨在覆盖更广泛的工业、汽车和 IoT应用。

figure_mm32f5270_product_selection

图1 MM32F5270系列微控制器选型## 制作MicroPython开发板

基于MM32F5270微控制器,搭建一个可以运行MicroPython的最小系统,除了以MM32F5270微控制为核心的最小系统外,只要外接一个SPI接口的flash存储芯片即可(例如复旦微的FM25Q128)。当然,如果能附加一个USB转串口的电路,将会显著提升开发者的使用体验。我手头上有一块内部使用的小板子,刚好满足这样的要求。如图2所示。如果有开发者愿意自己设计MM32F5270的最小系统板,也是非常容易的。

图2 MM32F5270电路板

预编译的固件使用了特定的引脚,用于支持REPL通信UART,和连接flash存储芯片的QSPI。对于不愿意重新改写代码编译MicroPython固件的开发者们,在自行制作电路板时,必须要使用同样的引脚。实际上,这里的限制并不是很苛刻,对于使用了144引脚的芯片来说,仅绑定2个UART引脚和6个QSPI引脚并不是一件麻烦的事情,而搭建编译MicroPython的环境并改写源码重新编译固件,则将会是一个比较繁琐并且需要一定调试能力去解决各种琐碎麻烦的过程。关于绑定引脚的清单,可见表1。

PS:甚至外扩的flash存储芯片都是不是必须的!如果你不打算让芯片上电之后自动运行一个自行编写Python程序文件,仅使用基于UART的REPL同MicroPython内核进行交互的话,那么使用flash存储芯片作为存储介质的文件系统也可以精简掉。

表1 MicroPython绑定MM32F5270最小系统板的引脚| MCU引脚 | 绑定功能 | 备注 |

| --------- | ----------- | ------ |

| PB6 | UART1_TX | 必需 |

| PB7 | UART1_RX | 必需 |

| PA6 | QSPI1_CS | 可选 |

| PG7 | QSPI1_SCK | 可选 |

| PG6 | QSPI1_D0 | 可选 |

| PA3 | QSPI1_D1 | 可选 |

| PB3 | QSPI1_D2 | 可选 |

| PG8 | QSPI1_D3 | 可选 |

MM32F5270电路板上有通过UART外接USB转串口芯片部分的原理图。如图3所示。

figure-cubic-f5270-uart-sch

图3 MM32F5270电路板的UART电路MM32F5270电路板上有通过QSPI外接flash存储芯片部分的原理图。如图4所示。

figure-cubic-f5270-qspi-sch

图4 MM32F5270电路板的QSPI电路我手上的另一块MM32F5270微控制器的开发板,PLUS-F5270开发板,板子上集成了一颗W25Q64的flash存储芯片和USB转串口电路,也能满足运行MicroPython的条件。PLUS-F5270开发板是成都逐飞科技有限公司设计生产的一款基于MM32F5270微控制器的开发板,这也是灵动官方软件MindSDK支持的开发板。这块开发板已经对外出售,开发者可以在市面上买到。PLUS-F5270开发板的外观如图5所示。

图5 PLUS-F5270开发板

获取并下载MicroPython固件到开发板

为了获取MicroPython的预编译固件或者源代码,可能需要一个CSDN或者gitee的账号,登录到网站上下载对应的文件。

获取预编译的可执行文件

本例中使用的MM32F5270最小系统板:使用12MHz外部晶振,串口波特率115200。

https://download.csdn.net/download/suyong_yq/86246621

PLUS-F5270开发板:使用12MHz外部晶振,串口波特率115200。QSPI1_CS引脚绑定到PB10引脚,其余引脚同本例相同。

https://download.csdn.net/download/suyong_yq/86246723

开源的完整项目的代码仓库

包含对MM32F5270微控制器支持的MicroPython项目代码仓库:

git@gitee.com:suyong_yq/micropython-su.git

下载可执行文件到MM32微控制器

可以使用DAPLink或者JLink作为调试器,使用Keil或者Segger Ozone作为PC端软件。

《使用DAP-Link单独下载可执行文件到MM32F5微控制器》一文中介绍了使用Keil和Ozone作为PC端软件配合DAPLink调试器下载独立的可执行文件到MM32微控制器上,同样的方法也适用于使用JLink调试器的情况。

但若是使用JLink调试器,必须使用JLink v9以后的版本,之前市面上流行的老款JLink v8(俗称“黑砖头”)已经不支持Arm Cortex-M33,以及MM32F5微控制器所使用的ArmChina STAR-MC1内核。

单片机上运行Python小程序

MM32F5270最小系统板上设计了一个可编程的LED灯,对应主控芯片的PC8引脚。接下来以编写Python程序控制这个LED灯为例,展示在电路板上运行MicroPython的玩法。

MM32F5270电路板上有通过QSPI外接flash存储芯片部分的原理图。如图6所示。

figure-cubic-f5270-led-sch

图6 MM32F5270电路板的LED电路### 使用基于UART串口终端的REPL

将MM32F5270微控制器上的串口通过USB转串口电路同电脑相连,启动串口终端软件Tera Term,在终端界面中通过串口输入Python脚本,如图7所示。

图7 通过REPL编写MicroPython程序### 使用图形开发环境Thonny IDE

Thonny是由爱沙尼亚的Tartu大学开发,非常适合初学者和教学的一款轻量级IDE,提供可视化的编程界面,并可逐句调试运行Python程序。可从官网上下载适配多操作系统平台的安装包(https://thonny.org/)。如图8所示。

figure-thonny-overview

图8 Thonny概览启用图形开发环境Thonny IDE中,指定串口同MM32F5270电路板相连,然后在代码编辑区中输入Python程序,或从电脑上导入预先写好的Python程序文件。然后通过Thonny IDE运行脚本,在Thonny内置的串口终端界面中可以产生输出。Thonny内置的串口终端界面也可以像REPL一样,直接输入Python语句立即执行。如图9所示。

demo-micropython-thonny

图9 在Thonny中运行Python程序### 将Python程序保存在文件系统中上电自启

如果希望编写的Python程序能在开发板上电复位后自动运行,可以将Python脚本文件保存在MicroPython挂载的文件系统中。之后,通过电路板的硬件复位或者MicroPython的软件复位,都可以激活已经存入文件系统中的脚本运行。如图10所示。

demo-micropython-thonny-2

图10 保存程序文件到文件系统中## 总结

作者将早期开发MicroPython项目中的文件系统从SD卡迁移到开发板的flash存储器上,在完全不影响用户使用体验的情况下,简化了电路系统,降低了整个MicroPython电路系统的成本,提高了系统的可靠性。

当然,如果进一步考虑,还可以将文件系统从片外flash迁入片内flash,利用未使用的flash存储空间做文件系统,可以继续降低成本。但是,使用片内文件系统也要面临一些麻烦:

程序的可移植性变差了,每个不同的微控制器芯片可能使用不同的片内flash,对应的操作方式不同。需要足够大的片内flash,并不是每款微控制器芯片都有很大的片内flash。单位空间的片内flash比片外flash贵。操作片内flash比操作片外flash麻烦,可能需要将存放在片内flash上操作flash的函数搬运到RAM中才能正常工作。

关键词: