CanMV K210工程源码架构

这篇具有很好参考价值的文章主要介绍了CanMV K210工程源码架构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

CanMV K210工程源码架构

关于CanMV

github源码地址: https://github.com/kendryte/canmv

CanMV, 让 AIOT 更简单~

CanMV 基于Sipeed MaixPy,但它与之不同,现在是一个完全独立的项目。 基于 Micropython 语法, 兼容移植openmv功能,运行在Canan强大的嵌入式AI SOC系列K210上,具有丰富的AI demo以快速实现强大的AI视觉开发。

K210 简介 :

  • 拥有硬件加速的 AI 图像识别
  • 带硬件浮点运算的双核处理器
  • 8MB(6MB+2MB) 内存
  • 16MB 外置 Flash
  • 芯片 CPU 最高可达 800MHz 主频 (开发板支持最高主频具体看开发板介绍, 通常400MHz)
  • 麦克风阵列支持(8个麦克风)
  • 硬件 AES SHA256 支持
  • FPIOA (每个外设可以映射到任意引脚)
  • 外设: I2C, SPI, I2S, WDT, TIMER, RTC, UART, GPIO 等等

目录结构

目录 子目录 子目录2 子目录3 内容梗概
assets 资源文件
projects 工程文件, 每个文件夹一个工程
tools 工具
components 组件
└-boards 板级代码
└-drivers 驱动
└-micropython micropython 相关代码
└-core micropython 源码
└-port maixpy 自定义部分源码
└-builtin_py maixpy 默认内置类
└-include 移植部分头文件
└-src 功能模块源码
└-spiffs SPIFFS 文件系统
└-utils 工具类(函数)

基于micropython的主要功能模组实现都存放在目录 components/micropython/port/src 下,该目录结构如下:

目录 子目录 内容梗概
src mpy功能模块源码
└-audio 音频相关
└-lvgl lvgl UI
└-Maix 芯片相关功能(gpio,kpu,fft,mic_arry等)
└-modules 一些模组
└-nes nes模拟器
└-omv openmv
└-speech 语音识别
└-standaed_lib mpy标准模组
└-touchscreen 触摸驱动模组
└-ulab 类numpy数学计算模组
└-video 视频相关

不同功能板子的项目创建在 projects目录下,也可以选择无micropython的c开发。

编译相关

Kconfig配置

工程使用 CMake 进行组织, 并且工程支持多个可配置选项(Kconfig

如果需要添加配置项, 可以通过修改 Kconfig 文件来达到目的,所有配置项在编译时会生成宏定义添加到global_config.h(生成的文件)中去, 而且在 CmakeLists.txt 文件中都可以使用该宏定义。

比如在 Kconfig 中定义 config BOARD_M5STICK, 在 CMakeLists.txt 中可以通过判断CONFIG_BOARD_M5STICK 是否为真来决定是否编译特定的代码。 编译时就可以通过python3 project.py menuconfig来选择是否勾选了

编译配置

以maixpy_canmv工程为例,menuconfig更改配置后新的配置文件保存在projects/maixpy_canmv/build/config/global_config.mk,build目录下是编译时的临时文件,当执行python3 project.py distclean清除编译时会被清掉,所以如果想让配置永久保存生效需要手动拷贝到文件projects/maixpy_canmv/config_defaults.mk里。

注意: 如果更改源文件后编译出错时可以先尝试python3 project.py distclean清除编译,在重新python3 project.py build编译。

固件裁剪

当固件过大时会导致可用内存变少,无法跑大型py应用或者加载大模型,这时候可以通过裁剪固件大小的办法删去不必要的功能模块。

通过python3 project.py menuconfig进入到配置界面,进入 Components configuration —> Micropython configurations—> Modules configurations —> 菜单,可以对micropython的模组进行按需选择。下面是一些不重要模组的大小占用情况:

模组 大小(byte) 说明
nes 139776 nes游戏模拟器,不重要且占用大优先裁剪
ulab 39232 类numpy数学计算库,应用场合不多
mic_array 9954 麦克风阵列,特有应用场景
yuv_table 342784 openmv中的yuv转换表,用不到可裁掉
video 5696 视频录制播放,占用不大可按需裁剪
omv_advance 444800 openmv的算法核心实现,如果只需要kpu处理而不需要openmv的算法可以裁剪掉

一般情况下想保留openmv算法与kpu跑大模型,可以裁剪这几个nes, ulab, mic_array, yuv_table, video

新硬件的适配移植

如果一个新板子sensor, lcd, sdcard等硬件引脚配置不一样,就需要重新进行适配移植,适配方式有两种:

  1. 源码里新增一个工程目录并适配
  2. 在已经烧录canmv固件的板子上上传一个config.json配置文件

源码适配新硬件

projects/maixpy_canmv项目为模板拷贝一份新的在projects目录下,比如起个名字为maixpy_test,然后打开其中的projects/maixpy_test/builtin_py/_boot.py文件,找到如下代码位置:

config = {
"type": "canmv",
"lcd": {
    "rst" : 39,
    "dcx" : 37,
    "ss" : 38,
    "clk" : 36,
    "height": 240,
    "width": 320,
    "invert": 1, /* 反显 */
    "offset_x1": 0,
    "offset_y1": 0,
    "offset_x2": 0,
    "offset_y2": 0,
    "dir": 96  /* 显示方向 */
},
"freq_cpu": 416000000,
"freq_pll1": 400000000,
"kpu_div": 1,
"sensor": {
    "cmos_pclk":47,
    "cmos_xclk":46,
    "cmos_href":44,
    "cmos_pwdn":45,
    "cmos_vsync":42,
    "cmos_rst":43,
    "reg_width":16,
    "i2c_num":2,
    "pin_clk":41,
    "pin_sda":40
},
"sdcard":{
    "sclk":28,
    "mosi":27,
    "miso":29,
    "cs":26,
    "cs_gpio":29
},
"board_info": {
	"BOOT_KEY":  16,
}
}

主要就是修改里面的lcd,sensor,sdcard的硬件引脚分配,对照原理图修改,具体说明可以参考源码中文件components/boards/config/readme.md

该方式就是通过_boot.py程序启动时生成一个config.json到板端flash的文件系统里, 所以我们也可以自己上传一个config.json到flash文件系统里达到修改的目的,这就是下面的第二种方法。

上传config.json到板端适配

临时适配一个板子的话可以采用这种方式,具体说明可以参考源码中文件components/boards/config/readme.md。把上面代码config的里的json内容保存到config.json文件然后上传到板子flash重启即可生效。如果flash被擦除重烧录了固件的话那么config.json也就被重置为了初始内容,需要再次上传一遍修改的config.json,所以一般不推荐此方法适配,仅作为一个临时方案。

文件系统

使用的spiffs文件系统,针对嵌入式flash芯片,可以有效平衡磨损,另外提供了spiffs文件系统镜像生成工具,意味着可以将python脚本文件预先组织好生成镜像烧录到falsh指定位置替换。

MicroPython 是从 0x0 开始的程序,在程序中会通过 spiffs 在 Flash 的 [0xD00000, (0xD00000 + 0x300000)) 区间构建 VFS (虚拟文件系统),是由 projects/maixpy_xxxxx/config_defaults.mk 中定义得到的。

CONFIG_SPIFFS_SIZE=0x300000
CONFIG_SPIFFS_START_ADDR=0xD00000

flash分区规划

canmv板载flash大小为16M,具体划分情况如下:文章来源地址https://www.toymoban.com/news/detail-624850.html

起始地址 大小(byte) 说明
0x0 3M 预留给固件烧录
0x300000 (3M) 10M 空余,可用于存放kmodel模型,字库等二进制文件
0xD00000 (13M) 3M 文件系统

到了这里,关于CanMV K210工程源码架构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【雕爷学编程】MicroPython动手做(02)——尝试搭建K210开发板的IDE环境

    知识点:简单了解K210芯片 2018年9月6日,嘉楠科技推出自主设计研发的全球首款基于RISC-V的量产商用边缘智能计算芯片勘智K210。该芯片依托于完全自主研发的AI神经网络加速器KPU,具备自主IP、视听兼具与可编程能力三大特点,能够充分适配多个业务场景的需求。作为嘉楠科技自主

    2024年02月15日
    浏览(43)
  • 【雕爷学编程】MicroPython动手做(02)——尝试搭建K210开发板的IDE环境3

    4、下载MaixPy IDE,MaixPy 使用Micropython 脚本语法,所以不像 C语言 一样需要编译,要使用MaixPy IDE , 开发板固件必须是V0.3.1 版本以上(这里使用V0.5.0), 否则MaixPy IDE上会连接不上, 使用前尽量检查固件版本和IDE 版本,都更新到最新版以保障能正常使用。 https://cn.dl.sipeed.com/MAI

    2024年02月15日
    浏览(46)
  • 【雕爷学编程】MicroPython动手做(02)——尝试搭建K210开发板的IDE环境4

    7、使用串口工具 (1)连接硬件 连接 Type C 线, 一端电脑一端开发板 查看设备是否已经正确识别: 在 Windows 下可以打开设备管理器来查看 如果没有发现设备, 需要确认有没有装驱动以及接触是否良好 (2)下载串口工具 (a) putty https://www.chiark.greenend.org.uk/~sgtatham/putty/la

    2024年02月15日
    浏览(57)
  • K210-CanMV IDE开发软件

    区域①菜单栏:操作文件,使用工具等。 区域②快捷按钮:区域①中的文件和编辑中部分功能的快捷方式。 区域③连接设备:连接设备和程序控制按钮。 区域④代码编辑区:编辑要运行的代码。 区域⑤串行终端:显示串口打印的调试信息。 区域⑥图像预览:显示摄像头的

    2024年02月09日
    浏览(23)
  • python 编写K210控制步进电机的程序示例

     今天正好看到K210的脉冲章节,就顺便拿出步进电机做个小实验,也好巩固一下所学的知识。下面是K210关于脉冲的相关介绍: 构造函数 machine.PWM(tim, freq, duty, pin, enable=True) PWM 对象在 machine 模块下          【tim】K210 的 PWM 依赖于定时器来产生波形          【freq】PWM 频率

    2024年02月02日
    浏览(41)
  • 【K210】K210学习笔记二——image

    本人大四学生,电赛生涯已经走到尽头,一路上踩过不少坑,但运气也不错拿了两年省一,思来想去,决定开始写博客,将电赛经验分享一二,能力有限,高手轻喷。 本篇主要是介绍 K210 上的 image 机器视觉模块。如果你要使用 K210 来进行一些颜色追踪( 比如识别黑色,传回

    2024年02月16日
    浏览(46)
  • 【K210】K210学习笔记五——串口通信

    本人大四学生,电赛生涯已经走到尽头,一路上踩过不少坑,但运气也不错拿了两年省一,思来想去,决定开始写博客,将电赛经验分享一二,能力有限,高手轻喷。 往期的博客讲述了 K210 的感光元件模块 sensor 的配置,机器视觉模块 image 中部分函数的使用(目前是用 find

    2024年04月28日
    浏览(46)
  • K210学习笔记(二) K210与STM32进行串口通信,K210收,STM32发

    想用STM32通过串口给K210发数据,并在屏幕上显示,看了好几篇博客,终于搞通了,大家感兴趣也可以看看。 K210学习笔记(一) K210与STM32串口通信相关 接线,STM32的串口引脚比较固定,而K210就牛比了,任意映射,懒人福音。这里我找了两个没有被复用的IO,IO9和IO10 STM32 K210 GND

    2023年04月08日
    浏览(39)
  • K210学习笔记(七)——MAIX BIT(K210)拍照

    MAIX BIT使用的是OV5642,像素为500w,但实际使用只有30w,但对于物体检测,人脸识别是够用的,用maix bit进行拍照,所得照片可以直接用于后面的数据集训练,减少了图片格式转换这一步骤。 参数说明: freq : 设置摄像头时钟频率,频率越高帧率越高,但是画质可能更差。默认

    2024年02月15日
    浏览(35)
  • 【K210】K210学习笔记四——定时器的使用

    本人大四学生,电赛生涯已经走到尽头,一路上踩过不少坑,但运气也不错拿了两年省一,思来想去,决定开始写博客,将电赛经验分享一二,能力有限,高手轻喷。 往期的博客讲述了 K210 的感光元件模块 sensor 的配置,机器视觉模块 image 中部分函数的使用(目前是用 find

    2024年02月03日
    浏览(85)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包