【BPI-CanMV-K230D-Zero开发板体验】介绍、系统安装、工程测试
本文介绍了香蕉派 CanMV K230D Zero 开发板的相关信息,包括主控参数、板载资源、原理图、特点应用以及开箱,之后介绍了 SDK 编译以及系统镜像固件的烧录流程,并给出一些官方 Demo 例程的工程测试。
介绍
Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计。
该开发板由嘉楠科技与香蕉派开源社区联合设计研发,搭载了勘智 K230D 芯片。

K230D 芯片拥有双核玄铁 C908 RISC-V CPU,集成自主研发的第三代 KPU,内置 128MB LPDDR4 内存,提供了高性能的本地推理运算支持。
Canmv K230D Zero 的设计旨在支持各种 DIY 项目、物联网设备和嵌入式系统,具有丰富的开发资源和小巧的设计尺寸。可广泛应用于编程学习、边缘 AI 音视频产品创新、性能评估等领域。
K230D
BPI-CanMV-K230D Zero 开发板采用嘉楠科技 Kendryte® 系列 AIoT 芯片的新一代 SoC 芯片 K230D;
该芯片采用全新的多异构单元加速计算架构,集成了 2 个 RISC-V 高能效计算核心,内置新一代 KPU(Knowledge Process Unit)智能计算单元,具备多精度 AI 算力,广泛支持通用的AI计算框架,部分典型网络的利用率超过了70% ;
该芯片同时具备丰富多样的外设接口,以及 2D、2.5D 等多个标量、向量、图形等专用硬件加速单元,可以对多种图像、视频、音频、AI等多样化计算任务进行全流程计算加速,具备低延迟、高性能、低功耗、快速启动、高安全性等多项特性。
详见:Datasheet - k230_docs .
SDK
K230 SDK 是面向 K230 开发板的软件开发包,包含了基于Linux & RT-smart 双核异构系统开发需要用到的源代码,工具链和其他相关资源。
K230 SDK 需要在 Linux 环境下编译,推荐使用 Ubuntu Liunx 20.04
详见:kendryte/k230_sdk: Kendryte K230 SDK .
特点
- 嘉楠科技 K230D RISC-V 芯片
- 128 RAM 内存
- 双 Camera 摄像头
- MIPI DSI 显示屏接口
- 板载 WiFi 模块
- 40-Pin GPIO 引脚
- ADC audio语音接口
硬件接口

详见:香蕉派 BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计 | BananaPi Docs .
原理图
包括主控、电源、外设和摄像头等部分。
主控

电源

外设

摄像头

开箱
包括外包装、开发板外观、摄像头模块等。
Package

Top view

Bottom view

Camera

详见顶部视频。
系统安装
包括 SDK 编译以及系统镜像烧录等流程。
编译 SDK
进入 Linux 系统,下载 K230 SDK 源码并编译
git clone https://github.com/kendryte/k230_sdk
cd k230_sdk
make prepare_sourcecode
make prepare_sourcecode 会自动下载 Linux 和 RT-Smart toolchain, buildroot package, AI package 等.
需确保该命令执行成功且无 Error 产生。

编译镜像
Ubuntu 终端执行
sudo ln -sf ~/k230_sdk/toolchain /opt/toolchain
make CONF=k230_canmv_defconfig
编译完成后,在 images 文件夹下生成 sysimage-sdcard.img 镜像文件。
或者直接使用官方提供的镜像文件,详见:勘智开发者社区-资料下载 、Releases · kendryte/k230_canmv .
镜像烧录
- 下载并安装 Rufus 烧录工具软件;
- 运行软件,连接 SD 卡并选择对应的设备;
- 加载目标镜像,点击
开始 按钮;
- 待烧录完成,将 SD 卡安装至开发板对应位置处的插槽;

- 使用两根 Type-C 数据线连接开发板,系统自动安装驱动,显示 CanMV 设备图标;

详见:烧录固件 — K230 CanMV .
工程测试
介绍了 CanMV IDE 编译器软件的安装和使用方法,以及官方和系统自带的 Demo 例程测试流程。
连接 IDE
CanMV 基于 OpenMV 项目开发,CanMV IDE 与 OpenMV IDE 基本一致,主要修改了连接方式和通信协议等相关组件,IDE 基于 qtcreator 开发。

- 保存文件时,可选择
工具 - 保存文件到CanMV设备,输入对应的路径即可。

详见:勘智开发者社区-资料下载 、Release CanMV_ide .
Demo 测试
包括摄像头画面的 IDE 界面显示、人脸识别等 Demo 例程的测试。
摄像头画面显示
通过运行官方例程,对摄像头进行画面采集测试。
硬件连接
注意软排线的连接方向(金手指朝上)

程序运行
- 选择
文件 - 示例 - Sensor ,打开例程 camera single show lcd 1.py 并运行;

或打开 SD 卡存储的例程 /CanMV/sdcard/examples/17-Sensor/camera_single_show_lcd.py 文件。
代码
完整代码如下
import time, os, sys
from media.sensor import *
from media.display import *
from media.media import *
sensor = None
try:
print("camera_test")
sensor = Sensor()
sensor.reset()
sensor.set_framesize(width = 800, height = 480)
sensor.set_pixformat(Sensor.YUV420SP)
bind_info = sensor.bind_info()
Display.bind_layer(**bind_info, layer = Display.LAYER_VIDEO1)
sensor.set_framesize(Sensor.QVGA, chn = CAM_CHN_ID_1)
sensor.set_pixformat(Sensor.RGB888, chn = CAM_CHN_ID_1)
sensor.set_framesize(Sensor.QVGA, chn = CAM_CHN_ID_2)
sensor.set_pixformat(Sensor.RGB565, chn = CAM_CHN_ID_2)
Display.init(Display.ST7701, to_ide = True, osd_num = 2)
MediaManager.init()
sensor.run()
while True:
os.exitpoint()
img = sensor.snapshot(chn = CAM_CHN_ID_1)
Display.show_image(img, alpha = 128)
img = sensor.snapshot(chn = CAM_CHN_ID_2)
Display.show_image(img, x = 800 - 320, layer = Display.LAYER_OSD1)
except KeyboardInterrupt as e:
print("user stop: ", e)
except BaseException as e:
print(f"Exception {e}")
finally:
if isinstance(sensor, Sensor):
sensor.stop()
Display.deinit()
os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)
time.sleep_ms(100)
MediaManager.deinit()
点击左下角 运行 按钮执行程序;
测试结束后,点击左下角 结束 按钮终止程序。
效果
CanMV IDE 右上角显示摄像头采集画面,下方为对应的 RGB 三色分布直方图。

人脸识别
打开例程 /CanMV/sdcard/examples/05-AI-Demo/face_detection.py 并运行;
将显示模式修改为 lcd,即可在 IDE 获取实时处理画面。
代码
关键代码如下
if __name__ == "__main__":
display_mode="lcd"
rgb888p_size = [1920, 1080]
if display_mode=="hdmi":
display_size=[1920,1080]
else:
display_size=[800,480]
kmodel_path = "/sdcard/examples/kmodel/face_detection_320.kmodel"
confidence_threshold = 0.5
nms_threshold = 0.2
anchor_len = 4200
det_dim = 4
anchors_path = "/sdcard/examples/utils/prior_data_320.bin"
anchors = np.fromfile(anchors_path, dtype=np.float)
anchors = anchors.reshape((anchor_len, det_dim))
pl = PipeLine(rgb888p_size=rgb888p_size, display_size=display_size, display_mode=display_mode)
pl.create()
face_det = FaceDetectionApp(kmodel_path, model_input_size=[320, 320], anchors=anchors, confidence_threshold=confidence_threshold, nms_threshold=nms_threshold, rgb888p_size=rgb888p_size, display_size=display_size, debug_mode=0)
face_det.config_preprocess()
while True:
with ScopedTiming("total",1):
img = pl.get_frame()
res = face_det.run(img)
face_det.draw_result(pl, res)
pl.show_image()
gc.collect()
face_det.deinit()
pl.destroy()
- 点击左下角
运行 按钮执行程序;
- 测试结束后,点击左下角
结束 按钮终止程序。
效果
摄像头对准人物头像,采集画面经程序识别,标注识别结果,反馈至 IDE 显示界面。

详见底部视频。
总结
本文介绍了香蕉派 CanMV K230D Zero 开发板的相关信息,包括主控参数、板载资源、原理图、特点应用以及开箱,之后介绍了 SDK 编译以及系统镜像固件的烧录流程,并给出一些官方 Demo 例程的工程测试,为后续的深入学习和研究做好铺垫,也为相关产品的快速开发和产品设计提供了参考。