Power draw test (#24196)
* power draw test
* power draw measure
* fix cam power draw
* no star import
* fix static
Co-authored-by: Comma Device <device@comma.ai>
old-commit-hash: 9318e02a52
taco
parent
9f4c123a14
commit
6d99a37d6f
2 changed files with 132 additions and 6 deletions
@ -1,8 +1,22 @@ |
|||||||
# TODO: these are also defined in a header |
# TODO: these are also defined in a header |
||||||
# GPIO pin definitions |
# GPIO pin definitions |
||||||
GPIO_HUB_RST_N = 30 |
class GPIO: |
||||||
GPIO_UBLOX_RST_N = 32 |
# both GPIO_STM_RST_N and GPIO_LTE_RST_N are misnamed, they are high to reset |
||||||
GPIO_UBLOX_SAFEBOOT_N = 33 |
HUB_RST_N = 30 |
||||||
GPIO_UBLOX_PWR_EN = 34 |
UBLOX_RST_N = 32 |
||||||
GPIO_STM_RST_N = 124 |
UBLOX_SAFEBOOT_N = 33 |
||||||
GPIO_STM_BOOT0 = 134 |
UBLOX_PWR_EN = 34 |
||||||
|
STM_RST_N = 124 |
||||||
|
STM_BOOT0 = 134 |
||||||
|
|
||||||
|
LTE_RST_N = 50 |
||||||
|
LTE_PWRKEY = 116 |
||||||
|
LTE_BOOT = 52 |
||||||
|
|
||||||
|
# GPIO_CAM0_DVDD_EN = /sys/kernel/debug/regulator/camera_rear_ldo |
||||||
|
CAM0_AVDD_EN = 8 |
||||||
|
CAM0_RSTN = 9 |
||||||
|
CAM1_RSTN = 7 |
||||||
|
CAM2_RSTN = 12 |
||||||
|
|
||||||
|
|
||||||
|
@ -0,0 +1,112 @@ |
|||||||
|
#!/usr/bin/env python3 |
||||||
|
import os |
||||||
|
import time |
||||||
|
import numpy as np |
||||||
|
from selfdrive.hardware.tici.hardware import Tici |
||||||
|
from selfdrive.hardware.tici.pins import GPIO |
||||||
|
from common.gpio import gpio_init, gpio_set |
||||||
|
|
||||||
|
def read_power(): |
||||||
|
with open("/sys/bus/i2c/devices/0-0040/hwmon/hwmon1/in1_input") as f: |
||||||
|
voltage_total = int(f.read()) / 1000. |
||||||
|
|
||||||
|
with open("/sys/bus/i2c/devices/0-0040/hwmon/hwmon1/curr1_input") as f: |
||||||
|
current_total = int(f.read()) |
||||||
|
|
||||||
|
with open("/sys/class/power_supply/bms/voltage_now") as f: |
||||||
|
voltage = int(f.read()) / 1e6 # volts |
||||||
|
|
||||||
|
with open("/sys/class/power_supply/bms/current_now") as f: |
||||||
|
current = int(f.read()) / 1e3 # ma |
||||||
|
|
||||||
|
power_som = voltage*current |
||||||
|
power_total = voltage_total*current_total |
||||||
|
|
||||||
|
return power_total, power_som |
||||||
|
|
||||||
|
def read_power_avg(): |
||||||
|
pwrs = [] |
||||||
|
for _ in range(100): |
||||||
|
pwrs.append(read_power()) |
||||||
|
time.sleep(0.01) |
||||||
|
power_total, power_som = np.mean([x[0] for x in pwrs]), np.mean([x[1] for x in pwrs]) |
||||||
|
return "total %7.2f mW SOM %7.2f mW" % (power_total, power_som) |
||||||
|
|
||||||
|
|
||||||
|
def gpio_export(pin): |
||||||
|
try: |
||||||
|
with open("/sys/class/gpio/export", 'w') as f: |
||||||
|
f.write(str(pin)) |
||||||
|
except Exception: |
||||||
|
print(f"Failed to export gpio {pin}") |
||||||
|
|
||||||
|
if __name__ == "__main__": |
||||||
|
gpio_export(GPIO.CAM0_AVDD_EN) |
||||||
|
gpio_export(GPIO.CAM0_RSTN) |
||||||
|
gpio_export(GPIO.CAM1_RSTN) |
||||||
|
gpio_export(GPIO.CAM2_RSTN) |
||||||
|
print("hello") |
||||||
|
os.system('kill $(pgrep -f "manager.py")') |
||||||
|
os.system('kill $(pgrep -f "python -m selfdrive.athena.manage_athenad")') |
||||||
|
os.system('kill $(pgrep -f "selfdrive.athena.athenad")') |
||||||
|
# stopping weston turns off lcd3v3 |
||||||
|
os.system("sudo service weston stop") |
||||||
|
os.system("sudo service ModemManager stop") |
||||||
|
print("services stopped") |
||||||
|
|
||||||
|
t = Tici() |
||||||
|
t.initialize_hardware() |
||||||
|
t.set_power_save(True) |
||||||
|
t.set_screen_brightness(0) |
||||||
|
gpio_init(GPIO.STM_RST_N, True) |
||||||
|
gpio_init(GPIO.HUB_RST_N, True) |
||||||
|
gpio_init(GPIO.UBLOX_PWR_EN, True) |
||||||
|
gpio_init(GPIO.LTE_RST_N, True) |
||||||
|
gpio_init(GPIO.LTE_PWRKEY, True) |
||||||
|
gpio_init(GPIO.CAM0_AVDD_EN, True) |
||||||
|
gpio_init(GPIO.CAM0_RSTN, True) |
||||||
|
gpio_init(GPIO.CAM1_RSTN, True) |
||||||
|
gpio_init(GPIO.CAM2_RSTN, True) |
||||||
|
|
||||||
|
|
||||||
|
os.system("sudo su -c 'echo 0 > /sys/kernel/debug/regulator/camera_rear_ldo/enable'") # cam 1v2 off |
||||||
|
gpio_set(GPIO.CAM0_AVDD_EN, False) # cam 2v8 off |
||||||
|
gpio_set(GPIO.LTE_RST_N, True) # quectel off |
||||||
|
gpio_set(GPIO.UBLOX_PWR_EN, False) # gps off |
||||||
|
gpio_set(GPIO.STM_RST_N, True) # panda off |
||||||
|
gpio_set(GPIO.HUB_RST_N, False) # hub off |
||||||
|
# cameras in reset |
||||||
|
gpio_set(GPIO.CAM0_RSTN, False) |
||||||
|
gpio_set(GPIO.CAM1_RSTN, False) |
||||||
|
gpio_set(GPIO.CAM2_RSTN, False) |
||||||
|
time.sleep(8) |
||||||
|
|
||||||
|
print("baseline: ", read_power_avg()) |
||||||
|
gpio_set(GPIO.CAM0_AVDD_EN, True) |
||||||
|
time.sleep(2) |
||||||
|
print("cam avdd: ", read_power_avg()) |
||||||
|
os.system("sudo su -c 'echo 1 > /sys/kernel/debug/regulator/camera_rear_ldo/enable'") |
||||||
|
time.sleep(2) |
||||||
|
print("cam dvdd: ", read_power_avg()) |
||||||
|
gpio_set(GPIO.CAM0_RSTN, True) |
||||||
|
gpio_set(GPIO.CAM1_RSTN, True) |
||||||
|
gpio_set(GPIO.CAM2_RSTN, True) |
||||||
|
time.sleep(2) |
||||||
|
print("cams up: ", read_power_avg()) |
||||||
|
gpio_set(GPIO.HUB_RST_N, True) |
||||||
|
time.sleep(2) |
||||||
|
print("usb hub: ", read_power_avg()) |
||||||
|
gpio_set(GPIO.STM_RST_N, False) |
||||||
|
time.sleep(5) |
||||||
|
print("panda: ", read_power_avg()) |
||||||
|
gpio_set(GPIO.UBLOX_PWR_EN, True) |
||||||
|
time.sleep(5) |
||||||
|
print("gps: ", read_power_avg()) |
||||||
|
gpio_set(GPIO.LTE_RST_N, False) |
||||||
|
time.sleep(1) |
||||||
|
gpio_set(GPIO.LTE_PWRKEY, True) |
||||||
|
time.sleep(1) |
||||||
|
gpio_set(GPIO.LTE_PWRKEY, False) |
||||||
|
time.sleep(5) |
||||||
|
print("quectel: ", read_power_avg()) |
||||||
|
|
Loading…
Reference in new issue