diff --git a/BUILDS.md b/BUILDS.md index 6eb2e134c..c5fb0e430 100644 --- a/BUILDS.md +++ b/BUILDS.md @@ -113,6 +113,7 @@ Note: the `minimal` variant is not listed as it shouldn't be used outside of the | -USE_PCF85063 | - | - / - | - | - | - | - | | -USE_PCF85363 | - | - / - | - | - | - | - | | -USE_RX8010 | - | - / - | - | - | - | - | +| -USE_RX8030 | - | - / - | - | - | - | - | | USE_SHT | - | - / x | - | x | - | - | | USE_HTU | - | - / x | - | x | - | - | | USE_BMP | - | - / x | - | x | - | - | diff --git a/CHANGELOG.md b/CHANGELOG.md index 26fda8983..fc8a4bc6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ All notable changes to this project will be documented in this file. - ESP32 ROM SHA Hardware Acceleration to BearSSL (#23819) - Extend state JSON message with functional hostname and ipaddress which could be WiFi or Ethernet - Berry multiplication between string and int (#23850) +- Support for RX8030 RTC (#23855) ### Breaking Changed - Berry `animate` framework is DEPRECATED, will be replace by `animation` framework (#23854) diff --git a/I2CDEVICES.md b/I2CDEVICES.md index af25dfca0..b317edf83 100644 --- a/I2CDEVICES.md +++ b/I2CDEVICES.md @@ -128,6 +128,7 @@ Index | Define | Driver | Device | Address(es) | Bus2 | Descrip 88 | USE_QMP6988 | xsns_28 | QMP6988 | 0x56, 0x70 | Yes | Pressure and temperature sensor 89 | USE_HX711_M5SCALES | xsns_34 | M5SCALES | 0x26 | Yes | M5Unit (Mini)Scales(HX711 STM32) U177 90 | USE_RX8010 | xdrv_56 | RX8010 | 0x32 | Yes | RX8010 RTC from IOTTIMER + 90 | USE_RX8030 | xdrv_56 | RX8030 | 0x32 | Yes | RX8030 RTC from #23855 91 | USE_MS5837 | xsns_116 | MS5837 | 0x76 | | Pressure and temperature sensor 92 | USE_PCF85063 | xdrv_56 | PCF85063 | 0x51 | | PCF85063 Real time clock 93 | USE_AS33772S | xdrv_119 | AS33772S | 0x52 | Yes | AS33772S USB PD Sink Controller diff --git a/RELEASENOTES.md b/RELEASENOTES.md index a540ae48f..747bbc317 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -119,6 +119,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm - Commands `LoRaWanDecoder "` and `LoRaWanName "` to clear name [#23394](https://github.com/arendst/Tasmota/issues/23394) - Command `I2sPause` [#23646](https://github.com/arendst/Tasmota/issues/23646) - Support for RV3028 RTC [#23672](https://github.com/arendst/Tasmota/issues/23672) +- Support for RX8030 RTC [#23855](https://github.com/arendst/Tasmota/issues/23855) - Extend state JSON message with functional hostname and ipaddress which could be WiFi or Ethernet - Internal function 'WSContentSendRaw_P' [#23641](https://github.com/arendst/Tasmota/issues/23641) - Universal display driver for ZJY169S0800TG01 ST7789 280x240 [#23638](https://github.com/arendst/Tasmota/issues/23638) diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index 25061db22..f5ab109b2 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -801,6 +801,7 @@ // #define USE_BM8563 // [I2cDriver59] Enable BM8563 RTC - used by M5Stack - support both I2C buses on ESP32 (I2C address 0x51) (+2.5k code) // #define USE_PCF85363 // [I2cDriver66] Enable PCF85363 RTC - used by Shelly 3EM (I2C address 0x51) (+0k7 code) // #define USE_RX8010 // [I2cDriver90] Enable RX8010 RTC - used by IOTTIMER - support both I2C buses on ESP32 (I2C address 0x32) (+0k7 code) +// #define USE_RX8030 // [I2cDriver90] Enable RX8030 RTC - used by #23855 - support both I2C buses on ESP32 (I2C address 0x32) (+0k7 code) // #define USE_PCF85063 // [I2cDriver92] Enable PCF85063 RTC support (I2C address 0x51) // #define USE_DISPLAY // Add I2C/TM1637/MAX7219 Display Support (+2k code) diff --git a/tasmota/tasmota_support/support_features.ino b/tasmota/tasmota_support/support_features.ino index 8fcb48129..cb410f97b 100644 --- a/tasmota/tasmota_support/support_features.ino +++ b/tasmota/tasmota_support/support_features.ino @@ -928,7 +928,7 @@ constexpr uint32_t feature[] = { #if defined(USE_I2C) && defined(USE_HX711_M5SCALES) 0x00000100 | // xsns_34_hx711.ino #endif -#if defined(USE_I2C) && defined(USE_RTC_CHIPS) && defined(USE_RX8010) +#if defined(USE_I2C) && defined(USE_RTC_CHIPS) && (defined(USE_RX8010) || defined(USE_RX8030)) 0x00000200 | // xdrv_56_rtc_chips.ino #endif #if defined(USE_I2C) && defined(USE_RTC_CHIPS) && defined(USE_PCF85063) diff --git a/tasmota/tasmota_xdrv_driver/xdrv_56_rtc_chips.ino b/tasmota/tasmota_xdrv_driver/xdrv_56_rtc_chips.ino index 14fd53e9e..7bf6da223 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_56_rtc_chips.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_56_rtc_chips.ino @@ -26,6 +26,9 @@ * #define USE_RX8010 * RX8010 at I2C address 0x32 * Used by IOTTIMER (v1 and v2) + * #define USE_RX8030 + * RX8010 at I2C address 0x32 + * Used by #23855 \*********************************************************************************************/ #define XDRV_56 56 @@ -637,12 +640,12 @@ void Pcf85363Detected(void) { #endif // USE_PCF85363 /*********************************************************************************************\ - * RX8010 - Real Time Clock + * RX8010 and RX8030 - Real Time Clock * based on linux/rtc-rx8010.c * * I2C Address: 0x32 \*********************************************************************************************/ -#ifdef USE_RX8010 +#if defined(USE_RX8010) || defined(USE_RX8030) #define XI2C_90 90 // See I2CDEVICES.md @@ -656,7 +659,13 @@ void Pcf85363Detected(void) { #define RX8010_REG_MDAY 0x14 #define RX8010_REG_MONTH 0x15 #define RX8010_REG_YEAR 0x16 -#define RX8010_REG_CTRL 0x1F +#ifdef USE_RX8030 +#define RX80x0_REG_CTRL 0x1E +#endif +#ifdef USE_RX8010 +#undef RX80x0_REG_CTRL +#define RX80x0_REG_CTRL 0x1F +#endif // Control Register (1Fh) bit positions #define RX8010_BIT_CTRL_STOP 6 @@ -687,7 +696,7 @@ void Rx8010SetTime(uint32_t epoch_time) { TIME_T tm; BreakTime(epoch_time, tm); // Set STOP bit before changing clock/calendar - I2cWrite8(RtcChip.address, RX8010_REG_CTRL, I2cRead8(RtcChip.address, RX8010_REG_CTRL, RtcChip.bus) | _BV(RX8010_BIT_CTRL_STOP), RtcChip.bus); + I2cWrite8(RtcChip.address, RX80x0_REG_CTRL, I2cRead8(RtcChip.address, RX80x0_REG_CTRL, RtcChip.bus) | _BV(RX8010_BIT_CTRL_STOP), RtcChip.bus); uint8_t data[7]; data[0] = Dec2Bcd(tm.second); data[1] = Dec2Bcd(tm.minute); @@ -698,7 +707,7 @@ void Rx8010SetTime(uint32_t epoch_time) { data[6] = Dec2Bcd(tm.day_of_week); I2cWriteBuffer(RtcChip.address, RX8010_REG_SEC, data, 7, RtcChip.bus); // Clear STOP bit after changing clock/calendar - I2cWrite8(RtcChip.address, RX8010_REG_CTRL, I2cRead8(RtcChip.address, RX8010_REG_CTRL, RtcChip.bus) & ~_BV(RX8010_BIT_CTRL_STOP), RtcChip.bus); + I2cWrite8(RtcChip.address, RX80x0_REG_CTRL, I2cRead8(RtcChip.address, RX80x0_REG_CTRL, RtcChip.bus) & ~_BV(RX8010_BIT_CTRL_STOP), RtcChip.bus); } /*-------------------------------------------------------------------------------------------*\ @@ -709,9 +718,13 @@ void Rx8010Detected(void) { RtcChip.address = RX8010_ADDRESS; for (RtcChip.bus = 0; RtcChip.bus < 2; RtcChip.bus++) { if (!I2cSetDevice(RtcChip.address, RtcChip.bus)) { continue; } - if (I2cValidRead(RtcChip.address, RX8010_REG_CTRL, 1, RtcChip.bus)) { + if (I2cValidRead(RtcChip.address, RX80x0_REG_CTRL, 1, RtcChip.bus)) { RtcChip.detected = 1; +#ifdef USE_RX8030 + strcpy_P(RtcChip.name, PSTR("RX8030")); +#else strcpy_P(RtcChip.name, PSTR("RX8010")); +#endif RtcChip.ReadTime = &Rx8010ReadTime; RtcChip.SetTime = &Rx8010SetTime; RtcChip.mem_size = -1; @@ -742,7 +755,7 @@ void RtcChipDetect(void) { #ifdef USE_PCF85363 Pcf85363Detected(); #endif // USE_PCF85363 -#ifdef USE_RX8010 +#if defined(USE_RX8010) || defined(USE_RX8030) Rx8010Detected(); #endif // USE_RX8010 #ifdef USE_PCF85063