MicroPython CC3200 移植版完全指南:WiPy 与 CC3200-LAUNCHXL 的构建、烧录、REPL 接入与 OTA 升级
【免费下载链接】micropythonMicroPython - a lean and efficient Python implementation for microcontrollers and constrained systems项目地址: https://gitcode.com/gh_mirrors/mi/micropython
本指南以 MicroPython 仓库中 ports/cc3200/README.md 为骨架,系统讲解 TI CC3200 WiFi SoC(ARM Cortex-M4)移植版的完整工作流:从工具链准备、bootloader 与应用镜像编译,到两块官方开发板(WiPy 与 CC3200-LAUNCHXL)的串口烧录、Telnet/FTP 远程接入,再到基于内置 FTP 服务器的 OTA 固件升级。读完本文,你将掌握在 Linux/macOS 环境下把 MicroPython 跑起来并完成远程维护的每一步具体操作,同时了解这些操作背后对应的源码实现位置,方便深入排查与二次开发。
移植版概览:CC3200 WiFi SoC 与两块目标板
CC3200 是德州仪器(TI)推出的单芯片 WiFi SoC,采用 ARM Cortex-M4 内核,将应用处理器与 WiFi 子系统集成在同一颗芯片中。MicroPython 针对该芯片提供了独立移植版,位于 ports/cc3200,支持两块开发板:
- WiPy:基于 CC3200 的 Wi-Fi 开发板,出厂即预刷默认版本 MicroPython,无法通过串口重新编程,只能通过 OTA 方式升级;
- TI CC3200-LAUNCHXL:TI 官方 LaunchPad 评估板,支持串口(UART)与 OTA 两种升级方式。
两块板卡的定义分别在 boards/WIPY/mpconfigboard.h(板名 "WiPy")与 boards/LAUNCHXL/mpconfigboard.h(板名 "LaunchPad")中,二者均定义 MCU 名为 "CC3200"。两块板最明显的差异之一是天线配置:WiPy 定义MICROPY_HW_ANTENNA_DIVERSITY (1)支持天线分集,而 LAUNCHXL 为(0)。
从源码布局看,该移植版是一个相当完整的嵌入式软件栈(见 application.mk 与 bootloader.mk):
hal/:TI 官方寄存器级 HAL 驱动(GPIO、UART、SPI、I2C、ADC、Timer、SDHost、加密单元等);simplelink/与drivers/cc3100/:TI SimpleLink WiFi 协议栈及其操作系统抽象层;FreeRTOS/:移植版所依赖的实时操作系统(含 ARM_CM3 移植与 heap_4 内存管理);ftp/、telnet/:内置的 FTP 服务器(含 OTA updater)与 Telnet 服务器;mods/:MicroPython 模块层实现(network、socket、ssl、machine、pyb.*系列等);fatfs/与lib/oofatfs/:串行 Flash 与 SD 卡的文件系统支持;bootmgr/:独立的二级引导程序源码。
构建环境与工具链准备
主机平台限制
当前 CC3200 移植版只在Linux 与 macOS下构建,不支持 Windows直接编译(Windows 仅能借助 TI 的 CCS_Uniflash 完成烧录环节)。构建所需工具链为 ARM 嵌入式 GCC 交叉编译器(gcc-arm-embedded 系列),对应关系见 ports/cc3200/Makefile:
CROSS_COMPILE ?= arm-none-eabi-Makefile 同时给出了 Cortex-M4 相关的编译选项(-mcpu=cortex-m4、-mthumb、软浮点-msoft-float等)以及-Os体积优化、-ffunction-sections -fdata-sections分段裁剪等面向嵌入式场景的配置。
烧录工具
烧录镜像需要以下工具之一:
- cc3200tool:开源的 CC3200 烧录/调试工具,本文介绍的所有
make烧录目标(erase、deploy、servicepack)都基于它; - TI CCS_Uniflash:TI 官方工具,仅支持 Windows,且所有技术支持由 TI 提供。
Makefile 关键默认值
ports/cc3200/Makefile 中定义了可被命令行覆盖的默认参数,理解这些默认值可以避免踩坑:
| 变量 | 默认值 | 说明 |
|---|---|---|
BOARD | WIPY | 目标板,可改为LAUNCHXL |
BTYPE | release | 构建类型,可选release/debug |
BTARGET | application | 构建目标,可选application/bootloader |
PORT | /dev/ttyUSB1 | 烧录串口设备 |
BUILD | build/$(BOARD)/$(BTYPE) | 构建输出目录 |
此外,Makefile 中按板卡区分了串行 Flash 容量:FLASH_SIZE_WIPY = 2M、FLASH_SIZE_LAUNCHXL = 1M,该值在make erase格式化 Flash 时作为--size参数传入。
编译 bootloader 与应用镜像
CC3200 的启动依赖两级镜像:先由片上 ROM 引导bootloader,再由 bootloader 校验并跳转到application(MicroPython 主镜像)。因此首次烧录必须分别编译两者。
编译 bootloader
make BTARGET=bootloader BTYPE=release BOARD=LAUNCHXLbootloader 的构建规则位于 bootmgr/bootloader.mk:它只链接引导所需的最小 HAL 子集(cpu、gpio、prcm、spi、systick 等)、SimpleLink 驱动(以SL_TINY宏裁剪)以及 bootmgr/main.c 和汇编入口 bootmgr/runapp.s,最终产物为bootmgr/build/<BOARD>/<BTYPE>/bootloader.bin。
编译 release 应用镜像
make BTARGET=application BTYPE=release BOARD=LAUNCHXL应用镜像的构建产物包括:
build/<BOARD>/release/application.axf:ELF 可执行文件;build/<BOARD>/release/application.bin:objcopy 生成的裸二进制;build/<BOARD>/release/mcuimg.bin:经 appsign.sh 签名后的最终刷写镜像;build/<BOARD>/release/firmware.zip:打包 zip,内含mcuimg.bin(boards/WIPY/deploy.md 说明该 zip 中的 mcuimg.bin 应通过 FTP 复制到 WiPy 的/flash/sys目录)。
release与debug的差异在 application.mk 中体现:release 定义-DNDEBUG;debug 定义-DDEBUG。在debug构建下,mpconfigport.h会关闭部分与 CPython 的兼容选项(MICROPY_CPYTHON_COMPAT (0))以释放 RAM 供调试使用。
编译 debug 镜像(配合 TI CCS 调试)
make BTARGET=application BTYPE=debug BOARD=LAUNCHXL如需调试移植版特有代码,必须用 debug 类型关闭该移植文件的优化(详见 Makefile 注释)。调试时可以使用 TI 的 CCS(Code Composer Studio)工具链,使用随发布提供的CC3200.ccxml作为调试器配置文件。bootloader 的 debug 构建还有一个细节:稳定源码(hal、misc、simplelink、cc3100、py、stm32 等目录)仍强制-Os优化,只对端口相关代码关闭优化(见 bootmgr/bootloader.mk),从而在可调试性与镜像体积之间取得平衡。
烧录 CC3200-LAUNCHXL
前提条件
- 已用release模式编译好 bootloader 与应用镜像;
- 板上SOP2 跳线已短接(进入烧录模式);
- Linux 系统已识别板卡并生成
ttyUSB*设备(见下文ftdi_sio驱动配置)。
使用 make 目标烧录
按 README 的步骤执行:
# 1. 格式化串行 Flash(随后立刻按板上的 Reset 按钮) make erase # 2. 写入 bootloader 与 application(随后立刻按 Reset 按钮) make deploy # 3.(强烈推荐)安装最新 TI WiFi 固件 servicepack # 从 CC3200SDK-SERVICEPACK 包中取出 ota_*.ucf 与 ota_*.ucf.signed.bin, # 复制到移植版目录后执行: make servicepack # 4. 移除 SOP2 跳线并复位板卡这些目标的底层实现都在 ports/cc3200/Makefile 中:
erase: cc3200tool -p $(PORT) format_flash --size $(FLASH_SIZE_$(BOARD)) deploy: cc3200tool -p $(PORT) \ write_file bootmgr/build/$(BOARD)/$(BTYPE)/bootloader.bin /sys/mcuimg.bin \ write_file build/$(BOARD)/$(BTYPE)/mcuimg.bin /sys/factimg.bin servicepack: cc3200tool -p $(PORT) \ write_file --file-size=0x20000 --signature ota_1.0.1.6-2.7.0.0.ucf.signed.bin \ ota_1.0.1.6-2.7.0.0.ucf /sys/servicepack.ucf可见deploy将 bootloader 写入/sys/mcuimg.bin、应用写入/sys/factimg.bin(factory image),而servicepack会把带签名的 WiFi 固件写入/sys/servicepack.ucf,这些路径与 SimpleLink 文件系统约定一一对应。
使用 TI Uniflash 烧录(Windows)
若在 Windows 下操作,可改用 CCS_Uniflash:
- 打开 CCS_Uniflash 并连接板卡(默认端口 22);
- 格式化串行 Flash(CC3200-LAUNCHXL 选 1MB,WiPy 选 2MB,其余选项不勾选);
- 标记以下文件为擦除:
/cert/ca.pem、/cert/client.pem、/cert/private.key与/tmp/pac.bin; - 添加文件
/sys/mcuimg.bin,路径指向cc3200\bootmgr\build\<BOARD_NAME>\bootloader.bin; - 再添加文件
/sys/factimg.bin,路径指向cc3200\build\<BOARD_NAME>\mcuimg.bin; - 点击 "Program" 应用所有更改;
- 用 "Service Pack Update" 按钮刷入最新 servicepack(如
servicepack_1.0.0.10.0.bin); - 关闭 CCS_Uniflash,移除 SOP2 跳线并复位板卡。
关于 WiPy 的特别说明
WiPy 出厂即预装默认版 MicroPython,无法通过串口编程,只能通过 OTA 方式升级(见下文)。这与 LAUNCHXL 的烧录流程有本质区别。
接入 REPL:Telnet 与 UART
固件启动后,有两种方式进入 MicroPython REPL。
方式一:Telnet(WiFi 接入)
板卡上电后默认以AP(热点)模式启动,默认网络参数定义在 mpconfigport.h:
| 参数 | 默认值 |
|---|---|
| SSID | wipy-wlan |
| 密钥 | www.wipy.io |
| 安全类型 | SL_SEC_TYPE_WPA_WPA2(WPA/WPA2) |
| 信道 | 5 |
连接该热点后,使用任意 Telnet 客户端:
- host = 192.168.1.1,port = 23
- 登录用户名micro,密码python
你也可以在 REPL 中通过network模块将 WLAN 重新初始化为 station 模式去连接其他 AP,或改用不同的 SSID/密钥重新配置 AP 模式。Telnet 服务器由 telnet/telnet.c 实现,并在 serverstask.c 的任务循环中完成初始化、使能、复位与运行管理。
方式二:UART(串口)
- UART REPL 在标准配置下默认开启,位于UART0,波特率 115200(由
MICROPY_STDIO_UART与MICROPY_STDIO_UART_BAUD控制,见两块板的 mpconfigboard.h); - CC3200-LAUNCHXL:需要按
ftdi_sio驱动的相关文档配置 Linux 内核驱动。配置完成后插入板卡会生成两个/dev/ttyUSB*设备,串口控制台在第二个设备上(通常为/dev/ttyUSB1,这也正是 Makefile 中PORT默认值的来源); - WiPy:板载没有 USB-UART 转换芯片,需要外接 USB-UART 转换器,连接GPIO01(Tx)与GPIO02(Rx)。
一个值得注意的设计是:UART 是否作为 REPL 输出由MICROPY_STDIO_UART配置控制,但该配置是在高层完成的——通过 boot.py 中合适的os.dupterm()调用实现,因此即使编译期配置不同,你也可以在运行时覆盖 REPL 的输出端口。
文件系统与 SD 卡
板卡在 CC3200 外接的串行 Flash 上维护一个小的 FatFS 文件系统:WiPy 为 192K,LaunchPad 为 64K。与之对应,两块板在 mpconfigboard.h 与 boards/WIPY/mpconfigboard.h 中分别定义了串行 Flash 块数MICROPY_PORT_SFLASH_BLOCK_COUNT为 32(LAUNCHXL)与 96(WiPy),与 README 给出的容量描述吻合。文件系统底层的串行 Flash 磁盘驱动在 fatfs/src/drivers/sflash_diskio.c,相关 Python 接口见 mods/pybflash.c。
此外该移植版支持 SD 卡:任意 SD 卡都可以接入,并通过SD类 API 配置引脚。磁盘驱动实现位于 fatfs/src/drivers/sd_diskio.c,Python 侧接口在 mods/pybsd.c。注意 TI SimpleLink 文件系统出于安全性会将每个文件镜像存储,因此 Flash 写入较慢(这也是 OTA 需要约 6 秒的原因之一)。
通过 FTP 上传脚本
板卡内置 FTP 服务器(实现见 ftp/ftp.c),用于向板内文件系统上传 MicroPython 脚本。连接参数:
- ftp://192.168.1.1
- 用户名micro,密码python
官方测试过的 FTP 客户端包括 FileZilla、FireFTP、FireFox、IE 与 Chrome;其他符合规范的客户端一般也能工作,但需要确认其使用单连接模式(合规 FTP 客户端默认即为单连接)。原因见下文“已知问题”中对 FileZilla 的说明:出于代码体积考虑,该 FTP 服务器只允许一条命令连接和一条数据连接。
OTA 固件升级(Over The Air)
OTA 是 WiPy 唯一可用的升级途径,同时也适用于 LAUNCHXL。
手动 OTA
- 在 release 模式下编译新的
mcuimg.bin; - 通过 FTP 将其上传到
/flash/sys/mcuimg.bin; - 上传约耗时 6 秒(TI SimpleLink 文件系统为每个文件做镜像备份,速度较慢);
- 文件不会出现在
/flash/sys/目录中——它实际上绕过了 FatFS 直接写入,但请放心文件已成功传输,且带有MD5 校验和用于完整性验证; - 复位 MCU:按板载开关,或在 REPL 中执行:
import machine machine.reset()OTA 的升级路径常量定义在 ftp/updater.c(如UPDATER_IMG_PATH "/flash/sys/mcuimg.bin"),该文件同时负责固件签名校验(使用shamd5.h的摘要算法),并在引导侧由 bootmgr/bootmgr.h 中的镜像令牌(FACTORY_IMG_TOKEN 0x5555AAAA、UPDATE_IMG_TOKEN 0xAA5555AA)决定从工厂镜像还是升级镜像启动。
自动化 OTA:deploy-ota
仓库提供了主机端一键升级脚本,确保板卡已运行且与电脑处于同一网络后执行:
make BTARGET=application BTYPE=release BOARD=LAUNCHXL WIPY_IP=192.168.1.1 WIPY_USER=micro WIPY_PWD=python deploy-otaWIPY_IP、WIPY_USER、WIPY_PWD均可省略,省略时使用上述默认值(见 application.mk)。该目标调用 tools/update-wipy.py:脚本通过 Python 标准库ftplib建立 FTP 连接、登录、自动创建/flash/sys目录并上传mcuimg.bin,随后通过telnetlib登录 Telnet 执行复位,并在--verify模式下验证固件是否正确更新。该脚本也可脱离 make 单独使用:
python tools/update-wipy.py --file build/LAUNCHXL/release/mcuimg.bin --verify注意事项与已知问题
旧版本 CC3200-LAUNCHXL 无法运行
早期硅片(pre-release)版本的 CC3200 在 RAM 块上存在缺陷,MicroPython 无法在其上运行。请务必使用v4.1 或更高版本的 LAUNCHXL 板卡,否则该移植版无法工作。
FileZilla 使用限制
不要使用 FileZilla 的“快速连接”按钮,应打开站点管理器新建配置:
- 在 "General" 标签中将加密方式设为"Only use plain FTP (insecure)"(仅使用明文 FTP);
- 在 "Transfer Settings" 标签中将最大连接数限制为1。
否则 FileZilla 在检索/保存文件时会尝试打开第二条命令连接,而该 FTP 服务器出于简化与减小代码体积的考虑,只允许一条命令连接和一条数据连接。
从源码进一步深入
若想在理解操作流程后继续深入,推荐按以下路径阅读源码:
- ports/cc3200/README.md:官方移植版说明(本文依据);
- ports/cc3200/Makefile 与 ports/cc3200/application.mk:构建参数与全部源码清单;
- ports/cc3200/mpconfigport.h:移植版功能开关(REPL、线程、VFS、WLAN AP 默认参数等);
- ports/cc3200/mods:
network、socket、ssl、machine、pyb.*等模块实现; - ports/cc3200/ftp/updater.c 与 ports/cc3200/bootmgr/bootmgr.h:OTA 升级与双镜像引导逻辑;
- ports/cc3200/tools/smoke.py 与 ports/cc3200/tools/update-wipy.py:自动化验证与升级脚本。
需要说明的是,本移植版仅支持在 Linux/macOS 下构建、依赖第三方 cc3200tool 或 TI 工具烧录,且受旧版硬件缺陷限制,实际使用时请以仓库当前代码与本文所列前提为准。
【免费下载链接】micropythonMicroPython - a lean and efficient Python implementation for microcontrollers and constrained systems项目地址: https://gitcode.com/gh_mirrors/mi/micropython
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考