到手后先组装,【立创·庐山派K230-CanMV开发板】请参考以下组装视频:
【立创·庐山派Lite-K230D-CanMV开发板】的视频等待更新:
【TODO】
一 本节介绍
1.1 开发板简介
本章适用开发板
本章同时适用于以下两款开发板:
| 立创·庐山派K230-CanMV开发板 | 立创·庐山派Lite-K230D-CanMV开发板 |
|---|---|
![]() | ![]() |
本章只讲快速入门流程:准备开发环境、获取对应固件、将固件写入 TF 卡、启动开发板、连接 CanMV IDE K230 并运行固件内置例程。两款板子的固件镜像不同,【下载和烧录时一定要选择与自己开发板完全匹配的固件】,如果烧错固件有可能导致硬件损坏。
该开发板是立创开发板团队精选打造的一款超高性价比的AI 视觉开发板。以嘉楠科技Kendryte®系列AIoT芯片中的最新一代SoC芯片K230为主控芯片,支持三路摄像头同时输入,典型网络下的推理能力可达K210的13.7倍(算力约为6TOPS)。支持CanMV,可以直接使用Python 编程,简单易用。可作为AI与边缘计算平台,适合物联网;智能家居与消费电子;工业自动化;无人系统等领域的开发者使用。

[TODO] 也要放庐山派Lite的资源标注图
1.2 K230 与 K230D 的主要区别
K230 和 K230D 的核心计算性能几乎没有区别。它们的 CPU、KPU 等核心计算单元属于同一平台,主要差异不在[算力],而在 内存集成方式、封装尺寸、USB / ADC / 引脚引出数量,以及开发板外设配置。庐山派 Lite-K230D 不是性能低一档的板子,只不过其所用的主控K230D有更小的封装、更高集成度。
从使用 CanMV MicroPython固件的角度看,两款开发板的入门流程是一样的,但固件镜像、板载外设和可用资源不能混在一起看。快速上手阶段大家先记住一句话:性能基本一致,固件不能混用,资源能力要区分。
| 对比项 | 立创·庐山派K230-CanMV开发板 | 立创·庐山派Lite-K230D-CanMV开发板 | 对快速上手的影响 |
|---|---|---|---|
| 核心性能 | K230 平台,CPU / KPU 核心能力与 K230D 基本一致 | K230D 平台,CPU / KPU 核心能力与 K230 基本一致 | 不要简单理解为 Lite-K230D 算力更弱,实际差异更多体现在内存容量、外设和引脚资源 |
| 内存 | 板卡使用 1GB 外置内存;K230 芯片支持外置 LPDDR3 / LPDDR4,最大支持2G内存 | K230D 内置 128MB LPDDR4 | 算力接近,但 Lite-K230D 内存更小,运行大模型或多模型时更容易受限制 |
| USB 资源 | K230 芯片 USB 资源更多,庐山派K230板载 USB-A HOST | K230D USB 资源更少,庐山派Lite-K230D无 USB HOST | 本章 Type-C 连接和运行例程流程一致,但 USB HOST 相关例程不能直接照搬到 Lite-K230D |
| ADC 资源 | K230 最多 6 路 ADC(实际庐山派只引出了4路) | K230D 最多 3 路 ADC(实际庐山派Lite也只引出了3路) | 后续 ADC 教程要注意可用通道数量不同 |
| 封装与引脚 | K230 封装更大,引脚资源更充足 | K230D 封装更小,部分引脚没有引出 | 庐山派Lite-K230D 外接模块时更要注意 IO 复用和资源占用 |
| 音频与扩展 | 标准版 K230 有 3.5mm 耳机口,无板载风扇接口 | Lite-K230D 有 HT6872 功放和 PWM 风扇接口 | 音频、蜂鸣器、风扇等教程会按板卡硬件能力分别说明 |
NOTE
嘉楠官方问答中提到,K230D 主要是内置 128MB DDR,并且部分引脚没有引出;其他方面没有明显差别。参考:K230和K230D有哪些区别?
1.3 K230芯片简介
K230芯片集成了两颗RISC-V处理器核心,双核玄铁C908,12nm 制程工艺,主频高达1.6GHz,是全球首款支持RISC-V Vector 1.0标准的商用SOC,配备第三代KPU处理单元,专为图像、视频、音频处理和AI加速设计,提供强劲的本地AI推理能力。支持三路MIPI CSI视频输入,最大分辨率可达4K。K230支持常见的AI计算框架如TensorFlow和PyTorch。下面是该处理器的框架图:

二 开发前准备
| 序号 | 名称 | 数量 | 说明 |
|---|---|---|---|
| 1 | 立创·庐山派K230-CanMV开发板 或 立创·庐山派Lite-K230D-CanMV开发板 | 1片 | 两款开发板均适用本章,固件需要分别选择对应版本 |
| 2 | GC2093摄像头 | 1块 | 庐山派系列的标准套件都会提供 |
| 3 | TF 卡(2GB 以上,Class 10 等级及以上) | 1片 | 建议使用质量稳定的 TF 卡,4GB/8GB 都可以 |
| 4 | Type-C 数据线 | 1条 | 用于给开发板供电并连接电脑 |
| 5 | TF 卡读卡器 | 1个 | 推荐使用读卡器把固件镜像写入 TF 卡 |
TIP
标准版 立创·庐山派K230-CanMV开发板 和 立创·庐山派Lite-K230D-CanMV开发板 都可以按照本章流程完成快速上手。摄像头型号以实际套件为准。
TF 卡建议优先选择质量稳定、速度达标的品牌卡。我们目前测试常用的是立创商城的 MK(米客方德)8GB TF 卡(SDSDQAB-008G-MK),购买链接:https://item.szlcsc.com/mro/49307913.html
本章只是快速上手,4GB 容量通常已经够用。如果后续要保存较多图片、视频或模型文件,可以再选择更大容量的 TF 卡。
2.1 安装 CanMV IDE K230
我们需要安装 CanMV IDE K230。这里要注意,K230 使用的是专门的 K230 版本 IDE,不要和 K210 使用的 CanMV IDE 搞混了。
IDE 建议使用较新的版本,新版本通常会修复连接、卡顿和例程兼容性问题。下载地址为:勘智开发者社区-资料下载,各位根据自己的电脑系统选择对应版本即可。

打开后按照提示进行安装就可以了,注意安装到你知道的目录,建议不要安装到C盘。

安装成功之后可以在Windows 11 系统左下角的搜索栏中点击搜索找到CanMV IDE K230,我电脑这里的CanMV IDE是给K210使用的,如果大家也用过k210的话在打开IDE的时候需要注意,只有后面带 K230 标识的才支持庐山派 K230 / Lite-K230D。如果搜索不到大家也可以直接去自己的安装目录的bin目录下的canmvide.exe文件。

2.2 先说清楚:烧录固件和运行脚本不是一回事
庐山派使用的是 CanMV MicroPython 环境。MicroPython 是解释性语言,我们写的 .py 文件不是像 STM32 C 工程那样编译成固件再烧录进芯片,而是由开发板里的 MicroPython 解释器读取并执行。
所以这里先把说法统一一下:
| 操作 | 推荐叫法 | 说明 |
|---|---|---|
将 .img 固件镜像写入 TF 卡 | 烧录固件 / 写入固件镜像 | 这是把系统固件写入存储介质 |
在 CanMV IDE K230 中点击绿色三角运行 .py 文件 | 运行脚本 / 执行程序 | 这是让 MicroPython 解释器执行脚本,不是烧录程序 |
将 .py 文件复制到开发板文件系统 | 拷贝脚本 / 保存脚本 | 只是文件传输,不是烧录 |
IMPORTANT
后面我们说【烧录】时,指的是把 .img 固件镜像写入 TF 卡;运行官方例程时,请准确理解为【运行脚本】或【执行程序】。
三 获取及烧录固件
3.1 获取固件
3.1.1 双板固件选择说明
两款开发板的快速上手流程一致,但固件镜像不能混用。下载固件时请先确认自己手上的板卡型号。
TODO: 要更新实际的文件
| 开发板 | 固件选择要求 | 说明 |
|---|---|---|
| 立创·庐山派K230-CanMV开发板 | 选择 K230 LCKFB 对应的 CanMV MicroPython 固件 | 不要选择 Linux 镜像,也不要选择其他厂商板卡镜像 |
| 立创·庐山派Lite-K230D-CanMV开发板 | 选择 Lite-K230D LCKFB 对应的 CanMV MicroPython 固件 | 文件名中会体现 Lite / K230D 板型信息,以下载页实际名称为准 |
DANGER
固件镜像必须和开发板型号完全匹配。烧错固件可能导致系统无法启动,严重时可能造成硬件异常,请不要混烧其他板型或其他系统镜像。
固件获取链接
推荐从嘉楠开发者社区获取最新固件。进入页面后,在 资料下载 栏目中依次选择 K230 -> Images -> CanMV -> Micropython,然后下载与自己开发板匹配、并且文件名带有 LCKFB 标识的 CanMV MicroPython 固件。
下载时可以按下面的原则选择版本:
- Daily Build:每天自动构建,版本较新。如果你遇到 IDE 连接异常、例程运行失败、外设接口不兼容等问题,可以优先尝试更新到这个版本。
- 稳定版本:适合正常学习和课堂教学。如果当前教程可以顺利运行,使用稳定版本即可。下图标出来的是[立创·庐山派K230-CanMV开发板]的固件。

不建议从旧资料包或不明确来源下载固件。也不要下载 Linux 镜像、其他厂商开发板镜像,或者文件名中没有 LCKFB 标识的镜像。上图这里展示的是[立创·庐山派K230-CanMV开发板]的固件,写本文时,如果你用的是[立创·庐山派Lite-K230D-CanMV开发板],请选择这个开头的固件【CanMV_K230D_Lushanpi_Lite...】
IMPORTANT
固件下载完成后,在烧录前请再检查一次文件名和开发板型号是否匹配。不要因为都是 K230 系列,就把其他板型的镜像写入庐山派开发板。
需要注意,下载下来的文件是压缩包,解压出来的 .img 文件才是固件镜像。
⚠️警告:
.gz 后缀结尾的是压缩包,.img 后缀结尾的才是固件镜像。往 TF 卡 中写入固件时,只能选择 .img 文件。如果直接写入 .gz 文件,开发板可能无法正常启动。
如下图所示,.gz 是压缩包,解压后得到的 .img 才是后续需要写入 TF 卡的固件镜像。

3.2 烧录固件
3.2.1 使用读卡器和 Rufus 烧录 TF 卡
下载烧录工具 Rufus,下载地址:https://rufus.ie/downloads/,这个软件是免安装的,下载下来后直接双击打开就可以了。我这里用的是4.5版本,界面如下:

此时把你的 TF 卡插入读卡器,然后把读卡器插入电脑,我这里使用的是 4GB 的 TF 卡,插入后Rufus 软件界面的设备列表栏会显示一个设备,并且左下角也会提示可以检测到设备,此时就可以点击镜像文件(请选择)后方的选择按钮来选择我们要烧录的镜像了,就选择我们在上一小节中获取到的 CanMV-K230_LCKFB_micropython_v1.1-0-g5a6fc54_nncase_v2.9.0.img 文件就可以了,选择后如下图所示:

正确选择固件镜像文件后我们直接点击右下角的开始按钮,继续操作会造成TF 卡内所有内容全部消失,需要确保你这张 TF 卡内部没有重要数据,然后等待烧录完成就可以了。当Rufus 软件的状态那一栏走完进度条,提示准备就绪时就表示成功烧录固件了,如下图所示:

此时我们就可以按以下步骤操作:
步骤:
- 关闭Rufus 软件。
- 在电脑上安全弹出我们的读卡器 。
- 拔出读卡器。
- 从读卡器上拔出我们烧录好固件镜像的 TF 卡。
- 在开发板未供电状态下插入 TF 卡。
3.2.2 使用嘉楠官方烧录工具烧录
前面 3.2.1 已经介绍了“读卡器 + Rufus”的方式,这种方式最直观,也最适合第一次上手。本小节再介绍另一种方式:使用嘉楠官方提供的 K230BurningTool 直接给 TF 卡写入固件。
为了方便演示,本小节以 立创·庐山派Lite-K230D-CanMV开发板 为例。标准版 立创·庐山派K230-CanMV开发板 也可以使用类似流程,只是下载固件时一定要选择对应板型的镜像。
DANGER
固件镜像只能写入对应的开发板。请务必选择与当前板型完全匹配的 CanMV MicroPython 镜像,不能把 K230、Lite-K230D、Linux 镜像或其他开发板镜像混用,否则可能导致系统无法启动,甚至造成硬件异常。
第一步:下载并解压固件
我们先进入 CanMV MicroPython 的每日构建目录,下载适合自己开发板的最新固件。每日构建链接为:canmv_k230_micropython daily_build。

下载完成后,先把压缩包解压出来。后面烧录工具需要选择的是解压后的 .img 固件镜像,不是 .gz 压缩包。

解压后建议记一下固件所在目录,后面在 K230BurningTool 中选择镜像时需要找到这个文件。
第二步:让开发板进入 BOOT 模式
使用官方烧录工具时,需要先让开发板进入 BOOT 模式。这里按照下图的操作方式来做:
- 先用 Type-C 数据线把开发板连接到电脑。
- 按住开发板上的 BOOT 按键不要松开。
- 在保持按住 BOOT 的同时,短按一下 RESET 按键。
- 电脑识别到 K230 USB Boot Device 后,再松开 BOOT 按键。
下图是进入 BOOT 模式的操作示意:

上图由 AI 生成,仅用于说明 BOOT 模式的操作顺序。庐山派K230 和 庐山派Lite-K230D 都有 BOOT 按键,操作思路一致,实际按键位置请以手上的开发板为准。
第三步:确认电脑是否识别到 BOOT 设备
开发板进入 BOOT 模式后,可以打开 Windows 设备管理器查看设备状态。如果没有安装驱动,通常会看到一个带感叹号的 K230 USB Boot Device。

如果出现这种情况,需要先安装 WinUSB 驱动。推荐使用 Zadig 安装:
- 下载并打开 Zadig:https://zadig.akeo.ie/。
- 点击
Options->List All Devices,显示全部 USB 设备。 - 在设备列表中选择
K230 USB Boot Device。 - 在
Driver选项中选择WinUSB。 - 点击
Install Driver,等待安装完成。
如果不熟悉 Zadig,也可以参考这个操作视频:Zadig 驱动安装视频。
驱动安装完成后,再次查看设备管理器,应能看到没有感叹号的 K230 USB Boot Device。

第四步:下载并打开 K230BurningTool
嘉楠官方提供了 K230BurningTool 烧录工具,可以用于写入 K230 系列固件。下载工具后先解压。

解压后找到 K230BurningTool.exe,双击打开。

第五步:选择固件镜像
打开工具后,先点击固件路径相关按钮,选择前面已经解压出来的 .img 固件镜像。

在文件选择窗口中找到对应的固件镜像。这里一定要再次确认文件名和开发板型号匹配,例如标准版 K230 选择 K230 对应固件,Lite-K230D 选择 Lite-K230D 对应固件。

第六步:选择烧录介质并开始烧录
确认固件镜像无误后,把目标介质修改为 SD Card,然后点击右侧的“开始”按钮。烧录过程中不要断电,也不要拔掉 Type-C 数据线或 TF 卡。
等待进度条走到 100%,并提示下载完成后,就表示固件已经写入完成。此时可以断电重启开发板,进入后续启动和连接步骤。

如果工具识别不到设备,优先按下面顺序排查:
- Type-C 数据线是否支持数据传输,不要使用只能充电的数据线。
- 开发板是否确实进入 BOOT 模式。
- 设备管理器中是否能看到
K230 USB Boot Device。 - Zadig 驱动是否已经安装为
WinUSB。 - 固件镜像是否已经解压为
.img文件。
更详细的避坑说明可以参考:USB 烧录全攻略。
四 启动开发板并连接电脑
完成以上操作后,我们就可以给开发板上电了。请先确认 TF 卡已经插入开发板,然后用 Type-C 数据线将开发板连接到电脑。
如果正常启动,板子上的状态指示灯会点亮。稍微等待一会后,我们就可以在设备管理器中看到一个新的 USB 串行设备(COMx),同时电脑上也会出现一个 CanMV 设备,可以像访问 U 盘一样查看开发板中的文件。

⚠️注意:
在第一次上电时,庐山派开发板会自动将TF 卡除固件镜像外的剩余空间格式化为fat,并挂载在/data文件夹,格式化会占用一些时间并且会主动进行一次重启。后续上电时不会再进行这个操作,所以第一次上电会稍微慢一点。
当然,如果你已经安装了CanMV IDE K230,打开IDE,当庐山派 K230 / Lite-K230D 正常启动后,左下角连接图标的右上角就会出现一个USB标志,如果没有出现则表示开发板启动失败或未成功连接电脑。下图的左边是未接入开发板的IDE,右边是接入了开发板的IDE。

五 运行固件内置例程
写入固件后的 TF 卡中会带有嘉楠官方提供的例程,源码、模型文件、字体文件等都在 TF 卡中。当开发板连接电脑后,各位可以直接在电脑的 CanMV 设备里进入 sdcard 文件夹查看这些文件。
这里再次强调一下:接下来我们是在 CanMV IDE K230 中运行脚本,不是 烧录程序 。MicroPython 会读取并执行 .py 文件,点击绿色运行按钮只是让脚本开始执行。

⚠️注意:
- 不要优先使用 IDE 自带的旧例程,版本太老可能无法直接运行,建议使用固件自带的例程。
- 摄像头相关例程通常默认使用 CSI2,也就是开发板正面的立式 22P 摄像头座。运行摄像头例程前,请确认摄像头排线方向和接口位置。
- 为了避免占用 USB 传输带宽,建议将例程先拷贝到电脑本地,再用 CanMV IDE K230 打开运行。
- Lite-K230D 的内存比标准版 K230 小,运行 AI Demo 时建议优先选择较轻量的例程。若出现内存不足、启动慢或画面卡顿,可以先换基础摄像头/显示例程确认环境是否正常。具体能运行哪些AI模型,可以看这里的区别。
其例程examples,libs,res目录结构如表所示:
Details
sdcard:
├─examples
│ ├─01-Micropython-Basics
│ │ demo_crc16.py
│ │ demo_files.py
│ │ demo_fs_info.py
│ │ demo_globals.py
│ │ demo_json.py
│ │ demo_logging.py
│ │ demo_sha256.py
│ │ demo_sys_info.py
│ │ demo_thread.py
│ │ demo_time.py
│ │ demo_view_mem.py
│ │ demo_yield.py
│ │ demo_yield_task.py
│ │
│ ├─02-Media
│ │ acodec.py
│ │ audio.py
│ │ mp4muxer.py
│ │ rtsp_server.py
│ │ video_decoder.py
│ │ video_encoder.py
│ │ video_player.py
│ │
│ ├─03-Machine
│ │ ├─adc
│ │ │ adc.py
│ │ │
│ │ ├─fft
│ │ │ fft.py
│ │ │
│ │ ├─fpioa
│ │ │ fpioa.py
│ │ │
│ │ ├─i2c
│ │ │ i2c_master.py
│ │ │ i2c_slave.py
│ │ │
│ │ ├─pin
│ │ │ pin.py
│ │ │
│ │ ├─pwm
│ │ │ pwm.py
│ │ │
│ │ ├─rtc
│ │ │ rtc.py
│ │ │
│ │ ├─spi
│ │ │ spi.py
│ │ │
│ │ ├─timer
│ │ │ timer.py
│ │ │
│ │ ├─touch
│ │ │ touch.py
│ │ │
│ │ ├─uart
│ │ │ uart.py
│ │ │ uart1.py
│ │ │
│ │ └─wdt
│ │ wdt.py
│ │
│ ├─04-Cipher
│ │ cipher.py
│ │
│ ├─05-AI-Demo
│ │ dynamic_gesture.py
│ │ eye_gaze.py
│ │ face_detection.py
│ │ face_landmark.py
│ │ face_mesh.py
│ │ face_parse.py
│ │ face_pose.py
│ │ face_recognition.py
│ │ face_registration.py
│ │ falldown_detect.py
│ │ finger_guessing.py
│ │ hand_detection.py
│ │ hand_keypoint_class.py
│ │ hand_keypoint_detection.py
│ │ hand_recognition.py
│ │ keyword_spotting.py
│ │ licence_det.py
│ │ licence_det_rec.py
│ │ nanotracker.py
│ │ object_detect_yolov8n.py
│ │ ocr_det.py
│ │ ocr_rec.py
│ │ person_detection.py
│ │ person_keypoint_detect.py
│ │ puzzle_game.py
│ │ segment_yolov8n.py
│ │ self_learning.py
│ │ space_resize.py
│ │ tts_zh.py
│ │
│ ├─06-Display
│ │ display_hdmi.py
│ │ display_lcd.py
│ │ display_virt.py
│ │
│ ├─07-April-Tags
│ │ find_apriltags.py
│ │ find_apriltags_3d_pose.py
│ │
│ ├─08-Codes
│ │ find_barcodes.py
│ │ find_datamatrices.py
│ │ find_qrcodes.py
│ │
│ ├─09-Color-Tracking
│ │ automatic_grayscale_color_tracking.py
│ │ automatic_rgb565_color_tracking.py
│ │ black_grayscale_line_following.py
│ │ image_histogram_info.py
│ │ image_statistics_info.py
│ │ multi_color_code_tracking.py
│ │ single_color_code_tracking.py
│ │
│ ├─10-Drawing
│ │ arrow_drawing.py
│ │ circle_drawing.py
│ │ cross_drawing.py
│ │ ellipse_drawing.py
│ │ flood_fill.py
│ │ image_drawing.py
│ │ image_drawing_advanced.py
│ │ image_drawing_alpha_blending_test.py
│ │ keypoints_drawing.py
│ │ line_drawing.py
│ │ rectangle_drawing.py
│ │ text_drawing.py
│ │
│ ├─11-Feature-Detection
│ │ edges.py
│ │ find_blobs.py
│ │ find_lines.py
│ │ find_rects.py
│ │ hog.py
│ │ lbp.py
│ │ linear_regression_fast.py
│ │
│ ├─12-Image-Filters
│ │ adaptive_histogram_equalization.py
│ │ blur_filter.py
│ │ color_binary_filter.py
│ │ color_light_removal.py
│ │ edge_filter.py
│ │ erode_and_dilate.py
│ │ gamma_correction.py
│ │ grayscale_bilateral_filter.py
│ │ grayscale_binary_filter.py
│ │ grayscale_light_removal.py
│ │ histogram_equalization.py
│ │ kernel_filters.py
│ │ lens_correction.py
│ │ linear_polar.py
│ │ log_polar.py
│ │ mean_adaptive_threshold_filter.py
│ │ mean_filter.py
│ │ median_adaptive_threshold_filter.py
│ │ median_filter.py
│ │ midpoint_adaptive_threshold_filter.py
│ │ midpoint_filter.py
│ │ mode_adaptive_threshold_filter.py
│ │ mode_filter.py
│ │ negative.py
│ │ perspective_and_rotation_correction.py
│ │ perspective_correction.py
│ │ rotation_correction.py
│ │ sharpen_filter.py
│ │ unsharp_filter.py
│ │ vflip_hmirror_transpose.py
│ │
│ ├─14-Socket
│ │ http_client.py
│ │ http_server.py
│ │ iperf3.py
│ │ network_lan.py
│ │ network_wlan_ap.py
│ │ network_wlan_sta.py
│ │ tcp_client.py
│ │ tcp_server.py
│ │ udp_clinet.py
│ │ udp_server.py
│ │
│ ├─15-LVGL
│ │ │ lvgl_demo.py
│ │ │ lvgl_touch_demo.py
│ │ │
│ │ └─data
│ │ ├─font
│ │ │ lv_font_simsun_16_cjk.fnt
│ │ │ montserrat-16.fnt
│ │ │
│ │ └─img
│ │ animimg001.png
│ │ animimg002.png
│ │ animimg003.png
│ │
│ ├─16-AI-Cube
│ │ ClassificationApp.py
│ │ DetectionApp.py
│ │ MultiLabelApp.py
│ │ OCR_Det.py
│ │ SegmentationApp.py
│ │ SelfLearningApp.py
│ │
│ ├─17-Sensor
│ │ camera_dual_bind_hdmi.py
│ │ camera_mirror_flip.py
│ │ camera_single_bind_hdmi.py
│ │ camera_single_bind_lcd.py
│ │ camera_single_show_hdmi.py
│ │ camera_single_show_lcd.py
│ │ camera_snapshot_and_save.py
│ │ camera_triple_bind_hdmi.py
│ │
│ ├─18-NNCase
│ │ │ ai2d+kpu.py
│ │ │ kpu.py
│ │ │
│ │ └─face_detection
│ │ face_detection_320.kmodel
│ │ face_detection_ai2d_input.bin
│ │ face_detection_ai2d_output.bin
│ │ prior_data_320.bin
│ │
│ ├─99-HelloWorld
│ │ helloworld.py
│ │
│ ├─ai_test_kmodel
│ │ embedding.kmodel
│ │ insect_det.kmodel
│ │ landscape_multilabel.kmodel
│ │ ocr_det_int16.kmodel
│ │ ocr_rec_int16.kmodel
│ │ ocular_seg.kmodel
│ │ veg_cls.kmodel
│ │
│ ├─ai_test_utils
│ │ 0.jpg
│ │ 1.jpg
│ │ 2.jpg
│ │ 3.jpg
│ │ 4.jpg
│ │ 5.jpg
│ │ 6.jpg
│ │ 7.jpg
│ │ 8.jpg
│ │ dict.txt
│ │
│ ├─kmodel
│ │ cropped_test127.kmodel
│ │ eye_gaze.kmodel
│ │ face_alignment.kmodel
│ │ face_alignment_post.kmodel
│ │ face_detection_320.kmodel
│ │ face_landmark.kmodel
│ │ face_parse.kmodel
│ │ face_pose.kmodel
│ │ face_recognition.kmodel
│ │ gesture.kmodel
│ │ handkp_det.kmodel
│ │ hand_det.kmodel
│ │ hand_reco.kmodel
│ │ hifigan.kmodel
│ │ kws.kmodel
│ │ licence_reco.kmodel
│ │ LPD_640.kmodel
│ │ nanotracker_head_calib_k230.kmodel
│ │ nanotrack_backbone_sim.kmodel
│ │ ocr_det_int16.kmodel
│ │ ocr_rec_int16.kmodel
│ │ person_detect_yolov5n.kmodel
│ │ recognition.kmodel
│ │ yolov5n-falldown.kmodel
│ │ yolov8n-pose.kmodel
│ │ yolov8n_320.kmodel
│ │ yolov8n_seg_320.kmodel
│ │ zh_fastspeech_1_f32.kmodel
│ │ zh_fastspeech_2.kmodel
│ │
│ └─utils
│ │ dict.txt
│ │ fist.bin
│ │ five.bin
│ │ phone_map.txt
│ │ pinyin.txt
│ │ prior_data_320.bin
│ │ shang.bin
│ │ shear.bin
│ │ small_pinyin.txt
│ │ wozai.wav
│ │ xia.bin
│ │ you.bin
│ │ zuo.bin
│ │
│ ├─db
│ │ readme.txt
│ │
│ └─db_img
│ id_1.jpg
│ id_2.png
│
├─libs
│ AI2D.py
│ AIBase.py
│ PipeLine.py
│ RtspSever.py
│
└─res
└─font
LICENSE.txt
readme.txt
SourceHanSansSC-Normal-Min.ttf2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
打开 CanMV IDE K230 后,可以按下面的方式运行一个例程:
- 在电脑的 CanMV 设备中进入
sdcard/examples目录。 - 找到想运行的例程,例如
examples/05-AI-Demo/object_detect_yolov8n.py。 - 建议先把例程复制到电脑本地,再用 CanMV IDE K230 打开;也可以在 IDE 左上角点击
文件->打开文件直接加载例程。 - 确认开发板已经连接到 IDE 后,点击左下角绿色运行小三角。
- 观察 IDE 输出、LCD 画面或摄像头识别效果,确认脚本已经正常执行。
如下动图所示,点击绿色运行按钮后,IDE 会把脚本发送给开发板执行,这一步叫运行脚本。

如果有报错,比如【 RuntimeError:init panel faile 】,这是因为当前嘉楠官方的默认例程是通过HDMI来输出的,但是庐山派是没有HDMI芯片的,所以就会报错,此时你可以改成lcd。 
六 常见问题
6.1 运行 .py 例程是不是烧录程序?
不是。运行 .py 例程是让 MicroPython 解释器执行脚本;只有把 .img 固件镜像写入 TF 卡时,才叫烧录固件。
6.2 K230 和 Lite-K230D 的固件可以混用吗?
不可以。两款开发板虽然都属于庐山派 CanMV K230 系列,但固件镜像不同。下载和写入固件前,一定要确认文件名和开发板型号匹配。
6.3 电脑没有出现 CanMV 设备怎么办?
优先检查 TF 卡是否已经正确写入 .img 固件镜像、开发板是否正常上电、Type-C 数据线是否支持数据传输。如果第一次启动时间较长,可以等待开发板完成 TF 卡剩余空间初始化后再观察。
6.4 CanMV IDE K230 左下角没有 USB 标识怎么办?
先确认打开的是 CanMV IDE K230,不是 K210 使用的旧版 CanMV IDE。然后检查设备管理器中是否出现 USB 串行设备(COMx),必要时重新插拔 Type-C 数据线或重启开发板。
6.5 为什么建议使用固件内置例程?
固件内置例程与当前固件版本匹配度更高,源码、模型、字体等资源路径也已经放在 TF 卡中。IDE 自带例程可能版本较旧,直接运行时更容易遇到路径或 API 不匹配的问题。
七 本章小结
本章我们完成了庐山派 K230 / Lite-K230D 的快速上手流程:准备开发板和配件、安装 CanMV IDE K230、下载并写入对应固件、启动开发板、连接电脑,并运行了固件内置例程。

