blob: 540cb3bcd372fddd42941eca137461164898ff72 [file] [log] [blame]
*** 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}