diff --git a/curriculum/cheatsheet.txt b/curriculum/cheatsheet.txt index 4495ed0dc914a1c62fe07652e85d704ac8930d23..bb9c9d502fcf79f72459b840af89ca7da6b472a6 100644 --- a/curriculum/cheatsheet.txt +++ b/curriculum/cheatsheet.txt @@ -12,12 +12,16 @@ AMPY: COM# Upload file to device: ampy -p PORT put file.py - Uploadf file to device while renaming it: + Uploadf file to device while renam ng it: ampy -p PORT put examples/oled_example.py main.py Show files on device: ampy -p PORT ls Show contents of file on device: ampy -p PORT get file.py +Flash Firmware: + esptool.py --chip esp32 --port PORT erase_flash + esptool.py --chip esp32 --port PORT --baud 460800 write_flash -z 0x1000 esp32-20220618-v1.19.1.bin + MicroPython firmware: https://micropython.org/download/esp32/ \ No newline at end of file diff --git a/examples/gps_example.py b/examples/gps_example.py new file mode 100644 index 0000000000000000000000000000000000000000..fb7fe48857dc175505129b4a56d83f5ec058bbac --- /dev/null +++ b/examples/gps_example.py @@ -0,0 +1,101 @@ +import sys +sys.path.insert(0, 'libraries') +import time, utime +import axp202 +import machine +from machine import Pin, UART, SoftI2C +from ssd1306 import SSD1306_I2C + +i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=10000) #initializing the I2C method for ESP32 +oled = SSD1306_I2C(128, 64, i2c) + +GPS_RX_PIN = 34 +GPS_TX_PIN = 12 + +axp = axp202.PMU(address=axp202.AXP192_SLAVE_ADDRESS) +# axp.setDCDC1Voltage(3300) # esp32 core VDD 3v3 +axp.setLDO2Voltage(3300) # T-Beam LORA VDD 3v3 +axp.setLDO3Voltage(3300) # T-Beam GPS VDD 3v3 +axp.enablePower(axp202.AXP192_LDO3) +axp.enablePower(axp202.AXP192_LDO2) + + +gpsModule = machine.UART(2, rx=GPS_RX_PIN, tx=GPS_TX_PIN, baudrate=9600, bits=8, parity=None, stop=1) + +print(gpsModule) + +buff = bytearray(255) + +TIMEOUT = False +FIX_STATUS = False + +latitude = "" +longitude = "" +satellites = "" +GPStime = "" + +def getGPS(gpsModule): + global FIX_STATUS, TIMEOUT, latitude, longitude, satellites, GPStime + + timeout = time.time() + 8 + while True: + gpsModule.readline() + buff = str(gpsModule.readline()) + parts = buff.split(',') + + if (parts[0] == "b'$GPGGA" and len(parts) == 15): + if(parts[1] and parts[2] and parts[3] and parts[4] and parts[5] and parts[6] and parts[7]): + print(buff) + + latitude = convertToDegree(parts[2]) + if (parts[3] == 'S'): + latitude = -latitude + longitude = convertToDegree(parts[4]) + if (parts[5] == 'W'): + longitude = -longitude + satellites = parts[7] + GPStime = parts[1][0:2] + ":" + parts[1][2:4] + ":" + parts[1][4:6] + FIX_STATUS = True + break + + if (time.time() > timeout): + TIMEOUT = True + break + utime.sleep_ms(500) + +def convertToDegree(RawDegrees): + + RawAsFloat = float(RawDegrees) + firstdigits = int(RawAsFloat/100) + nexttwodigits = RawAsFloat - float(firstdigits*100) + + Converted = float(firstdigits + nexttwodigits/60.0) + Converted = '{0:.6f}'.format(Converted) + return str(Converted) + + +while True: + + getGPS(gpsModule) + + if(FIX_STATUS == True): + print("Printing GPS data...") + print(" ") + print("Latitude: "+latitude) + print("Longitude: "+longitude) + print("Satellites: " +satellites) + print("Time: "+GPStime) + print("----------------------") + + oled.fill(0) + oled.text("Lat: "+latitude, 0, 0) + oled.text("Lng: "+longitude, 0, 10) + oled.text("Satellites: "+satellites, 0, 20) + oled.text("Time: "+GPStime, 0, 30) + oled.show() + + FIX_STATUS = False + + if(TIMEOUT == True): + print("No GPS data is found.") + TIMEOUT = False \ No newline at end of file diff --git a/examples/oled_example.py b/examples/oled_example.py index f970ab36d9a8ddc058fe049026667cebab387fbc..4f036f511baa4a73bb2e0aff123c616e8f7d27b6 100644 --- a/examples/oled_example.py +++ b/examples/oled_example.py @@ -1,3 +1,5 @@ +import sys +sys.path.insert(0, 'libraries') from machine import Pin, I2C import ssd1306 diff --git a/libraries/axp202.py b/libraries/axp202.py new file mode 100644 index 0000000000000000000000000000000000000000..7a3238c36592b3fa04ff590982d0e61c3e982c52 --- /dev/null +++ b/libraries/axp202.py @@ -0,0 +1,474 @@ +''' +MIT License +Copyright (c) 2019 lewis he +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +axp20x.py - MicroPython library for X-Power AXP202 chip. +Created by Lewis he on June 24, 2019. +github:https://github.com/lewisxhe/AXP202X_Libraries +''' + + +import gc +from machine import Pin, I2C +import micropython +from ustruct import unpack + +from constants import * + +default_pin_scl = 22 +default_pin_sda = 21 +default_pin_intr = 35 +default_chip_type = AXP202_CHIP_ID + + +class PMU(object): + def __init__(self, scl=None, sda=None, + intr=None, address=None): + self.device = None + self.scl = scl if scl is not None else default_pin_scl + self.sda = sda if sda is not None else default_pin_sda + self.intr = intr if intr is not None else default_pin_intr + self.chip = default_chip_type + self.address = address if address else AXP202_SLAVE_ADDRESS + + self.buffer = bytearray(16) + self.bytebuf = memoryview(self.buffer[0:1]) + self.wordbuf = memoryview(self.buffer[0:2]) + self.irqbuf = memoryview(self.buffer[0:5]) + + self.init_pins() + self.init_i2c() + self.init_device() + + def init_i2c(self): + print('* initializing i2c') + self.bus = I2C(scl=self.pin_scl, + sda=self.pin_sda) + + def init_pins(self): + print('* initializing pins') + self.pin_sda = Pin(self.sda) + self.pin_scl = Pin(self.scl) + self.pin_intr = Pin(self.intr, mode=Pin.IN) + + def write_byte(self, reg, val): + self.bytebuf[0] = val + self.bus.writeto_mem(self.address, reg, self.bytebuf) + + def read_byte(self, reg): + self.bus.readfrom_mem_into(self.address, reg, self.bytebuf) + return self.bytebuf[0] + + def read_word(self, reg): + self.bus.readfrom_mem_into(self.address, reg, self.wordbuf) + return unpack('>H', self.wordbuf)[0] + + def read_word2(self, reg): + self.bus.readfrom_mem_into(self.address, reg, self.wordbuf) + return unpack('>h', self.wordbuf)[0] + + def init_device(self): + print('* initializing mpu') + self.chip = self.read_byte(AXP202_IC_TYPE) + if(self.chip == AXP202_CHIP_ID): + self.chip = AXP202_CHIP_ID + print("Detect PMU Type is AXP202") + elif(self.chip == AXP192_CHIP_ID): + print("Detect PMU Type is AXP192") + self.chip = AXP192_CHIP_ID + else: + raise Exception("Invalid Chip ID!") + + def enablePower(self, ch): + data = self.read_byte(AXP202_LDO234_DC23_CTL) + data = data | (1 << ch) + self.write_byte(AXP202_LDO234_DC23_CTL, data) + + def disablePower(self, ch): + data = self.read_byte(AXP202_LDO234_DC23_CTL) + data = data & (~(1 << ch)) + self.write_byte(AXP202_LDO234_DC23_CTL, data) + + def __BIT_MASK(self, mask): + return 1 << mask + + def __get_h8_l5(self, regh8, regl5): + hv = self.read_byte(regh8) + lv = self.read_byte(regl5) + return (hv << 5) | (lv & 0x1F) + + def __get_h8_l4(self, regh8, regl5): + hv = self.read_byte(regh8) + lv = self.read_byte(regl5) + return (hv << 4) | (lv & 0xF) + + def isChargeing(self): + data = self.read_byte(AXP202_MODE_CHGSTATUS) + return data & self.__BIT_MASK(6) + + def isBatteryConnect(self): + data = self.read_byte(AXP202_MODE_CHGSTATUS) + return data & self.__BIT_MASK(5) + + def getAcinCurrent(self): + data = self.__get_h8_l4(AXP202_ACIN_CUR_H8, AXP202_ACIN_CUR_L4) + return data * AXP202_ACIN_CUR_STEP + + def getAcinVoltage(self): + data = self.__get_h8_l4(AXP202_ACIN_VOL_H8, AXP202_ACIN_VOL_L4) + return data * AXP202_ACIN_VOLTAGE_STEP + + def getVbusVoltage(self): + data = self.__get_h8_l4(AXP202_VBUS_VOL_H8, AXP202_VBUS_VOL_L4) + return data * AXP202_VBUS_VOLTAGE_STEP + + def getVbusCurrent(self): + data = self.__get_h8_l4(AXP202_VBUS_CUR_H8, AXP202_VBUS_CUR_L4) + return data * AXP202_VBUS_CUR_STEP + + def getTemp(self): + hv = self.read_byte(AXP202_INTERNAL_TEMP_H8) + lv = self.read_byte(AXP202_INTERNAL_TEMP_L4) + data = (hv << 8) | (lv & 0xF) + return data / 1000 + + def getTSTemp(self): + data = self.__get_h8_l4(AXP202_TS_IN_H8, AXP202_TS_IN_L4) + return data * AXP202_TS_PIN_OUT_STEP + + def getGPIO0Voltage(self): + data = self.__get_h8_l4(AXP202_GPIO0_VOL_ADC_H8, + AXP202_GPIO0_VOL_ADC_L4) + return data * AXP202_GPIO0_STEP + + def getGPIO1Voltage(self): + data = self.__get_h8_l4(AXP202_GPIO1_VOL_ADC_H8, + AXP202_GPIO1_VOL_ADC_L4) + return data * AXP202_GPIO1_STEP + + def getBattInpower(self): + h8 = self.read_byte(AXP202_BAT_POWERH8) + m8 = self.read_byte(AXP202_BAT_POWERM8) + l8 = self.read_byte(AXP202_BAT_POWERL8) + data = (h8 << 16) | (m8 << 8) | l8 + return 2 * data * 1.1 * 0.5 / 1000 + + def getBattVoltage(self): + data = self.__get_h8_l4(AXP202_BAT_AVERVOL_H8, AXP202_BAT_AVERVOL_L4) + return data * AXP202_BATT_VOLTAGE_STEP + + def getBattChargeCurrent(self): + data = 0 + if(self.chip == AXP202_CHIP_ID): + data = self.__get_h8_l4( + AXP202_BAT_AVERCHGCUR_H8, AXP202_BAT_AVERCHGCUR_L4) * AXP202_BATT_CHARGE_CUR_STEP + elif (self.chip == AXP192_CHIP_ID): + data = self.__get_h8_l5( + AXP202_BAT_AVERCHGCUR_H8, AXP202_BAT_AVERCHGCUR_L4) * AXP202_BATT_CHARGE_CUR_STEP + return data + + def getBattDischargeCurrent(self): + data = self.__get_h8_l4( + AXP202_BAT_AVERDISCHGCUR_H8, AXP202_BAT_AVERDISCHGCUR_L5) * AXP202_BATT_DISCHARGE_CUR_STEP + return data + + def getSysIPSOUTVoltage(self): + hv = self.read_byte(AXP202_APS_AVERVOL_H8) + lv = self.read_byte(AXP202_APS_AVERVOL_L4) + data = (hv << 4) | (lv & 0xF) + return data + + def enableADC(self, ch, val): + if(ch == 1): + data = self.read_byte(AXP202_ADC_EN1) + data = data | (1 << val) + self.write_byte(AXP202_ADC_EN1, data) + elif(ch == 2): + data = self.read_byte(AXP202_ADC_EN2) + data = data | (1 << val) + self.write_byte(AXP202_ADC_EN1, data) + else: + return + + def disableADC(self, ch, val): + if(ch == 1): + data = self.read_byte(AXP202_ADC_EN1) + data = data & (~(1 << val)) + self.write_byte(AXP202_ADC_EN1, data) + elif(ch == 2): + data = self.read_byte(AXP202_ADC_EN2) + data = data & (~(1 << val)) + self.write_byte(AXP202_ADC_EN1, data) + else: + return + + def enableIRQ(self, val): + if(val & 0xFF): + data = self.read_byte(AXP202_INTEN1) + data = data | (val & 0xFF) + self.write_byte(AXP202_INTEN1, data) + + if(val & 0xFF00): + data = self.read_byte(AXP202_INTEN2) + data = data | (val >> 8) + self.write_byte(AXP202_INTEN2, data) + + if(val & 0xFF0000): + data = self.read_byte(AXP202_INTEN3) + data = data | (val >> 16) + self.write_byte(AXP202_INTEN3, data) + + if(val & 0xFF000000): + data = self.read_byte(AXP202_INTEN4) + data = data | (val >> 24) + self.write_byte(AXP202_INTEN4, data) + + def disableIRQ(self, val): + if(val & 0xFF): + data = self.read_byte(AXP202_INTEN1) + data = data & (~(val & 0xFF)) + self.write_byte(AXP202_INTEN1, data) + + if(val & 0xFF00): + data = self.read_byte(AXP202_INTEN2) + data = data & (~(val >> 8)) + self.write_byte(AXP202_INTEN2, data) + + if(val & 0xFF0000): + data = self.read_byte(AXP202_INTEN3) + data = data & (~(val >> 16)) + self.write_byte(AXP202_INTEN3, data) + + if(val & 0xFF000000): + data = self.read_byte(AXP202_INTEN4) + data = data & (~(val >> 24)) + self.write_byte(AXP202_INTEN4, data) + pass + + def readIRQ(self): + if(self.chip == AXP202_CHIP_ID): + for i in range(5): + self.irqbuf[i] = self.read_byte(AXP202_INTSTS1 + i) + elif(self.chip == AXP192_CHIP_ID): + for i in range(4): + self.irqbuf[i] = self.read_byte(AXP192_INTSTS1 + i) + + self.irqbuf[4] = self.read_byte(AXP192_INTSTS5) + + def clearIRQ(self): + if(self.chip == AXP202_CHIP_ID): + for i in range(5): + self.write_byte(AXP202_INTSTS1 + i, 0xFF) + self.irqbuf[i] = 0 + elif(self.chip == AXP192_CHIP_ID): + for i in range(4): + self.write_byte(AXP192_INTSTS1 + i, 0xFF) + self.write_byte(AXP192_INTSTS5, 0xFF) + + def isVBUSPlug(self): + data = self.read_byte(AXP202_STATUS) + return data & self.__BIT_MASK(5) + + # Only can set axp192 + def setDC1Voltage(self, mv): + if(self.chip != AXP192_CHIP_ID): + return + if(mv < 700): + mv = 700 + elif(mv > 3500): + mv = 3500 + val = (mv - 700) / 25 + self.write_byte(AXP192_DC1_VLOTAGE, int(val)) + + def setDC2Voltage(self, mv): + if(mv < 700): + mv = 700 + elif(mv > 2275): + mv = 2275 + val = (mv - 700) / 25 + self.write_byte(AXP202_DC2OUT_VOL, int(val)) + + def setDC3Voltage(self, mv): + if(mv < 700): + mv = 700 + elif(mv > 3500): + mv = 3500 + val = (mv - 700) / 25 + self.write_byte(AXP202_DC3OUT_VOL, int(val)) + + def setLDO2Voltage(self, mv): + if(mv < 1800): + mv = 1800 + elif(mv > 3300): + mv = 3300 + val = (mv - 1800) / 100 + prev = self.read_byte(AXP202_LDO24OUT_VOL) + prev &= 0x0F + prev = prev | (int(val) << 4) + self.write_byte(AXP202_LDO24OUT_VOL, int(prev)) + + def setLDO3Voltage(self, mv): + if self.chip == AXP202_CHIP_ID and mv < 700: + mv = 700 + elif self.chip == AXP192_CHIP_ID and mv < 1800: + mv = 1800 + + if self.chip == AXP202_CHIP_ID and mv > 3500: + mv = 3500 + elif self.chip == AXP192_CHIP_ID and mv > 3300: + mv = 3300 + + if self.chip == AXP202_CHIP_ID: + val = (mv - 700) / 25 + prev = self.read_byte(AXP202_LDO3OUT_VOL) + prev &= 0x80 + prev = prev | int(val) + self.write_byte(AXP202_LDO3OUT_VOL, int(prev)) + # self.write_byte(AXP202_LDO3OUT_VOL, int(val)) + elif self.chip == AXP192_CHIP_ID: + val = (mv - 1800) / 100 + prev = self.read_byte(AXP192_LDO23OUT_VOL) + prev &= 0xF0 + prev = prev | int(val) + self.write_byte(AXP192_LDO23OUT_VOL, int(prev)) + + def setLDO4Voltage(self, arg): + if self.chip == AXP202_CHIP_ID and arg <= AXP202_LDO4_3300MV: + data = self.read_byte(AXP202_LDO24OUT_VOL) + data = data & 0xF0 + data = data | arg + self.write_byte(AXP202_LDO24OUT_VOL, data) + + def setLDO3Mode(self, mode): + if(mode > AXP202_LDO3_DCIN_MODE): + return + data = self.read_byte(AXP202_LDO3OUT_VOL) + if(mode): + data = data | self.__BIT_MASK(7) + else: + data = data & (~self.__BIT_MASK(7)) + self.write_byte(AXP202_LDO3OUT_VOL, data) + + def setStartupTime(self, val): + startupParams = ( + 0b00000000, + 0b01000000, + 0b10000000, + 0b11000000) + if(val > AXP202_STARTUP_TIME_2S): + return + data = self.read_byte(AXP202_POK_SET) + data = data & (~startupParams[3]) + data = data | startupParams[val] + self.write_byte(AXP202_POK_SET, data) + + def setlongPressTime(self, val): + longPressParams = ( + 0b00000000, + 0b00010000, + 0b00100000, + 0b00110000) + if(val > AXP202_LONGPRESS_TIME_2S5): + return + data = self.read_byte(AXP202_POK_SET) + data = data & (~longPressParams[3]) + data = data | longPressParams[val] + self.write_byte(AXP202_POK_SET, data) + + def setShutdownTime(self, val): + shutdownParams = ( + 0b00000000, + 0b00000001, + 0b00000010, + 0b00000011) + if(val > AXP202_SHUTDOWN_TIME_10S): + return + data = self.read_byte(AXP202_POK_SET) + data = data & (~shutdownParams[3]) + data = data | shutdownParams[val] + self.write_byte(AXP202_POK_SET, data) + + def setTimeOutShutdown(self, en): + data = self.read_byte(AXP202_POK_SET) + if(en): + data = data | self.__BIT_MASK(3) + else: + data = data | (~self.__BIT_MASK(3)) + self.write_byte(AXP202_POK_SET, data) + + def shutdown(self): + data = self.read_byte(AXP202_OFF_CTL) + data = data | self.__BIT_MASK(7) + self.write_byte(AXP202_OFF_CTL, data) + + def getSettingChargeCurrent(self): + data = self.read_byte(AXP202_CHARGE1) + data = data & 0b00000111 + curr = 300 + data * 100 + return curr + + def isChargeingEnable(self): + data = self.read_byte(AXP202_CHARGE1) + if(data & self.__BIT_MASK(7)): + return True + return False + + def enableChargeing(self): + data = self.read_byte(AXP202_CHARGE1) + data = data | self.__BIT_MASK(7) + self.write_byte(AXP202_CHARGE1, data) + + def setChargingTargetVoltage(self, val): + targetVolParams = ( + 0b00000000, + 0b00100000, + 0b01000000, + 0b01100000) + if(val > AXP202_TARGET_VOL_4_36V): + return + data = self.read_byte(AXP202_CHARGE1) + data = data & (~targetVolParams[3]) + data = data | targetVolParams[val] + self.write_byte(AXP202_CHARGE1, data) + + def getBattPercentage(self): + data = self.read_byte(AXP202_BATT_PERCENTAGE) + mask = data & self.__BIT_MASK(7) + if(mask): + return 0 + return data & (~self.__BIT_MASK(7)) + + def setChgLEDChgControl(self): + data = self.read_byte(AXP202_OFF_CTL) + data = data & 0b111110111 + self.write_byte(AXP202_OFF_CTL, data) + + def setChgLEDMode(self, mode): + data = self.read_byte(AXP202_OFF_CTL) + data |= self.__BIT_MASK(3) + if(mode == AXP20X_LED_OFF): + data = data & 0b11001111 + elif(mode == AXP20X_LED_BLINK_1HZ): + data = data & 0b11001111 + data = data | 0b00010000 + elif(mode == AXP20X_LED_BLINK_4HZ): + data = data & 0b11001111 + data = data | 0b00100000 + elif(mode == AXP20X_LED_LOW_LEVEL): + data = data & 0b11001111 + data = data | 0b00110000 + self.write_byte(AXP202_OFF_CTL, data) \ No newline at end of file diff --git a/libraries/constants.py b/libraries/constants.py new file mode 100644 index 0000000000000000000000000000000000000000..d6b4e25b0d7ceece1b2a9115b896a416b5e1a0e8 --- /dev/null +++ b/libraries/constants.py @@ -0,0 +1,398 @@ +''' +MIT License +Copyright (c) 2019 lewis he +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +axp20x.py - MicroPython library for X-Power AXP202 chip. +Created by Lewis he on June 24, 2019. +github:https://github.com/lewisxhe/AXP202X_Libraries +''' +# Chip Address +AXP202_SLAVE_ADDRESS = 0x35 +AXP192_SLAVE_ADDRESS = 0x34 + +# Chip ID +AXP202_CHIP_ID = 0x41 +AXP192_CHIP_ID = 0x03 + +# REG MAP +AXP202_STATUS = 0x00 +AXP202_MODE_CHGSTATUS = 0x01 +AXP202_OTG_STATUS = 0x02 +AXP202_IC_TYPE = 0x03 +AXP202_DATA_BUFFER1 = 0x04 +AXP202_DATA_BUFFER2 = 0x05 +AXP202_DATA_BUFFER3 = 0x06 +AXP202_DATA_BUFFER4 = 0x07 +AXP202_DATA_BUFFER5 = 0x08 +AXP202_DATA_BUFFER6 = 0x09 +AXP202_DATA_BUFFER7 = 0x0A +AXP202_DATA_BUFFER8 = 0x0B +AXP202_DATA_BUFFER9 = 0x0C +AXP202_DATA_BUFFERA = 0x0D +AXP202_DATA_BUFFERB = 0x0E +AXP202_DATA_BUFFERC = 0x0F +AXP202_LDO234_DC23_CTL = 0x12 +AXP202_DC2OUT_VOL = 0x23 +AXP202_LDO3_DC2_DVM = 0x25 +AXP202_DC3OUT_VOL = 0x27 +AXP202_LDO24OUT_VOL = 0x28 +AXP202_LDO3OUT_VOL = 0x29 +AXP202_IPS_SET = 0x30 +AXP202_VOFF_SET = 0x31 +AXP202_OFF_CTL = 0x32 +AXP202_CHARGE1 = 0x33 +AXP202_CHARGE2 = 0x34 +AXP202_BACKUP_CHG = 0x35 +AXP202_POK_SET = 0x36 +AXP202_DCDC_FREQSET = 0x37 +AXP202_VLTF_CHGSET = 0x38 +AXP202_VHTF_CHGSET = 0x39 +AXP202_APS_WARNING1 = 0x3A +AXP202_APS_WARNING2 = 0x3B +AXP202_TLTF_DISCHGSET = 0x3C +AXP202_THTF_DISCHGSET = 0x3D +AXP202_DCDC_MODESET = 0x80 +AXP202_ADC_EN1 = 0x82 +AXP202_ADC_EN2 = 0x83 +AXP202_ADC_SPEED = 0x84 +AXP202_ADC_INPUTRANGE = 0x85 +AXP202_ADC_IRQ_RETFSET = 0x86 +AXP202_ADC_IRQ_FETFSET = 0x87 +AXP202_TIMER_CTL = 0x8A +AXP202_VBUS_DET_SRP = 0x8B +AXP202_HOTOVER_CTL = 0x8F +AXP202_GPIO0_CTL = 0x90 +AXP202_GPIO0_VOL = 0x91 +AXP202_GPIO1_CTL = 0x92 +AXP202_GPIO2_CTL = 0x93 +AXP202_GPIO012_SIGNAL = 0x94 +AXP202_GPIO3_CTL = 0x95 +AXP202_INTEN1 = 0x40 +AXP202_INTEN2 = 0x41 +AXP202_INTEN3 = 0x42 +AXP202_INTEN4 = 0x43 +AXP202_INTEN5 = 0x44 +AXP202_INTSTS1 = 0x48 +AXP202_INTSTS2 = 0x49 +AXP202_INTSTS3 = 0x4A +AXP202_INTSTS4 = 0x4B +AXP202_INTSTS5 = 0x4C + +# Irq control register +AXP192_INTEN1 = 0x40 +AXP192_INTEN2 = 0x41 +AXP192_INTEN3 = 0x42 +AXP192_INTEN4 = 0x43 +AXP192_INTEN5 = 0x4A + +# Irq status register +AXP192_INTSTS1 = 0x44 +AXP192_INTSTS2 = 0x45 +AXP192_INTSTS3 = 0x46 +AXP192_INTSTS4 = 0x47 +AXP192_INTSTS5 = 0x4D + +AXP192_LDO23OUT_VOL = 0x28 +AXP192_DC1_VLOTAGE = 0x26 + +# axp 20 adc data register +AXP202_BAT_AVERVOL_H8 = 0x78 +AXP202_BAT_AVERVOL_L4 = 0x79 +AXP202_BAT_AVERCHGCUR_H8 = 0x7A +AXP202_BAT_AVERCHGCUR_L4 = 0x7B +AXP202_BAT_VOL_H8 = 0x50 +AXP202_BAT_VOL_L4 = 0x51 +AXP202_ACIN_VOL_H8 = 0x56 +AXP202_ACIN_VOL_L4 = 0x57 +AXP202_ACIN_CUR_H8 = 0x58 +AXP202_ACIN_CUR_L4 = 0x59 +AXP202_VBUS_VOL_H8 = 0x5A +AXP202_VBUS_VOL_L4 = 0x5B +AXP202_VBUS_CUR_H8 = 0x5C +AXP202_VBUS_CUR_L4 = 0x5D +AXP202_INTERNAL_TEMP_H8 = 0x5E +AXP202_INTERNAL_TEMP_L4 = 0x5F +AXP202_TS_IN_H8 = 0x62 +AXP202_TS_IN_L4 = 0x63 +AXP202_GPIO0_VOL_ADC_H8 = 0x64 +AXP202_GPIO0_VOL_ADC_L4 = 0x65 +AXP202_GPIO1_VOL_ADC_H8 = 0x66 +AXP202_GPIO1_VOL_ADC_L4 = 0x67 + +AXP202_BAT_AVERDISCHGCUR_H8 = 0x7C +AXP202_BAT_AVERDISCHGCUR_L5 = 0x7D +AXP202_APS_AVERVOL_H8 = 0x7E +AXP202_APS_AVERVOL_L4 = 0x7F +AXP202_INT_BAT_CHGCUR_H8 = 0xA0 +AXP202_INT_BAT_CHGCUR_L4 = 0xA1 +AXP202_EXT_BAT_CHGCUR_H8 = 0xA2 +AXP202_EXT_BAT_CHGCUR_L4 = 0xA3 +AXP202_INT_BAT_DISCHGCUR_H8 = 0xA4 +AXP202_INT_BAT_DISCHGCUR_L4 = 0xA5 +AXP202_EXT_BAT_DISCHGCUR_H8 = 0xA6 +AXP202_EXT_BAT_DISCHGCUR_L4 = 0xA7 +AXP202_BAT_CHGCOULOMB3 = 0xB0 +AXP202_BAT_CHGCOULOMB2 = 0xB1 +AXP202_BAT_CHGCOULOMB1 = 0xB2 +AXP202_BAT_CHGCOULOMB0 = 0xB3 +AXP202_BAT_DISCHGCOULOMB3 = 0xB4 +AXP202_BAT_DISCHGCOULOMB2 = 0xB5 +AXP202_BAT_DISCHGCOULOMB1 = 0xB6 +AXP202_BAT_DISCHGCOULOMB0 = 0xB7 +AXP202_COULOMB_CTL = 0xB8 +AXP202_BAT_POWERH8 = 0x70 +AXP202_BAT_POWERM8 = 0x71 +AXP202_BAT_POWERL8 = 0x72 + +AXP202_VREF_TEM_CTRL = 0xF3 +AXP202_BATT_PERCENTAGE = 0xB9 + + +# AXP202 bit definitions for AXP events irq event +AXP202_IRQ_USBLO = 1 +AXP202_IRQ_USBRE = 2 +AXP202_IRQ_USBIN = 3 +AXP202_IRQ_USBOV = 4 +AXP202_IRQ_ACRE = 5 +AXP202_IRQ_ACIN = 6 +AXP202_IRQ_ACOV = 7 + +AXP202_IRQ_TEMLO = 8 +AXP202_IRQ_TEMOV = 9 +AXP202_IRQ_CHAOV = 10 +AXP202_IRQ_CHAST = 11 +AXP202_IRQ_BATATOU = 12 +AXP202_IRQ_BATATIN = 13 +AXP202_IRQ_BATRE = 14 +AXP202_IRQ_BATIN = 15 + +AXP202_IRQ_POKLO = 16 +AXP202_IRQ_POKSH = 17 +AXP202_IRQ_LDO3LO = 18 +AXP202_IRQ_DCDC3LO = 19 +AXP202_IRQ_DCDC2LO = 20 +AXP202_IRQ_CHACURLO = 22 +AXP202_IRQ_ICTEMOV = 23 + +AXP202_IRQ_EXTLOWARN2 = 24 +AXP202_IRQ_EXTLOWARN1 = 25 +AXP202_IRQ_SESSION_END = 26 +AXP202_IRQ_SESS_AB_VALID = 27 +AXP202_IRQ_VBUS_UN_VALID = 28 +AXP202_IRQ_VBUS_VALID = 29 +AXP202_IRQ_PDOWN_BY_NOE = 30 +AXP202_IRQ_PUP_BY_NOE = 31 + +AXP202_IRQ_GPIO0TG = 32 +AXP202_IRQ_GPIO1TG = 33 +AXP202_IRQ_GPIO2TG = 34 +AXP202_IRQ_GPIO3TG = 35 +AXP202_IRQ_PEKFE = 37 +AXP202_IRQ_PEKRE = 38 +AXP202_IRQ_TIMER = 39 + + +# Signal Capture +AXP202_BATT_VOLTAGE_STEP = 1.1 +AXP202_BATT_DISCHARGE_CUR_STEP = 0.5 +AXP202_BATT_CHARGE_CUR_STEP = 0.5 +AXP202_ACIN_VOLTAGE_STEP = 1.7 +AXP202_ACIN_CUR_STEP = 0.625 +AXP202_VBUS_VOLTAGE_STEP = 1.7 +AXP202_VBUS_CUR_STEP = 0.375 +AXP202_INTENAL_TEMP_STEP = 0.1 +AXP202_APS_VOLTAGE_STEP = 1.4 +AXP202_TS_PIN_OUT_STEP = 0.8 +AXP202_GPIO0_STEP = 0.5 +AXP202_GPIO1_STEP = 0.5 + +# axp202 power channel +AXP202_EXTEN = 0 +AXP202_DCDC3 = 1 +AXP202_LDO2 = 2 +AXP202_LDO4 = 3 +AXP202_DCDC2 = 4 +AXP202_LDO3 = 6 + +# axp192 power channel +AXP192_DCDC1 = 0 +AXP192_DCDC3 = 1 +AXP192_LDO2 = 2 +AXP192_LDO3 = 3 +AXP192_DCDC2 = 4 +AXP192_EXTEN = 6 + +# AXP202 ADC channel +AXP202_ADC1 = 1 +AXP202_ADC2 = 2 + + +# axp202 adc1 args +AXP202_BATT_VOL_ADC1 = 7 +AXP202_BATT_CUR_ADC1 = 6 +AXP202_ACIN_VOL_ADC1 = 5 +AXP202_ACIN_CUR_ADC1 = 4 +AXP202_VBUS_VOL_ADC1 = 3 +AXP202_VBUS_CUR_ADC1 = 2 +AXP202_APS_VOL_ADC1 = 1 +AXP202_TS_PIN_ADC1 = 0 + +# axp202 adc2 args +AXP202_TEMP_MONITORING_ADC2 = 7 +AXP202_GPIO1_FUNC_ADC2 = 3 +AXP202_GPIO0_FUNC_ADC2 = 2 + + +# AXP202 IRQ1 +AXP202_VBUS_VHOLD_LOW_IRQ = 1 << 1 +AXP202_VBUS_REMOVED_IRQ = 1 << 2 +AXP202_VBUS_CONNECT_IRQ = 1 << 3 +AXP202_VBUS_OVER_VOL_IRQ = 1 << 4 +AXP202_ACIN_REMOVED_IRQ = 1 << 5 +AXP202_ACIN_CONNECT_IRQ = 1 << 6 +AXP202_ACIN_OVER_VOL_IRQ = 1 << 7 + +# AXP202 IRQ2 +AXP202_BATT_LOW_TEMP_IRQ = 1 << 8 +AXP202_BATT_OVER_TEMP_IRQ = 1 << 9 +AXP202_CHARGING_FINISHED_IRQ = 1 << 10 +AXP202_CHARGING_IRQ = 1 << 11 +AXP202_BATT_EXIT_ACTIVATE_IRQ = 1 << 12 +AXP202_BATT_ACTIVATE_IRQ = 1 << 13 +AXP202_BATT_REMOVED_IRQ = 1 << 14 +AXP202_BATT_CONNECT_IRQ = 1 << 15 + +# AXP202 IRQ3 +AXP202_PEK_LONGPRESS_IRQ = 1 << 16 +AXP202_PEK_SHORTPRESS_IRQ = 1 << 17 +AXP202_LDO3_LOW_VOL_IRQ = 1 << 18 +AXP202_DC3_LOW_VOL_IRQ = 1 << 19 +AXP202_DC2_LOW_VOL_IRQ = 1 << 20 +AXP202_CHARGE_LOW_CUR_IRQ = 1 << 21 +AXP202_CHIP_TEMP_HIGH_IRQ = 1 << 22 + +# AXP202 IRQ4 +AXP202_APS_LOW_VOL_LEVEL2_IRQ = 1 << 24 +APX202_APS_LOW_VOL_LEVEL1_IRQ = 1 << 25 +AXP202_VBUS_SESSION_END_IRQ = 1 << 26 +AXP202_VBUS_SESSION_AB_IRQ = 1 << 27 +AXP202_VBUS_INVALID_IRQ = 1 << 28 +AXP202_VBUS_VAILD_IRQ = 1 << 29 +AXP202_NOE_OFF_IRQ = 1 << 30 +AXP202_NOE_ON_IRQ = 1 << 31 + +# AXP202 IRQ5 +AXP202_GPIO0_EDGE_TRIGGER_IRQ = 1 << 32 +AXP202_GPIO1_EDGE_TRIGGER_IRQ = 1 << 33 +AXP202_GPIO2_EDGE_TRIGGER_IRQ = 1 << 34 +AXP202_GPIO3_EDGE_TRIGGER_IRQ = 1 << 35 +# Reserved and unchangeable BIT 4 +AXP202_PEK_FALLING_EDGE_IRQ = 1 << 37 +AXP202_PEK_RISING_EDGE_IRQ = 1 << 38 +AXP202_TIMER_TIMEOUT_IRQ = 1 << 39 + +AXP202_ALL_IRQ = 0xFFFFFFFFFF + + +# AXP202 LDO3 Mode +AXP202_LDO3_LDO_MODE = 0 +AXP202_LDO3_DCIN_MODE = 1 + +# AXP202 LDO4 voltage setting args +AXP202_LDO4_1250MV = 0 +AXP202_LDO4_1300MV = 1 +AXP202_LDO4_1400MV = 2 +AXP202_LDO4_1500MV = 3 +AXP202_LDO4_1600MV = 4 +AXP202_LDO4_1700MV = 5 +AXP202_LDO4_1800MV = 6 +AXP202_LDO4_1900MV = 7 +AXP202_LDO4_2000MV = 8 +AXP202_LDO4_2500MV = 9 +AXP202_LDO4_2700MV = 10 +AXP202_LDO4_2800MV = 11 +AXP202_LDO4_3000MV = 12 +AXP202_LDO4_3100MV = 13 +AXP202_LDO4_3200MV = 14 +AXP202_LDO4_3300MV = 15 + + +# Boot time setting +AXP202_STARTUP_TIME_128MS = 0 +AXP202_STARTUP_TIME_3S = 1 +AXP202_STARTUP_TIME_1S = 2 +AXP202_STARTUP_TIME_2S = 3 + + +# Long button time setting +AXP202_LONGPRESS_TIME_1S = 0 +AXP202_LONGPRESS_TIME_1S5 = 1 +AXP202_LONGPRESS_TIME_2S = 2 +AXP202_LONGPRESS_TIME_2S5 = 3 + + +# Shutdown duration setting +AXP202_SHUTDOWN_TIME_4S = 0 +AXP202_SHUTDOWN_TIME_6S = 1 +AXP202_SHUTDOWN_TIME_8S = 2 +AXP202_SHUTDOWN_TIME_10S = 3 + + +# REG 33H: Charging control 1 Charging target-voltage setting +AXP202_TARGET_VOL_4_1V = 0 +AXP202_TARGET_VOL_4_15V = 1 +AXP202_TARGET_VOL_4_2V = 2 +AXP202_TARGET_VOL_4_36V = 3 + +# AXP202 LED CONTROL +AXP20X_LED_OFF = 0 +AXP20X_LED_BLINK_1HZ = 1 +AXP20X_LED_BLINK_4HZ = 2 +AXP20X_LED_LOW_LEVEL = 3 + +AXP202_LDO5_1800MV = 0 +AXP202_LDO5_2500MV = 1 +AXP202_LDO5_2800MV = 2 +AXP202_LDO5_3000MV = 3 +AXP202_LDO5_3100MV = 4 +AXP202_LDO5_3300MV = 5 +AXP202_LDO5_3400MV = 6 +AXP202_LDO5_3500MV = 7 + +# LDO3 OUTPUT MODE +AXP202_LDO3_MODE_LDO = 0 +AXP202_LDO3_MODE_DCIN = 1 + +AXP_POWER_OFF_TIME_4S = 0 +AXP_POWER_OFF_TIME_65 = 1 +AXP_POWER_OFF_TIME_8S = 2 +AXP_POWER_OFF_TIME_16S = 3 + +AXP_LONGPRESS_TIME_1S = 0 +AXP_LONGPRESS_TIME_1S5 = 1 +AXP_LONGPRESS_TIME_2S = 2 +AXP_LONGPRESS_TIME_2S5 = 3 + +AXP192_STARTUP_TIME_128MS = 0 +AXP192_STARTUP_TIME_512MS = 1 +AXP192_STARTUP_TIME_1S = 2 +AXP192_STARTUP_TIME_2S = 3 + +AXP202_STARTUP_TIME_128MS = 0 +AXP202_STARTUP_TIME_3S = 1 +AXP202_STARTUP_TIME_1S = 2 +AXP202_STARTUP_TIME_2S = 3 \ No newline at end of file