-
Notifications
You must be signed in to change notification settings - Fork 178
Expand file tree
/
Copy pathesp32h2.ts
More file actions
133 lines (115 loc) · 3.93 KB
/
Copy pathesp32h2.ts
File metadata and controls
133 lines (115 loc) · 3.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import { ESPLoader } from "../esploader.js";
import { ESP32C6ROM } from "./esp32c6.js";
import { MemoryMapEntry } from "./rom.js";
export class ESP32H2ROM extends ESP32C6ROM {
public CHIP_NAME = "ESP32-H2";
public IMAGE_CHIP_ID = 16;
public EFUSE_BASE = 0x600b0800;
public EFUSE_BLOCK1_ADDR = this.EFUSE_BASE + 0x044;
public MAC_EFUSE_REG = this.EFUSE_BASE + 0x044;
public UART_CLKDIV_REG = 0x3ff40014;
public UART_CLKDIV_MASK = 0xfffff;
public UART_DATE_REG_ADDR = 0x6000007c;
public FLASH_WRITE_SIZE = 0x400;
public BOOTLOADER_FLASH_OFFSET = 0x0;
public SPI_REG_BASE = 0x60003000;
public SPI_USR_OFFS = 0x18;
public SPI_USR1_OFFS = 0x1c;
public SPI_USR2_OFFS = 0x20;
public SPI_MOSI_DLEN_OFFS = 0x24;
public SPI_MISO_DLEN_OFFS = 0x28;
public SPI_W0_OFFS = 0x58;
public USB_RAM_BLOCK = 0x800;
public UARTDEV_BUF_NO_USB = 3;
public UARTDEV_BUF_NO = 0x3fcef14c;
IROM_MAP_START = 0x42000000;
IROM_MAP_END = 0x42800000;
public MEMORY_MAP: MemoryMapEntry[] = [
[0x00000000, 0x00010000, "PADDING"],
[0x42000000, 0x43000000, "DROM"],
[0x40800000, 0x40880000, "DRAM"],
[0x40800000, 0x40880000, "BYTE_ACCESSIBLE"],
[0x4004ac00, 0x40050000, "DROM_MASK"],
[0x40000000, 0x4004ac00, "IROM_MASK"],
[0x42000000, 0x43000000, "IROM"],
[0x40800000, 0x40880000, "IRAM"],
[0x50000000, 0x50004000, "RTC_IRAM"],
[0x50000000, 0x50004000, "RTC_DRAM"],
[0x600fe000, 0x60100000, "MEM_INTERNAL2"],
];
public async getPkgVersion(loader: ESPLoader): Promise<number> {
const numWord = 4;
return ((await loader.readReg(this.EFUSE_BLOCK1_ADDR + 4 * numWord)) >> 0) & 0x07;
}
public async getMinorChipVersion(loader: ESPLoader): Promise<number> {
const numWord = 3;
return ((await loader.readReg(this.EFUSE_BLOCK1_ADDR + 4 * numWord)) >> 18) & 0x07;
}
public async getMajorChipVersion(loader: ESPLoader): Promise<number> {
const numWord = 3;
return ((await loader.readReg(this.EFUSE_BLOCK1_ADDR + 4 * numWord)) >> 21) & 0x03;
}
public async getChipDescription(loader: ESPLoader): Promise<string> {
const pkgVer = await this.getPkgVersion(loader);
let desc: string;
if (pkgVer === 0) {
desc = "ESP32-H2";
} else {
desc = "unknown ESP32-H2";
}
const majorRev = await this.getMajorChipVersion(loader);
const minorRev = await this.getMinorChipVersion(loader);
return `${desc} (revision v${majorRev}.${minorRev})`;
}
public async getChipFeatures(loader: ESPLoader) {
return ["BT 5 (LE)", "IEEE802.15.4", "Single Core", "96MHz"];
}
public async getCrystalFreq(loader: ESPLoader) {
// ESP32H2 XTAL is fixed to 32MHz
return 32;
}
public _d2h(d: number) {
const h = (+d).toString(16);
return h.length === 1 ? "0" + h : h;
}
public async postConnect(loader: ESPLoader) {
const bufNo = (await loader.readReg(this.UARTDEV_BUF_NO)) & 0xff;
loader.debug("In _post_connect " + bufNo);
if (bufNo == this.UARTDEV_BUF_NO_USB) {
loader.ESP_RAM_BLOCK = this.USB_RAM_BLOCK;
}
}
public async usesUsbJtagSerial(loader: ESPLoader): Promise<boolean> {
const bufNo = (await loader.readReg(this.UARTDEV_BUF_NO)) & 0xff;
return bufNo === this.UARTDEV_BUF_NO_USB;
}
public async readMac(loader: ESPLoader) {
let mac0 = await loader.readReg(this.MAC_EFUSE_REG);
mac0 = mac0 >>> 0;
let mac1 = await loader.readReg(this.MAC_EFUSE_REG + 4);
mac1 = (mac1 >>> 0) & 0x0000ffff;
const mac = new Uint8Array(6);
mac[0] = (mac1 >> 8) & 0xff;
mac[1] = mac1 & 0xff;
mac[2] = (mac0 >> 24) & 0xff;
mac[3] = (mac0 >> 16) & 0xff;
mac[4] = (mac0 >> 8) & 0xff;
mac[5] = mac0 & 0xff;
return (
this._d2h(mac[0]) +
":" +
this._d2h(mac[1]) +
":" +
this._d2h(mac[2]) +
":" +
this._d2h(mac[3]) +
":" +
this._d2h(mac[4]) +
":" +
this._d2h(mac[5])
);
}
public getEraseSize(offset: number, size: number) {
return size;
}
}