diff options
| author | Ha Thach <[email protected]> | 2023-12-11 16:16:28 +0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-12-11 16:16:28 +0700 |
| commit | 37158eddcbba188dd77dbb17d77a0631a32713d0 (patch) | |
| tree | ba98415d3c89a65778cadc1b28cdbf5ef6f9fd7b /test | |
| parent | 4c80f5a192fdf86af995516311d9ff239a3c8484 (diff) | |
| parent | f5f087e99cae5de00dc6d0b1b2bef534f0442c95 (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.json | 18 | ||||
| -rw-r--r-- | test/hil/hil_pi4.json | 16 | ||||
| -rw-r--r-- | test/hil/hil_test.py | 79 |
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() |
