mirror of
https://github.com/hathach/tinyusb.git
synced 2025-01-17 05:32:55 +08:00
Merge pull request #2375 from hathach/hil-add-samd51
add samd51 (itsybitsy_m4) to hardware test loop
This commit is contained in:
commit
ccc59e8763
11
.github/workflows/build_esp.yml
vendored
11
.github/workflows/build_esp.yml
vendored
@ -92,14 +92,15 @@ jobs:
|
||||
name: ${{ matrix.board }}
|
||||
path: cmake-build/cmake-build-${{ matrix.board }}
|
||||
|
||||
- name: Test on actual hardware
|
||||
run: |
|
||||
python3 test/hil/hil_test.py --board ${{ matrix.board }} hil_pi4.json
|
||||
|
||||
- name: Reset USB bus
|
||||
run: |
|
||||
for port in $(lspci | grep USB | cut -d' ' -f1); do
|
||||
echo -n "0000:${port}"| sudo tee /sys/bus/pci/drivers/xhci_hcd/unbind;
|
||||
sleep 1;
|
||||
sleep 0.5;
|
||||
echo -n "0000:${port}" | sudo tee /sys/bus/pci/drivers/xhci_hcd/bind;
|
||||
sleep 3;
|
||||
done
|
||||
|
||||
- name: Test on actual hardware
|
||||
run: |
|
||||
python3 test/hil/hil_test.py --board ${{ matrix.board }} hil_pi4.json
|
||||
|
21
.github/workflows/cmake_arm.yml
vendored
21
.github/workflows/cmake_arm.yml
vendored
@ -102,6 +102,13 @@ jobs:
|
||||
path: |
|
||||
cmake-build/cmake-build-feather_nrf52840_express/*/*/*.elf
|
||||
|
||||
- name: Upload Artifacts for Hardware Testing (samd51)
|
||||
if: matrix.family == 'samd51' && github.repository_owner == 'hathach'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: itsybitsy_m4
|
||||
path: |
|
||||
cmake-build/cmake-build-itsybitsy_m4/*/*/*.bin
|
||||
|
||||
# ---------------------------------------
|
||||
# Hardware in the loop (HIL)
|
||||
@ -116,8 +123,9 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
board:
|
||||
- 'raspberry_pi_pico'
|
||||
- 'feather_nrf52840_express'
|
||||
- 'itsybitsy_m4'
|
||||
- 'raspberry_pi_pico'
|
||||
steps:
|
||||
- name: Clean workspace
|
||||
run: |
|
||||
@ -136,14 +144,15 @@ jobs:
|
||||
name: ${{ matrix.board }}
|
||||
path: cmake-build/cmake-build-${{ matrix.board }}
|
||||
|
||||
- name: Test on actual hardware
|
||||
run: |
|
||||
python3 test/hil/hil_test.py --board ${{ matrix.board }} hil_pi4.json
|
||||
|
||||
- name: Reset USB bus
|
||||
run: |
|
||||
for port in $(lspci | grep USB | cut -d' ' -f1); do
|
||||
echo -n "0000:${port}"| sudo tee /sys/bus/pci/drivers/xhci_hcd/unbind;
|
||||
sleep 1;
|
||||
sleep 0.5;
|
||||
echo -n "0000:${port}" | sudo tee /sys/bus/pci/drivers/xhci_hcd/bind;
|
||||
sleep 3;
|
||||
done
|
||||
|
||||
- name: Test on actual hardware
|
||||
run: |
|
||||
python3 test/hil/hil_test.py --board ${{ matrix.board }} hil_pi4.json
|
||||
|
@ -10,7 +10,7 @@ set(CMAKE_SYSTEM_PROCESSOR cortex-m0plus CACHE INTERNAL "System Processor")
|
||||
set(CMAKE_TOOLCHAIN_FILE ${TOP}/examples/build_system/cmake/toolchain/arm_${TOOLCHAIN}.cmake)
|
||||
|
||||
set(FAMILY_MCUS SAMD21 CACHE INTERNAL "")
|
||||
|
||||
set(OPENOCD_OPTION "-f interface/cmsis-dap.cfg -c \"transport select swd\" -f target/at91samdXX.cfg")
|
||||
|
||||
#------------------------------------
|
||||
# BOARD_TARGET
|
||||
@ -102,4 +102,5 @@ function(family_configure_example TARGET RTOS)
|
||||
|
||||
# Flashing
|
||||
family_flash_jlink(${TARGET})
|
||||
#family_flash_openocd(${TARGET} ${OPENOCD_OPTION})
|
||||
endfunction()
|
||||
|
@ -157,6 +157,20 @@ uint32_t board_button_read(void) {
|
||||
return gpio_get_pin_level(BUTTON_PIN) ? 0 : 1;
|
||||
}
|
||||
|
||||
size_t board_get_unique_id(uint8_t id[], size_t max_len) {
|
||||
(void) max_len;
|
||||
|
||||
uint32_t did_addr[4] = {0x008061FC, 0x00806010, 0x00806014, 0x00806018};
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
uint32_t did = *((uint32_t const*) did_addr[i]);
|
||||
did = TU_BSWAP32(did); // swap endian to match samd51 uf2 bootloader
|
||||
memcpy(id + i * 4, &did, 4);
|
||||
}
|
||||
|
||||
return 16;
|
||||
}
|
||||
|
||||
int board_uart_read(uint8_t* buf, int len) {
|
||||
(void) buf;
|
||||
(void) len;
|
||||
|
@ -10,7 +10,7 @@ set(CMAKE_SYSTEM_PROCESSOR cortex-m4 CACHE INTERNAL "System Processor")
|
||||
set(CMAKE_TOOLCHAIN_FILE ${TOP}/examples/build_system/cmake/toolchain/arm_${TOOLCHAIN}.cmake)
|
||||
|
||||
set(FAMILY_MCUS SAMD51 CACHE INTERNAL "")
|
||||
|
||||
set(OPENOCD_OPTION "-f interface/cmsis-dap.cfg -c \"transport select swd\" -c \"set CHIPNAME samd51\" -f target/atsame5x.cfg")
|
||||
|
||||
#------------------------------------
|
||||
# BOARD_TARGET
|
||||
@ -100,5 +100,7 @@ function(family_configure_example TARGET RTOS)
|
||||
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
|
||||
|
||||
# Flashing
|
||||
family_add_bin_hex(${TARGET})
|
||||
family_flash_jlink(${TARGET})
|
||||
#family_flash_openocd(${TARGET} ${OPENOCD_OPTION})
|
||||
endfunction()
|
||||
|
@ -33,11 +33,6 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// Level where CFG_TUSB_DEBUG must be at least for USBD is logged
|
||||
#ifndef CFG_TUD_LOG_LEVEL
|
||||
#define CFG_TUD_LOG_LEVEL 2
|
||||
#endif
|
||||
|
||||
#define TU_LOG_USBD(...) TU_LOG(CFG_TUD_LOG_LEVEL, __VA_ARGS__)
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
|
@ -35,11 +35,6 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// Level where CFG_TUSB_DEBUG must be at least for USBH is logged
|
||||
#ifndef CFG_TUH_LOG_LEVEL
|
||||
#define CFG_TUH_LOG_LEVEL 2
|
||||
#endif
|
||||
|
||||
#define TU_LOG_USBH(...) TU_LOG(CFG_TUH_LOG_LEVEL, __VA_ARGS__)
|
||||
|
||||
enum {
|
||||
|
@ -299,6 +299,16 @@
|
||||
#define CFG_TUSB_DEBUG 0
|
||||
#endif
|
||||
|
||||
// Level where CFG_TUSB_DEBUG must be at least for USBH is logged
|
||||
#ifndef CFG_TUH_LOG_LEVEL
|
||||
#define CFG_TUH_LOG_LEVEL 2
|
||||
#endif
|
||||
|
||||
// Level where CFG_TUSB_DEBUG must be at least for USBD is logged
|
||||
#ifndef CFG_TUD_LOG_LEVEL
|
||||
#define CFG_TUD_LOG_LEVEL 2
|
||||
#endif
|
||||
|
||||
// Memory section for placing buffer used for usb transferring. If MEM_SECTION is different for
|
||||
// host and device use: CFG_TUD_MEM_SECTION, CFG_TUH_MEM_SECTION instead
|
||||
#ifndef CFG_TUSB_MEM_SECTION
|
||||
|
@ -23,6 +23,15 @@
|
||||
"flasher": "jlink",
|
||||
"flasher_sn": "000682804350",
|
||||
"flasher_args": "-device nrf52840_xxaa"
|
||||
},
|
||||
{
|
||||
"name": "itsybitsy_m4",
|
||||
"uid": "D784B28C5338533335202020FF044726",
|
||||
"flasher": "bossac",
|
||||
"flashser_vendor": "Adafruit Industries",
|
||||
"flasher_product": "ItsyBitsy M4 Express",
|
||||
"flasher_reset_pin": "2",
|
||||
"flasher_args": "--offset 0x4000"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -34,6 +34,13 @@ import subprocess
|
||||
import json
|
||||
import glob
|
||||
|
||||
# for RPI double reset
|
||||
try:
|
||||
import gpiozero
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
|
||||
ENUM_TIMEOUT = 10
|
||||
|
||||
|
||||
@ -41,6 +48,8 @@ ENUM_TIMEOUT = 10
|
||||
def get_serial_dev(id, vendor_str, product_str, ifnum):
|
||||
if vendor_str and product_str:
|
||||
# known vendor and product
|
||||
vendor_str = vendor_str.replace(' ', '_')
|
||||
product_str = product_str.replace(' ', '_')
|
||||
return f'/dev/serial/by-id/usb-{vendor_str}_{product_str}_{id}-if{ifnum:02d}'
|
||||
else:
|
||||
# just use id: mostly for cp210x/ftdi flasher
|
||||
@ -115,7 +124,7 @@ def flash_jlink(board, firmware):
|
||||
|
||||
def flash_openocd(board, firmware):
|
||||
ret = subprocess.run(
|
||||
f'openocd -c "adapter serial {board["flasher_sn"]}" {board["flasher_args"]} -c "program {firmware}" -c "reset init" -c "resume" -c "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
|
||||
|
||||
@ -133,6 +142,37 @@ def flash_esptool(board, firmware):
|
||||
return ret
|
||||
|
||||
|
||||
def doublereset_with_rpi_gpio(board):
|
||||
# Off = 0 = Reset
|
||||
led = gpiozero.LED(board["flasher_reset_pin"])
|
||||
|
||||
led.off()
|
||||
time.sleep(0.1)
|
||||
led.on()
|
||||
time.sleep(0.1)
|
||||
led.off()
|
||||
time.sleep(0.1)
|
||||
led.on()
|
||||
|
||||
def flash_bossac(board, firmware):
|
||||
# double reset to enter bootloader
|
||||
doublereset_with_rpi_gpio(board)
|
||||
|
||||
port = get_serial_dev(board["uid"], board["flashser_vendor"], board["flasher_product"], 0)
|
||||
timeout = ENUM_TIMEOUT
|
||||
while timeout:
|
||||
if os.path.exists(port):
|
||||
break
|
||||
else:
|
||||
time.sleep(0.5)
|
||||
timeout = timeout - 0.5
|
||||
assert timeout, 'bossac bootloader is not available'
|
||||
# sleep a bit more for bootloader to be ready
|
||||
time.sleep(0.5)
|
||||
ret = subprocess.run(f'bossac --port {port} {board["flasher_args"]} -U -i -R -e -w {firmware}', shell=True, stdout=subprocess.PIPE,
|
||||
stderr=subprocess.STDOUT)
|
||||
return ret
|
||||
|
||||
# -------------------------------------------------------------
|
||||
# Tests
|
||||
# -------------------------------------------------------------
|
||||
@ -305,7 +345,7 @@ def main(config_file, board):
|
||||
|
||||
for test in test_list:
|
||||
fw_list = [
|
||||
# cmake: esp32 use .bin file
|
||||
# cmake: esp32 & samd51 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
|
||||
|
Loading…
x
Reference in New Issue
Block a user