- 2024-09-12
-
发表了主题帖:
《DNK210使用指南 -CanMV版 V1.0》第六章 Kendryte K210固件烧录
第六章 Kendryte K210固件烧录
本章将为读者介绍Kendryte K210的固件烧录,以及Kendryte K210外部NOR Flash的空间分布。
本章分为如下几个小节:
6.1 外部NOR Flash的空间分布
6.2 Ubuntu下的固件烧录
6.3 Windows下的固件烧录
6.1 外部NOR Flash的空间分布
Kendryte K210的内部没有用户Flash,因此Kendryte K210需要外挂NOR Flash,才能烧录用户固件,Kendryte K210上电后会将保存在外部NOR Flash中0偏移地址的固件加载到内部的SRAM中执行,因为Kendryte K210内部有6MB通用SRAM,因此外部NOR Flash中0~固件大小(最大6MB)地址范围的空间使用与存放应用固件的,剩余的外部NOR Flash空间则为用户空间。
若假设外部NOR Flash的大小为16MB,应用固件的大小为6MB,则此时外部NOR Flash的空间分布,如下表所示:
空间
起始地址
结束地址
大小
应用固件
0x000000
0x5FFFFF
0x600000
用户空间
0x600000
0xFFFFFF
0xA00000
表6.1.1 外部NOR Flash空间分布表(存在假设条件)
在CanMV中,CanMV将用户空间中的一部分NOR Flash空间作为文件系统使用,默认情况下,CanMV使用的文件系统占用的是NOR Flash中偏移地址为0xD00000且长度为0x300000的空间,因此,若假设外部NOR Flash的大小为16MB,CanMV应用固件的大小为6MB,则此时外部NOR Flash的空间分布,如下表所示:
空间
起始地址
结束地址
大小
应用固件
0x000000
0x5FFFFF
0x600000
用户空间
0x600000
0xCFFFFF
0x700000
CanMV文件系统
0xD00000
0xFFFFFF
0x300000
表6.1.2 CanMV下外部NOR Flash空间分布表(存在假设条件)
6.2 Ubuntu下的烧录固件
Kendryte K210固件的烧录需要借助kflash工具,kflash是一个开源的项目,其项目仓库的地址为:https://github.com/vowstar/kflash.py.git,建议读者在使用kflash前,先访问kflash的项目仓库并仔细阅读其README.md文件,了解kflash的用法。
在使用kflash烧录CanMV固件前,需要让Kendryte K210与Ubuntu进行连接,首先需将Kendryte K210的UARTHS通过USB转UART芯片与USB数据线连接至电脑主机的USB端口,接着在虚拟机的VMware Workstation Player窗口中的Playerà可移动设备下找到USB转UART芯片对应的USB设备,将其设置为与虚拟机连接。
连接成功后,在Ubuntu下查找设备:
# Linux
ls /dev/tty*
在列出的设备中找到对应的设备,例如:/dev/ttyACM6。
接着便可使用kflash烧录上一小节中编译出的CanMV固件至Kendryte K210:
# Linux
kflash -p /dev/ttyACM6 canmv.bin
6.3 Windows下的烧录固件
在Windows下烧录CanMV固件的方法依然是借助kflash工具,因此需要先在Windows下安装kfalsh(该工具依赖Python和pip,因此需要先安装Python和pip):
# Windows
pip install kflash
接着按照上一小节介绍的方式连接Kendryte K210与电脑主机,但注意不要让虚拟机连接到对应的USB设备,否则Windows会找不到对应的USB设备。
连接成功后,在Windows下找到对应的端口号:
# Windows
Get-WmiObject Win32_SerialPort | select-Object Name
在列出的端口中找到对应的端口号,例如:COM6。
接着便可使用kflash烧录上一小节中编译出的CanMV固件至Kendryte K210:
# Windows
kflash -p COM6 canmv.bin
- 2024-09-06
-
发表了主题帖:
《DNK210使用指南 -CanMV版 V1.0》第五章 编译CanMV固件
第五章 编译CanMV固件
上一章节中已经搭建好了基于CanMV的C开发环境,这么一来便可以进行基于C语言和FreeRTOS的应用开发或者编译基于MicroPython语法的应用开发方式所需的CanMV固件,本章就将带领读者体验一下CanMV固件的编译流程。
本章分为如下几个小节:
5.1 CanMV固件编译说明
5.2 获取CanMV源码
5.3 编译CanMV源码
5.1 CanMV固件编译说明
CanMV固件可由CanMV项目编译得到,如果读者对CanMV固件有裁剪或自定义功能的需求,那么可根据本章介绍的内容,亲自编译CanMV固件。
但对于大部分读者,编译CanMV固件并不是必须的,因为在A盘à软件资料à软件àCanMV固件中提供了编译好的固件,读者可以直接使用。
因此,需不需要读者自行编译CanMV固件,完全由读者的实际情况决定,若以提供的固件不能满足读者的使用需求,那遍需要自行编译CanMV固件。当然,自行编译CanMV固件,也能对CanMV项目有更多的了解。
5.2 获取CanMV源码
CanMV项目的开源地址为:https://github.com/kendryte/canmv.git,因此可以使用Git工具获取CanMV,在新安装的Git工具使用前需要先配置用户名和用户邮箱地址:
# Linux
git config --global user.name "Your user name"
git config --global user.email "Your user email"
使用Git工具获取CanMV项目源码仓库:
# Linux
git clone https://github.com/kendryte/canmv.git $WORKSPACE/canmv/
cd $WORKSPACE/canmv/
git submodule update --init --recursive
获取到CanMV项目源码仓库后,查看仓库的Tag:
# Linux
git tag -l
在列出的所有Tag中,找到最新的Tag,然后切换到该Tag,以v1.0.5为例:
# Linux
git checkout v1.0.5
至此,已经成功获取到最新发布的CanMV源码了,若读者后续有修改CanMV源码并提交修改的需求,可以在此基础上创建一个分支:
# Linux
git switch -c dev
为方便读者使用,在A盘à软件资料à软件àCanMV项目仓库压缩包中提供了CanMV项目仓库的仅克隆无修改的压缩包(可能不是最新版本)。
关于Git工具软件的使用介绍不是本教程文档的重点,请读者在使用中遇到问题时,善用搜索引擎。
5.3 编译CanMV源码
关于CanMV源码的编译,建议读者先详细阅读CanMV仓库下的build.md文档。
编译CanMV源码前,需要先安装一下Python依赖库:
# Linux
cd $WORKSPACE/canmv/
pip install -r requirements.txt
随后,读者请根据使用的板子,进入对应的工程目录下,对工程进行配置:
# Linux
cd projects/canmv_atk_dnk210/
python project.py \
--toolchain $TOOLS/kendryte-toolchain/bin \
--toolchain-prefix riscv64-unknown-elf- \
config
以上的配置,主要是配置编译工程所使用的工具链,如果读者有对CanMV固件功能裁剪或自定的的需求,可以执行一下命令,然后对工程进行更加详细的配置:
# Linux
python3 project.py menuconfig
工程配置完成后,便可对工程进行编译:
# Linux
python project.py build
编译完成后,将在工程的build目录下生成canmv.bin文件,即CanMV固件。
- 2024-09-04
-
发表了主题帖:
《DNK210使用指南 -CanMV版 V1.0》第四章 基于CanMV的C开发环境搭建
第四章 基于CanMV的C开发环境搭建
不论是使用CanMV提供的基于C语言和FreeRTOS的应用开发方式开发应用程序或是编译CanMV固件,都需要搭建基于CanMV的C开发环境,用于编译CanMV源码。
本章分为如下几个小节:
4.1 开发环境搭建说明
4.2 安装VMware Workstation Player
4.3 创建虚拟机并安装Ubuntu
4.4 开启SSH服务并进行远程连接
4.5 创建工作目录
4.6 运行开发环境搭建脚本
4.1 开发环境搭建说明
CanMV提供了基于C语言和FreeRTOS的应用开发方式以及基于MicroPython语法的应用开发方式,其中基于C语言和FreeRTOS的应用开发方式依靠直接编译CanMV源码和应用代码来生成应用程序的可执行文件,而基于MicroPython语法的应用开发方式则是需要先编译CanMV源码并得到CanMV固件,然后在目标芯片上运行CanMV固件,以此来解析并运行MicroPython脚本的应用程序。
可以发现,无论使用那种开发方式进行CanMV的应用开发,都是需要编译CanMV的源码,因此本章介绍的开发环境实际上就是CanMV源码的编译环境,因此在搭建好CanMV的源码编译环境后,便可使用基于C语言和FreeRTOS的应用开发方式开发应用程序以及编译CanMV固件。
在CanMV项目仓库源码编译相关的文档(build.md)中有这么一句话,如下所示:
Only support Linux(recommend) and macOS
那么,这意味着CanMV源码的编译只能在Linux或macOS操作系统下完成,在Windows下是无法完成CanMV源码编译的,并且也推荐在Linux操作系统下进行CanMV源码的编译。为此本教程文档将选用Linux操作系统来搭建CanMV的编译环境,具体选用的Linux发行版本是Ubuntu Server 20.04.6。当然,对于具有能够解决所遇到问题的能力的读者,也可以选用其他Linux发行版本或macOS。
至此,确定了使用Ubuntu Server 20.04.6作为开发环境的操作系统,但是可能大部分读者的电脑安装的都是Windows操作系统,身边并没有装有Ubuntu Server 20.04.6操作系统的电脑,那怎么办呢?以下列出一个解决方案:
以购买、租借等方式新增一台安装Ubuntu Server 20.04.6操作系统的电脑
使用Windows下的WLS(适用于Linux的Windows子系统)
使用VMware Workstation Player等应用程序在Windows下创建虚拟机,并运行Ubuntu Server 20.04.6操作系统
其他
本教程文档将就以上解决方案中的第三点(使用VMware Workstation Player等应用程序在Windows下创建虚拟机,并运行Ubuntu Server 20.04.6操作系统)提供详细的教程步骤,具体将介绍在Windows操作系统下使用VMware Workstation Player 17.0.0创建虚拟机并安装运行Ubuntu Server 20.04.6操作系统。
除此了操作系统之外,CanMV源码编译的开发环境,还需要Python、pip、Git、CMake、适用于目标芯片的Toolchain和kflash等软件的支持,下面列出了本教程文档使用的部分软件的版本信息:
软件
版本
Window环境
Windows 10
-
VMware Workstation Player
17.0.0
Visual Studio Code
-
Linux环境
Ubuntu Server
20.04.6
openssh-server
-
Python
3.8.10
pip
23.3.1
Git
-
CMake
v3.28.0-rc2
Kendryte GNU Toolchain
v8.2.0-20190409
kflash
1.1.6
表4.1.1 本教程文档所使用部分软件的版本信息
从本章节开始,将会有很多命令行操作,为了方便读者区分是在Window环境下的命令行操作还是Linux环境下的命令行操作,在此约定,下文中出现的命令都将以所需操作系统环境的名称作为命令的注释,且放置在首行。
例如,Windows环境下的命令行操作,如下所示:
# Windows
echo "Hello, World"
Linux环境下的命令行操作,如下所示:
# Linux
echo "Hello, World"
4.2 安装VMware Workstation Player
本教程使用的VMware Workstation Player版本为17.0.0,VMware Workstation Player是一个能够在Windows操作系统下创建虚拟机并在所创建虚拟机上运行Ubuntu Server 20.04.6操作系统的程序软件,该软件的下载地址为https://www.vmware.com/cn/products/workstation-player.html,读者也可以在A盘à软件资料à软件àVMware Workstation Player安装程序下找到该软件的安装程序。
在Windows操作系统下双击打开VMware Workstation Player 17.0.0的安装程序运行安装程序,并根据提示点击“下一步”按钮,如下图所示:
图4.2.1 VMware Workstation Player 17.0.0安装程序
认真阅读该软件的“最终用户许可协议”,确认无误后,即可勾选“我接受许可协议中的条款”复选框,随后点击“下一步”按钮,如下图所示:
图4.2.2 VMware最终用户许可协议
若提示“更改Windows功能的兼容性设置”,则根据需要勾选“自动安装 Windows Hypervisor Platform (WHP)”复选框,随后点击“下一步”按钮,如下图所示:
图4.2.3 更改Windows功能的兼容性设置
接着自定义安装选项,包括软件的位置、是否安装增强型键盘驱动程序、是否将软件的控制台工具添加到系统环境变量,配置好这些自定义安装选项后,点击“下一步”按钮,如下图所示:
图4.2.4自定义安装选项
接着是一些用户体验的配置项,读者可根据自己的喜好进行配置,配置好后点击“下一步”按钮,如下图所示:
图4.2.5 用户体验设置选项
再接着就是配置是否创建快捷方式的界面,读者可根据需要进行配置,配置好后点击“下一步”按钮,如下图所示:
图4.2.6 快捷方式配置选项
接下来,点击“安装”按钮,安装程序便会自动安装VMware Workstation Player,如下图所示:
图4.2.7 确认安装VMware Workstation Player
随后安装程序便会自动安装VMware Workstation Player,静静等待安装完成即可,如下图所示:
图4.2.8 正在安装VMware Workstation Player
安装程序完成VMware Workstation Player安装后,读者若拥有软件的许可证密钥,可点击“许可证”按钮添加许可证木密钥,若无软件的许可证密钥,直接点击“完成”按钮即可,如下图所示:
图4.2.9 完成安装VMware Workstation Player
至此,VMware Workstation Player安装完成,读者可在软件的安装路径中找到并运行软件,或通过安装程序创建的快捷方式运行软件,如下图所示:
图4.2.10 VMware Workstation Player主界面
4.3 创建虚拟机并安装Ubuntu
要使用VMware Workstation Player创建虚拟机并安装Ubuntu Server 20.04.6操作系统,请读者先根据4.2小节在Windows主机下正确安装VMware Workstation Player。
安装Ubuntu Server 20.04.6操作系统需要使用Ubuntu Server 20.04.6的系统安装镜像文件,该镜像文件可前往其官方的发布网站进行下载,网址为:https://releases.ubuntu.com/focal,进入网站后,在“Select an image”处选择“Server install image”进行下载,如下图所示:
图4.3.1 发布网站下载镜像文件
读者也可以在A盘à软件资料à软件àUbuntu Server安装镜像下找到Ubuntu Server 20.04.6的系统安装镜像文件。
准备好镜像文件后,打开VMWare Workstation Player并点击“创建新虚拟机(N)”按钮打开新建虚拟机向导,如下图所示:
图4.3.2 新建虚拟机向导
打开新建虚拟机向导后,选择“安装程序光盘映像文件(iso)(M)”,并浏览选中Ubuntu Server 20.04.6的系统安装镜像文件,如下如所示:
图4.3.3 选择映像文件
点击“下一步”按钮后,填写简易安装信息,如下图所示:
图4.3.4 填写简易安装信息
简易安装信息的说明,如下表所示:
项目
描述
全名
Ubuntu虚拟机的主机名
用户名
Ubuntu虚拟机中用户的用户名
密码
Ubuntu虚拟机中用户的密码
确认
重复输入确认“密码”
表4.3.1 简易安装信息说明
点击“下一步”按钮后,填写虚拟机的名称和位置,如下图所示:
图4.3.5 填写虚拟机信息
点击“下一步”按钮后,填写虚拟机的磁盘容量等信息,如下图所示:
图4.3.6 配置虚拟机磁盘信息
虚拟机的磁盘将占用虚拟机安装位置磁盘的空间,因此确保主机的磁盘空间足够。读者可以根据自己的实际情况来确定虚拟机的磁盘大小,另外,虚拟机的磁盘大小是可以在创建好虚拟机后再次调整的。
点击“下一步”按钮后,自定义虚拟机的硬件信息,如下图所示:
图4.3.7 自定义硬件信息
主要自定义的硬件信息有内存、处理器、网络适配器,其余的硬件信息,读者也可以根据实际情况进行调整。
硬件信息中的内存、处理器、网络适配器说明,如下表所示:
项目
描述
内存
内存大小根据主机的内存大小进行分配,建议不小于1GB
处理器
处理器内核数量根据主机的处理器内核数量进行分配
网络适配器
建议选择桥接模式,虚拟机将分配到独立的IP地址
表4.3.2 部分硬件信息说明
点击“完成”按钮后,虚拟机创建完毕,勾选“创建后开启此虚拟机”复选框,虚拟机将自动开启。
开启虚拟机后,Ubuntu Server 20.04.6的安装程序将自动运行,安装程序启动后,首先进入“选择语言”界面,读者可根据实际情况选择语言,但建议选择“English”,如下图所示:
图4.3.8 选择语言
回车确认后,若此时安装程序已经连接网络,且检测到有新发布的Ubuntu Server安装程序,则弹出更新界面,建议选择“Continue without updating”,如下图所示:
图4.3.9 不更新安装程序
回车确认后,进入键盘配置界面,键盘配置一般保持默认即可,如下图所示:
图4.3.10 配置键盘
回车确认后,进入网络配置界面,读者请根据实际的网络情况配置网络,或等待DHCP服务器自动分配IP地址,如下图所示:
图4.3.11 配置网络
回车确认后,进入网络代理配置界面,读者请根据实际情况配置网络代理,若无需网络代理,留空即可,如下图所示:
图4.3.12 配置网络代理
回车确认后,进入软件镜像源配置界面,读者可以根据实际的网络情况填写软件镜像源,也可保持默认,如下图所示:
图4.3.13 配置软件镜像源
常用的软件镜像源,如下表所示:
软件镜像源
镜像地址
Ubuntu官方中国镜像
http://cn.archive.ubuntu.com/ubuntu
清华大学开源软件镜像站
https://mirrors.tuna.tsinghua.edu.cn/ubuntu
阿里巴巴开源镜像站
https://mirrors.aliyun.com/ubuntu
表4.3.3 常用软件镜像源
回车确认后,进入磁盘分区布局的选择界面,读者可根据实际情况进行选择,一般保持默认即可,如下图所示:
图4.3.14 磁盘分区布局
回车确认后,进入磁盘分区界面,读者可根据实际情况进行分区配置,一般保持默认即可,如下图所示:
图4.3.15 配置磁盘分区
回车确认后,弹出磁盘分区确认提示,磁盘分区会擦除磁盘且无法恢复,确认无误后,选择“Continue”并回车,如下图所示:
图4.3.16 确认磁盘分区
随后进入系统信息配置界面,读者可根据实际情况配置系统信息,如下图所示:
图4.3.17 配置系统信息
系统配置信息的说明,如下表所示:
项目
描述
Your name
名字
Your server’s name
Ubuntu服务器名
Pick a username
用户名
Choose a password
密码
Confirm your password
确认密码
表4.3.4 系统配置信息说明
回车确认后,进入SSH配置界面,SSH服务用于远程连接Ubuntu Server,本教程将在Ubuntu Server安装完成后手动安装SSH服务,因此这里无需重复配置,如下图所示:
图4.3.18 配置SSH
回车确认后,进入热门软件安装界面,读者可自行选择安装与否,如下图所示:
图4.3.19 安装热门软件
回车确认后,安装程序便自动开始安装Ubuntu Server,如下图所示:
图4.3.20 Ubuntu Server安装中
等待安装程序安装Ubuntu Server完成后,会出现“Reboot Now”选项,如下图所示:
图4.3.21 Ubuntu Server安装完成
选中“Reboot Now”并回车后,虚拟机会重新启动,直到弹出Ubuntu Server的登录界面后,根据提示输入上文系统信息配置中输入的“Your name”和“Choose a password”分别作为用户名和用户密码登入Ubuntu Server系统,如下图所示:
图4.3.22 登入Ubuntu Server
至此,完成Ubuntu操作系统在虚拟机上的安装,由于在创建虚拟机的时候选择了Ubuntu Server 20.04.6的系统安装镜像文件,因此虚拟机在每次开机时都会加载该镜像文件,为了避免在之后的虚拟机开机时再次自动进入Ubuntu Server的安装程序,导致无法正常进入已安装好的Ubuntu Server 20.04.6操作系统,因此需要关闭系统安装镜像文件的“启动时连接”,具体方法为:在VMware Workstation Player软件中选择创建好的Ubuntu虚拟机并依次点击菜单栏的“Playerà可移动设备àCD/DVD 2(SATA) à设置”,如下图所示:
图4.3.23 打开系统安装镜像设置
接着找到并取消勾选“启动时连接”复选框后点击“确认”按钮,如下图所示:
图4.3.24 取消勾选“启动时连接”复选框
4.4 开启SSH服务并进行远程连接
为了方便开发操作以及主机与虚拟机之间的文件传输,建议在Ubuntu Server下开启SSH服务,这样一来,并可在Windows下使用Visual Studio Code、Windows Terminal等软件访问Ubuntu Server。
首先在Ubuntu Server下安装openssh-server:
# Linux
sudo apt update
sudo apt install openssh-server -y
安装好openssh-server后便自动开启了SSH服务,这么一来,同局域网的SSH客户端便可通过Ubuntu Server的IP地址与Ubuntu Server建立SSH连接。
查看Ubuntu Server的IP地址:
# Linux
hostname -I
接下来便可在Windows主机下通过Windows PowerShell、Windows Terminal、Visual Studio Code等软件的终端与Ubuntu Server建立SSH连接:
# Windows
# ssh user@host
ssh alientek@192.168.6.666
其中“user”是Ubuntu Server中用户的用户名,“host”是Ubuntu Server的IP地址,若Ubuntu Server的SSH服务配置正确且网络连接正常,便会提示输入“password”,即Ubuntu Server中用户的密码,成功连接后,如下图所示:
图4.4.1 使用Windows PowerShell进行SSH连接
关于Windows PowerShell、Windows Terminal、Visual Studio Code等工具软件的安装和使用介绍不是本教程文档的重点,请读者在使用中遇到问题时,善用搜索引擎。
至此,便可在Windows下通过SSH服务直接访问Ubuntu Server,非常方便操作
4.5 创建工作目录
Ubuntu Server 20.04.6安装完成后,便可在Ubuntu Server 20.04.6下安装相关的软件以搭建CanMV的开发环境,但为了方便文件管理,本教程文档将创建三个目录来存放CanMV,具体如下表所示:
目录路径
描述
~/Kendryte_K210/Resources
资源目录,用于存放下载的文件等资源
~/Kendryte_K210/Tools
工具目录,用于存放编译工具链、CMake等开发工具
~/Kendryte_K210/Workspace
工作空间目录,用于存放CanMV等工程项目源码
表4.5.1 工作目录说明
创建以上三个目录:
# Linux
mkdir -p ~/Kendryte_K210/Resources
mkdir -p ~/Kendryte_K210/Tools
mkdir -p ~/Kendryte_K210/Workspace
为了方便访问这三个目录,接着将这三个目录的路径添加到环境变量:
# Linux
echo 'export RESOURCES='"$HOME"'/Kendryte_K210/Resources' >> ~/.bashrc
echo 'export TOOLS='"$HOME"'/Kendryte_K210/Tools' >> ~/.bashrc
echo 'export WORKSPACE='"$HOME"'/Kendryte_K210/Workspace' >> ~/.bashrc
source ~/.bashrc
这么一来,便可在命令行中直接使用“$RESOURCES”、“$TOOLS”、“$WORKSPACE”来分别访问以上三个目录了,例如:
# Linux
cd $RESOURCES
4.6 运行开发环境搭建脚本
为方便开发环境的搭建,本教程文档是使用脚本程序来搭建开发环境,读者可在A盘à软件资料à软件àCanMV固件开发环境搭建脚本中找到该脚本文件,脚本文件的文件名为“canmv_dev_env_setup.sh”。
该脚本文件是在Ubuntu Server下运行的脚本程序,因此首先需要将该脚本文件传输到Ubuntu Server的文件系统中。主机与虚拟机之间传输文件的方法有很多,本文档教程将介绍使用SSH的方式进行文件传输。
在Windows环境下可以借助scp命令发送文件至SSH服务器或从SSH服务器复制文件,使用起来就和cp命令一样方便。将脚本文件从Windows的文件系统传输到Ubuntu Server的文件系统,如下:
# Windows
# scp source ... target
scp ./canmv_dev_env_setup.sh alientek@192.168.6.666:/tmp
接着到Ubuntu Server下运行该脚本程序:
# Linux
chmod +x /tmp/canmv_dev_env_setup.sh
/tmp/canmv_dev_env_setup.sh
rm /tmp/canmv_dev_env_setup.sh
脚本程序运行过程中可能需要输入用户密码,脚本程序运行完毕后,需重启以生效所有配置:
# Linux
sudo reboot
至此,基于CanMV的C开发环境基本搭建完成。
下面列出脚本程序的运行流程:
检查脚本运行环境
更新软件源和软件
创建python软链接
安装pip
安装Git
安装CMake
安装Toolchain
安装kflash
安装build-essential
有能力的读者可以自行阅读该脚本文件,有需要的话也可以根据需求修改该脚本文件。
- 2024-09-03
-
发表了主题帖:
《DNK210使用指南 -CanMV版 V1.0》第三章 CanMV简介
第三章 CanMV简介
本章将对CanMV进行简单介绍
本章分为如下几个小节:
3.1 初识CanMV
3.2 CanMV的应用开发方式
3.1 初识CanMV
CanMV是嘉楠科技针对AIOT编程的独立开源项目,其源代码在GitHub上开源(https://github.com/kendryte/canmv.git),可在例如Kendryte K210等强大的嵌入式AI SoC上运行,CanMV提供了基于MicroPython语法的应用开发方式,但同时也支持使用基于C语言和FreeRTOS的应用开发方式。
3.2 CanMV的应用开发方式
CanMV提供了基于C语言和FreeRTOS的应用开发方式和基于MicroPython语法的应用开发方式。
当使用CanMV提供的基于C语言和FreeRTOS的方式进行应用开发时,开发过程使用C或C++语言进行开发,与使用裸机SDK的裸机开发方式一样,这种开发方式要求开发者了解目标芯片的各种参数信息和特性,但相较于使用裸机SDK的裸机开发方式,CanMV提供了移植好的FreeRTOS操作系统,以便开发者能够完成更加复杂多任务应用的开发。
虽然使用C语言的裸机或操作系统的开发方式往往能使应用具有较高的运行效率和性能,但需涉及目标芯片底层寄存器的配置并同时对开发者的嵌入式开发能力有一定要求,但如果是为了初步了解目标芯片的功能、快速地进行一些功能验证或是完成一些相对简单的功能开发,那CanMV提供的基于MicroPython语法的开发方式就是再合适不过的选择了。使用CanMV提供的基于MicroPython语法的应用开发方式,开发者可以快速且便捷地完成应用开发,以下是两个基于MicroPython语法的简单应用示例:
寻找I2C设备示例:
from machine import I2C
i2c = I2C(I2C.I2C0, freq=100000, scl=28, sda=29)
devices = i2c.scan()
print(devices)
拍照示例:
import sensor
import image
import lcd
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
while True:
img = sensor.snapshot()
lcd.display(img)
AI人脸检测示例:
import sensor
import image
import lcd
from maix import KPU
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
anchor = (
0.1075, 0.126875, 0.126875, 0.175, 0.1465625, 0.2246875,
0.1953125, 0.25375, 0.2440625, 0.351875, 0.341875, 0.4721875,
0.5078125, 0.6696875, 0.8984375, 1.099687, 2.129062, 2.425937
)
face_detecter = KPU()
face_detecter.load_kmodel('/sd/face_detect_320x240.kmodel')
face_detecter.init_yolo2(
anchor, anchor_num=9,
img_w=320, img_h=240,
net_w=320, net_h=240,
layer_w=10, layer_h=8,
threshold=0.5, nms_value=0.2, classes=1
)
while True:
img = sensor.snapshot()
face_detecter.run_with_output(img)
faces = face_detecter.regionlayer_yolo2()
for face in faces:
img.draw_rectangle(face[0], face[1], face[2], face[3], color=(0, 255, 0))
可以看到,使用CanMV提供的基于MicroPython语法的开发方式,仅需少量的几行代码便可实现一些简单的功能。
CanMV的源码本质上是一套基于C的软件开发框架,CanMV可谓是站在巨人的肩膀上实现的一套软件框架,为什么这么说呢?这是因为CanMV集成了许多现成的软件库,例如裸机SDK、FreeRTOS、MicroPython、OpenMV的图像处理库等一系列软件库,其中裸机SDK提供了CanMV驱动Kendryte K210底层硬件的能力,FreeRTOS为CanMV实现多核多任务的任务调度以及移植MicroPython成为可能,MicroPython让CanMV的应用可以以类似Python脚本的方式进行开发,OpenMV的图像处理库让CanMV的应用程序可以快速地对图像进行各种包括但不限于元素绘制、图像滤波、特征检测、色块追踪、图像对比和码识别的处理。
- 2024-08-30
-
发表了主题帖:
《DNK210使用指南 -CanMV版 V1.0》第二章 Kendryte K210简介
本帖最后由 嵌入式正点原子 于 2024-8-30 17:25 编辑
第二章 Kendryte K210简介
本章将对Kendryte K210进行简单的介绍,带领读者了解Kendryte K210是什么?有什么资源?能做什么?让读者对Kendryte K210有一个基本的了解。
本章分为如下几个小节:
2.1 初识Kendryte K210
2.2 Kendryte K210资源简介
2.1 初识Kendryte K210
Kendryte K210(勘智K210)是嘉楠科技(Canaan)于2018年9月发布的一款人工智能芯片,集成了机器视觉与机器听觉的能力,定位于人工智能与边缘计算领域。Kendryte K210使用台积电(TSMC)超低功耗的28纳米制程,具有双核64位处理器,拥有较好的功耗性能、稳定性与可靠性。
Kendryte K210的特点主要有以下几个方面:
1,具备机器视觉能力。
2,具备机器听觉能力。
3,更好的低功耗视觉处理速度与准确率。
4,具备卷积人工神经网络硬件加速器KPU,可高性能进行卷积人工神经网络运算。
5,TSMC 28nm先进制程,温度范围-40℃到125℃,稳定可靠。
6,支持固件加密,难以使用普通方法破解。
7,独特的可编程IO阵列,使产品设计更加灵活。
8,低电压,与相同处理能力的系统相比具有更低功耗。
9,3.3V/1.8V双电压支持,无需电平转化,节约成本。
Kendryte K210具备机器视觉能力,通过嘉楠科技完全自主研发的神经网络加速器IP,可以在超低功耗下进行高速卷积神经网络计算,以独立且实时地实现基于卷积神经网络的目标检测或图像分类,以及人脸检测和人脸识别等机器视觉任务。
同时Kendryte K210也具备了机器听觉能力,其芯片上自带高性能麦克风阵列音频处理器,可以在不占用CPU资源的前提下,对实时声源定向与波束成形等的计算进行硬件加速,从而实现声源定向、声场成像、波束成形、语音唤醒和语音识别等功能。
Kendryte K210的图片,如图2.1.1所示:
图2.1.1 Kendryte K210
此外,Kendryte K210也是一颗性能强劲的MCU,它包含了RISC-V 64位双核CPU(Central Processing Unit,中央处理器),主频高达400MHz(可超频至600MHz),并且每个核心都内置了独立的FPU(Floating Point Unit,浮点运算单元)。Kendryte K210包含的用于加速计算卷积人工神经网络的KPU和用于处理麦克风阵列输入的APU是其机器视觉与机器听觉这两大核心功能的基础。同时Kendryte K210还具备了快速傅里叶变换加速器,可以进行高性能复数FFT计算。
因此对于大多数机器学习算法,Kendryte K210都具备高性能的处理能力。
2.2 Kendryte K210资源简介
Kendryte K210采用了BGA144的封装,在8x8x0.953mm的体积下封装了丰富的引脚资源和外设资源,Kendryte K210的硬件资源,如表2.2.1所示:
表2.2.1 Kendryte K210硬件资源表
从上表中可以看出,Kendryte K210不仅拥有强劲的性能,并且还拥有丰富的硬件资源,这些硬件资源大大地扩展了Kendryte K210上两颗RISC-V 64位CPU的应用场景。
在机器视觉、机器听觉与机器学习算法的应用场景下,KPU、APU和FFT可以针对应用场景下的专门计算作硬件加速,这使得Kendryte K210可以高性能且低功耗地胜任这些应用场景。
在安全加密的应用场景下,Kendryte K210包含的AES和SHA256可以相对于软件,以极快的速度完成ECB、CBC、GCM模式下等多种Key长度的加解密运算和SHA-256的计算。
在音视频采集与音频输出的应用场景下,DVP和I2S将为其提供相应的硬件接口。其中,DVP采集到的图像数据可以直接一并或单独地转发给AI模块或者内存,以实现高效的机器视觉处理。
在控制与通讯的应用场景下,Kendryte K210包含了众多控制与通讯的外设,例如:UART、UARTHS、GPIO、GPIOHS、I2C、SPI、TIMER,这些外设提供了Kendryte K210在控制与通讯应用场景下的能力。
此外,Kendryte K210包含的SRAM、FPIOA、WDT、RTC和DMAC等外设也为Kendryte K210在各个应用场景下灵活、稳定且高效的运行提供了保障。
关于Kendryte K210更详细的介绍,可以查看Kendryte K210的数据手册仓库(仓库链接),读者可以在A盘àKendryte K210参考资料àKendryte K210数据手册中找到这个仓库的存档。
- 2024-08-29
-
发表了主题帖:
《DNK210使用指南 -CanMV版 V1.0》第一章 本书学习方法
第一章 本书学习方法
为了让读者更好地学习和使用本书,本章将为读者介绍本书的学习方法,包括:本书的学习顺序、编写规范、代码规范、资料查找和学习建议等内容。
本章分为如下几个小节:
1.1 本书学习顺序
1.2 本书参考资料
1.3 本书编写规范
1.4 本书代码规范
1.5 例程资源说明
1.6 学习资料查找
1.7 给初学者的建议
1.1 本书学习顺序
为了让读者更好地学习和使用本书,我们做了以下几点考虑:
坚持循序渐进的思路讲解,从基础到入门,从简单到复杂;
将知识进行分类介绍,简化学习过程;
将板卡硬件资源介绍独立成一个文档《DNK210硬件参考手册.pdf》。
因此,读者在学习本书的时候,我们建议:先通读一遍《DNK210硬件参考手册.pdf》,对板卡的硬件资源有个大概的了解,然后从本书的基础篇开始,再到实验篇,循序渐进,逐一攻克。
对于初学者,更是要按照以上建议的学习路线进行学习,不要跳跃式学习,因为本书中的知识是环环相扣的,如果没有掌握前面的知识,就去学习后面的知识,就会学的非常吃力。
对于已经有了一定单片机基础的读者,就可以跳跃式地学习,学习效率,当然了,若是遇到不懂的知识点,也得查阅前面的知识点进行巩固。
1.2 本书参考资料
本书主要参考的资料有如下两份文档:
《Kendryte 规格书》(链接)
《CanMV 文档》(链接)
这两份文档均是嘉楠科技针对Kendryte K210提供的文档,前者是Kendryte K210的技术规格书,该规格书主要向硬件设计者提供Kendryte K210的硬件参数信息,当然,软件开发者也是有必要了解这些参数信息的。
后者是嘉楠科技针对CanMV项目提供的文档,该文档非常详细地对CanMV的应用开发进行介绍和讲解,并提供了丰富的例程以及API介绍,是CanMV应用开发者入门必看的文档之一。
以上提及的两份文档也是读者在学习本书的过程中必不可少的参考资料,读者可以在A盘àKendryte K210参考资料中找到这两份文档。
1.3 本书编写规范
本书通过数十个例程,为读者详细介绍了Kendryte K210和CanMV的绝大多数功能,按照知识结构,本书分为两大篇章:基础篇和实验篇。
基础篇,共八章,主要是一下基础知识介绍,包括芯片、软件库介绍以及开发环境搭建等,这些章节在结构上没有共性,但相互有关联,即:必须先学习前面的知识,才能更好地学习后面的知识。
实验篇,共三十九章,主要介绍了在CanMV环境下如何在Kendryte K210上各种功能的使用和应用的开发。这些章节在结构上比较有共性,一般分为四个部分,如下:
1,功能介绍
2,硬件设计
3,程序设计
4,运行验证
功能介绍,简单介绍具体实验章节使用到的硬件外设或CanMV中的软件模块,让读者对实验章节中涉及的软硬件原理有一个基本的了解,便于后面的程序设计。
硬件设计,包括实验例程实现的功能说明、使用的硬件资源及其原理图。读者可以清晰地了解实验章节中的实验例程要实现什么功能、用到的哪些硬件资源、各个硬件资源之间的连接原理图如何。这样有利于程序的设计与实现。
程序设计,主要介绍本章实验例程中的程序部分,包含了例程程序用到的关键软件模块介绍、例程程序的程序流程图和主要的代码讲解,让读者深入了解整个程序代码。
运行验证,是实验章节中的实践部分,在完成程序设计之后,运行设计的程序,并观察是否能够按照预期的现象进行功能,形成一个闭环。
1.4 本书代码规范
本书提供的试验例程代码均为Python脚本,因此代码也是严格遵循Python的语法要求进行编写的。
总结几个规范的关键点:
1,使用有意义的变量名和函数名;
2,使用简洁明了的注释介绍代代码的功能和目的;
3,每个代码块都需要以4个空格为一个缩进等级进行缩进,以表达明确的代码层级关系并且方便代码的阅读;
4,方法、函数和代码块两两之间有且只有一个空行;
5,必须严格遵循Python语法进行脚本程序的设计和编写。
1.5 例程资源说明
DNK210开发板的配套资料中提供的CanMV版实验例程多达39个,这些实验例程均是基于CanMV进行编写的,因此也只能在CanMV环境下运行。这些例程大部分都是原创,并且有着非常详细的注释,代码风格统一、内容循序渐进,非常适合初学者入门学习。
DNK210开发板的CanMV版实验例程如下表所示:
表1.5.1 DNK210 CanMV版例程表
从上表中可以看出,正点原子DNK210开发板的CanMV版例程基本上涵盖了CanMV环境下Kendryte K210上能实现的大部分基础功能。
并且按照上表中的实验名称可以看出,实验例程的安排都是循序渐进的,从简单且基础的功能开始,一步一步地深入,从简单到复杂,这样更有利于读者学习和掌握,也正因此,正点原子的DNK210开发板是非常适合初学者的。
1.6 学习资料查找
有关Kendryte K210和CanMV的相关学习资料,可以尝试从以下五个途径进行获取:
1,嘉楠开发者社区资料下载页面的资料
在嘉楠开发者社区中的资料下载中心,提供了Kednryte K210的部分相关资料,链接,在该链接里提供了Kendrryte K210的软件SDK、硬件设计参考、编程指南、编译工具链和IDE等资料,如下图所示:
图1.6.1 嘉楠开发者社区的资料下载页面
2,嘉楠开发者社区文档页面的资料
嘉楠开发者社区中也针对Kendryte K210提供了CanMV的在线文档,链接,该在线文档主要介绍CanMV在Kendryte K210上的使用,文档中也提供了一些简单的示例,并且有着对CanMV中API详细的介绍等,如下如所示:
图1.6.2 嘉楠开发者社区的CanMV文档页面
3,Kendryte GitHub主页的资料
Kendryte K210官方的很多软件、文档等资料都在Github上开源,链接,在Kendryte的GitHub主页里可以找到许多Kendryte K210相关的软件、文档等相关的开源仓库,如下图所示:
图1.6.3 Kendryte的GitHub主页