Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 43 additions & 2 deletions src/targets/esp32c3.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,49 @@ export class ESP32C3ROM extends ROM {
return desc;
}

public async getChipFeatures(loader: ESPLoader) {
return ["Wi-Fi"];
public async getFlashCap(loader: ESPLoader): Promise<number> {
const numWord = 3;
const block1Addr = this.EFUSE_BASE + 0x044;
const addr = block1Addr + 4 * numWord;
const registerValue = await loader.readReg(addr);
const flashCap = (registerValue >> 27) & 0x07;
return flashCap;
}

public async getFlashVendor(loader: ESPLoader): Promise<string> {
const numWord = 4;
const block1Addr = this.EFUSE_BASE + 0x044;
const addr = block1Addr + 4 * numWord;
const registerValue = await loader.readReg(addr);
const vendorId = (registerValue >> 0) & 0x07;
const vendorMap: { [key: number]: string } = {
1: "XMC",
2: "GD",
3: "FM",
4: "TT",
5: "ZBIT",
};
return vendorMap[vendorId] || "";
}

public async getChipFeatures(loader: ESPLoader): Promise<string[]> {
const features: string[] = ["Wi-Fi", "BLE"];

const flashMap: { [key: number]: string | null } = {
0: null,
1: "Embedded Flash 4MB",
2: "Embedded Flash 2MB",
3: "Embedded Flash 1MB",
4: "Embedded Flash 8MB",
};
const flashCap = await this.getFlashCap(loader);
const flashVendor = await this.getFlashVendor(loader);
const flash = flashMap[flashCap];
const flashDescription = flash !== undefined ? flash : "Unknown Embedded Flash";
if (flash !== null) {
features.push(`${flashDescription} (${flashVendor})`);
}
return features;
}

public async getCrystalFreq(loader: ESPLoader) {
Expand Down
2 changes: 1 addition & 1 deletion src/targets/esp32c6.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ export class ESP32C6ROM extends ROM {
}

public async getChipFeatures(loader: ESPLoader) {
return ["Wi-Fi"];
return ["Wi-Fi 6", "BT 5", "IEEE802.15.4"];
}

public async getCrystalFreq(loader: ESPLoader) {
Expand Down
66 changes: 53 additions & 13 deletions src/targets/esp32s2.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,23 +55,63 @@ export class ESP32S2ROM extends ROM {
}
}

public async getChipFeatures(loader: ESPLoader) {
const features = ["Wi-Fi"];
const pkgVer = await this.getPkgVersion(loader);
if (pkgVer == 1) {
features.push("Embedded 2MB Flash");
} else if (pkgVer == 2) {
features.push("Embedded 4MB Flash");
}
public async getFlashCap(loader: ESPLoader): Promise<number> {
const numWord = 3;
const block1Addr = this.EFUSE_BASE + 0x044;
const addr = block1Addr + 4 * numWord;
const registerValue = await loader.readReg(addr);
const flashCap = (registerValue >> 21) & 0x0f;
return flashCap;
}

public async getPsramCap(loader: ESPLoader): Promise<number> {
const numWord = 3;
const block1Addr = this.EFUSE_BASE + 0x044;
const addr = block1Addr + 4 * numWord;
const registerValue = await loader.readReg(addr);
const psramCap = (registerValue >> 28) & 0x0f;
return psramCap;
}

public async getBlock2Version(loader: ESPLoader): Promise<number> {
const numWord = 4;
const block2Addr = this.EFUSE_BASE + 0x05c;
const addr = block2Addr + 4 * numWord;
const word4 = await loader.readReg(addr);
const block2Ver = (word4 >> 4) & 0x07;
const registerValue = await loader.readReg(addr);
const block2Ver = (registerValue >> 4) & 0x07;
return block2Ver;
}

public async getChipFeatures(loader: ESPLoader) {
const features: string[] = ["Wi-Fi"];

const flashMap: { [key: number]: string | null } = {
0: "No Embedded Flash",
1: "Embedded Flash 2MB",
2: "Embedded Flash 4MB",
};
const flashCap = await this.getFlashCap(loader);
const flashDescription = flashMap[flashCap] || "Unknown Embedded Flash";
features.push(flashDescription);

const psramMap: { [key: number]: string | null } = {
0: "No Embedded Flash",
1: "Embedded PSRAM 2MB",
2: "Embedded PSRAM 4MB",
};
const psramCap = await this.getPsramCap(loader);
const psramDescription = psramMap[psramCap] || "Unknown Embedded PSRAM";
features.push(psramDescription);

const block2VersionMap: { [key: number]: string | null } = {
0: "No calibration in BLK2 of efuse",
1: "ADC and temperature sensor calibration in BLK2 of efuse V1",
2: "ADC and temperature sensor calibration in BLK2 of efuse V2",
};
const block2Ver = await this.getBlock2Version(loader);
const block2VersionDescription = block2VersionMap[block2Ver] || "Unknown Calibration in BLK2";
features.push(block2VersionDescription);

if (block2Ver == 1) {
features.push("ADC and temperature sensor calibration in BLK2 of efuse");
}
return features;
}

Expand Down
80 changes: 78 additions & 2 deletions src/targets/esp32s3.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,85 @@ export class ESP32S3ROM extends ROM {
public async getChipDescription(loader: ESPLoader) {
return "ESP32-S3";
}
public async getChipFeatures(loader: ESPLoader) {
return ["Wi-Fi", "BLE"];

public async getFlashCap(loader: ESPLoader): Promise<number> {
const numWord = 3;
const block1Addr = this.EFUSE_BASE + 0x044;
const addr = block1Addr + 4 * numWord;
const registerValue = await loader.readReg(addr);
const flashCap = (registerValue >> 27) & 0x07;
return flashCap;
}

public async getFlashVendor(loader: ESPLoader): Promise<string> {
const numWord = 4;
const block1Addr = this.EFUSE_BASE + 0x044;
const addr = block1Addr + 4 * numWord;
const registerValue = await loader.readReg(addr);
const vendorId = (registerValue >> 0) & 0x07;
const vendorMap: { [key: number]: string } = {
1: "XMC",
2: "GD",
3: "FM",
4: "TT",
5: "BY",
};
return vendorMap[vendorId] || "";
}

public async getPsramCap(loader: ESPLoader): Promise<number> {
const numWord = 4;
const block1Addr = this.EFUSE_BASE + 0x044;
const addr = block1Addr + 4 * numWord;
const registerValue = await loader.readReg(addr);
const psramCap = (registerValue >> 3) & 0x03;
return psramCap;
}

public async getPsramVendor(loader: ESPLoader): Promise<string> {
const numWord = 4;
const block1Addr = this.EFUSE_BASE + 0x044;
const addr = block1Addr + 4 * numWord;
const registerValue = await loader.readReg(addr);
const vendorId = (registerValue >> 7) & 0x03;
const vendorMap: { [key: number]: string } = {
1: "AP_3v3",
2: "AP_1v8",
};
return vendorMap[vendorId] || "";
}

public async getChipFeatures(loader: ESPLoader): Promise<string[]> {
const features: string[] = ["Wi-Fi", "BLE"];

const flashMap: { [key: number]: string | null } = {
0: null,
1: "Embedded Flash 8MB",
2: "Embedded Flash 4MB",
};
const flashCap = await this.getFlashCap(loader);
const flashVendor = await this.getFlashVendor(loader);
const flash = flashMap[flashCap];
const flashDescription = flash !== undefined ? flash : "Unknown Embedded Flash";
if (flash !== null) {
features.push(`${flashDescription} (${flashVendor})`);
}

const psramMap: { [key: number]: string | null } = {
0: null,
1: "Embedded PSRAM 8MB",
2: "Embedded PSRAM 2MB",
};
const psramCap = await this.getPsramCap(loader);
const psramVendor = await this.getPsramVendor(loader);
const psram = psramMap[psramCap];
const psramDescription = psram !== undefined ? psram : "Unknown Embedded PSRAM";
if (psram !== null) {
features.push(`${psramDescription} (${psramVendor})`);
}
return features;
}

public async getCrystalFreq(loader: ESPLoader) {
return 40;
}
Expand Down