summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorhathach <[email protected]>2024-11-13 13:08:30 +0700
committerhathach <[email protected]>2024-11-13 13:08:30 +0700
commitaeae2966a2afa669068e54eef7c4dd2dceffaa0d (patch)
treeec965825374576319936bbd1c861b8e90ab6cc77 /test
parent839ec1729252d81aa631ba7ea4653c5591f6fb6f (diff)
hil add stm32f723disco, add test flags for device/host/dual
Diffstat (limited to 'test')
-rwxr-xr-xtest/hil/hil_test.py147
-rw-r--r--test/hil/tinyusb.json69
2 files changed, 161 insertions, 55 deletions
diff --git a/test/hil/hil_test.py b/test/hil/hil_test.py
index 91fe6b67c..b395c28a4 100755
--- a/test/hil/hil_test.py
+++ b/test/hil/hil_test.py
@@ -46,6 +46,26 @@ STATUS_SKIPPED = "\033[33mSkipped\033[0m"
verbose = False
+WCH_RISCV_CONTENT = """
+adapter driver wlinke
+adapter speed 6000
+transport select sdi
+
+wlink_set_address 0x00000000
+set _CHIPNAME wch_riscv
+sdi newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x00001
+
+set _TARGETNAME $_CHIPNAME.cpu
+
+target create $_TARGETNAME.0 wch_riscv -chain-position $_TARGETNAME
+$_TARGETNAME.0 configure -work-area-phys 0x20000000 -work-area-size 10000 -work-area-backup 1
+set _FLASHNAME $_CHIPNAME.flash
+
+flash bank $_FLASHNAME wch_riscv 0x00000000 0 0 0 $_TARGETNAME.0
+
+echo "Ready for Remote Connections"
+"""
+
# -------------------------------------------------------------
# Path
# -------------------------------------------------------------
@@ -147,49 +167,60 @@ def flash_jlink(board, firmware):
return ret
-def flash_stlink(board, firmware):
- ret = run_cmd(f'STM32_Programmer_CLI --connect port=swd sn={board["flasher_sn"]} --write {firmware}.elf --go')
+def reset_jlink(board):
+ script = ['halt', 'r', 'go', 'exit']
+ f_jlink = f'{board["name"]}_reset.jlink'
+ if not os.path.exists(f_jlink):
+ with open(f_jlink, 'w') as f:
+ f.writelines(f'{s}\n' for s in script)
+ ret = run_cmd(f'JLinkExe -USB {board["flasher_sn"]} {board["flasher_args"]} -if swd -JTAGConf -1,-1 -speed auto -NoGui 1 -ExitOnError 1 -CommandFile {f_jlink}')
return ret
+def flash_stlink(board, firmware):
+ return run_cmd(f'STM32_Programmer_CLI --connect port=swd sn={board["flasher_sn"]} --write {firmware}.elf --go')
+
+
+def reset_stlink(board):
+ return run_cmd(f'STM32_Programmer_CLI --connect port=swd sn={board["flasher_sn"]} --rst --go')
+
def flash_stflash(board, firmware):
ret = run_cmd(f'st-flash --serial {board["flasher_sn"]} write {firmware}.bin 0x8000000')
return ret
+def reset_stflash(board):
+ return subprocess.CompletedProcess(args=['dummy'], returncode=0)
+
+
def flash_openocd(board, firmware):
ret = run_cmd(f'openocd -c "adapter serial {board["flasher_sn"]}" {board["flasher_args"]} -c "program {firmware}.elf reset exit"')
return ret
-def flash_openocd_wch(board, firmware):
- # Content of the wch-riscv.cfg file
- cfg_content = """
-adapter driver wlinke
-adapter speed 6000
-transport select sdi
+def reset_openocd(board):
+ ret = run_cmd(f'openocd -c "adapter serial {board["flasher_sn"]}" {board["flasher_args"]} -c "reset exit"')
+ return ret
-wlink_set_address 0x00000000
-set _CHIPNAME wch_riscv
-sdi newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x00001
-set _TARGETNAME $_CHIPNAME.cpu
+def flash_openocd_wch(board, firmware):
+ f_wch = f"wch-riscv_{board['uid']}.cfg"
+ if not os.path.exists(f_wch):
+ with open(f_wch, 'w') as file:
+ file.write(WCH_RISCV_CONTENT)
-target create $_TARGETNAME.0 wch_riscv -chain-position $_TARGETNAME
-$_TARGETNAME.0 configure -work-area-phys 0x20000000 -work-area-size 10000 -work-area-backup 1
-set _FLASHNAME $_CHIPNAME.flash
+ ret = run_cmd(f'openocd_wch -c "adapter serial {board["flasher_sn"]}" -f {f_wch} '
+ f'-c "program {firmware}.elf reset exit"')
+ return ret
-flash bank $_FLASHNAME wch_riscv 0x00000000 0 0 0 $_TARGETNAME.0
-echo "Ready for Remote Connections"
-"""
+def reset_openocd_wch(board):
f_wch = f"wch-riscv_{board['uid']}.cfg"
if not os.path.exists(f_wch):
with open(f_wch, 'w') as file:
- file.write(cfg_content)
+ file.write(WCH_RISCV_CONTENT)
- ret = run_cmd(f'openocd_wch -c "adapter serial {board["flasher_sn"]}" -f {f_wch} '
- f'-c "program {firmware}.elf reset exit"')
+ ret = run_cmd(f'openocd_wch -c "adapter serial {board["flasher_sn"]}" -f {f_wch} -c "program reset exit"')
return ret
@@ -198,12 +229,25 @@ def flash_openocd_adi(board, firmware):
f'{board["flasher_args"]} -c "program {firmware}.elf reset exit"')
return ret
+
+def reset_openocd_adi(board):
+ ret = run_cmd(f'{OPENCOD_ADI_PATH}/src/openocd -c "adapter serial {board["flasher_sn"]}" -s {OPENCOD_ADI_PATH}/tcl '
+ f'{board["flasher_args"]} -c "program reset exit"')
+ return ret
+
+
def flash_wlink_rs(board, firmware):
# wlink use index for probe selection and lacking usb serial support
ret = run_cmd(f'wlink flash {firmware}.elf')
return ret
+def reset_wlink_rs(board):
+ # wlink use index for probe selection and lacking usb serial support
+ ret = run_cmd(f'wlink reset')
+ return ret
+
+
def flash_esptool(board, firmware):
port = get_serial_dev(board["flasher_sn"], None, None, 0)
fw_dir = os.path.dirname(f'{firmware}.bin')
@@ -213,28 +257,39 @@ def flash_esptool(board, firmware):
flash_args = f.read().strip().replace('\n', ' ')
command = (f'esptool.py --chip {idf_target} -p {port} {board["flasher_args"]} '
f'--before=default_reset --after=hard_reset write_flash {flash_args}')
- # command = f'echo abc'
ret = run_cmd(command, cwd=fw_dir)
return ret
+def reset_esptool(board):
+ return subprocess.CompletedProcess(args=['dummy'], returncode=0)
+
+
def flash_uniflash(board, firmware):
ret = run_cmd(f'dslite.sh {board["flasher_args"]} -f {firmware}.hex')
return ret
+def reset_uniflash(board):
+ return subprocess.CompletedProcess(args=['dummy'], returncode=0)
+
+
# -------------------------------------------------------------
# Tests: dual
# -------------------------------------------------------------
def test_dual_host_info_to_device_cdc(board):
uid = board['uid']
declared_devs = [f'{d["vid_pid"]}_{d["serial"]}' for d in board['tests']['dev_attached']]
-
port = get_serial_dev(uid, 'TinyUSB', "TinyUSB_Device", 0)
ser = open_serial_dev(port)
- # read from serial, first line should contain vid/pid and serial
+
+ # read from cdc, first line should contain vid/pid and serial
data = ser.read(1000)
+ ser.close()
+ if len(data) == 0:
+ assert False, 'No data from device'
lines = data.decode('utf-8').splitlines()
+
enum_dev_sn = []
for l in lines:
vid_pid_sn = re.search(r'ID ([0-9a-fA-F]+):([0-9a-fA-F]+) SN (\w+)', l)
@@ -243,12 +298,8 @@ def test_dual_host_info_to_device_cdc(board):
enum_dev_sn.append(f'{vid_pid_sn.group(1)}_{vid_pid_sn.group(2)}_{vid_pid_sn.group(3)}')
if set(declared_devs) != set(enum_dev_sn):
- # for pico/pico2 make this test optional
- failed_msg = f'Enumerated devices {enum_dev_sn} not match with declared {declared_devs}'
- if 'raspberry_pi_pico' in board['name']:
- print(f'\r\n {failed_msg} {STATUS_FAILED} ', end='')
- else:
- assert False, failed_msg
+ failed_msg = f'Expected {declared_devs}, Enumerated {enum_dev_sn}'
+ assert False, failed_msg
return 0
@@ -256,12 +307,17 @@ def test_dual_host_info_to_device_cdc(board):
# Tests: host
# -------------------------------------------------------------
def test_host_device_info(board):
- uid = board['uid']
declared_devs = [f'{d["vid_pid"]}_{d["serial"]}' for d in board['tests']['dev_attached']]
port = get_serial_dev(board["flasher_sn"], None, None, 0)
ser = open_serial_dev(port)
+
+ # reset device since we can miss the first line
+ ret = globals()[f'reset_{board["flasher"].lower()}'](board)
+ assert ret.returncode == 0, 'Failed to reset device'
+
data = ser.read(1000)
+ ser.close()
if len(data) == 0:
assert False, 'No data from device'
@@ -274,12 +330,8 @@ def test_host_device_info(board):
enum_dev_sn.append(f'{vid_pid_sn.group(1)}_{vid_pid_sn.group(2)}_{vid_pid_sn.group(3)}')
if set(declared_devs) != set(enum_dev_sn):
- # for pico/pico2 make this test optional
- failed_msg = f'Enumerated devices {enum_dev_sn} not match with declared {declared_devs}'
- if 'raspberry_pi_pico' in board['name']:
- print(f'\r\n {failed_msg} {STATUS_FAILED} ', end='')
- else:
- assert False, failed_msg
+ failed_msg = f'Expected {declared_devs}, Enumerated {enum_dev_sn}'
+ assert False, failed_msg
return 0
@@ -323,7 +375,8 @@ def test_device_cdc_msc(board):
str = b"test_str"
ser.write(str)
ser.flush()
- assert ser.read(len(str)) == str, 'CDC wrong data'
+ rd_str = ser.read(len(str))
+ assert rd_str == str, f'CDC wrong data: expected: {str} was {rd_str}'
# Block test
data = read_disk_file(uid,0,'README.TXT')
@@ -430,10 +483,14 @@ device_tests = [
'device/hid_boot_interface',
]
-host_tests = [
+dual_tests = [
'dual/host_info_to_device_cdc',
]
+host_test = [
+ 'host/device_info',
+]
+
def test_board(board):
name = board['name']
@@ -444,8 +501,12 @@ def test_board(board):
if 'tests' in board:
board_tests = board['tests']
- if 'dev_attached' in board_tests:
- test_list += host_tests
+ if 'device' in board_tests and board_tests['device'] == True:
+ test_list += list(device_tests)
+ if 'dual' in board_tests and board_tests['dual'] == True:
+ test_list += dual_tests
+ if 'host' in board_tests and board_tests['host'] == True:
+ test_list += host_test
if 'only' in board_tests:
test_list = board_tests['only']
if 'skip' in board_tests:
@@ -455,7 +516,7 @@ def test_board(board):
print(f'{name:25} {skip:30} ... Skip')
# board_test is added last to disable board's usb
- #test_list.append('device/board_test')
+ test_list.append('device/board_test')
err_count = 0
flags_on_list = [""]
@@ -473,7 +534,7 @@ def test_board(board):
fw_name = f'{fw_dir}/{os.path.basename(test)}'
print(f'{name+f1_str:40} {test:30} ... ', end='')
- if not os.path.exists(fw_dir):
+ if not os.path.exists(fw_dir) or not (os.path.exists(f'{fw_name}.elf') or os.path.exists(f'{fw_name}.bin')):
print('Skip (no binary)')
continue
diff --git a/test/hil/tinyusb.json b/test/hil/tinyusb.json
index 2d61981f2..f3ef9dcf7 100644
--- a/test/hil/tinyusb.json
+++ b/test/hil/tinyusb.json
@@ -27,6 +27,9 @@
{
"name": "feather_nrf52840_express",
"uid": "1F0479CD0F764471",
+ "tests": {
+ "device": true, "host": false, "dual": false
+ },
"flasher": "jlink",
"flasher_sn": "000682804350",
"flasher_args": "-device nrf52840_xxaa"
@@ -34,6 +37,9 @@
{
"name": "max32666fthr",
"uid": "0C81464124010B20FF0A08CC2C",
+ "tests": {
+ "device": true, "host": false, "dual": false
+ },
"flasher": "openocd_adi",
"flasher_sn": "E6614C311B597D32",
"flasher_args": "-f interface/cmsis-dap.cfg -f target/max32665.cfg"
@@ -41,16 +47,20 @@
{
"name": "metro_m4_express",
"uid": "9995AD485337433231202020FF100A34",
- "flasher": "jlink",
- "flasher_sn": "123456",
- "flasher_args": "-device ATSAMD51J19",
"tests": {
+ "device": true, "host": false, "dual": true,
"dev_attached": [{"vid_pid": "1a86_55d4", "serial": "52D2002130"}]
- }
+ },
+ "flasher": "jlink",
+ "flasher_sn": "123456",
+ "flasher_args": "-device ATSAMD51J19"
},
{
"name": "lpcxpresso11u37",
"uid": "17121919",
+ "tests": {
+ "device": true, "host": false, "dual": false
+ },
"flasher": "jlink",
"flasher_sn": "000724441579",
"flasher_args": "-device LPC11U37/401"
@@ -59,6 +69,7 @@
"name": "ra4m1_ek",
"uid": "152E163038303131393346E46F26574B",
"tests": {
+ "device": true, "host": false, "dual": false,
"skip": ["device/cdc_msc", "device/cdc_msc_freertos"]
},
"comment": "MSC is slow to enumerated #2602",
@@ -69,22 +80,24 @@
{
"name": "raspberry_pi_pico",
"uid": "E6614C311B764A37",
- "flasher": "openocd",
- "flasher_sn": "E6614103E72C1D2F",
- "flasher_args": "-f interface/cmsis-dap.cfg -f target/rp2040.cfg -c \"adapter speed 5000\"",
"tests": {
+ "device": true, "host": false, "dual": false,
"dev_attached": [{"vid_pid": "1a86_55d4", "serial": "52D2002470"}]
- }
+ },
+ "flasher": "openocd",
+ "flasher_sn": "E6614103E72C1D2F",
+ "flasher_args": "-f interface/cmsis-dap.cfg -f target/rp2040.cfg -c \"adapter speed 5000\""
},
{
"name": "raspberry_pi_pico2",
"uid": "560AE75E1C7152C9",
- "flasher": "openocd",
- "flasher_sn": "E6633861A3978538",
- "flasher_args": "-f interface/cmsis-dap.cfg -f target/rp2350.cfg -c \"adapter speed 5000\"",
"tests": {
+ "device": true, "host": false, "dual": false,
"dev_attached": [{"vid_pid": "1a86_55d4", "serial": "533D004242"}]
- }
+ },
+ "flasher": "openocd",
+ "flasher_sn": "E6633861A3978538",
+ "flasher_args": "-f interface/cmsis-dap.cfg -f target/rp2350.cfg -c \"adapter speed 5000\""
},
{
"name": "stm32f072disco",
@@ -94,11 +107,28 @@
"flasher_args": "-device stm32f072rb"
},
{
+ "name": "stm32f723disco",
+ "uid": "460029001951373031313335",
+ "build" : {
+ "flags_on": ["", "CFG_TUD_DWC2_DMA"]
+ },
+ "tests": {
+ "device": true, "host": true, "dual": false,
+ "dev_attached": [{"vid_pid": "1a86_55d4", "serial": "52D2003414"}]
+ },
+ "flasher": "jlink",
+ "flasher_sn": "000776606156",
+ "flasher_args": "-device stm32f723ie"
+ },
+ {
"name": "stm32h743nucleo",
"uid": "110018000951383432343236",
"build" : {
"flags_on": ["", "CFG_TUD_DWC2_DMA"]
},
+ "tests": {
+ "device": true, "host": false, "dual": false
+ },
"flasher": "stlink",
"flasher_sn": "004C00343137510F39383538",
"flasher_args": ""
@@ -106,6 +136,9 @@
{
"name": "stm32g0b1nucleo",
"uid": "4D0038000450434E37343120",
+ "tests": {
+ "device": true, "host": false, "dual": false
+ },
"flasher": "openocd",
"flasher_sn": "066FFF495087534867063844",
"flasher_args": "-f interface/stlink.cfg -f target/stm32g0x.cfg"
@@ -118,6 +151,9 @@
"build" : {
"flags_on": ["", "CFG_TUD_DWC2_DMA"]
},
+ "tests": {
+ "device": true, "host": false, "dual": false
+ },
"flasher": "jlink",
"flasher_sn": "000778170924",
"flasher_args": "-device stm32f769ni"
@@ -125,6 +161,9 @@
{
"name": "mimxrt1015_evk",
"uid": "DC28F865D2111D228D00B0543A70463C",
+ "tests": {
+ "device": true, "host": false, "dual": false
+ },
"flasher": "jlink",
"flasher_sn": "000726284213",
"flasher_args": "-device MIMXRT1015DAF5A"
@@ -132,6 +171,9 @@
{
"name": "nanoch32v203",
"uid": "CDAB277B0FBC03E339E339E3",
+ "tests": {
+ "device": true, "host": false, "dual": false
+ },
"flasher": "openocd_wch",
"flasher_sn": "EBCA8F0670AF",
"flasher_args": ""
@@ -139,6 +181,9 @@
{
"name": "stm32f407disco",
"uid": "30001A000647313332353735",
+ "tests": {
+ "device": true, "host": false, "dual": false
+ },
"flasher": "jlink",
"flasher_sn": "000773661813",
"flasher_args": "-device stm32f407vg"