当前位置: 首页 > news >正文

嵌入式硬件篇---OpenMV存储

OpenMV存储部分

OpenMV 开发板的存储部分可以简单理解为 “不同用途的存储器”,就像我们的电脑有硬盘(存文件)、内存(临时运行程序)一样,OpenMV 也有几个不同的存储区域,各自分工明确。下面用通俗易懂的方式介绍:

1. 内部闪存(Flash)—— 相当于 “系统盘”

  • 作用
    这是 OpenMV 自带的 “固定硬盘”,主要用来存程序和系统文件。
    你编写的 Python 代码(.py 文件)下载到 OpenMV 后,就存在这里;开发板的操作系统(固件)也存在这里。

  • 特点

    • 非易失性:断电后数据不会丢,下次上电还能直接运行里面的程序(所以脱机运行必须靠它)。
    • 容量不大:一般是 2MB 或 4MB(不同型号略有差异),够存中小型程序,但存大量图片、视频就不够了。
    • 不能随便改:擦写次数有限(虽然日常用基本够),而且每次修改程序都要 “重新下载”,就像给手机装新 app 一样。
  • 通俗比喻:类似手机里的 “系统存储”,装操作系统和常用 app,断电后内容不变。

2. 内存(RAM)—— 相当于 “工作台”

  • 作用
    程序运行时,临时数据都存在这里。比如摄像头实时采集的图像、代码里的变量、计算过程中的临时结果等,都在内存里快速处理。

  • 特点

    • 速度极快:比闪存快得多,适合临时存放正在处理的数据,保证程序流畅运行(比如实时识别物体时,图像数据必须快速读写)。
    • 易失性:断电就清空,所以不能用来长期存数据。
    • 容量小:通常是 128KB 或 256KB(不同型号不同),只能临时用,不能当 “仓库”。
  • 通俗比喻:类似我们办公的 “桌面”,临时放正在处理的文件,用完(断电)就清空,下次重新拿出来用。

3. SD 卡(外部存储)—— 相当于 “移动硬盘”

  • 作用
    这是可选的外部存储,需要自己插卡。主要用来存大量数据:比如拍摄的照片 / 视频、训练好的模型文件(如神经网络模型)、日志文件等。

  • 特点

    • 容量大:可以插 16GB、32GB 甚至更大的卡,适合存闪存装不下的东西。
    • 灵活插拔:存满了可以拔下来插电脑上读取,方便数据转移。
    • 非必需:OpenMV 没插 SD 卡也能运行程序,只有当程序里明确要 “存图片到 SD 卡”“读模型文件” 时,才必须插卡,否则会报错。
  • 通俗比喻:类似手机的 “内存卡”,扩展存储空间,存照片、视频这些占地方的东西,可随时取下。

总结:三者的关系

  • 程序 “住” 在内部闪存里,断电也不会丢,上电后自动跑到内存里运行。
  • 运行时产生的临时数据(如图像)在内存里快速处理。
  • 如果程序需要 “存档”(如拍照片),就把数据存到SD 卡里(如果插了的话)。

简单说:闪存是 “长期住宅”,内存是 “临时工作台”,SD 卡是 “额外仓库”。日常用 OpenMV 跑简单程序,有闪存和内存就够了;要存大量数据,才需要 SD 卡。

OpenMV脱机运行

OpenMV 并非必须插入 SD 卡才能脱机运行程序,其程序运行主要依赖内部的闪存(Flash),SD 卡更多是用于扩展存储功能,而非运行程序的必要条件。

具体说明:

  1. 程序存储与运行

    • OpenMV 开发板内部有自带的闪存(例如部分型号有 2MB 闪存),可以直接将程序(.py 文件)存储在内部闪存中。
    • 当开发板上电后,会自动从内部闪存加载并运行程序,实现脱机工作,无需依赖 SD 卡。
  2. SD 卡的作用

    • 扩展存储:用于保存拍摄的图片、视频,或存储较大的数据集(如训练好的模型文件)、日志文件等。
    • 临时调试:在开发阶段,可能通过 SD 卡读取程序进行快速测试,但这并非脱机运行的必需方式。
  3. 特殊情况

    • 若程序中明确包含读取 / 写入 SD 卡的操作(如 sensor.snapshot().save("/sd/img.jpg")),则脱机运行时必须插入 SD 卡,否则会因找不到存储路径而报错。
    • 对于需要处理大量数据(如超过内部闪存容量的模型)的程序,可能需要 SD 卡来存储额外资源,但这是程序设计的特殊需求,而非开发板本身的限制。

综上,仅运行基础程序时,OpenMV 无需 SD 卡即可脱机工作;但如果程序涉及 SD 卡操作或依赖外部存储资源,则必须插入 SD 卡。

http://www.lryc.cn/news/609551.html

相关文章:

  • 单片机51 day46
  • 基于单片机智能鱼缸/水族箱/水产养殖系统设计
  • 第二篇:深入解析 FastAPI + LangChain 实现流式对话接口:`chat` 函数详解
  • 嵌入式硬件中三极管推挽电路控制与实现
  • 单片机裸机程序设计架构
  • Ubuntu 下 MySQL 运维自动化部署教程(在线简易版)
  • MLIR Introduction
  • cobalt strike(CS)与Metasploit(MSF)联动
  • Nestjs框架: @nestjs/config 配置模块详解与实践
  • Go 语言模糊测试 (Fuzz Testing) 深度解析与实践
  • 基于鼠标位置的相机缩放和平移命令的实现(原理+源码)
  • Java 17新特性深度解读:Records、Sealed Classes与Pattern Matching
  • 宝塔面板安装WordPress教程:10分钟一键部署搭建个人博客 (2025)
  • Git如何同步本地与远程仓库并解决冲突
  • Linux 用户与组管理全解析
  • 电商系统想撑住大流量?ZKmall开源商城靠微服务 + Spring Boot3 解决单体架构难题
  • JavaScript中的作用域、闭包、定时器 由浅入深
  • 肾上腺疾病AI诊疗一体化系统应用方向探析
  • 机器学习——学习路线
  • 【拓扑序 容斥原理】P6651 「SWTR-5」Chain|省选-
  • 登录验证码功能实现:Spring Boot + Vue 全流程解析
  • Ethereum:智能合约开发者的“瑞士军刀”OpenZeppelin
  • Neo4j 社区版 Mac 安装教程
  • 数据结构---配置网络步骤、单向链表额外应用
  • Vue3核心语法进阶(Hook)
  • 如何使用EF框架操作Sqlite
  • 20250805问答课题-实现TextRank + 问题分类
  • 量子计算接口开发:Python vs Rust 性能对决
  • uniapp快遞上門提貨的時間選擇的插件
  • PyTorch生成式人工智能(25)——基于Transformer实现机器翻译