Hi guys
I'm trying to update my ili9341 TFT library to be compatible with the new ESP32. The library I'm using has the proper stuff need to use an ESP8266. So what I'm wondering is if the 8266's and 32's are spi compatible. Do I need to worry about writing some new code that I wouldn't know how to begin with or can I add the ESP32 to the defines and ifs and else if's that already exist for the esp8266.
ESP32 vs ESP8266 spi differences
ESP32 vs ESP8266 spi differences
- Attachments
-
- TFT_ILI93XX-master2.0.zip
- (235.24 KiB) Downloaded 705 times
Fear is the mind killer.......
GameR the DIY iot gaming device that does more......
https://github.com/Duhjoker/GameR-Iot_ESP
GameR the DIY iot gaming device that does more......
https://github.com/Duhjoker/GameR-Iot_ESP
Re: ESP32 vs ESP8266 spi differences
The APIs for SPI and I2C are very different between the ESP8266 and ESP32. You will likely have to port your current project to use the new ESP32 APIs.
Free book on ESP32 available here: https://leanpub.com/kolban-ESP32
Re: ESP32 vs ESP8266 spi differences
I found this...........
https://github.com/MartyMacGyver/ESP32_Adafruit_ILI9341
Maybe I can use it update my library.
https://github.com/MartyMacGyver/ESP32_Adafruit_ILI9341
Maybe I can use it update my library.
Fear is the mind killer.......
GameR the DIY iot gaming device that does more......
https://github.com/Duhjoker/GameR-Iot_ESP
GameR the DIY iot gaming device that does more......
https://github.com/Duhjoker/GameR-Iot_ESP
Re: ESP32 vs ESP8266 spi differences
Ok so after finding the Adafruit drivers for the ili9341 TFT with added ESP32 support and creating an all in one graphics library, I realized I still need a couple functions. Like........
Clear memory
Update screen
Update all
And some frame buffer stuff. Things needed for a gaming library so buttons and TFT and sound and ETC and the buffer to help make every thing solid and not flashy. I do have a library with all these things in it but it's not ESP32 compatible. It is ESP8266 compatible though.
The SPI stuff is the only thing holding back my library with working with the ESP32. So now I'm curious.
I've got my computer open with visual studio looking at both SPI files from the esp8266 and the esp32 plus the hal_spi from the esp32 includes.
The only differences I really see is that the esp32 version has some functions the other doesn't and vice versa. Other than that every thing else matches up. Except for _bitorder(lsbfirst) on the 8266 and msbfirst on the 32.
Looks like I can update the esp32 spi file to include the proper functions or what ever from the ESP8266 spi.
Edit::
ok the esp32 doesn't need the commands from the 8266. Still they use the same command functions but with different integers in the parameters. I know the internal structure of the cpp might be different but I don't see why I can't update the spi bits in my code that use esp8266 to also include esp32.
I also found this........
https://github.com/Ebiroll/qemu-xtensa- ... mebuffer.c
But I cant figure out if I can use it with the arduino IDE or some other way after reading the front page for the library
Clear memory
Update screen
Update all
And some frame buffer stuff. Things needed for a gaming library so buttons and TFT and sound and ETC and the buffer to help make every thing solid and not flashy. I do have a library with all these things in it but it's not ESP32 compatible. It is ESP8266 compatible though.
The SPI stuff is the only thing holding back my library with working with the ESP32. So now I'm curious.
I've got my computer open with visual studio looking at both SPI files from the esp8266 and the esp32 plus the hal_spi from the esp32 includes.
The only differences I really see is that the esp32 version has some functions the other doesn't and vice versa. Other than that every thing else matches up. Except for _bitorder(lsbfirst) on the 8266 and msbfirst on the 32.
Looks like I can update the esp32 spi file to include the proper functions or what ever from the ESP8266 spi.
Edit::
ok the esp32 doesn't need the commands from the 8266. Still they use the same command functions but with different integers in the parameters. I know the internal structure of the cpp might be different but I don't see why I can't update the spi bits in my code that use esp8266 to also include esp32.
I also found this........
https://github.com/Ebiroll/qemu-xtensa- ... mebuffer.c
But I cant figure out if I can use it with the arduino IDE or some other way after reading the front page for the library
Fear is the mind killer.......
GameR the DIY iot gaming device that does more......
https://github.com/Duhjoker/GameR-Iot_ESP
GameR the DIY iot gaming device that does more......
https://github.com/Duhjoker/GameR-Iot_ESP
Re: ESP32 vs ESP8266 spi differences
Can i get some feed back on the differences please. Hopefully with an explanation and a some advice?
I keep loooking at the spi for both the ESP8266 and 32 and cant find any thing different except esp32 divides its functions into two sets of files. But they connect. Also it uses lsb first over msbfirst.
Also adafruit uses the same spi functions for both mcu's
Ok thank you for your help
I keep loooking at the spi for both the ESP8266 and 32 and cant find any thing different except esp32 divides its functions into two sets of files. But they connect. Also it uses lsb first over msbfirst.
Also adafruit uses the same spi functions for both mcu's
Ok thank you for your help
Fear is the mind killer.......
GameR the DIY iot gaming device that does more......
https://github.com/Duhjoker/GameR-Iot_ESP
GameR the DIY iot gaming device that does more......
https://github.com/Duhjoker/GameR-Iot_ESP
Re: ESP32 vs ESP8266 spi differences
Could you please clarify which "files" you are referring to? ESP-IDF register header files (inside soc directory)? ESP-IDF spi_master driver? Arduino SPI HAL? Arduino SPI library?
The peripherals do have many things in common, so basic usage with FIFO in master mode can be implemented the same way, subject to renaming of some registers. For the ESP32, you can get register descriptions from the ESP32 technical reference manual.
The peripherals do have many things in common, so basic usage with FIFO in master mode can be implemented the same way, subject to renaming of some registers. For the ESP32, you can get register descriptions from the ESP32 technical reference manual.
Re: ESP32 vs ESP8266 spi differences
the files I am talking about are the esp32 and esp8266 SPI library .h an.cpp in the arduino esp32 library and esp8266 library.
ok so heres the esp32
now I tried to add set data bits from the esp8266 as you can see but when I try to compile I get these errors..
I cant seem to find those missing declarations. in the attachments is the library im trying to update to esp32
ok so heres the esp32
Code: Select all
#ifndef _SPI_H_INCLUDED
#define _SPI_H_INCLUDED
#include <stdlib.h>
#include "pins_arduino.h"
#include "esp32-hal-spi.h"
class SPISettings
{
public:
SPISettings() :_clock(1000000), _bitOrder(SPI_MSBFIRST), _dataMode(SPI_MODE0) {}
SPISettings(uint32_t clock, uint8_t bitOrder, uint8_t dataMode) :_clock(clock), _bitOrder(bitOrder), _dataMode(dataMode) {}
uint32_t _clock;
uint8_t _bitOrder;
uint8_t _dataMode;
};
class SPIClass
{
private:
int8_t _spi_num;
spi_t * _spi;
bool _use_hw_ss;
int8_t _sck;
int8_t _miso;
int8_t _mosi;
int8_t _ss;
uint32_t _div;
uint32_t _freq;
bool useHwCs;//duhjoker
// inline void setDataBits(uint16_t bits);
bool _inTransaction;
// inline void setDataBits(uint16_t bits);
void writePattern_(uint8_t * data, uint8_t size, uint8_t repeat);
// void writeBytes_(uint8_t * data, uint8_t size);
public:
SPIClass(uint8_t spi_bus=HSPI);
void begin(int8_t sck=SCK, int8_t miso=MISO, int8_t mosi=MOSI, int8_t ss=-1);
void end();
void setHwCs(bool use);
void setBitOrder(uint8_t bitOrder);
void setDataMode(uint8_t dataMode);
void setFrequency(uint32_t freq);
void setClockDivider(uint32_t clockDiv);
void beginTransaction(SPISettings settings);
void endTransaction(void);
uint8_t transfer(uint8_t data);
uint16_t transfer16(uint16_t data);
uint32_t transfer32(uint32_t data);
void transferBytes(uint8_t * data, uint8_t * out, uint32_t size);
void transferBits(uint32_t data, uint32_t * out, uint8_t bits);
void write(uint8_t data);
void write16(uint16_t data);
// void write16(uint16_t data, bool msb);
void write32(uint32_t data);
// void write32(uint32_t data, bool msb);
void writeBytes(uint8_t * data, uint32_t size);
void writePixels(const void * data, uint32_t size);//ili9341 compatible
void writePattern(uint8_t * data, uint8_t size, uint32_t repeat);
spi_t * bus(){ return _spi; }
};
#if !defined(NO_GLOBAL_INSTANCES) && !defined(NO_GLOBAL_SPI)
extern SPIClass SPI;
#endif
//extern SPIClass SPI;
#endif
Code: Select all
Arduino: 1.8.0 (Windows 7), TD: 1.34, Board: "ESP32 Dev Module, 80MHz, 921600, None"
C:\Users\duhjoker\Documents\Arduino\hardware\espressif\esp32\libraries\SPI\src\SPI.cpp: In member function 'void SPIClass::setDataBits(uint16_t)':
C:\Users\duhjoker\Documents\Arduino\hardware\espressif\esp32\libraries\SPI\src\SPI.cpp:199:27: error: 'SPIMMOSI' was not declared in this scope
const uint32_t mask = ~((SPIMMOSI << SPILMOSI) | (SPIMMISO << SPILMISO));
^
C:\Users\duhjoker\Documents\Arduino\hardware\espressif\esp32\libraries\SPI\src\SPI.cpp:199:39: error: 'SPILMOSI' was not declared in this scope
const uint32_t mask = ~((SPIMMOSI << SPILMOSI) | (SPIMMISO << SPILMISO));
^
C:\Users\duhjoker\Documents\Arduino\hardware\espressif\esp32\libraries\SPI\src\SPI.cpp:199:52: error: 'SPIMMISO' was not declared in this scope
const uint32_t mask = ~((SPIMMOSI << SPILMOSI) | (SPIMMISO << SPILMISO));
^
C:\Users\duhjoker\Documents\Arduino\hardware\espressif\esp32\libraries\SPI\src\SPI.cpp:199:64: error: 'SPILMISO' was not declared in this scope
const uint32_t mask = ~((SPIMMOSI << SPILMOSI) | (SPIMMISO << SPILMISO));
^
C:\Users\duhjoker\Documents\Arduino\hardware\espressif\esp32\libraries\SPI\src\SPI.cpp:201:2: error: 'SPI1U1' was not declared in this scope
SPI1U1 = ((SPI1U1 & mask) | ((bits << SPILMOSI) | (bits << SPILMISO)));
^
exit status 1
Error compiling for board ESP32 Dev Module.
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
Fear is the mind killer.......
GameR the DIY iot gaming device that does more......
https://github.com/Duhjoker/GameR-Iot_ESP
GameR the DIY iot gaming device that does more......
https://github.com/Duhjoker/GameR-Iot_ESP
Re: ESP32 vs ESP8266 spi differences
Okay, so the register sets are similar, but the register *names* used in the ESP8266 Arduino core are not compatible with the ESP32.
ESP8266 Arduino core uses register names defined here: https://github.com/esp8266/Arduino/blob ... 266_peri.h
Note that these names are different from the official ESP8266 header files which come with the SDK, such as this one:
https://github.com/espressif/ESP8266_RT ... register.h
Register names used in the ESP32 SDK and the ESP32 Arduino core are defined here:
https://github.com/espressif/esp-idf/bl ... /spi_reg.h
Note that these names are similar to the ones used by the ESP8266 SDK (but not by the ESP8266 Arduino core).
ESP8266 Arduino core uses register names defined here: https://github.com/esp8266/Arduino/blob ... 266_peri.h
Note that these names are different from the official ESP8266 header files which come with the SDK, such as this one:
https://github.com/espressif/ESP8266_RT ... register.h
Register names used in the ESP32 SDK and the ESP32 Arduino core are defined here:
https://github.com/espressif/esp-idf/bl ... /spi_reg.h
Note that these names are similar to the ones used by the ESP8266 SDK (but not by the ESP8266 Arduino core).
Who is online
Users browsing this forum: RaresCon and 115 guests