Merge pull request #3 from espressif/feature/support_higher_baudrates
Added support to change baudrate to higher values.
This commit is contained in:
commit
eda1f2043c
25
ESPLoader.js
25
ESPLoader.js
@ -602,6 +602,7 @@ class ESPLoader {
|
||||
ESP_SPI_FLASH_MD5 = 0x13;
|
||||
ESP_READ_REG = 0x0A;
|
||||
ESP_SPI_ATTACH = 0x0D;
|
||||
ESP_CHANGE_BAUDRATE = 0x0F;
|
||||
|
||||
// Only Stub supported commands
|
||||
ESP_ERASE_FLASH = 0xD0;
|
||||
@ -620,8 +621,9 @@ class ESPLoader {
|
||||
|
||||
DETECTED_FLASH_SIZES = {0x12: '256KB', 0x13: '512KB', 0x14: '1MB', 0x15: '2MB', 0x16: '4MB', 0x17: '8MB', 0x18: '16MB'};
|
||||
|
||||
constructor(transport, terminal) {
|
||||
constructor(transport, baudrate, terminal) {
|
||||
this.transport = transport;
|
||||
this.baudrate = baudrate;
|
||||
this.terminal = terminal;
|
||||
this.IS_STUB = false;
|
||||
this.chip = null;
|
||||
@ -750,11 +752,8 @@ class ESPLoader {
|
||||
|
||||
read_reg = async({addr, timeout = 3000} = {}) => {
|
||||
var val, data;
|
||||
console.log("read reg " + addr + " " + timeout);
|
||||
var pkt = this._int_to_bytearray(addr);
|
||||
val = await this.command({op:this.ESP_READ_REG, data:pkt, timeout:timeout});
|
||||
console.log("Read reg resp");
|
||||
console.log(val);
|
||||
return val[0];
|
||||
}
|
||||
|
||||
@ -1222,6 +1221,22 @@ class ESPLoader {
|
||||
}
|
||||
}
|
||||
|
||||
change_baud = async() => {
|
||||
this.log("Changing baudrate to " + this.baudrate);
|
||||
console.log("Changing baudrate to " + this.baudrate);
|
||||
let second_arg = this.IS_STUB ? this.transport.baudrate : 0;
|
||||
let pkt = this._appendArray(this._int_to_bytearray(this.baudrate), this._int_to_bytearray(second_arg));
|
||||
let resp = await this.command({op:this.ESP_CHANGE_BAUDRATE, data:pkt});
|
||||
this.log("Changed");
|
||||
await this.transport.disconnect();
|
||||
await this._sleep(50);
|
||||
await this.transport.connect({baud:this.baudrate});
|
||||
try {
|
||||
await this.transport.rawRead({timeout:500});
|
||||
} catch (e) {
|
||||
}
|
||||
}
|
||||
|
||||
main_fn = async () => {
|
||||
await this.detect_chip();
|
||||
if (this.chip == null) {
|
||||
@ -1238,6 +1253,8 @@ class ESPLoader {
|
||||
|
||||
await this.run_stub();
|
||||
|
||||
await this.change_baud();
|
||||
|
||||
}
|
||||
|
||||
flash_size_bytes = function(flash_size) {
|
||||
|
@ -19,6 +19,13 @@
|
||||
<div>
|
||||
<div id="program">
|
||||
<h2> Program </h2>
|
||||
<label for="baudrates">Baudrate:</label>
|
||||
<select name="baudrates" id="baudrates">
|
||||
<option value="921600">921600</option>
|
||||
<option value="460800">460800</option>
|
||||
<option value="230400">230400</option>
|
||||
<option value="115200">115200</option>
|
||||
</select>
|
||||
<input class="button" type="button" id="connectButton" value="Connect" />
|
||||
<input class="button" type="button" id="disconnectButton" value="Disconnect" />
|
||||
<div id="files">
|
||||
|
14
index.js
14
index.js
@ -1,3 +1,4 @@
|
||||
const baudrates = document.getElementById("baudrates");
|
||||
const connectButton = document.getElementById("connectButton");
|
||||
const disconnectButton = document.getElementById("disconnectButton");
|
||||
const resetButton = document.getElementById("resetButton");
|
||||
@ -109,18 +110,16 @@ connectButton.onclick = async () => {
|
||||
}
|
||||
|
||||
try {
|
||||
esploader = new ESPLoader(transport, term);
|
||||
connected = true;
|
||||
esploader = new ESPLoader(transport, baudrates.value, term);
|
||||
connected = true;
|
||||
|
||||
await esploader.main_fn();
|
||||
|
||||
console.log("Flash ID 1");
|
||||
await esploader.flash_id();
|
||||
await esploader.main_fn();
|
||||
await esploader.flash_id();
|
||||
} catch(e) {
|
||||
console.log(e);
|
||||
}
|
||||
|
||||
console.log("Settings done");
|
||||
baudrates.style.display = "none";
|
||||
connectButton.style.display = "none";
|
||||
disconnectButton.style.display = "initial";
|
||||
filesDiv.style.display = "initial";
|
||||
@ -151,6 +150,7 @@ disconnectButton.onclick = async () => {
|
||||
await transport.disconnect();
|
||||
term.clear();
|
||||
connected = false;
|
||||
baudrates.style.display = "initial";
|
||||
connectButton.style.display = "initial";
|
||||
disconnectButton.style.display = "none";
|
||||
filesDiv.style.display = "none";
|
||||
|
27
webserial.js
27
webserial.js
@ -146,17 +146,32 @@ class Transport {
|
||||
}
|
||||
}
|
||||
|
||||
rawRead = async () => {
|
||||
rawRead = async ({timeout=0} = {}) => {
|
||||
let reader = this.device.readable.getReader();
|
||||
let done = false;
|
||||
let value = new Uint8Array(0);
|
||||
|
||||
this.reader = reader;
|
||||
if (timeout > 0) {
|
||||
t = setTimeout(function() {
|
||||
reader.cancel();
|
||||
reader.releaseLock();
|
||||
}, timeout);
|
||||
}
|
||||
|
||||
let o = await reader.read();
|
||||
this.reader = null;
|
||||
done = o.done;
|
||||
reader.releaseLock();
|
||||
return o.value;
|
||||
|
||||
if (done) {
|
||||
throw("timeout");
|
||||
} else {
|
||||
if (timeout > 0) {
|
||||
clearTimeout(t);
|
||||
}
|
||||
reader.releaseLock();
|
||||
return o.value;
|
||||
}
|
||||
}
|
||||
|
||||
setRTS = async (state) => {
|
||||
@ -166,9 +181,9 @@ class Transport {
|
||||
setDTR = async (state) => {
|
||||
await this.device.setSignals({dataTerminalReady:state});
|
||||
}
|
||||
connect = async () => {
|
||||
await this.device.open({baudRate: 115200});
|
||||
this.baudrate = 115200;
|
||||
connect = async ({baud=115200} = {}) => {
|
||||
await this.device.open({baudRate: baud});
|
||||
this.baudrate = baud;
|
||||
}
|
||||
disconnect = async () => {
|
||||
if (this.reader !== null) {
|
||||
|
Loading…
Reference in New Issue
Block a user