嘉楠科技
直播中

youyoulan

13年用户 1206经验值
私信 关注
[问答]

给K230 emmc烧录micropython固件不成功的原因?

U-Boot 2022.10-g11e99a1d (Sep 10 2024 - 22:48:52 -0400)
CPU:   rv64imafdcvsu
Model: kendryte k230 burntool
DRAM:  1.4 MiB
Core:  24 devices, 13 uclasses, devicetree: embed
MMC:   mmc0@91580000: 0, mmc1@91581000: 1
Loading Environment from nowhere... OK
In:    serial@91400000
Out:   serial@91400000
Err:   serial@91400000
Hit any key to stop autoboot:  0
crq->brequest:0x0
kburn_set_alt: func: f_kburn intf: 0 alt: 0
w_index 0x0, w_value 0x0, w_length 32, req_type 40
cmd 0x0010, result 0x0000, size 2, data: 01 ff
unable to select a mode : -70
mmc_init: -524, time 256
Card did not respond to voltage select! : -110
mmc_init: -95, time 35
probe mmc succ, dev 1
cmd 0x0011, result 0x0000, size 0, data:
Device MMC 1 capacity 0, erase size 0, blk_sz 512
错误日志
尝试解决过程
补充材料
        开发板型号是什么?部分开发板只有tf卡,没有emmc。
        
        你好,这个是烧录到哪个板子?以及用的是哪个固件。烧录工具如何选择的?
        

回帖(1)

张红

2025-6-26 17:51:26

根据提供的日志信息,以下是导致K230 eMMC烧录MicroPython固件失败的可能原因及解决方案




1. 固件文件格式不兼容



  • 问题:U-Boot日志显示加载环境失败(Loading Environment from nowhere...),可能固件文件格式与开发板不匹配(如非 .img 格式或未适配RV64架构)。

  • 解决方案

    • 确认固件是专为 K230(RISC-V 64位) 编译的版本。

    • 检查文件扩展名应为 .img.bin(如 micropython_k230.img)。





2. eMMC设备未正确初始化



  • 问题:日志显示检测到两个MMC设备(mmc0@91580000mmc1@91581000),但未明确eMMC设备号(通常eMMC是 mmc1)。

    • Hit any key to stop autoboot: 0 后未看到手动操作eMMC的步骤。


  • 解决方案

    • 在U-Boot命令行手动选择eMMC设备:
      mmc dev 1  # 切换到eMMC(设备1)
      mmc info   # 验证是否识别到eMMC容量

    • 如果返回错误,尝试重新初始化eMMC:
      mmc rescan





3. 烧录命令错误



  • 问题:日志末尾的 crq->brequest:0x0kburn_set_alt: f 提示烧录工具通信异常,可能是命令参数错误(如地址偏移或块大小不匹配)。

  • 解决方案

    • 使用正确的 mmc write 命令格式:
      # 示例:将固件从内存地址0x80000000写入eMMC的第2048块(1块=512字节)
      mmc write 0x80000000 2048 <固件大小(按块计算)>

    • 计算块数:固件大小(Byte) ÷ 512。例如16MB固件:16*1024*1024/512=32768块。





4. USB传输失败



  • 问题kburn_set_alt 提示USB烧录协议交互异常(如驱动冲突或线缆故障)。

  • 解决方案

    • 更换USB线缆或主机端口。

    • 在U-Boot中重新枚举USB:
      usb reset





5. U-Boot环境未配置



  • 问题:环境变量未从存储加载(Loading Environment from nowhere...),可能导致关键变量缺失(如 bootcmd)。

  • 解决方案

    • 手动设置eMMC启动参数:
      setenv bootcmd "mmc dev 1; ext4load mmc 1:2 0x80000000 firmware.img; bootm 0x80000000"
      saveenv





6. 固件分区表冲突



  • 问题:eMMC分区表与固件预期布局不符(如未预留启动分区)。

  • 解决方案

    • 重新创建GPT分区表(谨慎操作!):
      gpt write mmc 1 $partitions

    • 或通过Uboot格式化eMMC:
      mmc partconf 1 0 0 0  # 重置分区配置





推荐调试步骤




  1. 验证eMMC识别


    mmc list
    mmc dev 1
    mmc info



  2. 测试文件传输



    • 通过TFTP加载固件到内存:
      tftp 0x80000000 firmware.img

    • md 检查内存内容是否完整:
      md 0x80000000 10




  3. 执行烧录


    mmc write 0x80000000 2048 32768  # 从2048块开始,写入32768块
    mmc read 0x81000000 2048 100     # 回读前100块校验
    md 0x81000000 10                 # 对比原始数据



  4. 启动测试


    bootm 0x80000000





关键点:确保固件适配K230的RV64架构,并通过U-Boot命令正确操作eMMC设备。如仍有问题,检查硬件焊接(eMMC芯片)或更换SD卡启动方式验证硬件是否正常。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分