lcxxx156 2024-04-21 21:48 采纳率: 0%
浏览 19
已结题

k210烧入flash报错error:2005

img

源代码如下,我用kflashgui下载的文件正常,程序中也将model_addr=0x300000,maixpy成功连接k210开发板端口
按照上图排查实在排查不出来
此外,我是把程序烧进flash里,没有安装sd卡!

# generated by maixhub, tested on maixpy3 v0.4.8
# copy files to TF card and plug into board and power on
import sensor, image, lcd, time
import KPU as kpu
import gc, sys
from fpioa_manager import fm
from machine import UART,Timer
from fpioa_manager import fm

input_size = (224, 224)
labels = ['6', '7', '8', '1', '2', '3', '4', '5']
anchors = [1.38, 2.19, 1.75, 2.22, 1.91, 2.44, 1.66, 1.94, 1.5, 1.88]

#映射串口引脚
fm.register(6, fm.fpioa.UART1_RX, force=True)
fm.register(7, fm.fpioa.UART1_TX, force=True)

#初始化串口
uart = UART(UART.UART1, 115200, read_buf_len=4096)
uart.write('Hello 01Studio!')


def lcd_show_except(e):
    import uio
    err_str = uio.StringIO()
    sys.print_exception(e, err_str)
    err_str = err_str.getvalue()
    img = image.Image(size=input_size)
    img.draw_string(0, 10, err_str, scale=1, color=(0xff,0x00,0x00))
    lcd.display(img)

class Comm:
    def __init__(self, uart):
        self.uart = uart

    def send_detect_result(self, objects, labels):
        msg = ""
        for obj in objects:
            pos = obj.rect()
            p = obj.value()
            idx = obj.classid()
            label = labels[idx]
            msg += "{}:{}:{}:{}:{}:{:.2f}:{}, ".format(pos[0], pos[1], pos[2], pos[3], idx, p, label)
        if msg:
            msg = msg[:-2] + "\n"
        self.uart.write(msg.encode())

def init_uart():
    fm.register(10, fm.fpioa.UART1_TX, force=True)
    fm.register(11, fm.fpioa.UART1_RX, force=True)

    uart = UART(UART.UART1, 115200, 8, 0, 0, timeout=1000, read_buf_len=256)
    return uart

def main(anchors, labels = None, model_addr=0x300000, sensor_window=input_size, lcd_rotation=0, sensor_hmirror=False, sensor_vflip=False):
    sensor.reset()
    sensor.set_pixformat(sensor.RGB565)
    sensor.set_framesize(sensor.QVGA)
    sensor.set_windowing(sensor_window)
    sensor.set_hmirror(sensor_hmirror)
    sensor.set_vflip(sensor_vflip)
    sensor.run(1)

    lcd.init(type=1)
    lcd.rotation(lcd_rotation)
    lcd.clear(lcd.WHITE)

    if not labels:
        with open('labels.txt','r') as f:
            exec(f.read())
    if not labels:
        print("no labels.txt")
        img = image.Image(size=(320, 240))
        img.draw_string(90, 110, "no labels.txt", color=(255, 0, 0), scale=2)
        lcd.display(img)
        return 1
    try:
        img = image.Image("startup.jpg")
        lcd.display(img)
    except Exception:
        img = image.Image(size=(320, 240))
        img.draw_string(90, 110, "loading model...", color=(255, 255, 255), scale=2)
        lcd.display(img)

    uart = init_uart()
    comm = Comm(uart)

    try:
        task = None
        task = kpu.load(model_addr)
        kpu.init_yolo2(task, 0.5, 0.3, 5, anchors) # threshold:[0,1], nms_value: [0, 1]
        while(True):
            img = sensor.snapshot()
            t = time.ticks_ms()
            objects = kpu.run_yolo2(task, img)
            t = time.ticks_ms() - t
            if objects:
                for obj in objects:
                    pos = obj.rect()
                    img.draw_rectangle(pos)
                    img.draw_string(pos[0], pos[1], "%s : %.2f" %(labels[obj.classid()], obj.value()), scale=2, color=(255, 0, 0))
                comm.send_detect_result(objects, labels)
            img.draw_string(0, 200, "t:%dms" %(t), scale=2, color=(255, 0, 0))
            lcd.display(img)
    except Exception as e:
        raise e
    finally:
        if not task is None:
            kpu.deinit(task)


if __name__ == "__main__":
    try:
        # main(anchors = anchors, labels=labels, model_addr=0x300000, lcd_rotation=0)
        main(anchors = anchors, labels=labels, model_addr="/sd/model-116125.kmodel")
    except Exception as e:
        sys.print_exception(e)
        lcd_show_except(e)
    finally:
        gc.collect()

while True:

    text=uart.read() #读取数据

    if text: #如果读取到了数据
        print(text.decode('utf-8')) #REPL打印
        uart.write('I got'+text.decode('utf-8')) #数据回传
  • 写回答

22条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-21 21:48
    关注
    获得0.45元问题酬金

    引自免费微信小程序:皆我百晓生

    针对您遇到的k210烧录flash报错error:2005以及程序运行时KPU加载模型失败的问题,我已经分析了您提供的信息及源代码。根据您的描述,您已通过kflashgui成功烧录文件,并确认了程序中的model_addr设置正确。以下是我为您整理的详细排查步骤和可能的解决方案:

    1. 模型文件完整性与路径确认

      • 确认模型文件(.kmodel)在SD卡上的路径、名称与程序中指定的一致,即model-116125.kmodel位于/sd/目录下。
      • 使用校验工具(如MD5或SHA-256)对比本地模型文件与原始下载文件的哈希值,确保模型文件未在传输过程中损坏。
    2. 程序中模型加载方式调整

      • 您的源代码中,main()函数有两种调用方式,一种是直接使用内存地址加载模型,另一种是使用文件路径加载模型。但当前两种方式均存在问题:
        • 直接使用内存地址加载时,模型地址为0x300000,这通常用于烧录到Flash中的模型。由于您已使用kflashgui成功烧录文件,理论上这种方式应能正常工作。若仍出现问题,建议检查是否在烧录过程中选择了正确的分区(例如flash而非sd)。
        • 使用文件路径加载时,模型路径为"/sd/model-116125.kmodel"。这种方式适用于将模型文件放置在SD卡上。然而,在MaixPy中,加载模型通常不直接支持绝对路径,而是使用相对路径,即相对于脚本所在目录。因此,建议将模型文件与脚本置于同一目录,并修改模型路径为相对路径,如"model-116125.kmodel"

      建议修改后的模型加载方式

      # 将模型文件与脚本置于同一目录,并使用相对路径
      main(anchors, labels=labels, model_addr="model-116125.kmodel")
      
    3. 硬件连接与SD卡问题

      • 确保SD卡已正确插入并被设备识别。重启设备后,通过MaixPy终端检查SD卡挂载情况,确认/sd/目录下能看到模型文件。
      • 检查SD卡速度和兼容性。使用Class 10以上高速卡,并确认卡格式为FAT32(推荐)或exFAT。
    4. 系统与固件版本

      • 确认您的MaixPy固件版本与开发环境(如MaixPy IDE或MaixPy3 v0.4.8)兼容。如有更新,请升级至最新版本,并重新烧录固件及模型文件。
    5. 代码其他可能问题

      • 您的源代码中包含一些与当前问题无关的部分(如串口通信等),这些部分可能会干扰问题定位。建议暂时注释掉无关代码,仅保留与模型加载和显示相关的核心部分,以便更好地排查问题。
    6. 日志与异常处理

      • 在程序中添加详细的日志输出,记录模型加载过程中的关键信息,如加载开始时间、结束时间、加载结果等。这有助于进一步定位问题。
      • 异常处理方面,您已使用sys.print_exception()输出错误信息。建议在except块中加入更多调试信息,如检查kpu.load()返回值、捕获更具体的异常类型等。

    按照上述建议进行排查和调整后,问题应能得到解决。如果问题依然存在,请提供详细的日志输出和硬件环境信息,以便进一步分析。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 4月29日
  • 修改了问题 4月21日
  • 修改了问题 4月21日
  • 赞助了问题酬金15元 4月21日
  • 展开全部

悬赏问题

  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址