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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions