eFuse 是芯片中一块特殊的存储空间,它内部由熔丝相互连接。当流经的电流达到一定程度时,熔丝会被烧断,该位的值会改变。

熔丝熔断是单向的、不可恢复的。因此 eFuse 的值只能被烧写一次,只能由 0 变到 1。在烧写 eFuse 的时候,一定要十分小心,也要注意避免静电、高温等情况,以防 eFuse 被打坏。

乐鑫的芯片类型主要分为以下两类:ESP8266 系列和 ESP32 系列。

ESP8266 系列包括:ESP8266、ESP8285;

ESP32 系列包括:ESP32-D0WDQ6、ESP32-D0WD、ESP32-D2WD、ESP32-D0WDXMM、ESP8689、ESP32-PICO-D2、ESP32-PICO-D4、ESP32-PICO-D4XM。

注:由于 ESP8266 系列的芯片只有 1 个 bit 标识版本区别,ESP32 系列的芯片也只有几个 bit 标识版本区别,接下来的讨论会以 ESP8266 和 ESP32 为例,来介绍这两种芯片的 eFuse。

1. ESP8266 EFUSE 结构

ESP8266 的 EFUSE 大小为 128 bits。主要有两种结构:

通用结构:最常用的 eFuse 结构;

用户定制结构:在通用结构的基础上,用户自行烧写自定义的MAC 地址。

1.1 通用结构

eFuse_bit 位

bit 数

字段

检察规则

[127:124][3:0]

[7:0]

digital_use

必须为 0

[123:122]

[1:0]

flash

不需检查

[121]

[0]

SIP

SIP 封装为 1,非 SIP 封装为 0

[120]

[0]

User_MAC

必须为 0

[119:96]

[23:0]

mac_h

MAC 地址高 24 bit,不检查

[95:88]

[7:0]

mac_h_crc

需等于 mac_h 字段的 crc8 值

[87:80]

[7:0]

reverse_1

必须为 0

[79:76]

[3:0]

flag_1

必须为 10 或 11

[75:60]

[15:0]

reverse_2

必须为 0

[59:56]

[3:0]

version

必须为 2

[55:48]

[7:0]

mac_map

必须为 0

[47:24]

[23:0]

mac_l

MAC 地址低 24 bit,不检查

[23:16]

[7:0]

crc8

等于 MAC 映射和 mac_l 的 crc8 值

[15:5]

[10:0]

reverse_3

必须为 0

[4]

[0]

flag_3

ESP8285 为 1,其他为 0

1.2 用户定制结构

用户可以将通用结构中的保留位,用来定制烧写 MAC 地址。

eFuse_bit 位

bit 数

字段

检察规则

[127:124][3:0]

[7:0]

digital_use

必须为0

[123:122]

[1:0]

flash

ESP8266 必须为 0,SIP 及 ESP8285 不为 0

[120]

[0]

User_MAC

标志位,必须为 1

[119:96]

[23:0]

mac_h

MAC 地址高 24 bit,不检查

[95:88]

[7:0]

mac_h_crc

需等于 mac_h 字段的 crc8 值

[87:80]

[23:16]

user_mac

不检查

[79:76]

[3:0]

flag_1

必须为 10 或 11

[75:60]

[15:0]

user_mac

不检查

[59:56]

[3:0]

version

必须为 2

[55:48]

[7:0]

mac_map

必须为 0

[47:24]

[23:0]

mac_l

MAC 地址低 24 bit,不检查

[23:16]

[7:0]

crc8

等于 MAC 映射和 mac_l 的 crc8 值

[15:8]

[7:0]

user_mac_crc8

需等于用户定制 MAC(24bit) 的 crc8 值

[7:6]

[1:0]

user_mac_map

用户定制 MAC 地址高 24 bit,不检查

[5]

[0]

reserve_3

必须为 0

[4]

[0]

flag_3

ESP8285 为 1,其他为 0

1.4 ESP8266 与 ESP8285 的区别

ESP8266 与 ESP8285 的区别在于,ESP8285 内置了 1 MB 的 flash,可以节省模组上的空间。

这两种芯片在 eFuse 中几乎完全一样,只有一个 bit4(新版)/ bit80 (旧版) 标识了该芯片是 ESP8266 或是 ESP8285。

2. ESP32 eFuse 结构

ESP32 的 eFuse 大小比 ESP8266 大出很多,为 256 bit * 4,分为 4 个 BLOCK 存放 eFuse 信息。

BLOCK1-3 都由 8 个 WORD 组成,BLOCK0 由 7 个 WORD 组成,每个 WORD 大小为 32 bit,共计 256 bit。

2.1 BLOCK0

ESP32 芯片相关的信息时存放在 BLOCK0 中的。

当前对于 ESP32 eFuse 的检查,仅限于 MAC 地址和芯片类型的校验。

BLOCK0 中的 WORD1 和 WORD2 存放的就是 ESP32 的 MAC 地址与 CRC 值。

WORD1 中存放的是 MAC 地址的低 32 bit;

WORD2 中的 [15:0] 存放的是 MAC 地址的高 16 bit;

WORD2 中的 [23:16] 存放的是 CRC8 的值。

WORD3 的部分存放的是芯片类型标识。

WORD3 中的 [2] 存放的是 32pad 标识

WORD3 中的 [15] 存放的是 eco 标识

WORD3 中的 [11:9] 存放的是 version

注:eco 标识了芯片是否针对 PSRAM 进行过工厂返工。如果 eco 为 1,则芯片名称需要以 ‘E’ 结尾。

具体区分如下表:

Device Name

Description

32pad

version

ESP32-D0WDQ6

Original ESP32; 6*6 QFN48

0

0

ESP32-D0WD

Original ESP32; 5*5 QFN48

0

1

ESP32-D2WD

Original ESP32; 5*5 QFN48; 2MB ISSI flash

0

2

ESP32-D0WDXM

Original ESP32 ;5*5 QFN48 ;customized efuse

0

3

ESP8689

Original ESP32; 5*5 QFN32

1

0

ESP32-PICO-D2

Original ESP32 SIP; 7*7 LGA49; 2MB ISSI Flash

0

4

ESP32-PICO-D4

Original ESP32 SIP; 7*7 LGA49; 4MB Flash(GD/MX)

0

5

ESP32-PICO-D4XM

Original ESP32 SIP; 7*7 LGA49; 4MB Flash(GD/MX)

0

6

2.2 BLOCK1 & BLOCK2

这两个 BLOCK 存放的是加密相关的信息。如果启用了 flash 加密,会将密钥放在其中,且一旦打开了 flash 加密功能,BLOCK1 和 BLOCK2 就启用了读写保护,只能读出全 0 数据,无法知道实际的数据。

2.3 BLOCK3

BLOCK3 可支持用户烧写定制 MAC 地址。

eFuse_bit 位

bit 数

字段

检察规则

[184]

[0]

flag

若烧写定制 mac,则为 1

[183:72]

[111:0]

reserve

不检查

[71:8]

[63:0]

mac

进行过4/3编码的mac地址,不检查

[7:0]

[7:0]

mac_crc8

需等于 mac 地址的 crc8 值

3. ESP eFuse 使用

espefuse.py 是用于读取 ESP32 eFuse 的工具。

开头的 eFuses 详细介绍了 ESP32 完整的 BLOCK0 构成。还包括了很多对 eFuse 操作的方法:

dump:读取全 eFuse;

burn_efuse:烧写 eFuse 的某个 WORD;

read_protect_efuse:对某个 WORD 读保护;

write_protect_efuse:对某个 WORD 写保护;

burn_key:烧写加密的密钥;

and so on

调用参数与 esptool.py 接近。

例:如果需要查看 ESP32 的 eFuse,输入--port comX dump,可以得到如下反馈:

espefuse.py v2.2-dev

Connecting.....

EFUSE block 0:

00020100 a445b5f4 003730ae 00008000 00000034 00000000 00000054

EFUSE block 1:

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

EFUSE block 2:

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

EFUSE block 3:

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

如果要查看 efuse 信息,可以在终端输入 espefuse.py --port /dev/ttyUSB0 summary。

matlab中esp=1.0e-3,ESP系列杂谈(一): eFuse 简介相关推荐

  1. matlab中求叠加平均,eeglab教程系列(6)-数据叠加平均{1}(Data averaging)

    欢迎关注我们,选择加"星标"或"置顶" 更多技术,第一时间送达 ERP是Event-related Potentials的简称, 事件相关电位, 是一种特殊的脑 ...

  2. matlab什么样的数表示0,matlab中e=1; i=0;是什么意思

    matlab中 e(k,:)=[a(i,:),b(j,: 把a矩阵的i行和b矩阵的j行接起来,作为e矩阵的k行.祝学习愉快. matlab中x(:,i)=x(:,i)/sum(x(:, [x,y]=e ...

  3. MATLAB从入门到精通系列之如何在MATLAB中导入excel单sheet页及多sheet页表格

    前言 一个excel表格中可能有一个Sheet或多个Sheet,虽然在MATLAB中只需要加些代码即可轻松实现,但是为了帮助各位小伙伴更容易理解. 因此,分为两部分讲解:1)excel表格中只有一个S ...

  4. 【Matlab系列】matlab中数据归一化方法

    DATE: 2019.9.13 中秋 文章目录 1.参考 2.数据归一化 1.参考 matlab 中 将一组数据归一化到(0,1)之间 2.数据归一化 用函数mapminmax 默认的map范围是[- ...

  5. 在matlab中real函数,matlab2c使用c++实现matlab函数系列教程-real函数

    全栈工程师开发手册 (作者:栾鹏) matlab2c调用方法: 1.下载动态链接库 2.将Matlab2c.dll拷贝到exe同目录下 3.将Matlab2c.h.Matlab2c.lib放到项目头文 ...

  6. matlab中pdf函数使用,matlab2c使用c++实现matlab函数系列教程-poisspdf函数

    全栈工程师开发手册 (作者:栾鹏) matlab2c调用方法: 1.下载matlab2c动态链接库 2.将matlab2c.dll.matlab2c.lib和matlab2c.h放到项目头文件目录下 ...

  7. matlab中fdyn,Matlab的用法总结

    1. 对序列进行洗牌 randperm() randperm()产生随机的序列 %if filepaths 是一个5*1的结构体,then cshuffle = randperm(length(fil ...

  8. matlab 中imagesc的用法

    imagesc(A) 将矩阵A中的元素数值按大小转化为不同颜色,并在坐标轴对应位置处以这种颜色染色 imagesc(x,y,A) x,y决定坐标范围,x,y应是两个二维向量,即x=[x1 x2],y= ...

  9. matlab中结束脚本运行_疫情当前,生活向前 | MATLAB 一直 Online 等你

    疫情当前,生活向前,希望如期而至的不止是春天,还有疫情过后平安而充实的你 ! MATLAB 连夜帮你整理了我们所有网上的学习资源,为了注定不平凡的你. ◆  ◆  ◆   三大工具,在家开学也不怕[1 ...

  10. 【笔记】MATLAB中的图形(2)

    三维作图 1.mesh(z)语句 mesh(z)语句可以给出矩阵z元素的三维消隐图,网络表面由z坐标点定义,与前面叙述的x-y平面的线格相同,图形由临近的点连接而成.它可用来显示用其他方式难以输出的包 ...

最新文章

  1. 【Android 安装包优化】资源打包配置 ( resources.arsc 资源映射表 | 配置国际化资源 )
  2. Socket阻塞与非阻塞,同步与异步、I/O模型
  3. JS---捕捉URL地址,以及模仿GET方法
  4. html列表拖拽排序插件,JS拖拽排序插件Sortable.js用法实例分析
  5. 调试远程服务器上的代码时报错:调试设置中的Python路径无效
  6. 计算机蓝屏原因原理,蓝屏炸弹
  7. 清明出行之高德路况思考
  8. 公司app上架正规要求需要办理icp许可证
  9. 运用简单的HTML、CSS建立一个音乐网站模板
  10. 新办的卡为什么显示无服务器,为什么插入卡后显示无服务,有时有有时又没有?...
  11. python要什么电脑配置_学Python需要什么配置的电脑?
  12. android 多个style,Android style详解
  13. 曝光补偿,白增黑减理论
  14. php.符号,特殊符号大全
  15. Microsoft edge 下载阿里云excel
  16. MySQL之主键ID生成策略
  17. 【CVX】Equivalent convex problems (Huber) Log-optimal investment strategy
  18. JAVA实现RS-485串口编程
  19. WBS(Work Breakdown Structure)-工作分解结构
  20. 宁波送餐机器人_宁波这家酒店有了机器人服务员 卖萌、引路、送餐样样行

热门文章

  1. mysql数据库封装类_基于mysqli封装的数据库类
  2. mybatis动态sql,条件判断详解示例
  3. 无法使用prop_Adobe Launch配置流量变量(Prop)
  4. kaggle房价预测特征意思_未来销量预测——Kaggle基础方案(三):特征工程及线下验证划分...
  5. 微信中直接打开手机系统浏览器的实现
  6. Unity编辑器:自定义编辑器样式——GUIStyle
  7. REC Solar推出黑色多晶半切片PERC组件,已进入量产化
  8. 利用hexo搭建一个只属于你自己的博客
  9. JS常用事件兼容性处理方法
  10. 【转】搞清楚脚本中这些函数的调用规律