mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
90e57cdf8f
1. add test cases and related scripts 2. add CI config files read README.md for detail
260 lines
10 KiB
Python
Executable File
260 lines
10 KiB
Python
Executable File
import random
|
|
import os
|
|
import time
|
|
|
|
from TCAction import TCActionBase, PerformanceTCBase
|
|
from Utility import MakeFolder
|
|
from Utility import MultimeterUtil
|
|
from NativeLog import NativeLog
|
|
|
|
LOG_PATH = os.path.join("AT_LOG", "SLEEP")
|
|
|
|
DEEP_SLEEP_OPTION_LIST = ["up_to_bin", "normal", "no_rf_calibrate", "rf_off"]
|
|
DEEP_SLEEP_OPTION = {
|
|
"up_to_bin": 0,
|
|
"normal": 1,
|
|
"no_rf_calibrate": 2,
|
|
"rf_off": 4,
|
|
}
|
|
|
|
SAMPLE_RATE = 0.001
|
|
SAMPLE_NUM = 512
|
|
MAX_VALUE = 0.1
|
|
Y_AXIS_LABEL = "Current (mA)"
|
|
|
|
|
|
MEASURE_FREQ = 3600
|
|
|
|
GPIO_WAKE_UP = 15
|
|
GPIO_CHIP_RESET = 14
|
|
GPIO_EDGE_DELAY = 100 # 20 ms
|
|
|
|
|
|
class DeepSleep(PerformanceTCBase.PerformanceTCBase):
|
|
|
|
def __init__(self, name, test_env, cmd_set, timeout=30, log_path=TCActionBase.LOG_PATH):
|
|
PerformanceTCBase.PerformanceTCBase.__init__(self, name, test_env, cmd_set=cmd_set,
|
|
timeout=timeout, log_path=log_path)
|
|
self.test_mode = "mode_change"
|
|
self.test_count = 100
|
|
# load param from excel
|
|
for i in range(1, len(cmd_set)):
|
|
if cmd_set[i][0] != "dummy":
|
|
cmd_string = "self." + cmd_set[i][0]
|
|
exec cmd_string
|
|
self.log_folder = MakeFolder.make_folder(os.path.join(LOG_PATH,
|
|
"DEEP_SLEEP_%s_%s" % (self.test_mode,
|
|
time.strftime("%d%H%M%S",
|
|
time.localtime()))))
|
|
self.sleep_time_log = os.path.join(self.log_folder, "deep_sleep_wakeup_time.log")
|
|
self.multimeter = MultimeterUtil.MultimeterUtil(self.log_folder)
|
|
|
|
def deep_sleep_stable(self):
|
|
result = True
|
|
RandomTime = random.randint(1, 100)
|
|
self.serial_write_line("SSC1", "dsleep -S -t %s" % RandomTime)
|
|
if self.check_response("SSC1", "+DSLEEP:OK") is False:
|
|
result = False
|
|
if self.check_response("SSC1", "ready!!!") is False:
|
|
result = False
|
|
NativeLog.add_trace_critical("[DeepSleep][Stable] wait ready err")
|
|
else:
|
|
NativeLog.add_trace_critical("[DeepSleep][Stable] SleepTime:%d" % RandomTime)
|
|
time.sleep(1)
|
|
|
|
RandomTime = random.randint(100000, 1000000)
|
|
self.serial_write_line("SSC1", "dsleep -S -t %s" % RandomTime)
|
|
if self.check_response("SSC1", "+DSLEEP:OK") is False:
|
|
result = False
|
|
if self.check_response("SSC1", "ready!!!") is False:
|
|
result = False
|
|
NativeLog.add_trace_critical("[DeepSleep][Stable] wait ready err")
|
|
else:
|
|
NativeLog.add_trace_critical("[DeepSleep][Stable] SleepTime:%d" % RandomTime)
|
|
time.sleep(1)
|
|
return result
|
|
|
|
def deep_sleep_current_measure(self):
|
|
result = True
|
|
self.serial_write_line("SSC1", "")
|
|
self.serial_write_line("SSC1", "dsleep -S -t 10000000")
|
|
if self.check_response("SSC1", "+DSLEEP:OK") is False:
|
|
result = False
|
|
time.sleep(3)
|
|
# measure current
|
|
current_line = self.multimeter.measure_current(sample_rate=SAMPLE_RATE,
|
|
sample_num=SAMPLE_NUM,
|
|
max_value=MAX_VALUE)
|
|
average_current = float(0)
|
|
for current in current_line:
|
|
average_current += current
|
|
average_current /= SAMPLE_NUM
|
|
|
|
self.multimeter.draw_graph(current_line, SAMPLE_RATE,
|
|
"deep_sleep_current", Y_AXIS_LABEL)
|
|
|
|
if average_current > 1:
|
|
NativeLog.add_trace_critical("[DeepSleep][CurrentMeasure] average current %f > 1mA" % average_current)
|
|
else:
|
|
NativeLog.add_trace_critical("[DeepSleep][CurrentMeasure] dsleep current ok, %f" % average_current)
|
|
|
|
if self.check_response("SSC1", "ready!!!") is False:
|
|
NativeLog.add_trace_critical("[DeepSleep][CurrentMeasure] CurrentMeasure wait ready err %f"
|
|
% average_current)
|
|
result = False
|
|
|
|
NativeLog.add_trace_critical("[DeepSleep][CurrentMeasure] wait ready ok")
|
|
|
|
return result
|
|
|
|
##########################################
|
|
# gpio wake up
|
|
##########################################
|
|
def deep_sleep_wakeup(self):
|
|
result = True
|
|
|
|
self.serial_write_line("SSC1", "dsleep -S -t 0")
|
|
if self.check_response("SSC1", "+DSLEEP:OK") is False:
|
|
result = False
|
|
|
|
time.sleep(2)
|
|
|
|
# measure current
|
|
current_line = self.multimeter.measure_current(sample_rate=SAMPLE_RATE,
|
|
sample_num=SAMPLE_NUM,
|
|
max_value=MAX_VALUE)
|
|
average_current = float(0)
|
|
for current in current_line:
|
|
average_current += current
|
|
average_current /= SAMPLE_NUM
|
|
|
|
if average_current > 1:
|
|
NativeLog.add_trace_critical("[DeepSleep][Wakeup] average current %f > 1mA" % average_current)
|
|
self.multimeter.draw_graph(current_line, SAMPLE_RATE,
|
|
"deep_sleep_current", Y_AXIS_LABEL)
|
|
|
|
self.serial_write_line("SSC2", "gpio -E -p %d -t 0 -d %d" % (GPIO_CHIP_RESET, GPIO_EDGE_DELAY))
|
|
self.check_response("SSC2", "+GPIO_SET:OK")
|
|
if self.check_response("SSC1", "ready!!!") is False:
|
|
NativeLog.add_trace_critical("[DeepSleep][Wakeup] target did not wakeup")
|
|
result = False
|
|
else:
|
|
NativeLog.add_trace_critical("[DeepSleep][Wakeup] target wakeup")
|
|
|
|
time.sleep(1)
|
|
return result
|
|
|
|
#########################################
|
|
#test one hour, Verify RTC Clock timer
|
|
#########################################
|
|
def deep_sleep_timeout(self):
|
|
result = True
|
|
Timeout = 3600
|
|
|
|
start_sleep_time = time.time()
|
|
self.serial_write_line("SSC1", "")
|
|
self.serial_write_line("SSC1", "dsleep -S -t %d" % (Timeout*1000000))
|
|
if self.check_response("SSC1", "+DSLEEP:OK") is False:
|
|
result = False
|
|
self.check_response("SSC1", "ready!!!", timeout = Timeout*2)
|
|
time_escaped = time.time() - start_sleep_time
|
|
NativeLog.add_trace_critical("[DeepSleep][timeout] desired sleep timeout is %s, actual sleep timeout is %s" % (Timeout, time_escaped))
|
|
with open(self.sleep_time_log, "ab+") as f:
|
|
f.write("[DeepSleep] desired sleep timeout is %s, actual sleep timeout is %s" % (Timeout, time_escaped))
|
|
return result
|
|
|
|
############################################
|
|
# Capture current map, verify the process of power on
|
|
# notice: option = "up_to_bin" up to byte108 in init.bin,
|
|
############################################
|
|
def wake_option(self):
|
|
result = True
|
|
for option in DEEP_SLEEP_OPTION_LIST:
|
|
for i in range(8):
|
|
self.serial_write_line("SSC1", "dsleep -O -m %s" % DEEP_SLEEP_OPTION[option])
|
|
if self.check_response("SSC1", "+DSLEEP:OK") is False:
|
|
result = False
|
|
self.serial_write_line("SSC1", "dsleep -S -t 1200000")
|
|
if self.check_response("SSC1", "+DSLEEP:OK") is False:
|
|
result = False
|
|
|
|
# measure current
|
|
current_line = self.multimeter.measure_current(sample_rate=0.002,
|
|
sample_num=SAMPLE_NUM,
|
|
max_value=1)
|
|
self.multimeter.draw_graph(current_line, SAMPLE_RATE,
|
|
"deep_sleep_wakeup_option_%s_%d"
|
|
% (option, DEEP_SLEEP_OPTION[option]), Y_AXIS_LABEL)
|
|
|
|
NativeLog.add_trace_critical("[DeepSleep][wake_option] target wakeup option:%d"
|
|
% DEEP_SLEEP_OPTION[option])
|
|
time.sleep(3)
|
|
|
|
return result
|
|
|
|
def deep_sleep_wakeup_flash_gpio_status(self):
|
|
result = True
|
|
RandomTime = random.randint(2000000, 2000000)
|
|
self.serial_write_line("SSC1", "dsleep -S -t %s" % RandomTime)
|
|
if self.check_response("SSC1", "+DSLEEP:OK") is False:
|
|
result = False
|
|
if self.check_response("SSC1", "ready!!!") is False:
|
|
result = False
|
|
NativeLog.add_trace_critical("[DeepSleep][Stable] wait ready err")
|
|
else:
|
|
NativeLog.add_trace_critical("[DeepSleep][Stable] SleepTime:%d" % RandomTime)
|
|
|
|
self.serial_write_line("SSC1", "gpio -E -p %d -t 0 -d %d" % (GPIO_WAKE_UP, GPIO_EDGE_DELAY))
|
|
self.check_response("SSC1", "+GPIO_SET:OK")
|
|
|
|
time.sleep(1)
|
|
return result
|
|
|
|
def cleanup(self):
|
|
self.serial_write_line("SSC2", "gpio -E -p %d -t 0 -d %d" % (GPIO_CHIP_RESET, GPIO_EDGE_DELAY))
|
|
self.check_response("SSC2", "+GPIO_SET:OK")
|
|
|
|
def execute(self):
|
|
TCActionBase.TCActionBase.execute(self)
|
|
self.serial_write_line("SSC2", "sta -D")
|
|
self.check_response("SSC2", "+QAP")
|
|
self.serial_write_line("SSC1", "sta -D")
|
|
self.check_response("SSC1", "+QAP")
|
|
try:
|
|
test_mode = self.test_mode
|
|
test_count = self.test_count
|
|
except StandardError, e:
|
|
return
|
|
|
|
# self.serial_write_line("SSC2", "gpio -E -p %d -t 0 -d %d" % (GPIO_CHIP_RESET, GPIO_EDGE_DELAY))
|
|
# self.check_response("SSC2", "+GPIO_SET:OK")
|
|
# time.sleep(1)
|
|
|
|
if "stable" in test_mode:
|
|
for i in range(test_count):
|
|
# result = self.deep_sleep_wakeup_flash_gpio_status()
|
|
result = self.deep_sleep_stable()
|
|
elif "measure_current" in test_mode:
|
|
for i in range(test_count):
|
|
result = self.deep_sleep_current_measure()
|
|
elif "timeout" in test_mode:
|
|
for i in range(test_count):
|
|
result = self.deep_sleep_timeout()
|
|
elif "wakeup" in test_mode:
|
|
for i in range(test_count):
|
|
result = self.deep_sleep_wakeup()
|
|
elif "wake_option" in test_mode:
|
|
for i in range(test_count):
|
|
result = self.wake_option()
|
|
|
|
self.set_result("Succeed")
|
|
pass
|
|
|
|
|
|
def main():
|
|
pass
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|