Skip to content

M5Dial 1.1内置RFID无法工作- hardware.RFID 驱动使用了错误的 I2C 总线(I2C1 而非 I2C0) #91

@60999

Description

@60999
  • 设备: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 submodulesmake patch
  • 组件:esp32-camera, esp_dl, lv_binding_micropython, micropython, esp-adf 等
  • 状态:✅ 完成

步骤 6: 构建 littlefs 和 mpy-cross

  • 命令make littlefsmake 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 兼容性问题
  • 状态⚠️ 待解决

下一步计划

  1. ⚠️ 解决编译问题

    • 尝试使用 ESP-IDF v5.1.x 或 v5.2.x 编译
    • 或手动 patch Micropython 源码排除冲突
    • 或等待 uiflow-micropython 官方修复
  2. 验证固件:编译成功后烧录到 M5Dial 设备

  3. 运行测试:使用 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 测试用例文档

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions