esp32 烧录协议

news2024/11/15 8:42:11

esp32的rom固化了出场固件。

进入烧录模式后,esp32串口输出:

给esp32烧录固件的时候,需要和rom的bootloder进行通讯。通讯时,使用 SLIP 数据包帧进行双向数据传输。

每个 SLIP 数据包都以 0xC0 开始和结束。 在数据包中,所有出现的 0xC0 和 0xDB 分别替换为 0xDB 0xDC 和 0xDB 0xDD。 替换是在计算校验和和长度后进行的,因此数据包长度可能比下面的大小字段长。

在SLIP通讯协议基础上,衍生出了以下协议:

Command Packet

每个命令都是一个由主机发起的 SLIP 数据包, 数据包由一个header和一个可变长度的主体组成。 小端模式传输。

Byte

Name

Comment

0

Direction

Always 0x00 for requests

1

Command

Command identifier (see Commands).

2-3

Size

Length of Data field, in bytes.

4-7

Checksum

Simple checksum of part of the data field (only used for some commands, see Checksum).

8..n

Data

Variable length data payload (0-65535 bytes, as indicated by Size parameter). Usage depends on specific command.

esp32 rom 支持的命令类型有如下:

Byte

Name

Description

Input Data

Output Data

0x02

FLASH_BEGIN

Begin Flash Download

Four 32-bit words: size to erase, number of data packets, data size in one packet, flash offset.

0x03

FLASH_DATA

Flash Download Data

Four 32-bit words: data size, sequence number, 0, 0, then data. Uses Checksum.

0x04

FLASH_END

Finish Flash Download

One 32-bit word: 0 to reboot, 1 to run user code. Not necessary to send this command if you wish to stay in the loader

0x05

MEM_BEGIN

Begin RAM Download Start

Total size, number of data packets, data size in one packet, memory offset

0x06

MEM_END

Finish RAM Download

Two 32-bit words: execute flag, entry point address

0x07

MEM_DATA

RAM Download Data

Four 32-bit words: data size, sequence number, 0, 0, then data. Uses Checksum.

0x08

SYNC

Sync Frame

36 bytes: 0x07 0x07 0x12 0x20, followed by 32 x 0x55

0x09

WRITE_REG

Write 32-bit memory address

Four 32-bit words: address, value, mask and delay (in microseconds)

0x0a

READ_REG

Read 32-bit memory address

Address as 32-bit word

Read data as 32-bit word in value field.

0x0b

SPI_SET_PARAMS

Configure SPI flash

Six 32-bit words: id, total size in bytes, block size, sector size, page size, status mask.

0x0d

SPI_ATTACH

Attach SPI flash

32-bit word: Zero for normal SPI flash. A second 32-bit word (should be 0) is passed to ROM loader only.

0x0f

CHANGE_BAUDRATE

Change Baud rate

Two 32-bit words: new baud rate, 0 if we are talking to the ROM loader or the current/old baud rate if we are talking to the stub loader.

0x10

FLASH_DEFL_BEGIN

Begin compressed flash download

Four 32-bit words: uncompressed size, number of data packets, data packet size, flash offset. With stub loader the uncompressed size is exact byte count to be written, whereas on ROM bootloader it is rounded up to flash erase block size.

0x11

FLASH_DEFL_DATA

Compressed flash download data

Four 32-bit words: data size, sequence number, 0, 0, then data. Uses Checksum.

Error code 0xC1 on checksum error.

0x12

FLASH_DEFL_END

End compressed flash download

One 32-bit word: 0 to reboot, 1 to run user code. Not necessary to send this command if you wish to stay in the loader.

0x13

SPI_FLASH_MD5

Calculate MD5 of flash region

Four 32-bit words: address, size, 0, 0

Body contains 16 raw bytes of MD5 followed by 2 status bytes (stub loader) or 32 hex-coded ASCII (ROM loader) of calculated MD5

Response Packet

Byte

Name

Comment

0

Direction

Always 0x01 for responses

1

Command

Same value as Command identifier in the request packet that trigged the response

2-3

Size

Size of data field. At least the length of the Status Bytes (2 or 4 bytes, see below).

4-7

Value

Response value used by READ_REG command (see below). Zero otherwise.

8..n

Data

Variable length data payload. Length indicated by “Size” field.

The final bytes of the Data payload indicate command status

对于 ESP32 ROM最后四个字节被使用,但只有前两个字节包含状态信息:

Byte

Name

Comment

Size-4

Status

Status flag, success (0) or failure (1)

Size-3

Error

If Status 1, this indicates the type of error.

Size-2

Reserved

Size-1

Reserved

ROM Loader Errors 枚举

Value

Meaning

0x05

“Received message is invalid” (parameters or length field is invalid)

0x06

“Failed to act on received message”

0x07

“Invalid CRC in message”

0x08

“Flash write error” - after writing a block of data to flash, the ROM loader reads the value back and the 8-bit CRC is compared to the data read from flash. If they don’t match, this error is returned.

0x09

“Flash read error” - SPI read failed

0x0a

“Flash read length error” - SPI read request length is too long

0x0b

“Deflate error” (compressed uploads only)

reff:

https://docs.espressif.com/projects/esptool/en/latest/esp32/advanced-topics/index.html

https://github.com/espressif/esp-serial-flasher

https://github.com/espressif/esptool

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/187716.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

9、Servlet——Request对象

目录 一、get请求和post请求的区别 二、Request对象的应用 1、request主要方法 2、request获取数据 3、设置请求的编码格式 三、解决get请求收参乱码问题 四、解决post请求中文乱码问题 一、get请求和post请求的区别 在Servlet中用来处理客户端请求需要用doGet()方法或…

openGauss数据库源码解析系列文章——备份恢复机制:openGauss全量备份技术

目录 10.1 openGauss全量备份技术 10.1.1 gs_basebackup备份工具 10.1.2 gs_basebackup备份交互流程 本文主要介绍openGauss的备份恢复原理和技术。备份恢复是数据库日常维护的一个例行活动,通过把数据库数据备份到另外一个地方,可以抵御介质类的损…

数据结构与算法-稀疏数组

Java高级系列文章前言 本文章涉及到数据结构与算法的知识,该知识属于Java高级阶段,通常为学习的二阶段,本系列文章涉及到的内容如下(橙色框选内容): 本文章核心是教学视频,所以属于个人笔记&a…

深度卷积对抗神经网络 基础 第六部分 缺点和偏见 GANs Disadvantages and Bias

深度卷积对抗神经网络 基础 第六部分 缺点和偏见 GANs Disadvantages and Bias GANs 综合评估 生成对抗网络(英语:Generative Adversarial Network,简称GAN)是非监督式学习的一种方法,透过两个神经网络相互博弈的方式…

实体对齐(三):RNM

一.摘要 实体对齐旨在将来自不同知识图(KG)的具有相同含义的实体联系起来,这是知识融合的重要步骤。 现有研究侧重于通过利用知识图谱的结构信息学习实体嵌入来进行实体对齐。这些方法可以聚合来自相邻节点的信息,但也可能带来来…

从软件开发角度看待PCI和PCIe

从软件开发角度看待PCI和PCIe 文章目录从软件开发角度看待PCI和PCIe参考资料:一、 最容易访问的设备是什么二、 地址空间的概念三、 理解PCI和PCIE的关键3.1 地址空间转换3.2 PCI接口速览3.3 PCIe接口速览四、 访问PCI/PCIe设备的流程4.1 PCI/PCIe设备的配置信息4.2…

特斯拉2022全年财报摘要

重点一览一、盈利方面 2022全年营业利润率为16.8%,其中第四季度为16.0% 2022全年GAAP营业利润为137亿美元,其中第四季度为39亿美元 2022全年GAAP净利润为126亿美元,其中第四季度为37亿美元 2022全年非GAAP净利润为141亿美元,其中…

MySQL中的多表联合查询

目录 一.介绍 数据准备 交叉连接查询 内连接查询 外连接 子查询 特点 子查询关键字 all关键字 any关键字和some关键字 in关键字 exists关键字 自关联查询 总结 一.介绍 多表查询就是同时查询两个或两个以上的表,因为有的时候用户在查看数据的时候,需要…

四足机器人发展史及机器人盘点

四足机器人发展史及机器人盘点 本文翻译整理自文章 四足行走机器人发展综述 20世纪初前后 1870 CHebyshev(沙俄)发明了第一个行走机构, 将旋转运动转换为匀速平动运动. - 由于连接机构形似希腊字母λ, 该连杆命名为λ机构. - 可在平面运动, 没有独立的腿部运动 - Rygg(美国…

windows下nodejs下载及环境变量配置,运行vue项目

文章目录1.下载安装node.js2.环境变量配置(重点)3.切换镜像源切换yarn作为主力命令1.下载安装node.js 1.https://registry.npmmirror.com/binary.html 搜索node,下载对应的版本,安装即可。一路next,路径选择自己想放置…

与string容易混淆的类——StringBuilder

目录 StringBuilder类概述及其构造方法 StringBuilder类的常用方法 StringBuilder类练习 StringBuilder类概述及其构造方法 StringBuilder类概述–我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,…

verilog图像算法实现与仿真(流程和实现)

【声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们谈到了fpga,谈到了用pythoncv2实现图像算法,直到现在才算是慢慢进入了正题。毕竟用verilog实现图像算法&#xff0c…

HalfEdge半边数据结构详解

我们可以将离散表面表示为多边形网格。 多边形网格可以被认为是图(具有顶点和顶点之间的边)加上面列表,其中面是边的环。 推荐: 使用 NSDT场景设计器 快速搭建 3D场景。 下面,我们将网格指定为顶点列表和面列表&#…

【博学谷学习记录】大数据课程-学习第四周总结

分布式技术 为什么需要分布式 计算问题 无论是我们在学校刚开始学编程,还是在刚参加工作开始处理实际问题,写出来的程序都是很简单的。因为面对的问题很简单。以处理数据为例,可能只是把一个几十K的文件解析下,然后生成一个词频…

Python正则表达式所有函数详解

文章目录1 fullmatch2 match3 search4 findall5 finditer6 split7 sub8 compile本篇博客主要讲解正则表达式相关的函数,均不涉及复杂的正则表达式语法。如需了解正则表达式语法,请参考下面的文章:Python正则表达式语法详解1 fullmatch Pytho…

96. BERT预训练代码

利用实现的BERT模型和从WikiText-2数据集生成的预训练样本,我们将在本节中在WikiText-2数据集上对BERT进行预训练。 import torch from torch import nn from d2l import torch as d2l首先,我们加载WikiText-2数据集作为小批量的预训练样本,…

Logstash:如何使用 Logstash 解析并摄入 JSON 数据到 Elasticsearch

在我之前的文章 “Logstash:Data 转换,分析,提取,丰富及核心操作” 有涉及到这个话题。今天我想使用一个具体的例子来更深入地展示。 准备数据 我们先来把如下的数据拷贝下来,并保存到一个叫做 sample.json 的文件中。…

OS 学习笔记(5) 操作系统的体系结构

OS 学习笔记(5) 操作系统的体系结构 王道OS 1.4 操作系统的体系结构 文章目录OS 学习笔记(5) 操作系统的体系结构知识总览分层结构模块化操作系统的内核大内核 vs 微内核知识回顾与重要考点外核王道chap1 回顾英文表达、术语积累(《操作系统概念》第九版、ostep 《O…

电子模块|心率血氧传感器模块MAX30102及其驱动代码

电子模块|心率血氧传感器模块MAX30102及其驱动代码实物照片模块简介工作原理原理图及引脚说明STM32软件驱动IIC通信代码数值转换代码main函数结果实物照片 模块简介 MAX30102是一个集成的脉搏血氧仪和心率监测仪生物传感器的模块。 它集成了一个红光LED和一个红外光LED、光电…

【经济学】MIT 微观经济学 Microeconomoics

MIT 微观经济学P1 Introduction and Supply & Demand约束优化和机会成本供给和需求P1 Introduction and Supply & Demand 约束优化和机会成本 微观经济学是研究如何个人和公司做决定在一个稀缺的世界。稀缺性是微观经济的驱动力。 微观经济学是一系列约束优化练习&a…