265 lines
15 KiB
Plaintext
265 lines
15 KiB
Plaintext
*** Variables ***
|
|
${UART} sysbus.usart3
|
|
${CAN} sysbus.fdcan1
|
|
${CAN_HUB} canHub
|
|
${ZYNQ_UART} sysbus.uart0
|
|
${ZYNQ_CAN} sysbus.mcan
|
|
${PROMPT} \#${SPACE}
|
|
${ZYNQ_MCAN_PERIPHERALS} SEPARATOR=\n
|
|
... """
|
|
... mcan: CAN.MCAN @ sysbus <0xe0104000, +0x4000>
|
|
... ${SPACE*4}Line0 -> gic@30
|
|
... ${SPACE*4}Line1 -> gic@31
|
|
... ${SPACE*4}Calibration -> gic@32
|
|
... ${SPACE*4}messageRAM: canMessageRAM
|
|
...
|
|
... canMessageRAM: Memory.ArrayMemory @ sysbus <0xe0108000, +0x22000>
|
|
... ${SPACE*4}size: 0x22000
|
|
... """
|
|
# All Zephyr tests work in loopback mode
|
|
${TESTS_NET_SOCKET_CAN_BIN} @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-tests-net-socket-can.elf-s_724872-88ee55e384b5d68e4bd7a9a9a51faa47e9faa597
|
|
${TESTS_SUBSYS_CANBUS_ISOTP_IMPLEMENTATION_BIN} @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-tests-subsys-canbus-isotp-implementation.elf-s_1402784-504c3c0fa0d5d111ed443954bbb2c86766153932
|
|
${TESTS_SUBSYS_CANBUS_ISOTP_CONFORMANCE_BIN} @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-tests-subsys-canbus-isotp-conformance.elf-s_1466100-749f79deb1ce2d791b1794454b8afd977825b6eb
|
|
${TESTS_DRIVERS_CAN_API_BIN} @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-tests-drivers-can-api.elf-s_2039836-5cbc533cfc6334d3df2b0f8ef504c28093fa4dd8
|
|
${TESTS_DRIVERS_CAN_TIMING_BIN} @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-tests-drivers-can-timing.elf-s_1873596-3a77a90c168202844bf70717b6a221b73e69926c
|
|
${TESTS_DRIVERS_CAN_SHELL_BIN} @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-tests-drivers-can-shell.elf-s_1642156-92afb142a6be519e6cf51ecb34023167bb66e1fd
|
|
# Zephyr samples can be configured to work in either normal or loopback mode
|
|
${SAMPLES_SUBSYS_CANBUS_ISOTP_LOOPBACK_BIN} @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-samples-subsys-canbus-isotp--loopback.elf-s_1554556-1a03849de5b83796ba0d541e279cc04ca1561106
|
|
${SAMPLES_SUBSYS_CANBUS_ISOTP_NO_LOOPBACK_BIN} @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-samples-subsys-canbus-isotp.elf-s_1554512-549bcf52da77937f5c7a86dd407d3e9599e40938
|
|
${SAMPLES_NET_SOCKETS_CAN_LOOPBACK_BIN} @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-samples-net-sockets-can--loopback.elf-s_2246072-12c8e04ba0a5f9ef2181cffb9bd0a38321c8e182
|
|
${SAMPLES_NET_SOCKETS_CAN_NO_LOOPBACK_BIN} @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-samples-net-sockets-can.elf-s_2243040-d8ba11b258437935c3880cf3e162f448f55c6f17
|
|
${SAMPLES_DRIVERS_CAN_COUNTER_LOOPBACK_BIN} @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-samples-drivers-can-counter--loopback.elf-s_1391916-0b17986e6f81b9d38be88cf70c6a5d616de19234
|
|
${SAMPLES_DRIVERS_CAN_COUNTER_NO_LOOPBACK_BIN} @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-samples-drivers-can-counter.elf-s_1391464-17e71d5820ab718e5dc89f8480644c576306d24c
|
|
# Linux with support for MCAN
|
|
${ZYNQ_MCAN_BIN} @https://dl.antmicro.com/projects/renode/zynq--linux-mcan.elf-s_14394628-0381324a8046cfb3f7a3f08364acd364588d2f03
|
|
${ZYNQ_MCAN_ROOTFS} @https://dl.antmicro.com/projects/renode/zynq--linux-mcan-rootfs.ext2-s_16777216-485d90cf2065794b6bbb68768315d1310387a0cc
|
|
${ZYNQ_MCAN_DTB} @https://dl.antmicro.com/projects/renode/zynq--linux-mcan.dtb-s_12849-650fd5a9575fd9e2917e5f9dd2677014cbd7af11
|
|
|
|
*** Keywords ***
|
|
Create CAN Hub
|
|
[Arguments] ${loopback}=${True}
|
|
Execute Command emulation CreateCANHub "${CAN_HUB}" ${loopback}
|
|
|
|
Create STM32H7 Machine
|
|
[Arguments] ${bin} ${name}=machine-0
|
|
Execute Command $bin=${bin}
|
|
Execute Command mach create "${name}"
|
|
Execute Command machine LoadPlatformDescription @platforms/cpus/stm32h753.repl
|
|
Execute Command sysbus LoadELF ${bin}
|
|
Execute Command connector Connect ${CAN} ${CAN_HUB}
|
|
Execute Command showAnalyzer ${UART}
|
|
|
|
Create Zynq Machine
|
|
[Arguments] ${name}=machine-0
|
|
Execute Command $name="${name}"
|
|
Execute Command $bin=${ZYNQ_MCAN_BIN}
|
|
Execute Command $rootfs=${ZYNQ_MCAN_ROOTFS}
|
|
Execute Command $dtb=${ZYNQ_MCAN_DTB}
|
|
Execute Command include @scripts/single-node/zedboard.resc
|
|
Execute Command machine LoadPlatformDescriptionFromString ${ZYNQ_MCAN_PERIPHERALS}
|
|
Execute Command connector Connect ${ZYNQ_CAN} ${CAN_HUB}
|
|
|
|
Check Exit Code
|
|
[Arguments] ${testerId}
|
|
Write Line To Uart echo $? testerId=${testerId}
|
|
Wait For Line On Uart 0 testerId=${testerId}
|
|
Wait For Prompt On Uart ${PROMPT} testerId=${testerId}
|
|
|
|
Execute Linux Command
|
|
[Arguments] ${command} ${testerId} ${timeout}=5
|
|
Write Line To Uart ${command} testerId=${testerId}
|
|
Wait For Prompt On Uart ${PROMPT} timeout=${timeout} testerId=${testerId}
|
|
Check Exit Code ${testerId}
|
|
|
|
Boot And Login
|
|
[Arguments] ${testerId}
|
|
Wait For Line On Uart Booting Linux on physical CPU 0x0 testerId=${testerId}
|
|
Wait For Prompt On Uart buildroot login: timeout=25 testerId=${testerId}
|
|
Write Line To Uart root testerId=${testerId}
|
|
Wait For Prompt On Uart ${PROMPT} testerId=${testerId}
|
|
|
|
*** Test Cases ***
|
|
Should Pass Zephyr CAN Net Socket Test
|
|
Create CAN Hub
|
|
Create STM32H7 Machine ${TESTS_NET_SOCKET_CAN_BIN}
|
|
Create Terminal Tester ${UART}
|
|
|
|
Wait For Line On Uart PROJECT EXECUTION SUCCESSFUL
|
|
|
|
Should Pass Zephyr CAN ISOTP Implementation Test
|
|
Create CAN Hub
|
|
Create STM32H7 Machine ${TESTS_SUBSYS_CANBUS_ISOTP_IMPLEMENTATION_BIN}
|
|
Create Terminal Tester ${UART}
|
|
|
|
Wait For Line On Uart PROJECT EXECUTION SUCCESSFUL timeout=20
|
|
|
|
Should Pass Zephyr CAN ISOTP Conformance Test
|
|
Create CAN Hub
|
|
Create STM32H7 Machine ${TESTS_SUBSYS_CANBUS_ISOTP_CONFORMANCE_BIN}
|
|
Create Terminal Tester ${UART}
|
|
|
|
Wait For Line On Uart PROJECT EXECUTION SUCCESSFUL timeout=12
|
|
|
|
Should Pass Zephyr CAN API Test
|
|
Create CAN Hub
|
|
Create STM32H7 Machine ${TESTS_DRIVERS_CAN_API_BIN}
|
|
Create Terminal Tester ${UART}
|
|
|
|
Wait For Line On Uart PROJECT EXECUTION SUCCESSFUL
|
|
|
|
Should Pass Zephyr CAN Timing Test
|
|
Create CAN Hub
|
|
Create STM32H7 Machine ${TESTS_DRIVERS_CAN_TIMING_BIN}
|
|
Create Terminal Tester ${UART}
|
|
|
|
Wait For Line On Uart PROJECT EXECUTION SUCCESSFUL
|
|
|
|
Should Pass Zephyr CAN Shell Test
|
|
Create CAN Hub
|
|
Create STM32H7 Machine ${TESTS_DRIVERS_CAN_SHELL_BIN}
|
|
Create Terminal Tester ${UART}
|
|
|
|
Wait For Line On Uart PROJECT EXECUTION SUCCESSFUL
|
|
|
|
Should Use CAN ISOTP Protocol To Exchange Messages In Loopback Mode
|
|
Create CAN Hub
|
|
Create STM32H7 Machine ${SAMPLES_SUBSYS_CANBUS_ISOTP_LOOPBACK_BIN}
|
|
Create Terminal Tester ${UART}
|
|
|
|
# Wait for several successful transmissions
|
|
${cnt}= Set Variable 40
|
|
FOR ${i} IN RANGE 0 ${cnt}
|
|
Wait For Line On Uart Got 247 bytes in total
|
|
Wait For Line On Uart TX complete cb [0]
|
|
Wait For Line On Uart This is the sample test for the short payload
|
|
END
|
|
|
|
Should Use CAN ISOTP Protocol To Exchange Messages Between Machines
|
|
Create CAN Hub loopback=${False}
|
|
Create STM32H7 Machine ${SAMPLES_SUBSYS_CANBUS_ISOTP_NO_LOOPBACK_BIN} machine-0
|
|
${tester-0}= Create Terminal Tester ${UART} machine=machine-0
|
|
# Lower quantum to keep synchronization between machines
|
|
Execute Command emulation SetGlobalQuantum "0.000025"
|
|
Execute Command emulation SetGlobalSerialExecution True
|
|
|
|
Create STM32H7 Machine ${SAMPLES_SUBSYS_CANBUS_ISOTP_NO_LOOPBACK_BIN} machine-1
|
|
${tester-1}= Create Terminal Tester ${UART} machine=machine-1
|
|
|
|
# Wait for several successful transmissions
|
|
${cnt}= Set Variable 40
|
|
FOR ${i} IN RANGE 0 ${cnt}
|
|
Wait For Line On Uart Got 247 bytes in total testerId=${tester-0}
|
|
Wait For Line On Uart Got 247 bytes in total testerId=${tester-1}
|
|
Wait For Line On Uart TX complete cb [0] testerId=${tester-0}
|
|
Wait For Line On Uart TX complete cb [0] testerId=${tester-1}
|
|
Wait For Line On Uart This is the sample test for the short payload testerId=${tester-0}
|
|
Wait For Line On Uart This is the sample test for the short payload testerId=${tester-1}
|
|
END
|
|
|
|
Should Use CAN Socket API To Exchange Messages In Loopback Mode
|
|
Create CAN Hub
|
|
Create STM32H7 Machine ${SAMPLES_NET_SOCKETS_CAN_LOOPBACK_BIN}
|
|
Create Terminal Tester ${UART}
|
|
|
|
# Wait for several successful transmissions
|
|
${cnt}= Set Variable 40
|
|
FOR ${i} IN RANGE 0 ${cnt}
|
|
Wait For Line On Uart net_socket_can_sample: [0] CAN frame: IDE 0x0 RTR 0x0 ID 0x1 DLC 0x8
|
|
Wait For Line On Uart f0 f1 f2 f3 f4 f5 f6 f7
|
|
END
|
|
|
|
Should Use CAN Socket API To Exchange Messages Between Machines
|
|
Create CAN Hub loopback=${False}
|
|
Create STM32H7 Machine ${SAMPLES_NET_SOCKETS_CAN_NO_LOOPBACK_BIN} machine-0
|
|
${tester-0}= Create Terminal Tester ${UART} machine=machine-0
|
|
|
|
Create STM32H7 Machine ${SAMPLES_NET_SOCKETS_CAN_NO_LOOPBACK_BIN} machine-1
|
|
${tester-1}= Create Terminal Tester ${UART} machine=machine-1
|
|
Execute Command emulation SetGlobalQuantum "0.000025"
|
|
Execute Command emulation SetGlobalSerialExecution True
|
|
|
|
# Wait for several successful transmissions
|
|
${cnt}= Set Variable 40
|
|
FOR ${i} IN RANGE 0 ${cnt}
|
|
Wait For Line On Uart net_socket_can_sample: [0] CAN frame: IDE 0x0 RTR 0x0 ID 0x1 DLC 0x8 testerId=${tester-0}
|
|
Wait For Line On Uart net_socket_can_sample: [0] CAN frame: IDE 0x0 RTR 0x0 ID 0x1 DLC 0x8 testerId=${tester-1}
|
|
Wait For Line On Uart f0 f1 f2 f3 f4 f5 f6 f7 testerId=${tester-0}
|
|
Wait For Line On Uart f0 f1 f2 f3 f4 f5 f6 f7 testerId=${tester-1}
|
|
END
|
|
|
|
Should Run Zephyr CAN Counter Sample In Loopback Mode
|
|
Create CAN Hub
|
|
Create STM32H7 Machine ${SAMPLES_DRIVERS_CAN_COUNTER_LOOPBACK_BIN}
|
|
Create Terminal Tester ${UART}
|
|
|
|
# Wait for several successful transmissions
|
|
${cnt}= Set Variable 40
|
|
FOR ${i} IN RANGE 0 ${cnt}
|
|
Wait For Line On Uart Counter received: ${i}
|
|
END
|
|
|
|
Should Run Zephyr CAN Counter Sample To Exchange Messages Between Machines
|
|
Create CAN Hub loopback=${False}
|
|
Create STM32H7 Machine ${SAMPLES_DRIVERS_CAN_COUNTER_NO_LOOPBACK_BIN} machine-0
|
|
${tester-0}= Create Terminal Tester ${UART} machine=machine-0
|
|
|
|
Create STM32H7 Machine ${SAMPLES_DRIVERS_CAN_COUNTER_NO_LOOPBACK_BIN} machine-1
|
|
${tester-1}= Create Terminal Tester ${UART} machine=machine-1
|
|
# Lower quantum to keep synchronization between machines
|
|
Execute Command emulation SetGlobalQuantum "0.000025"
|
|
Execute Command emulation SetGlobalSerialExecution True
|
|
|
|
# Wait for several successful transmissions
|
|
${cnt}= Set Variable 40
|
|
FOR ${i} IN RANGE 0 ${cnt}
|
|
Wait For Line On Uart Counter received: ${i} testerId=${tester-0}
|
|
Wait For Line On Uart Counter received: ${i} testerId=${tester-1}
|
|
END
|
|
|
|
Should Boot Linux And Login With MCAN
|
|
Create CAN Hub loopback=${False}
|
|
Create Zynq Machine machine-0
|
|
${tester-0}= Create Terminal Tester ${ZYNQ_UART} machine=machine-0
|
|
Create Zynq Machine machine-1
|
|
${tester-1}= Create Terminal Tester ${ZYNQ_UART} machine=machine-1
|
|
# Lower quantum to keep synchronization between machines
|
|
Execute Command emulation SetGlobalQuantum "0.000025"
|
|
Execute Command emulation SetGlobalSerialExecution True
|
|
|
|
Boot And Login ${tester-0}
|
|
Boot And Login ${tester-1}
|
|
# Suppress messages from the kernel space
|
|
Execute Linux Command echo 0 > /proc/sys/kernel/printk testerId=${tester-0}
|
|
Execute Linux Command echo 0 > /proc/sys/kernel/printk testerId=${tester-1}
|
|
|
|
Provides mcan-logged-in
|
|
|
|
Should Handle CAN Messages Issued Through CAN Utils Tools
|
|
Requires mcan-logged-in
|
|
|
|
${tester-0}= Create Terminal Tester ${ZYNQ_UART} machine=machine-0
|
|
${tester-1}= Create Terminal Tester ${ZYNQ_UART} machine=machine-1
|
|
|
|
Execute Linux Command ip link set can0 up type can bitrate 125000 dbitrate 125000 fd on testerId=${tester-0}
|
|
Execute Linux Command ip link set can0 up type can bitrate 125000 dbitrate 125000 fd on testerId=${tester-1}
|
|
|
|
# Send CAN frames
|
|
Write Line To Uart candump can0 testerId=${tester-0}
|
|
Write Line To Uart cansend can0 099#11223344AABBCCDD testerId=${tester-1} # Send classical CAN 2.0 frame
|
|
Wait For Line On Uart .*11 22 33 44 AA BB CC DD treatAsRegex=true testerId=${tester-0}
|
|
Write Line To Uart cansend can0 013##311223344AABBCCDD11223344 testerId=${tester-1} # Send CAN FD frame
|
|
Wait For Line On Uart .*11 22 33 44 AA BB CC DD 11 22 33 44 treatAsRegex=true testerId=${tester-0}
|
|
# Send Control-C
|
|
Send Key To Uart 0x03 testerId=${tester-0}
|
|
|
|
# Send random messages of different type
|
|
Write Line To Uart candump can0 testerId=${tester-0}
|
|
Write Line To Uart cangen can0 -m -v testerId=${tester-1}
|
|
# Send Control-C
|
|
Send Key To Uart 0x03 testerId=${tester-0}
|
|
Send Key To Uart 0x03 testerId=${tester-1}
|
|
|
|
Write Line To Uart canfdtest -v can0 testerId=${tester-0}
|
|
Write Line To Uart canfdtest -g -v can0 testerId=${tester-1}
|
|
Should Not Be On Uart RX before TX! testerId=${tester-1} timeout=${10}
|