-
设备:M5Dial
-
固件:UIFlow2.0 Micropython
-
RFID 卡:ISO14443A 标准卡片
-
hardware.RFID 驱动使用了错误的 I2C 总线(I2C1 而非 I2C0)
-
文件:m5stack/libs/hardware/rfid.py
-
修改:I2C(1, ...) → I2C(0, ...)
原代码 (第 10-11 行):
class RFID(RFIDUnit):
def init(self) -> None:
in_i2c = I2C(1, scl=Pin(12), sda=Pin(11)) # 错误:使用 I2C1
super().init(in_i2c)
修改为:
class RFID(RFIDUnit):
def init(self) -> None:
in_i2c = I2C(0, scl=Pin(12), sda=Pin(11)) # 修复:使用 I2C0
super().init(in_i2c)
——————————————————————
实际测试却编译失败
——————————————————————
M5Dial RFID 固件修复进度跟踪
项目信息
- 任务:修复 M5Dial 内置 RFID 在 Micropython UIFlow2.0 固件中的 bug
- 问题根因:
hardware.RFID 驱动使用了错误的 I2C 总线(I2C1 而非 I2C0)
- 开始时间:2026-04-16
- 预计状态:进行中
进度总览
| 步骤 |
任务 |
状态 |
完成时间 |
| 1 |
检查 Docker 环境是否可用 |
✅ 完成 |
2026-04-16 |
| 2 |
克隆 uiflow-micropython 源码 |
✅ 完成 |
2026-04-16 |
| 3 |
修改 rfid.py 中的 I2C 总线错误 (1→0) |
✅ 完成 |
2026-04-16 |
| 4 |
安装 ESP-IDF Docker 镜像 (v5.4.2/v5.3.x) |
✅ 完成 |
2026-04-16 |
| 5 |
初始化子模块和应用补丁 |
✅ 完成 |
2026-04-16 |
| 6 |
构建 littlefs 和 mpy-cross |
✅ 完成 |
2026-04-16 |
| 7 |
编译 M5Dial 固件 |
⚠️ 待解决 |
- |
| 8 |
创建测试脚本 test_rfid.py |
✅ 完成 |
2026-04-16 |
| 9 |
Git 提交所有更改 |
✅ 完成 |
2026-04-16 |
详细日志
步骤 1: 检查 Docker 环境
- 时间:2026-04-16 00:36
- 结果:Docker Desktop 未运行,已自动启动
- 备注:需要等待 Docker Desktop 完全启动后才能继续
步骤 2: 克隆源码
- 命令:
git clone --depth 1 https://github.com/m5stack/uiflow-micropython.git
- 目标路径:
d:\Development\Independent_Projects\Dial-UIFLOW\uiflow-micropython
- 状态:✅ 完成
步骤 3: 修改 rfid.py
- 文件:
m5stack/libs/hardware/rfid.py
- 修改:
I2C(1, ...) → I2C(0, ...)
- 验证:
grep -n "in_i2c = I2C" m5stack/libs/hardware/rfid.py
- 状态:✅ 完成
步骤 4: 安装 ESP-IDF
- 镜像:espressif/idf:v5.4.2, v5.3.1, v5.3.2
- 验证:
idf.py --version 显示对应版本
- 状态:✅ 完成
步骤 5: 初始化子模块和补丁
- 命令:
make submodules → make patch
- 组件:esp32-camera, esp_dl, lv_binding_micropython, micropython, esp-adf 等
- 状态:✅ 完成
步骤 6: 构建 littlefs 和 mpy-cross
- 命令:
make littlefs → make mpy-cross
- 输出:
tools/littlefs/build/littlefs2, micropython/mpy-cross/build/mpy-cross
- 状态:✅ 完成
步骤 7: 编译 M5Dial 固件
- 命令:
make BOARD=M5STACK_Dial pack_all
- 状态:⚠️ 编译环境问题
遇到的问题
问题 1: Docker Desktop 未运行
- 描述:Docker daemon 未启动
- 解决:已自动尝试启动 Docker Desktop
- 状态:✅ 已解决
问题 2: 官方 ESP-IDF Docker 镜像
- 描述:需要使用 espressif/idf 官方镜像
- 镜像:espressif/idf:v5.4.2, v5.3.1, v5.3.2
- 状态:✅ 已解决
问题 3: quilt 未安装
- 描述:
make patch 命令失败,提示 quilt 未找到
- 解决:在 Docker 容器中安装 quilt (
apt-get install quilt)
- 状态:✅ 已解决
问题 4: Python future 模块缺失
- 描述:nvs_partition_gen.py 缺少 future 模块
- 解决:使用
pip install future 安装
- 状态:✅ 已解决
问题 5: fatfs 多重定义冲突
- 描述:编译时出现
multiple definition of 'f_rename' 等错误
- 原因:Micropython 的 oofatfs 与 ESP-IDF 的 fatfs 组件冲突
- 影响:M5Dial 固件无法使用 ESP-IDF v5.3.x/v5.4.x 编译
- 尝试版本:
- v5.4.2:mbedtls GCC 兼容性问题
- v5.3.2:fatfs 冲突
- v5.3.1:fatfs 冲突
- v5.3.0:mbedtls GCC 兼容性问题
- 状态:⚠️ 待解决
下一步计划
-
⚠️ 解决编译问题:
- 尝试使用 ESP-IDF v5.1.x 或 v5.2.x 编译
- 或手动 patch Micropython 源码排除冲突
- 或等待 uiflow-micropython 官方修复
-
验证固件:编译成功后烧录到 M5Dial 设备
-
运行测试:使用 test_rfid.py 验证 RFID 功能
相关文件
| 文件 |
说明 |
uiflow-micropython/m5stack/libs/hardware/rfid.py |
已修复 I2C 总线 |
uiflow-micropython/test_rfid.py |
测试脚本 |
docs/progress/rfid_fix/PROGRESS.md |
本进度文档 |
docs/progress/rfid_fix/TEST_CASES.md |
测试用例文档 |
设备:M5Dial
固件:UIFlow2.0 Micropython
RFID 卡:ISO14443A 标准卡片
hardware.RFID驱动使用了错误的 I2C 总线(I2C1 而非 I2C0)文件:
m5stack/libs/hardware/rfid.py修改:
I2C(1, ...)→I2C(0, ...)原代码 (第 10-11 行):
class RFID(RFIDUnit):
def init(self) -> None:
in_i2c = I2C(1, scl=Pin(12), sda=Pin(11)) # 错误:使用 I2C1
super().init(in_i2c)
修改为:
class RFID(RFIDUnit):
def init(self) -> None:
in_i2c = I2C(0, scl=Pin(12), sda=Pin(11)) # 修复:使用 I2C0
super().init(in_i2c)
——————————————————————
实际测试却编译失败
——————————————————————
M5Dial RFID 固件修复进度跟踪
项目信息
hardware.RFID驱动使用了错误的 I2C 总线(I2C1 而非 I2C0)进度总览
详细日志
步骤 1: 检查 Docker 环境
步骤 2: 克隆源码
git clone --depth 1 https://github.com/m5stack/uiflow-micropython.gitd:\Development\Independent_Projects\Dial-UIFLOW\uiflow-micropython步骤 3: 修改 rfid.py
m5stack/libs/hardware/rfid.pyI2C(1, ...)→I2C(0, ...)grep -n "in_i2c = I2C" m5stack/libs/hardware/rfid.py步骤 4: 安装 ESP-IDF
idf.py --version显示对应版本步骤 5: 初始化子模块和补丁
make submodules→make patch步骤 6: 构建 littlefs 和 mpy-cross
make littlefs→make mpy-crosstools/littlefs/build/littlefs2,micropython/mpy-cross/build/mpy-cross步骤 7: 编译 M5Dial 固件
make BOARD=M5STACK_Dial pack_all遇到的问题
问题 1: Docker Desktop 未运行
问题 2: 官方 ESP-IDF Docker 镜像
问题 3: quilt 未安装
make patch命令失败,提示 quilt 未找到apt-get install quilt)问题 4: Python future 模块缺失
pip install future安装问题 5: fatfs 多重定义冲突
multiple definition of 'f_rename'等错误下一步计划
验证固件:编译成功后烧录到 M5Dial 设备
运行测试:使用 test_rfid.py 验证 RFID 功能
相关文件
uiflow-micropython/m5stack/libs/hardware/rfid.pyuiflow-micropython/test_rfid.pydocs/progress/rfid_fix/PROGRESS.mddocs/progress/rfid_fix/TEST_CASES.md