diff --git a/tasmota/berry/drivers/M5CoreS3.be b/tasmota/berry/drivers/M5CoreS3.be new file mode 100644 index 000000000..af7d8ead8 --- /dev/null +++ b/tasmota/berry/drivers/M5CoreS3.be @@ -0,0 +1,88 @@ +#------------------------------------------------------------- + - Specialized driver for M5CoreS3 using AXP2101 and AW9523 + -------------------------------------------------------------# +class M5CoreS3 : AXP2102 + def init() + super(self).init() + + if self.wire + + # From https://github.com/m5stack/M5Unified/blob/b8cfec7fed046242da7f7b8024a4e92004a51ff7/src/utility/Power_Class.cpp#L61 + # M5.In_I2C.bitOn(aw9523_i2c_addr, 0x03, 0b10000000, i2c_freq); // SY7088 BOOST_EN + var aw9523 = I2C_Driver("AW9523", 0x58) + aw9523.write8(0x03, aw9523.read8(0x03) | 0x80) # SY7088 BOOST_EN + + # From https://github.com/m5stack/M5Unified/blob/b8cfec7fed046242da7f7b8024a4e92004a51ff7/src/utility/Power_Class.cpp#L62 + # _pmic = Power_Class::pmic_t::pmic_axp2101; + # Axp2101.begin(); + # static constexpr std::uint8_t reg_data_array[] = + # { 0x90, 0xBF // LDOS ON/OFF control 0 + # , 0x92, 18 -5 // ALDO1 set to 1.8v // for AW88298 + # , 0x93, 33 -5 // ALDO2 set to 3.3v // for ES7210 + # , 0x94, 33 -5 // ALDO3 set to 3.3v // for camera + # , 0x95, 33 -5 // ALDO3 set to 3.3v // for TF card slot + # , 0x27, 0x00 // PowerKey Hold=1sec / PowerOff=4sec + # , 0x69, 0x11 // CHGLED setting + # , 0x10, 0x30 // PMU common config + # , 0x30, 0x0F // ADC enabled (for voltage measurement) + # }; + self.write8(0x90, 0xBF) # LDOS ON/OFF control 0 + self.write8(0x92, 18 -5) # ALDO1 set to 1.8v // for AW88298 + self.write8(0x93, 33 -5) # ALDO2 set to 3.3v // for ES7210 + self.write8(0x94, 33 -5) # ALDO3 set to 3.3v // for camera + self.write8(0x95, 33 -5) # ALDO4 set to 3.3v // for TF card slot + self.write8(0x27, 0x00) # PowerKey Hold=1sec / PowerOff=4sec + self.write8(0x69, 0x11) # CHGLED setting + self.write8(0x10, 0x30) # PMU common config + self.write8(0x30, 0x0F) # ADC enabled (for voltage measurement) + + var chk_aw = aw9523.read8(0x10) + if chk_aw == 0x23 + var result = 0 + var reg0x02 = (result == 0) ? 0x07 : 0x05; + var reg0x03 = (result == 0) ? 0x83 : 0x03; + aw9523.write8(0x02, aw9523.read8(0x02) | reg0x02) # port0 output ctrl + aw9523.write8(0x03, aw9523.read8(0x03) | reg0x03) # port1 output ctrl + aw9523.write8(0x04, 0x18) # CONFIG_P0 + aw9523.write8(0x05, 0x0C) # CONFIG_P1 + aw9523.write8(0x11, 0x10) # GCR P0 port is Push-Pull mode. + aw9523.write8(0x12, 0xFF) # LEDMODE_P0 + aw9523.write8(0x13, 0xFF) # LEDMODE_P1 + + aw9523.write8(0x03, aw9523.read8(0x03) & ~0x02) # LCD_RST) +# delay(10) + aw9523.write8(0x03, aw9523.read8(0x03) | 0x02) # LCD_RST) + end + + tasmota.add_driver(self) + end + end + + # set LCD backlight voltage on DLDO1 + def set_lcd_voltage(voltage) + if (voltage < 2500) voltage = 2500 end + if (voltage > 3300) voltage = 3300 end + self.set_dldo_voltage(0, voltage) # 0=DLD01 + end + + # Speaker enable + def set_speaker_enable(state) + self.set_ldo_voltage(2, state ? 3300 : 0) # 2 = ALDO3 + end + + # Dimmer in percentage + def set_displaydimmer(x) + var v = tasmota.scale_uint(x, 0, 100, 2500, 3300) + self.set_lcd_voltage(v) + end + + # respond to display events + def display(cmd, idx, payload, raw) + if cmd == "dim" || cmd == "power" + self.set_displaydimmer(idx) + end + end + +end + +return M5CoreS3() diff --git a/tasmota/displaydesc/M5stackCoreS3_ILI9342_320x240_display.ini b/tasmota/displaydesc/M5stackCoreS3_ILI9342_320x240_display.ini new file mode 100644 index 000000000..dddbc05a3 --- /dev/null +++ b/tasmota/displaydesc/M5stackCoreS3_ILI9342_320x240_display.ini @@ -0,0 +1,52 @@ +:H,ILI9342,320,240,16,SPI,2,3,36,37,35,-1,-1,-1,40 +:S,2,1,3,0,100,100 +:B,60,0 +:I +EF,3,03,80,02 +CF,3,00,C1,30 +ED,4,64,03,12,81 +E8,3,85,00,78 +CB,5,39,2C,00,34,02 +F7,1,20 +EA,2,00,00 +C0,1,23 +C1,1,10 +C5,2,3e,28 +C7,1,86 +36,1,48 +37,1,00 +3A,1,55 +B1,2,00,18 +B6,3,08,82,27 +F2,1,00 +26,1,01 +E0,0F,0F,31,2B,0C,0E,08,4E,F1,37,07,10,03,0E,09,00 +E1,0F,00,0E,14,03,11,07,31,C1,48,08,0F,0C,31,36,0F +21,80 +11,80 +29,80 +:o,28 +:O,29 +:A,2A,2B,2C,16 +:R,36 +:0,08,00,00,00 +:1,A8,00,00,84 +:2,C8,00,00,02 +:3,68,00,00,85 +:i,21,20 +:UTI,FT6336U,I2,38,-1,-1 +RD A0 +CP 02 +RTF +RT +:UTT +RDM 00 16 +MV 2 1 +RT +:UTX +MV 3 2 +RT +:UTY +MV 5 2 +RT +#