Skip to content

Commit df6f591

Browse files
authored
Merge pull request #43 from sandeepmistry/uno-wifi-rev2-updater
Add firmware updater supporter for Uno WiFi Rev2
2 parents c0560a6 + 94d5398 commit df6f591

File tree

5 files changed

+56
-25
lines changed

5 files changed

+56
-25
lines changed

.travis.yml

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ env:
55
matrix:
66
- BOARD="arduino:samd:mkrwifi1010"
77
- BOARD="arduino:samd_beta:mkrvidor4000"
8+
- BOARD="arduino:megaavr:uno2018"
89
before_install:
910
- wget http://downloads.arduino.cc/arduino-$IDE_VERSION-linux64.tar.xz
1011
- tar xf arduino-$IDE_VERSION-linux64.tar.xz
@@ -17,6 +18,9 @@ before_install:
1718
arduino --install-boards arduino:samd_beta;
1819
arduino --install-library VidorPeripherals;
1920
fi
21+
- if [[ "$BOARD" =~ "arduino:megaavr:" ]]; then
22+
arduino --install-boards arduino:megaavr;
23+
fi
2024
- buildExampleSketch() { arduino --verbose-build --verify --board $BOARD $PWD/examples/$1/$1.ino; }
2125
- buildExampleToolsSketch() { arduino --verbose-build --verify --board $BOARD $PWD/examples/Tools/$1/$1.ino; }
2226
install:
@@ -38,8 +42,6 @@ script:
3842
- buildExampleSketch WiFiWebClient
3943
- buildExampleSketch WiFiWebClientRepeating
4044
- buildExampleSketch WiFiWebServer
41-
- if [[ "$BOARD" =~ "arduino:samd:" ]]; then
42-
buildExampleToolsSketch CheckFirmwareVersion
43-
buildExampleToolsSketch FirmwareUpdater;
44-
buildExampleToolsSketch SerialNINAPassthrough;
45-
fi
45+
- buildExampleToolsSketch CheckFirmwareVersion
46+
- buildExampleToolsSketch FirmwareUpdater;
47+
- buildExampleToolsSketch SerialNINAPassthrough;

examples/Tools/FirmwareUpdater/ESP32BootROM.cpp

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,20 @@ int ESP32BootROMClass::begin(unsigned long baudrate)
5353
delay(10);
5454
FPGA.digitalWrite(_resetnPin, HIGH);
5555
delay(100);
56+
57+
#elif defined(ARDUINO_AVR_UNO_WIFI_REV2)
58+
_serial->begin(119400);
59+
60+
pinMode(_gpio0Pin, OUTPUT);
61+
pinMode(_resetnPin, OUTPUT);
62+
63+
digitalWrite(_gpio0Pin, LOW);
64+
65+
digitalWrite(_resetnPin, LOW);
66+
delay(100);
67+
digitalWrite(_resetnPin, HIGH);
68+
delay(100);
69+
digitalWrite(_resetnPin, LOW);
5670
#else
5771
_serial->begin(115200);
5872

@@ -77,7 +91,7 @@ int ESP32BootROMClass::begin(unsigned long baudrate)
7791
return 0;
7892
}
7993

80-
#ifdef ARDUINO_SAMD_MKRVIDOR4000
94+
#if defined(ARDUINO_SAMD_MKRVIDOR4000) || defined(ARDUINO_AVR_UNO_WIFI_REV2)
8195
(void)baudrate;
8296
#else
8397
if (baudrate != 115200) {
@@ -245,14 +259,14 @@ void ESP32BootROMClass::command(int opcode, const void* data, uint16_t length)
245259
#endif
246260
}
247261

248-
int ESP32BootROMClass::response(int opcode, unsigned int timeout, void* body)
262+
int ESP32BootROMClass::response(int opcode, unsigned long timeout, void* body)
249263
{
250264
uint8_t data[10 + 256];
251265
uint16_t index = 0;
252266

253267
uint8_t responseLength = 4;
254268

255-
for (unsigned long start = millis(); (index < (10 + responseLength)) && (millis() - start) < timeout;) {
269+
for (unsigned long start = millis(); (index < (uint16_t)(10 + responseLength)) && (millis() - start) < timeout;) {
256270
if (_serial->available()) {
257271
data[index] = _serial->read();
258272

@@ -280,7 +294,7 @@ int ESP32BootROMClass::response(int opcode, unsigned int timeout, void* body)
280294
}
281295
#endif
282296

283-
if (index != (10 + responseLength)) {
297+
if (index != (uint16_t)(10 + responseLength)) {
284298
return -1;
285299
}
286300

examples/Tools/FirmwareUpdater/ESP32BootROM.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class ESP32BootROMClass {
4040
int spiAttach();
4141

4242
void command(int opcode, const void* data, uint16_t length);
43-
int response(int opcode, unsigned int timeout, void* body = NULL);
43+
int response(int opcode, unsigned long timeout, void* body = NULL);
4444

4545
void writeEscapedBytes(const uint8_t* data, uint16_t length);
4646

examples/Tools/FirmwareUpdater/FirmwareUpdater.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ static const int MAX_PAYLOAD_SIZE = 1024;
4040
#define CMD_HELLO 0x99
4141

4242
void setup() {
43-
Serial.begin(115200);
43+
Serial.begin(1000000);
4444

4545
if (!ESP32BootROM.begin(921600)) {
4646
Serial.println("Unable to communicate with ESP32 boot ROM!");

examples/Tools/SerialNINAPassthrough/SerialNINAPassthrough.ino

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ int rts = -1;
3131
int dtr = -1;
3232

3333
void setup() {
34-
SerialUSB.begin(baud);
34+
Serial.begin(baud);
3535

3636
#ifdef ARDUINO_SAMD_MKRVIDOR4000
3737
FPGA.begin();
@@ -46,43 +46,58 @@ void setup() {
4646
pinMode(NINA_GPIO0, OUTPUT);
4747
pinMode(NINA_RESETN, OUTPUT);
4848
#endif
49+
50+
#ifdef ARDUINO_AVR_UNO_WIFI_REV2
51+
// manually put the NINA in upload mode
52+
digitalWrite(NINA_GPIO0, LOW);
53+
54+
digitalWrite(NINA_RESETN, LOW);
55+
delay(100);
56+
digitalWrite(NINA_RESETN, HIGH);
57+
delay(100);
58+
digitalWrite(NINA_RESETN, LOW);
59+
#endif
4960
}
5061

5162
void loop() {
52-
if (rts != SerialUSB.rts()) {
63+
#ifndef ARDUINO_AVR_UNO_WIFI_REV2
64+
if (rts != Serial.rts()) {
5365
#ifdef ARDUINO_SAMD_MKRVIDOR4000
54-
FPGA.digitalWrite(FPGA_SPIWIFI_RESET, (SerialUSB.rts() == 1) ? LOW : HIGH);
66+
FPGA.digitalWrite(FPGA_SPIWIFI_RESET, (Serial.rts() == 1) ? LOW : HIGH);
5567
#else
56-
digitalWrite(NINA_RESETN, SerialUSB.rts());
68+
digitalWrite(NINA_RESETN, Serial.rts());
5769
#endif
58-
rts = SerialUSB.rts();
70+
rts = Serial.rts();
5971
}
6072

61-
if (dtr != SerialUSB.dtr()) {
73+
if (dtr != Serial.dtr()) {
6274
#ifdef ARDUINO_SAMD_MKRVIDOR4000
63-
FPGA.digitalWrite(FPGA_NINA_GPIO0, (SerialUSB.dtr() == 1) ? HIGH : LOW);
75+
FPGA.digitalWrite(FPGA_NINA_GPIO0, (Serial.dtr() == 1) ? HIGH : LOW);
6476
#else
65-
digitalWrite(NINA_GPIO0, (SerialUSB.dtr() == 0) ? HIGH : LOW);
77+
digitalWrite(NINA_GPIO0, (Serial.dtr() == 0) ? HIGH : LOW);
6678
#endif
67-
dtr = SerialUSB.dtr();
79+
dtr = Serial.dtr();
6880
}
81+
#endif
6982

70-
if (SerialUSB.available()) {
71-
SerialNina.write(SerialUSB.read());
83+
if (Serial.available()) {
84+
SerialNina.write(Serial.read());
7285
}
7386

7487
if (SerialNina.available()) {
75-
SerialUSB.write(SerialNina.read());
88+
Serial.write(SerialNina.read());
7689
}
7790

91+
#ifndef ARDUINO_AVR_UNO_WIFI_REV2
7892
// check if the USB virtual serial wants a new baud rate
79-
if (SerialUSB.baud() != baud) {
93+
if (Serial.baud() != baud) {
8094
rts = -1;
8195
dtr = -1;
8296

83-
baud = SerialUSB.baud();
97+
baud = Serial.baud();
8498
#ifndef ARDUINO_SAMD_MKRVIDOR4000
8599
SerialNina.begin(baud);
86100
#endif
87101
}
102+
#endif
88103
}

0 commit comments

Comments
 (0)