【MaixPy快速上手】存储系统介绍_猪百岁儿的博客-程序员宝宝_maixpy

技术标签: python  java  linux  编程语言  大数据  

存储系统介绍

MaixPy 存储系统大致如下图所示:

由上图可知,MaixPy 中的存储介质主要由 FlashSD 卡组成,分为三块区域,分别是 MaixPy.bin 固件区,xxx.kmodel 模型区,文件系统区:Flash 上为 spiffs(SPI Flash File System),SD 卡为 Fatfs(FAT file system)。

1. MaixPy.bin 固件区

用来存储 MaixPy.bin 固件,起始于 0x000000,因为 K210 会从 0x000000 地址开始运行程序。

2. xxx.kmodel 模型区

通常起始于 0x300000,模型文件之所以不烧录在 Flash 的文件系统(文件系统会后续解释)中,原因有下:

  1. Flash 中文件系统拥有的内存并不够大,不足以放入大模型,更大的模型可以放入 SD 卡中。
  2. 直接读取模型文件比经过文件系统读取速率更快。

该区域没有文件系统管理,需要根据烧录时的起始地址操作文件,例如当模型烧录在 0x500000 时的读取方法:

KpuTask = kpu.load(0x500000)

3. 文件系统区

通常从 0xD00000 开始,该区域交由文件系统管理,我们预留了 Flash 末尾的 3MiB 空间,交由 spiffs 管理, 另外也支持 FAT32(Fatfs) 的 SD 卡。这些文件系统提供接口使我们通过 文件名 便可对文件进行读写操作,而不必像模型区那样使用 文件起始地址 操作。同时还能帮助我们有效管理存储介质,例如磨损均衡(Flash 是有磨损寿命的,相关知识请自行搜索)可以充分发挥 Flash 的寿命。

3.1. MaixPy 文件系统的使用

由于 FlashSD 卡的文件系统各不相同,接口不一致,使得操作不同文件系统需要调用不同接口,此时 MaixPy 中的虚拟文件系统(VFS)正是用于解决该问题,VFS 可以挂载多个不同类型文件系统,并为用户操作这些文件系统提供统一接口,用户使用这些接口时可以忽略不同文件系统之间的差异。这些接口在 os 模块中实现,使用示例如下:

import uos

print("files:", uos.listdir("/flash"))

with open("/flash/test.txt", "w") as f:
    f.write("hello text")

print("files:", uos.listdir("/flash"))

with open("/flash/test.txt", "r") as f:
    content = f.read()

print("read:", content)

以上示例中,spiffs 文件系统开机被自动挂载到 /flash 目录,用户只需要在使用 os 的接口时传入 "/flash" 目录名作为参数便可访问该文件系统。

解读:

  • 导入 uos 模块
  • 列出 /flash 目录下所有文件
  • /flash 目录写入一个名为 test.txt 的文件,内容为 hello text,
  • 列出 /flash 目录下所有文件,会发现 test.txt 的存在
  • 读取文件内容到 content 变量
  • 打印 content 变量, 输出 hello text,也就是刚刚写入文件的内容
  • 这个内容在开发板断电之后再上电,仍然能读到正确的内容(Flash 断电后不会丢失内容)

当然也支持 SD 卡, 如果你需要使用, SD 卡需要满足以下几点:

  • 支持 SPI 模式, 市面上大多数正版卡都支持
  • 分区为 MBR (msdos)
  • 格式化为 FAT32
  • 大小测试过最大 128GiB 可用 断电插入 SD 后, 上电,SD 卡会被挂载在 /sd,如果有多个分区,第二个分区名是/sd2

注意/(根目录)不能写入数据,只能往/flash或者/sd写入数据 开机如果有SD卡, 会自动将当前目录切换到/sd, 如果没有,则会自动切换到/flash

本人原文链接:https://bbs.sipeed.com/thread/576
搬运请注明原文地址

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xuguoliang757/article/details/117590089

智能推荐

AIDL实现原理_z真真的博客-程序员宝宝_aidl原理

AIDL(Android Interface Definition Language) 安卓接口定义语言。是实现Binder机制,跨进程通讯的一个模板。定义一个IRemoteService.aidl文件package com.example.aidldemo.aidltest;//自定义对象需要手动 import packageimport com.example.aidldemo.ai...

android 屏幕旋转(横屏、竖屏、反向横屏、反向竖屏)的实现_tracydragonlxy的博客-程序员宝宝_android横屏旋转

android 屏幕旋转(横屏、竖屏、反向横屏、反向竖屏)的实现前言:根据屏幕的旋转自动实现应用界面旋转,横屏、竖屏、反向横屏、反向竖屏。

微软 面试 心得_sunnyskyliu的博客-程序员宝宝

微软面试归来,收获了很多经验,其中包括面试的以及职业发展的,一行三天有种顿悟的感觉,希望给各位看官以启迪。在开始下文之前,想感谢对我的博客关注的人们,继续写下去的原因是看到了一些文章数千人次的访问量,这也促使我与各位分享我成长中的点点滴滴,避免其他人走弯路。话归正题,这次参加微软面试的机会是由学校的院长亲自筛选推荐,也很荣幸的成为了本校唯一一个推上去的人。我看了一下名单,全国大

java并发编程(二十)----(JUC集合)CopyOnWriteArrayList介绍_a2225791的博客-程序员宝宝

这一节开始我们正式来介绍JUC集合类。我们按照List、Set、Map、Queue的顺序来进行介绍。这一节我们来看一下CopyOnWriteArrayList。CopyOnWriteArrayList介绍CopyOnWriteArrayList...

Codeforces - 998C-Equal Sums【map + 思维】_北里五井的博客-程序员宝宝

C. Equal Sumstime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou are given kk sequences of integers. The length of the ii-th sequence equals to ni...

python关键字库名叫什么_使用KEA或其他python库提取关键字_ku drei的博客-程序员宝宝

我现在为一个关键字提取项目工作。基本上,我使用python来实现这一点。让我先谈谈我的项目是什么。我在这个项目中的目标是从一段或一个网页中找出关键词(关键短语不太可取)。在我假设我可以从一个网站抓取一个相当好的内容结构。在假设我有很多段落,所有段落都来自同一个行业。下面是一个示例段落:About usWe are the greatest bank in the world, which prov...

随便推点

MTK平台下Battery驱动分析及充电流程_stoic163的博客-程序员宝宝_mtk充电驱动

转自:http://blog.csdn.NET/baidu_34021173/article/details/51105223主要涉及代码:Kernel:kernel-3.10\drivers\power\mediatek\kernel-3.10\drivers\misc\mediatek\mach\mt6580\\power\MTK Bat

kubeadm部署kubernetes 1.13.1集群_mnasd的博客-程序员宝宝

kubeadm是Kubernetes官方提供的用于快速部署Kubernetes集群的工具,本篇文章使用kubeadm搭建一个单master节点的3节点k8s集群。kubernetes简介Kubernetes节点架构图:kubernetes组件架构图:1.准备基础环境我们将使用kubeadm部署3个节点的 Kubernetes Cluster,整体结构图:...

ajax最最常用的七个属性_JeremyYan的博客-程序员宝宝

$.ajax({url:需要请求的servlet地址;data:参数;type:post  (get);dataType:表示服务器返回的数据类型;async:是否同步;cache:是否缓存;success:function();表示成功回调函数。})

matlab公式书写,matlab写公式五元二次方程组用matlab能写出来吗?请给个例子_ku drei的博客-程序员宝宝

共回答了16个问题采纳率:87.5%给个例子,注意并不是所有的五元二次方程组都有解.syms x y z s tf1=x+y-z+s+t;f2=x^2-y^2+2*z;f3=x*y+s*t;f4=z-s*t;f5=x^2+y^2-2*t;[x,y,z,s,t]=solve(f1,f2,f3,f4,f5);解得:x =01/2*2^(1/2)1/2*2^(1/2)-1/2*2^(1/2)-1/2*2...

基于STM32的USB驱动程序设计,PC驱动程序,Android驱动程序源码一锅端_LiuhCode的博客-程序员宝宝_stm32usb驱动程序

主要内容:1,单片机为STM32F103,USB配置为Bulk传输,两个IN端点,两个OUT端点; 2,PC端基于libusb的实现USB端点数据发送与接收,并封装成DLL动态链接库; 3,PC端调用2封装的动态链接库实现USB端点的数据发送与接收; 4,机器人端通过调用系统提供的USB函数,并再次封装为罐文件(类似于DLL); 5,Android端调用4封装的jar文件实现USB端点的数据发送与...

计算机的基础知识_sunmengting0123的博客-程序员宝宝_计算机的基础知识

️一、信息与数据1、信息(information)是人们用于表示具有一定意义的符号集合,这些符号可以是文艺、数字、图形、图像、动画、声音、光等。信息同物质(materia)和能源(energy)一样,是人们赖以生存和社会发展的重要资源。2、数据(date)数据是信息的具体表现形式,是指人们看到的和听到的事实,是各种各样的物理符号及其组合,它反映了信息的内容。????????二、计算机概述计算机是一种能存储程序和数据,自动执行程序、快速和高效的完成对各种数字化信息处理的电子设备。????

推荐文章

热门文章

相关标签