diff --git a/boards.txt b/boards.txt index 966408f514..2e8525c333 100644 --- a/boards.txt +++ b/boards.txt @@ -360,6 +360,7 @@ generic.menu.baud.921600.upload.speed=921600 ############################################################## esp8285.name=Generic ESP8285 Module esp8285.build.board=ESP8266_ESP01 +esp8285.build.variant=esp8285 esp8285.upload.tool=esptool esp8285.upload.maximum_data_size=81920 esp8285.upload.wait_for_upload_port=true @@ -368,7 +369,6 @@ esp8285.serial.disableDTR=true esp8285.serial.disableRTS=true esp8285.build.mcu=esp8266 esp8285.build.core=esp8266 -esp8285.build.variant=generic esp8285.build.spiffs_pagesize=256 esp8285.build.debug_port= esp8285.build.debug_level= diff --git a/cores/esp8266/core_esp8266_waveform.c b/cores/esp8266/core_esp8266_waveform.c index d4d5f5a717..fea483343a 100644 --- a/cores/esp8266/core_esp8266_waveform.c +++ b/cores/esp8266/core_esp8266_waveform.c @@ -79,7 +79,13 @@ static Waveform waveform[] = { {0, 0, 1<<3, 0, 0, 0, 0, 0}, {0, 0, 1<<4, 0, 0, 0, 0, 0}, {0, 0, 1<<5, 0, 0, 0, 0, 0}, - // GPIOS 6-11 not allowed, used for flash + // GPIOS 6-8 not allowed, used for flash + // GPIO 9 and 10 only allowed in 2-bit flash mode +#if !isFlashInterfacePin(9) + {0, 0, 1<<9, 0, 0, 0, 0, 0}, + {0, 0, 1<<10, 0, 0, 0, 0, 0}, +#endif + // GPIO 11 not allowed, used for flash {0, 0, 1<<12, 0, 0, 0, 0, 0}, {0, 0, 1<<13, 0, 0, 0, 0, 0}, {0, 0, 1<<14, 0, 0, 0, 0, 0}, diff --git a/tools/boards.txt.py b/tools/boards.txt.py index 44dddc3b1f..a8b8a71070 100755 --- a/tools/boards.txt.py +++ b/tools/boards.txt.py @@ -271,6 +271,7 @@ 'name': 'Generic ESP8285 Module', 'opts': { '.build.board': 'ESP8266_ESP01', + '.build.variant': 'esp8285' }, 'macro': [ 'resetmethod_menu', diff --git a/variants/esp8285/common.h b/variants/esp8285/common.h new file mode 100644 index 0000000000..26b8d87be1 --- /dev/null +++ b/variants/esp8285/common.h @@ -0,0 +1,83 @@ +/* + common.h - Commoon pin definition functions for ESP8266 boards + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2007 David A. Mellis + Modified for ESP8266 platform by Ivan Grokhotkov, 2014-2016. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA + + $Id: wiring.h 249 2007-02-03 16:52:51Z mellis $ +*/ + +#ifndef GENERIC_COMMON_H +#define GENERIC_COMMON_H + +#define EXTERNAL_NUM_INTERRUPTS 16 +#define NUM_DIGITAL_PINS 17 +#define NUM_ANALOG_INPUTS 1 + +// Pins 9 and 10 are available, go to positive logic since it's clearer +#define isFlashInterfacePin(p) ((p) == 6 || (p) == 7 || (p) == 8 || (p) == 11) + +#define analogInputToDigitalPin(p) ((p > 0) ? NOT_A_PIN : 0) +#define digitalPinToInterrupt(p) (((p) < EXTERNAL_NUM_INTERRUPTS)? (p) : NOT_AN_INTERRUPT) +#define digitalPinHasPWM(p) (((p) < NUM_DIGITAL_PINS && !isFlashInterfacePin(p))? 1 : 0) + +#define PIN_SPI_SS (15) +#define PIN_SPI_MOSI (13) +#define PIN_SPI_MISO (12) +#define PIN_SPI_SCK (14) + +static const uint8_t SS = PIN_SPI_SS; +static const uint8_t MOSI = PIN_SPI_MOSI; +static const uint8_t MISO = PIN_SPI_MISO; +static const uint8_t SCK = PIN_SPI_SCK; + +#ifndef PIN_A0 +#define PIN_A0 (17) +#endif /* PIN_A0 */ + +static const uint8_t A0 = PIN_A0; + +// These serial port names are intended to allow libraries and architecture-neutral +// sketches to automatically default to the correct port name for a particular type +// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, +// the first hardware serial port whose RX/TX pins are not dedicated to another use. +// +// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor +// +// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial +// +// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library +// +// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. +// +// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX +// pins are NOT connected to anything by default. +#define SERIAL_PORT_MONITOR Serial +#define SERIAL_PORT_USBVIRTUAL Serial +#define SERIAL_PORT_HARDWARE Serial +#define SERIAL_PORT_HARDWARE_OPEN Serial1 + +#ifdef LED_BUILTIN +#ifdef __cplusplus +extern "C" +#endif +const int BUILTIN_LED __attribute__((deprecated, weak)) = LED_BUILTIN; +#endif + +#endif /* GENERIC_COMMON_H */ diff --git a/variants/esp8285/initD9D10Pins.cpp b/variants/esp8285/initD9D10Pins.cpp new file mode 100644 index 0000000000..9da4510912 --- /dev/null +++ b/variants/esp8285/initD9D10Pins.cpp @@ -0,0 +1,10 @@ +#include "Arduino.h" + +// The 8285 allows the use of GPIO pins 9 and 10, so set them to inputs +// on startup just like the other pins. This allows their use for interrupts +// as well +void initVariant() { + pinMode(9, INPUT); + pinMode(10, INPUT); +} + diff --git a/variants/esp8285/pins_arduino.h b/variants/esp8285/pins_arduino.h new file mode 100644 index 0000000000..475fff2b58 --- /dev/null +++ b/variants/esp8285/pins_arduino.h @@ -0,0 +1,41 @@ +/* + pins_arduino.h - Pin definition functions for Arduino + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2007 David A. Mellis + Modified for ESP8266 platform by Ivan Grokhotkov, 2014-2015. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA + + $Id: wiring.h 249 2007-02-03 16:52:51Z mellis $ +*/ + +#ifndef Pins_Arduino_h +#define Pins_Arduino_h + +#define PIN_WIRE_SDA (4) +#define PIN_WIRE_SCL (5) + +static const uint8_t SDA = PIN_WIRE_SDA; +static const uint8_t SCL = PIN_WIRE_SCL; + +#ifndef LED_BUILTIN +#define LED_BUILTIN 1 +#endif + +#include "common.h" + +#endif /* Pins_Arduino_h */ diff --git a/variants/generic/common.h b/variants/generic/common.h index 7b324b16cc..4b0d4a69ad 100644 --- a/variants/generic/common.h +++ b/variants/generic/common.h @@ -30,7 +30,6 @@ #define NUM_DIGITAL_PINS 17 #define NUM_ANALOG_INPUTS 1 -// TODO: this should be <= 9 if flash is in DIO mode #define isFlashInterfacePin(p) ((p) >= 6 && (p) <= 11) #define analogInputToDigitalPin(p) ((p > 0) ? NOT_A_PIN : 0)