-
Notifications
You must be signed in to change notification settings - Fork 101
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
26 changed files
with
23,978 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,182 @@ | ||
import { R as ROM } from './rom-DGwTkJep.js'; | ||
|
||
var entry = 1074521560; | ||
var text = "CAD0PxwA9D8AAPQ/AMD8PxAA9D82QQAh+v/AIAA4AkH5/8AgACgEICB0nOIGBQAAAEH1/4H2/8AgAKgEiAigoHTgCAALImYC54b0/yHx/8AgADkCHfAAAKDr/T8Ya/0/hIAAAEBAAABYq/0/pOv9PzZBALH5/yCgdBARIKXHAJYaBoH2/5KhAZCZEZqYwCAAuAmR8/+goHSaiMAgAJIYAJCQ9BvJwMD0wCAAwlgAmpvAIACiSQDAIACSGACB6v+QkPSAgPSHmUeB5f+SoQGQmRGamMAgAMgJoeX/seP/h5wXxgEAfOiHGt7GCADAIACJCsAgALkJRgIAwCAAuQrAIACJCZHX/5qIDAnAIACSWAAd8AAA+CD0P/gw9D82QQCR/f/AIACICYCAJFZI/5H6/8AgAIgJgIAkVkj/HfAAAAAQIPQ/ACD0PwAAAAg2QQAQESCl/P8h+v8MCMAgAIJiAJH6/4H4/8AgAJJoAMAgAJgIVnn/wCAAiAJ88oAiMCAgBB3wAAAAAEA2QQAQESDl+/8Wav+B7P+R+//AIACSaADAIACYCFZ5/x3wAAAMwPw/////AAQg9D82QQAh/P84QhaDBhARIGX4/xb6BQz4DAQ3qA2YIoCZEIKgAZBIg0BAdBARICX6/xARICXz/4giDBtAmBGQqwHMFICrAbHt/7CZELHs/8AgAJJrAJHO/8AgAKJpAMAgAKgJVnr/HAkMGkCag5AzwJqIOUKJIh3wAAAskgBANkEAoqDAgf3/4AgAHfAAADZBAIKgwK0Ch5IRoqDbgff/4AgAoqDcRgQAAAAAgqDbh5IIgfL/4AgAoqDdgfD/4AgAHfA2QQA6MsYCAACiAgAbIhARIKX7/zeS8R3wAAAAfNoFQNguBkCc2gVAHNsFQDYhIaLREIH6/+AIAEYLAAAADBRARBFAQ2PNBL0BrQKB9f/gCACgoHT8Ws0EELEgotEQgfH/4AgASiJAM8BWA/0iogsQIrAgoiCy0RCB7P/gCACtAhwLEBEgpff/LQOGAAAioGMd8AAA/GcAQNCSAEAIaABANkEhYqEHwGYRGmZZBiwKYtEQDAVSZhqB9//gCAAMGECIEUe4AkZFAK0GgdT/4AgAhjQAAJKkHVBzwOCZERqZQHdjiQnNB70BIKIggc3/4AgAkqQd4JkRGpmgoHSICYyqDAiCZhZ9CIYWAAAAkqQd4JkREJmAgmkAEBEgJer/vQetARARIKXt/xARICXp/80HELEgYKYggbv/4AgAkqQd4JkRGpmICXAigHBVgDe1sJKhB8CZERqZmAmAdcCXtwJG3P+G5v8MCIJGbKKkGxCqoIHK/+AIAFYK/7KiC6IGbBC7sBARIKWPAPfqEvZHD7KiDRC7sHq7oksAG3eG8f9867eawWZHCIImGje4Aoe1nCKiCxAisGC2IK0CgZv/4AgAEBEgpd//rQIcCxARICXj/xARIKXe/ywKgbH/4AgAHfAIIPQ/cOL6P0gkBkDwIgZANmEAEBEg5cr/EKEggfv/4AgAPQoMEvwqiAGSogCQiBCJARARIKXP/5Hy/6CiAcAgAIIpAKCIIMAgAIJpALIhAKHt/4Hu/+AIAKAjgx3wAAD/DwAANkEAgTv/DBmSSAAwnEGZKJH7/zkYKTgwMLSaIiozMDxBDAIpWDlIEBEgJfj/LQqMGiKgxR3wAABQLQZANkEAQSz/WDRQM2MWYwRYFFpTUFxBRgEAEBEgZcr/iESmGASIJIel7xARIKXC/xZq/6gUzQO9AoHx/+AIAKCgdIxKUqDEUmQFWBQ6VVkUWDQwVcBZNB3wAADA/D9PSEFJqOv9P3DgC0AU4AtADAD0PzhA9D///wAAjIAAABBAAACs6/0/vOv9PwTA/D8IwPw/BOz9PxQA9D/w//8AqOv9Pxjr/D8kwPw/fGgAQOxnAEBYhgBAbCoGQDgyBkAULAZAzCwGQEwsBkA0hQBAzJAAQHguBkAw7wVAWJIAQEyCAEA2wQAh3v8MCiJhCEKgAIHu/+AIACHZ/zHa/8YAAEkCSyI3MvgQESBlw/8MS6LBIBARIOXG/yKhARARICXC/1GR/pAiESolMc//sc//wCAAWQIheP4MDAxaMmIAgdz/4AgAMcr/QqEBwCAAKAMsCkAiIMAgACkDgTH/4AgAgdX/4AgAIcP/wCAAKALMuhzDMCIQIsL4DBMgo4MMC4HO/+AIAPG8/wwdwqABDBvioQBA3REAzBGAuwGioACBx//gCAAhtv8MBCpVIcP+ctIrwCAAKAUWcv/AIAA4BQwSwCAASQUiQRAiAwEMKCJBEYJRCUlRJpIHHDiHEh4GCAAiAwOCAwKAIhGAIiBmQhEoI8AgACgCKVFGAQAAHCIiUQkQESCls/8Mi6LBEBARIGW3/4IDAyIDAoCIESCIICGY/yAg9IeyHKKgwBARICWy/6Kg7hARIKWx/xARICWw/4bb/wAAIgMBHDknOTT2IhjG1AAAACLCLyAgdPZCcJGJ/5AioCgCoAIAIsL+ICB0HBknuQLGywCRhP+QIqAoAqACAJLCMJCQdLZZyQbGACxKbQQioMCnGAIGxABJUQxyrQQQESDlqv+tBBARIGWq/xARIOWo/xARIKWo/wyLosEQIsL/EBEg5av/ViL9RikADBJWyCyCYQ+Bev/gCACI8aAog8auACaIBAwSxqwAmCNoM2CJIICAtFbY/pnBEBEgZcf/mMFqKZwqBvf/AACgrEGBbf/gCABW6vxi1vBgosDMJgaBAACgkPRWGf6GBACgoPWZwYFl/+AIAJjBVpr6kGbADBkAmRFgosBnOeEGBAAAAKCsQYFc/+AIAFaq+GLW8GCiwFam/sZvAABtBCKgwCaIAoaNAG0EDALGiwAAACa484ZhAAwSJrgCBoUAuDOoIxARIOWh/6AkgwaBAAwcZrhTiEMgrBFtBCKgwoe6AoZ+ALhTqCPJ4RARIOXA/8YLAAwcZrgviEMgrBFtBCKgwoe6AoZ1ACgzuFOoIyBogsnhEBEgZb7/ITT+SWIi0itpIsjhoMSDLQyGaQChL/5tBLIKACKgxhY7GpgjgsjwIqDAh5kBKFoMCaKg70YCAJqzsgsYG5mwqjCHKfKCAwWSAwSAiBGQiCCSAwZtBACZEYCZIIIDB4CIAZCIIICqwIKgwaAok0ZVAIEY/m0EoggAIqDGFnoUqDgioMhW+hMoWKJIAMZNAByKbQQMEqcYAsZKAPhz6GPYU8hDuDOoI4EM/+AIAG0KoCSDRkQAAAwSJkgCRj8AqCO9BIEE/+AIAAYeAICwNG0EIqDAVgsPgGRBi8N8/UYOAKg8ucHJ4dnRgQD/4AgAyOG4wSgsmByoDNIhDZCSECYCDsAgAOIqACAtMOAiECCZIMAgAJkKG7vCzBBnO8LGm/9mSAJGmv9tBCKgwAYmAAwSJrgCRiEAIdz+mFOII5kCIdv+iQItBIYcAGHX/gwb2AaCyPCtBC0EgCuT0KuDIKoQbQQioMZW6gXB0f4ioMnoDIc+U4DwFCKgwFavBC0KRgIAKqOoaksiqQmtCyD+wCqdhzLtFprfIcT++QyZAsZ7/wwSZogWIcH+iAIWKACCoMhJAiG9/kkCDBKAJINtBEYBAABtBCKg/yCgdBARIOV5/2CgdBARIGV5/xARIOV3/1aiviIDARwoJzge9jICBvf+IsL9ICB0DPgnuAKG8/6BrP6AIqAoAqACAIKg0ocSUoKg1IcSegbt/gAAAIgzoqJxwKoRaCOJ8YGw/uAIACGh/pGi/sAgACgCiPEgNDXAIhGQIhAgIyCAIoKtBGCywoGn/uAIAKKj6IGk/uAIAAbb/gAA2FPIQ7gzqCMQESAlff9G1v4AsgMDIgMCgLsRILsgssvwosMYEBEgZZn/Rs/+ACIDA4IDAmGP/YAiEZg2gCIgIsLwkCJjFiKymBaakpCcQUYCAJnBEBEgZWL/mMGoRqYaBKgmp6nrEBEgpVr/Fmr/qBbNArLDGIGG/uAIAIw6MqDEOVY4FiozORY4NiAjwCk2xrX+ggMCIsMYMgMDDByAMxGAMyAyw/AGIwCBbP6RHf3oCDlx4JnAmWGYJwwal7MBDDqJ8anR6cEQESAlW/+o0ZFj/ujBqQGhYv7dCb0CwsEc8sEYmcGBa/7gCAC4J80KqHGI8aC7wLknoDPAuAiqIqhhmMGqu90EDBq5CMDag5C7wNDgdMx90tuA0K6TFmoBrQmJ8ZnByeEQESAlif+I8ZjByOGSaABhTv2INoyjwJ8xwJnA1ikAVvj11qwAMUn9IqDHKVNGAACMPJwIxoL+FoigYUT9IqDIKVZGf/4AMUH9IqDJKVNGfP4oI1bCnq0EgUX+4AgAoqJxwKoRgT7+4AgAgUL+4AgAxnP+AAAoMxaCnK0EgTz+4AgAoqPogTb+4AgA4AIARmz+HfAAAAA2QQCdAoKgwCgDh5kPzDIMEoYHAAwCKQN84oYPACYSByYiGIYDAAAAgqDbgCkjh5kqDCIpA3zyRggAAAAioNwnmQoMEikDLQgGBAAAAIKg3Xzyh5kGDBIpAyKg2x3wAAA="; | ||
var text_start = 1074520064; | ||
var data = "GOv8P9jnC0Bx6AtA8+wLQO3oC0CP6AtA7egLQEnpC0AG6gtAeOoLQCHqC0CB5wtAo+kLQPjpC0Bn6QtAmuoLQI7pC0Ca6gtAXegLQLPoC0Dt6AtASekLQHfoC0BM6wtAs+wLQKXmC0DX7AtApeYLQKXmC0Cl5gtApeYLQKXmC0Cl5gtApeYLQKXmC0Dz6gtApeYLQM3rC0Cz7AtA"; | ||
var data_start = 1073605544; | ||
var ESP32_STUB = { | ||
entry: entry, | ||
text: text, | ||
text_start: text_start, | ||
data: data, | ||
data_start: data_start | ||
}; | ||
|
||
class ESP32ROM extends ROM { | ||
constructor() { | ||
super(...arguments); | ||
this.CHIP_NAME = "ESP32"; | ||
this.IMAGE_CHIP_ID = 0; | ||
this.EFUSE_RD_REG_BASE = 0x3ff5a000; | ||
this.DR_REG_SYSCON_BASE = 0x3ff66000; | ||
this.UART_CLKDIV_REG = 0x3ff40014; | ||
this.UART_CLKDIV_MASK = 0xfffff; | ||
this.UART_DATE_REG_ADDR = 0x60000078; | ||
this.XTAL_CLK_DIVIDER = 1; | ||
this.FLASH_SIZES = { | ||
"1MB": 0x00, | ||
"2MB": 0x10, | ||
"4MB": 0x20, | ||
"8MB": 0x30, | ||
"16MB": 0x40 | ||
}; | ||
this.FLASH_WRITE_SIZE = 0x400; | ||
this.BOOTLOADER_FLASH_OFFSET = 0x1000; | ||
this.SPI_REG_BASE = 0x3ff42000; | ||
this.SPI_USR_OFFS = 0x1c; | ||
this.SPI_USR1_OFFS = 0x20; | ||
this.SPI_USR2_OFFS = 0x24; | ||
this.SPI_W0_OFFS = 0x80; | ||
this.SPI_MOSI_DLEN_OFFS = 0x28; | ||
this.SPI_MISO_DLEN_OFFS = 0x2c; | ||
this.TEXT_START = ESP32_STUB.text_start; | ||
this.ENTRY = ESP32_STUB.entry; | ||
this.DATA_START = ESP32_STUB.data_start; | ||
this.ROM_DATA = ESP32_STUB.data; | ||
this.ROM_TEXT = ESP32_STUB.text; | ||
} | ||
async readEfuse(loader, offset) { | ||
const addr = this.EFUSE_RD_REG_BASE + 4 * offset; | ||
loader.debug("Read efuse " + addr); | ||
return await loader.readReg(addr); | ||
} | ||
async getPkgVersion(loader) { | ||
const word3 = await this.readEfuse(loader, 3); | ||
let pkgVersion = word3 >> 9 & 0x07; | ||
pkgVersion += (word3 >> 2 & 0x1) << 3; | ||
return pkgVersion; | ||
} | ||
async getChipRevision(loader) { | ||
const word3 = await this.readEfuse(loader, 3); | ||
const word5 = await this.readEfuse(loader, 5); | ||
const apbCtlDate = await loader.readReg(this.DR_REG_SYSCON_BASE + 0x7c); | ||
const revBit0 = word3 >> 15 & 0x1; | ||
const revBit1 = word5 >> 20 & 0x1; | ||
const revBit2 = apbCtlDate >> 31 & 0x1; | ||
if (revBit0 != 0) { | ||
if (revBit1 != 0) { | ||
if (revBit2 != 0) { | ||
return 3; | ||
} else { | ||
return 2; | ||
} | ||
} else { | ||
return 1; | ||
} | ||
} | ||
return 0; | ||
} | ||
async getChipDescription(loader) { | ||
const chipDesc = ["ESP32-D0WDQ6", "ESP32-D0WD", "ESP32-D2WD", "", "ESP32-U4WDH", "ESP32-PICO-D4", "ESP32-PICO-V3-02"]; | ||
let chipName = ""; | ||
const pkgVersion = await this.getPkgVersion(loader); | ||
const chipRevision = await this.getChipRevision(loader); | ||
const rev3 = chipRevision == 3; | ||
const single_core = (await this.readEfuse(loader, 3)) & 1 << 0; | ||
if (single_core != 0) { | ||
chipDesc[0] = "ESP32-S0WDQ6"; | ||
chipDesc[1] = "ESP32-S0WD"; | ||
} | ||
if (rev3) { | ||
chipDesc[5] = "ESP32-PICO-V3"; | ||
} | ||
if (pkgVersion >= 0 && pkgVersion <= 6) { | ||
chipName = chipDesc[pkgVersion]; | ||
} else { | ||
chipName = "Unknown ESP32"; | ||
} | ||
if (rev3 && (pkgVersion === 0 || pkgVersion === 1)) { | ||
chipName += "-V3"; | ||
} | ||
return chipName + " (revision " + chipRevision + ")"; | ||
} | ||
async getChipFeatures(loader) { | ||
const features = ["Wi-Fi"]; | ||
const word3 = await this.readEfuse(loader, 3); | ||
const chipVerDisBt = word3 & 1 << 1; | ||
if (chipVerDisBt === 0) { | ||
features.push(" BT"); | ||
} | ||
const chipVerDisAppCpu = word3 & 1 << 0; | ||
if (chipVerDisAppCpu !== 0) { | ||
features.push(" Single Core"); | ||
} else { | ||
features.push(" Dual Core"); | ||
} | ||
const chipCpuFreqRated = word3 & 1 << 13; | ||
if (chipCpuFreqRated !== 0) { | ||
const chipCpuFreqLow = word3 & 1 << 12; | ||
if (chipCpuFreqLow !== 0) { | ||
features.push(" 160MHz"); | ||
} else { | ||
features.push(" 240MHz"); | ||
} | ||
} | ||
const pkgVersion = await this.getPkgVersion(loader); | ||
if ([2, 4, 5, 6].indexOf(pkgVersion) !== -1) { | ||
features.push(" Embedded Flash"); | ||
} | ||
if (pkgVersion === 6) { | ||
features.push(" Embedded PSRAM"); | ||
} | ||
const word4 = await this.readEfuse(loader, 4); | ||
const adcVref = word4 >> 8 & 0x1f; | ||
if (adcVref !== 0) { | ||
features.push(" VRef calibration in efuse"); | ||
} | ||
const blk3PartRes = word3 >> 14 & 0x1; | ||
if (blk3PartRes !== 0) { | ||
features.push(" BLK3 partially reserved"); | ||
} | ||
const word6 = await this.readEfuse(loader, 6); | ||
const codingScheme = word6 & 0x3; | ||
const codingSchemeArr = ["None", "3/4", "Repeat (UNSUPPORTED)", "Invalid"]; | ||
features.push(" Coding Scheme " + codingSchemeArr[codingScheme]); | ||
return features; | ||
} | ||
async getCrystalFreq(loader) { | ||
const uartDiv = (await loader.readReg(this.UART_CLKDIV_REG)) & this.UART_CLKDIV_MASK; | ||
const etsXtal = loader.transport.baudrate * uartDiv / 1000000 / this.XTAL_CLK_DIVIDER; | ||
let normXtal; | ||
if (etsXtal > 33) { | ||
normXtal = 40; | ||
} else { | ||
normXtal = 26; | ||
} | ||
if (Math.abs(normXtal - etsXtal) > 1) { | ||
loader.info("WARNING: Unsupported crystal in use"); | ||
} | ||
return normXtal; | ||
} | ||
_d2h(d) { | ||
const h = (+d).toString(16); | ||
return h.length === 1 ? "0" + h : h; | ||
} | ||
async readMac(loader) { | ||
let mac0 = await this.readEfuse(loader, 1); | ||
mac0 = mac0 >>> 0; | ||
let mac1 = await this.readEfuse(loader, 2); | ||
mac1 = mac1 >>> 0; | ||
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]); | ||
} | ||
} | ||
|
||
export { ESP32ROM }; |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Oops, something went wrong.