ISP、IAP、DFU和bootloader

2023-11-09

这是嵌入式开发中常用的几个专业术语,其诞生的背景和其具体作用大概如下

在很久很久以前,那是8051单片机流行的时代,做单片机开发都需要一个专用工具,就是单片机的编程器,或者叫烧写器。说“烧”写一点不为过,当年的经典芯片AT89C51在编程时需要十几伏的高电压,加在一个特定的引脚上,才能进入编程。对于某款芯片的编程,都有一个特定的时序,这个时序通常在芯片的datasheet里进行描述并以硬件实现。另外在编程器里的也有一个MCU,这其中使用软件产生这个时序,从而对目标芯片进行编程。电脑通过串口把程序发到编程器,编程器按照规定的时序把程序送入目标芯片。

但是这种编程模式有几个问题,首先就是需要为特定的芯片购买特定的编程器。这种编程器通常比较昂贵,且只能用于特定型号的MCU. 对于企业来说,编程器的成本算不了什么,但更大的问题是,编程时我们必须把待编程的芯片从产品上拆下来,插到编程器上,编程后再安装回产品中。这种方法对于双列直插式的芯片也许是可行的。但对于现在日益流行的表面贴装技术是很不可行的,尤其是BGA封装的芯片,通常需要专业设备才能拆卸,拆下后需要重新植球才能焊接。。。为了更新固件而将其从高密度的PCB板上拆下来,是非常不可行的。

为了能不把芯片拆下来就更新程序,人们发明了一种叫ISP的技术,即在系统编程。在系统编程就是通过串口或者其他通用的通用通信接口,为芯片编程。在产品上可以预留一个串口,需要更新时,只要把产品插到电脑上,通过串口把程序传到芯片里,就完成了更新操作。ISP技术的实现,其实就是依赖于芯片在出厂时预先烧写的bootloader程序,bootloader还有很多不同的叫法,比如ISP服务程序(STC宏晶的51单片机这么叫)、bootstrap(MSP430的BSL编程这么叫)等等。但本质上都是相同的。bootloader在芯片复位(或者上电)时,会优先于用户自己的代码启动。这段代码会首先检测芯片的指定引脚上有没有特定的信号,如果没有,则跳入用户程序执行。否则就按照bootloader特定的通信协议,与计算机进行握手,并最终触发计算机将新的程序通过通用接口(如串口)传送到芯片。然后bootloader通过软件的方式(当然需要硬件支持),擦除用户程序区,将新的程序写入到指定的位置。另外提到的是,bootloader是由各个芯片厂家自己写的,因此不是通用的。尽管都是用串口,但通信协议是不同的。比如像国产垃圾STC单片机,通信协议甚至是保密的。因此通常需要厂家提供的专用ISP软件(flash loader)才能给芯片编程。

另外,比ISP更先进一点的一个技术叫IAP,即在应用编程,全称是“In-Application Programming”。IAP技术允许用户程序修改flash。说白了IAP就是允许用户自定义bootloader,或者说有2个bootloader,一个bootloader是芯片出厂时固化的,另一个是用户自定义的。自定义的bootloader在固化的bootloader之后启动。也许你就要问了,用户自定义的bootloader不就是用户程序吗?其实它跟普通用户程序的区别就是它不会那么容易的被擦除。。。一般是先用专用软件,调用固化的bootloader,来写入自定义的bootloader,然后自定义的bootloader利用能写flash的能力,来给芯片写入新的程序。

为什么需要自定义bootloader呢?默认的bootloader需要在固定引脚,通过串口,以固定的协议传送程序。如果你对这个过程的任何一点不满意,那你就要自定义bootloader喽~

再说说DFU,这个名词通常是针对USB设备说的。因为现在的设备基本都是USB了,没用串口的了。。。很多MCU也内置了USB的支持。DFU是Device Firmware Upgrade的缩写,在我的理解中,DFU模式就是支持USB的bootloader。。。DFU模式通常需要特定的驱动程序,因为现在的芯片USB接口通常工作于VCP(Virtual COM Port)模式,插到电脑上后会虚拟成一个串口设备。而DFU模式则于此不同。VCP模式下,PC端是一个串口驱动程序,MCU端是用户程序。而DFU模式下,PC端是DFU驱动程序,MCU端是bootloader。DFU模式的bootloader通常是用户自定义的,并通过固化的bootloader由串口刷入。

 

转载自:原文链接

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ISP、IAP、DFU和bootloader 的相关文章

  • Retinex理论及算法学习

    为了能够获取最大的信息量 达到更好的图像增强效果 了解人类视觉系统的特性和图像的属性是准确地选择图像增强方法的必备知识 一 人眼视觉系统 1 人眼成像 人的眼睛是一个非常复杂的器官 一般来说它就是一个球体 平均直径约为20mm 内壁是一层视
  • U-Boot命令大全(功能参数及用法)

    本文转载至 http www cnblogs com farsight2011 p 3301126 html U Boot上电启动后 按任意键可以退出自动启动状态 进入命令行 U Boot 2010 03 Sep 25 2011 16 18
  • RK3588s imx415相机适配及ISP调优系列(三)--- RKISP调试环境配置

    经过上篇的相机配置后 两个mipi相机已经可以正常出图了 其实对于rk系列如何配置mipi相机 网上已有不少相关资料均可参考借鉴 RK3588s imx415相机适配及ISP调优系列 一 RK3588s imx415相机适配及ISP调优系列
  • 快速应用RT-Thread IAP升级功能

    快速应用RT Thread IAP升级功能 参考官方文档 步骤一准备bootload APP项目设置及代码修改 下载RTT源码 修改main c 增加分区表配置文件 依据分区表的配置修改flash驱动 第一次烧录进单片机 修改分散加载文件
  • ISP_matlab

    确定输入是否为结构体数组字段 MATLAB isfield MathWorks 中国 对话框打开文件 获取路径和文件名 file path uigetfile raw RAW fid fopen fullfile path file htt
  • 【STM32】制作一个bootloader

    工作环境 STM32CubeMX Keil 相关环境准备这里就不介绍了 bootloader是什么 bootloader就是单片机启动时候运行的一段小程序 这段程序负责单片机固件的更新 也就是单片机选择性的自己给自己下载程序 可以更新 可以
  • 什么是住宅ip,静态和动态怎么选?

    上文我们介绍了数据中心代理 这次我们来介绍下住宅代理ip 住宅代理ip分类两种类型 静态住宅代理和动态住宅代理 他们有什么区别又能用在什么场景呢 我们先从他们是如何运作开始 一 什么是住宅代理ip isp住宅代理ip我们称为真人住宅代理 地
  • U-boot在S3C2440上的移植详解(一)

    本文转载至 http www embeddedlinux org cn html jishuzixun 201303 16 2499 html 一 移植环境 主 机 VMWare Fedora 9 开发板 Mini2440 64MB Nan
  • 一些常见BootLoader介绍

    首先区分一下BootLoader和Monitor的概念 严格来说 BootLoader只是引导设备并且执行主程序的固件 而Monitor还提供了更多的命令行接口 可以进行调试 读写内存 烧写Flash 配置环境变量等 Monitor在嵌入式
  • ARM qemu 系统模拟器可以在没有内核参数的情况下从卡映像启动吗?

    我看过很多如何运行 QEMU ARM 板模拟器的示例 在每种情况下 除了 SD 卡图像参数之外 QEMU 还始终提供内核参数 即 qemu system arm M versatilepb kernel vmlinuz 2 6 18 6 v
  • 从 UEFI 应用程序内部运行 UEFI shell 命令

    我是 UEFI 应用程序开发新手 我的要求是 我需要从 UEFI 应用程序运行 UEFI shell 命令 app efi 源代码 需要指导我如何做到这一点 Example cpUEFI shell 中的命令用于将文件从一个路径复制到 其他
  • “times 510-($-$$) db 0”不起作用

    我正在学习引导扇区 我从以下位置下载了 nasm installer x64 exeNASM网站 我的操作系统是win7 64位 当我运行以下代码时 它无法正常工作 mov ah 0x0e mov al the secret int 0x1
  • 引导加载程序如何读取 DVD(cd)?

    我有一个用汇编语言编写的第一阶段引导加载程序 我需要它从 DVD 或 CD 加载第二阶段引导加载程序 我只找到了从软盘或硬盘读取的示例 那里使用的中断是13h 在中断描述中它说它可以读取软盘和硬盘 我尝试使用 13h 来读取 CD 就好像它
  • STM32 F072上的软件如何跳转到bootloader(DFU模式)?

    STM32应用笔记2606对此进行了讨论 但没有简单的代码示例 该答案已使用 IAR EWARM 在 STM32F072 Nucleo 板上进行了测试 这个答案使用 STM32标准外设库 仅此而已 请注意 验证您是否成功进入引导加载程序模式
  • ECU Bootloader程序开发

    文章目录 前言 前言 本篇主要介绍ECU BootLoader的 一般 开发逻辑 对正在 或想要做这方面工作的小伙伴一个参考 BootLoader的稳定性至关重要 前期设计要规避可能存在的所有使ECU变 砖 的风险点 尽可能地设计多重防范机
  • 实现自定义 u-boot 命令

    我想添加自定义命令命令u boot可以是一个简单的 hello world 命令 搜索后我发现了这个链接Yocto u boot 自定义命令它说看的地方timer命令输入cmd misc c作为起点 我怎么带这个timer命令到我的 u b
  • 加载引导加载程序的第二阶段和/或将控制权转移给它时出现问题

    我的主引导记录代码 bit16 16bit by default org 0x7c00 jmp short start nop bsOEM db OS423 v 0 1 OEM String start cls mov ah 06h Fun
  • Sparkfun Edge 引导加载程序问题

    今天终于到了 Sparkfun 板边板 遵循这个写得很好的指南 https codelabs developers google com codelabs sparkfun tensorflow 3 https codelabs devel
  • NASM:磁盘读取超时

    尝试从磁盘 从同一文件 读取数据 将另外 2 个 512 字节扇区加载到内存中 磁盘读取功能如下 read DH sectors to ES BX from drive DL disk read push dx push bx Tried
  • 引导扇区编程中的无限跳转有什么用

    我正在读一本关于如何构建操作系统的书 我浏览了这段代码 所有代码所做的就是打印 hello 但我想了解更多关于无限跳转的信息 mov ah 0x0e mov al H int 0x10 mov al e int 0x10 mov al l

随机推荐

  • 准备离职搞ue4

    确实不合适搞webgl 我决定离职了 得到一个offer UE4 估计看我c 图形学还行吧 年龄偏大 没有UE4经验 也没有长期游戏经验 所以ue4岗位被拒很多 工作机会来之不易 得拼命干了 憋着一肚子气 webgl再努力 也是难以发挥 哎
  • C++ 基础技术再深入(模板)template parameter和template argument(10)---《C++ Templates》

    参数化声明 template和class或者function的区别在于templates声明语句有一个参数化子句 template lt parameters here gt 或者 export template lt parameters
  • codeforces 1217d D. Coloring Edges

    题意 一个有向图 染色 环的边不能只有1个颜色 问需几种颜色及染色方案 最多2种颜色 无环时1种 有环时2种 用dfs判环 类似tarjan 还在栈中的点又被访问就有环 backedge染2 其他染1 简化一下 如果有环ai
  • bash:XXX.sh权限不够

    在linux上执行shell脚本时提示 bash start sh权限不够 解决办法 chmod 777 start sh
  • feof()和EOF的用法—— C中文件结尾的判断

    昨天突然被一位朋友问到了关于文件结尾的程序问题 在用feof 判断文件时 复制会多产生一个字符 这个问题在大一的时候 老师上课就强调过 但那时只是模糊的记得个大概 记得这个函数如果用的不对就是会出现问题 解决是要先读一下 然后再判断 具体的
  • 【ODOO15源码安装步骤 亲测成功】

    ODOO15源码安装步骤 亲测成功 odoo ubuntu 安装方法 进入ubuntu 后 运行 sudo apt update sudo apt upgrade 下面正式安装 odoo 相关的 东东 一 安装postgresql 安装po
  • 诛仙哪里炼器服务器最稳定,诛仙手游150级之前最稳妥炼器攻略

    1 此方法适用于心不太野的V7 V9玩家 2 此方法不适用于装备上15 3 此方法不太适用于首饰炼器 4 此方法可以保证你的战力水平保持在所在服务器中等偏上 5 此方法只能保证过渡装备 100 130级 的炼器 终极装备炼器无用 一 炼器之
  • 记录:Sharding-Jdbc 配置max.connections.size.per.query造成的死锁问题

    记录 Sharding Jdbc 配置max connections size per query造成的死锁问题 项目场景 版本 jdk11 sharding jdbc4 1 1 mysql8 0 分表 table表根据 主键id 水平分表
  • 52. N-Queens II

    Follow up for N Queens problem Now instead outputting board configurations return the total number of distinct solutions
  • 奇淫巧技,CompletableFuture 异步多线程是真的优雅

    一个示例回顾Future 一些业务场景我们需要使用多线程异步执行任务 加快任务执行速度 JDK5新增了Future接口 用于描述一个异步计算的结果 虽然 Future 以及相关使用方法提供了异步执行任务的能力 但是对于结果的获取却是很不方便
  • C++Protobuf的生成与使用

    编写 proto文件 syntax 表明protobuf的版本号 末尾不要忘了 package 表明生成的类对象位于哪一个命名空间 末尾不要忘了 每一个类属性后面的必须跟一个编号 且不能重复 syntax proto3 package Pr
  • react-router中不同路由使用相同组件重新渲染问题

    在项目中 会遇到相同的路由 可能需要使用相同的页面 容器组件 如果点不同的路由需要重新查询 但是发现没有重新进容器的渲染周期 代码如下 export default match gt
  • Android中R.java文件详解

    R java文件有两种 两种文件作用一样都是获取资源的引用 区别在于一个存放着我们写的项目中资源的引用 另一个存放着系统定义好的一些资源 1 1 项目的R java文件 先说第一种是项目编译出来的R java文件 我们平常所用的R layo
  • 视频教程-自然语言处理实战——LSTM情感分析-深度学习

    自然语言处理实战 LSTM情感分析 专注提供优质教学内容 CSDN就业班 39 00 立即订阅 扫码下载 CSDN程序员学院APP 1000 技术好课免费看 APP订阅课程 领取优惠 最少立减5元 订阅后 请点击此处观看视频课程 视频教程
  • import torchvision出错

    Traceback most recent call last File
  • 激光二极管驱动电路图大全(六款激光二极管驱动电路设计原理图详解) - 全文

    激光二极管驱动电路图大全 六款激光二极管驱动电路设计原理图详解 全文 来源 网络整理 作者 2018年03月01日 14 36 1 分享 订阅 关键词 驱动电路激光二极管 激光二极管驱动电路图 一 驱动电路图1 左 电路的基准电压不用常见的
  • word 插入图片偏右问题

    通常在word中插入图片 当图片较大时会向右边延伸出去 如下图 默认嵌入型 因为图片较大超出了纸张范围 绿色框 但是左侧又有很大空间 蓝色框 调整方法 方式一 可以点击图片 在四角手动拖动鼠标缩放图片大小 直到看起来左右适中 方式二 先在w
  • C++真的能兼容C吗?

    总结 C 虽然改造自C 但是二者并非完全兼容 且语法中存在一定差异 上述几点 并非C与C 全部差异 C 真的能兼容C吗 今天看到了网上说C是C 的子集 C 可以兼容C 这是真的吗 要弄明白这个问题 首先 先简单介绍一下这两个语言 C C语言
  • 【论文解读】滴滴智能派单-KDD2018 Large-Scale Order Dispatch in On-Demand Ride-Hailing

    Large Scale Order Dispatch in On Demand Ride Hailing Platforms A Learning and Planning Approach 一 简介 基于大量历史数据 构建一个大Q表 用于
  • ISP、IAP、DFU和bootloader

    这是嵌入式开发中常用的几个专业术语 其诞生的背景和其具体作用大概如下 在很久很久以前 那是8051单片机流行的时代 做单片机开发都需要一个专用工具 就是单片机的编程器 或者叫烧写器 说 烧 写一点不为过 当年的经典芯片AT89C51在编程时