summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorHa Thach <[email protected]>2023-12-11 16:16:28 +0700
committerGitHub <[email protected]>2023-12-11 16:16:28 +0700
commit37158eddcbba188dd77dbb17d77a0631a32713d0 (patch)
treeba98415d3c89a65778cadc1b28cdbf5ef6f9fd7b /test
parent4c80f5a192fdf86af995516311d9ff239a3c8484 (diff)
parentf5f087e99cae5de00dc6d0b1b2bef534f0442c95 (diff)
Merge pull request #2367 from hathach/add-hil-s3
Add esp32s3 to hardware in the loop test
Diffstat (limited to 'test')
-rw-r--r--test/hil/hil_hfp.json18
-rw-r--r--test/hil/hil_pi4.json16
-rw-r--r--test/hil/hil_test.py79
3 files changed, 68 insertions, 45 deletions
diff --git a/test/hil/hil_hfp.json b/test/hil/hil_hfp.json
index 58f550901..e79a3cfc9 100644
--- a/test/hil/hil_hfp.json
+++ b/test/hil/hil_hfp.json
@@ -3,23 +3,23 @@
{
"name": "stm32l412nucleo",
"uid": "41003B000E504E5457323020",
- "debugger": "jlink",
- "debugger_sn": "774470029",
- "cpu": "STM32L412KB"
+ "flasher": "jlink",
+ "flasher_sn": "774470029",
+ "flasher_args": "-device STM32L412KB"
},
{
"name": "stm32f746disco",
"uid": "210041000C51343237303334",
- "debugger": "jlink",
- "debugger_sn": "770935966",
- "cpu": "STM32F746NG"
+ "flasher": "jlink",
+ "flasher_sn": "770935966",
+ "flasher_args": "-device STM32F746NG"
},
{
"name": "lpcxpresso43s67",
"uid": "08F000044528BAAA8D858F58C50700F5",
- "debugger": "jlink",
- "debugger_sn": "728973776",
- "cpu": "LPC43S67_M4"
+ "flasher": "jlink",
+ "flasher_sn": "728973776",
+ "flasher_args": "-device LPC43S67_M4"
}
]
}
diff --git a/test/hil/hil_pi4.json b/test/hil/hil_pi4.json
index d613f8da8..e9a6721ea 100644
--- a/test/hil/hil_pi4.json
+++ b/test/hil/hil_pi4.json
@@ -3,9 +3,19 @@
{
"name": "raspberry_pi_pico",
"uid": "E6614C311B764A37",
- "debugger": "openocd",
- "debugger_sn": "E6614103E72C1D2F",
- "debugger_args": "-f interface/cmsis-dap.cfg -f target/rp2040.cfg -c \"adapter speed 5000\""
+ "flasher": "openocd",
+ "flasher_sn": "E6614103E72C1D2F",
+ "flasher_args": "-f interface/cmsis-dap.cfg -f target/rp2040.cfg -c \"adapter speed 5000\""
+ },
+ {
+ "name": "espressif_s3_devkitc",
+ "uid": "7CDFA1E073CC",
+ "tests": [
+ "cdc_msc_freertos", "hid_composite_freertos"
+ ],
+ "flasher": "esptool",
+ "flasher_sn": "461cb8d7decdeb119be9b506e93fd3f1",
+ "flasher_args": "-b 1500000"
}
]
}
diff --git a/test/hil/hil_test.py b/test/hil/hil_test.py
index b307a45f6..9cb009264 100644
--- a/test/hil/hil_test.py
+++ b/test/hil/hil_test.py
@@ -28,6 +28,7 @@
import os
import sys
import time
+import click
import serial
import subprocess
import json
@@ -42,7 +43,7 @@ def get_serial_dev(id, vendor_str, product_str, ifnum):
# known vendor and product
return f'/dev/serial/by-id/usb-{vendor_str}_{product_str}_{id}-if{ifnum:02d}'
else:
- # just use id: mostly for cp210x/ftdi debugger
+ # just use id: mostly for cp210x/ftdi flasher
pattern = f'/dev/serial/by-id/usb-*_{id}-if{ifnum:02d}*'
port_list = glob.glob(pattern)
return port_list[0]
@@ -99,14 +100,14 @@ def read_disk_file(id, fname):
# -------------------------------------------------------------
-# Flash with debugger
+# Flashing firmware
# -------------------------------------------------------------
def flash_jlink(board, firmware):
script = ['halt', 'r', f'loadfile {firmware}', 'r', 'go', 'exit']
with open('flash.jlink', 'w') as f:
f.writelines(f'{s}\n' for s in script)
ret = subprocess.run(
- f'JLinkExe -USB {board["debugger_sn"]} -device {board["cpu"]} -if swd -JTAGConf -1,-1 -speed auto -NoGui 1 -ExitOnError 1 -CommandFile flash.jlink',
+ f'JLinkExe -USB {board["flasher_sn"]} {board["flasher_args"]} -if swd -JTAGConf -1,-1 -speed auto -NoGui 1 -ExitOnError 1 -CommandFile flash.jlink',
shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
os.remove('flash.jlink')
return ret
@@ -114,19 +115,19 @@ def flash_jlink(board, firmware):
def flash_openocd(board, firmware):
ret = subprocess.run(
- f'openocd -c "adapter serial {board["debugger_sn"]}" {board["debugger_args"]} -c "program {firmware} reset exit"',
+ f'openocd -c "adapter serial {board["flasher_sn"]}" {board["flasher_args"]} -c "program {firmware} reset exit"',
shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
return ret
def flash_esptool(board, firmware):
- port = get_serial_dev(board["debugger_sn"], None, None, 0)
+ port = get_serial_dev(board["flasher_sn"], None, None, 0)
dir = os.path.dirname(firmware)
with open(f'{dir}/config.env') as f:
IDF_TARGET = json.load(f)['IDF_TARGET']
with open(f'{dir}/flash_args') as f:
flash_args = f.read().strip().replace('\n', ' ')
- command = (f'esptool.py --chip {IDF_TARGET} -p {port} {board["debugger_args"]} '
+ command = (f'esptool.py --chip {IDF_TARGET} -p {port} {board["flasher_args"]} '
f'--before=default_reset --after=hard_reset write_flash {flash_args}')
ret = subprocess.run(command, shell=True, cwd=dir, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
return ret
@@ -262,13 +263,15 @@ def test_hid_composite_freertos(id):
# -------------------------------------------------------------
# Main
# -------------------------------------------------------------
-if __name__ == '__main__':
- if len(sys.argv) != 2:
- print('Usage:')
- print('python hitl_test.py config.json')
- sys.exit(-1)
-
- with open(f'{os.path.dirname(__file__)}/{sys.argv[1]}') as f:
[email protected]('config_file')
[email protected]('-b', '--board', multiple=True, default=None, help='Boards to test, all if not specified')
+def main(config_file, board):
+ """
+ Hardware test on specified boards
+ """
+ config_file = os.path.join(os.path.dirname(__file__), config_file)
+ with open(config_file) as f:
config = json.load(f)
# all possible tests
@@ -276,13 +279,18 @@ if __name__ == '__main__':
'cdc_dual_ports', 'cdc_msc', 'dfu', 'dfu_runtime', 'hid_boot_interface',
]
- for board in config['boards']:
- print(f'Testing board:{board["name"]}')
- debugger = board['debugger'].lower()
+ if len(board) == 0:
+ config_boards = config['boards']
+ else:
+ config_boards = [e for e in config['boards'] if e['name'] in board]
+
+ for item in config_boards:
+ print(f'Testing board:{item["name"]}')
+ flasher = item['flasher'].lower()
# default to all tests
- if 'tests' in board:
- test_list = board['tests']
+ if 'tests' in item:
+ test_list = item['tests']
else:
test_list = all_tests
@@ -290,36 +298,41 @@ if __name__ == '__main__':
test_list.append('board_test')
# remove skip_tests
- if 'tests_skip' in board:
- for skip in board['tests_skip']:
+ if 'tests_skip' in item:
+ for skip in item['tests_skip']:
if skip in test_list:
test_list.remove(skip)
for test in test_list:
- # cmake, make, download from artifacts
- elf_list = [
- f'cmake-build/cmake-build-{board["name"]}/device/{test}/{test}.elf',
- f'examples/device/{test}/_build/{board["name"]}/{test}.elf',
- f'{test}.elf'
+ fw_list = [
+ # cmake: esp32 use .bin file
+ f'cmake-build/cmake-build-{item["name"]}/device/{test}/{test}.elf',
+ f'cmake-build/cmake-build-{item["name"]}/device/{test}/{test}.bin',
+ # make
+ f'examples/device/{test}/_build/{item["name"]}/{test}.elf'
]
- elf = None
- for e in elf_list:
- if os.path.isfile(e):
- elf = e
+ fw = None
+ for f in fw_list:
+ if os.path.isfile(f):
+ fw = f
break
- if elf is None:
- print(f'Cannot find firmware file for {test}')
+ if fw is None:
+ print(f'Cannot find binary file for {test}')
sys.exit(-1)
print(f' {test} ...', end='')
# flash firmware
- ret = locals()[f'flash_{debugger}'](board, elf)
+ ret = globals()[f'flash_{flasher}'](item, fw)
assert ret.returncode == 0, 'Flash failed\n' + ret.stdout.decode()
# run test
- locals()[f'test_{test}'](board['uid'])
+ globals()[f'test_{test}'](item['uid'])
print('OK')
+
+
+if __name__ == '__main__':
+ main()