1# Based on MCAN.robot 2 3*** Variables *** 4${UART} sysbus.usart3 5${CAN} sysbus.utcan 6${CAN_HUB} canHub 7${PROMPT} \#${SPACE} 8${UT32_CAN_REPL} SEPARATOR=\n 9... """ 10... utcan: CAN.UT32_CAN @ sysbus 0x40cccc00 11... ${SPACE*4}-> nvic@19 12... """ 13# All Zephyr tests work in loopback mode 14${TESTS_NET_SOCKET_CAN_BIN} @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-tests-net-socket-can-ut32_can.elf-s_730196-c52d44ada96c6b31de3a0d158d015b73292b40da 15${TESTS_DRIVERS_CAN_API_BIN} @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-tests-drivers-can-api-ut32_can.elf-s_1906268-a5504a6579baa2a4ec54631d64c9f21337b91379 16${TESTS_DRIVERS_CAN_TIMING_BIN} @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-tests-drivers-can-timing-ut32_can.elf-s_1734652-3eb1047cd81cc11f72613746aee01d5278d0bcc8 17${TESTS_DRIVERS_CAN_SHELL_BIN} @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-tests-drivers-can-shell-ut32_can.elf-s_1510120-b2056800cb2907c73a4bd42b49417e4a09db5b99 18# Zephyr samples can be configured to work in either normal or loopback mode 19${SAMPLES_NET_SOCKETS_CAN_LOOPBACK_BIN} @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-samples-net-sockets-can--loopback-ut32_can.elf-s_2059904-50e9744c770ea67909a0951ab30650f0c0246f13 20${SAMPLES_NET_SOCKETS_CAN_NO_LOOPBACK_BIN} @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-samples-net-sockets-can-ut32_can.elf-s_2056976-efbc0327c5433fde0fa166ab3b652602c9c5ae0b 21${SAMPLES_DRIVERS_CAN_COUNTER_LOOPBACK_BIN} @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-samples-drivers-can-counter--loopback-ut32_can.elf-s_1272296-cfc7a216ae8f087a89e79c211442a80347888017 22${SAMPLES_DRIVERS_CAN_COUNTER_NO_LOOPBACK_BIN} @https://dl.antmicro.com/projects/renode/nucleo_h743zi--zephyr-samples-drivers-can-counter-ut32_can.elf-s_1271844-3366c77a9b0c4c7ca234a445644ae89ef8b73ad7 23 24*** Keywords *** 25Create CAN Hub 26 Execute Command emulation CreateCANHub "${CAN_HUB}" 27 28Create STM32H7 Machine 29 [Arguments] ${bin} ${name}=machine-0 30 Execute Command $bin=${bin} 31 Execute Command mach create "${name}" 32 Execute Command machine LoadPlatformDescription @platforms/cpus/stm32h753.repl 33 # The Zephyr binaries used here would not work on a real STM32H753 as they expect a UT32-compatible CAN controller 34 # to be present at 0x40cccc00. Add it to the platform 35 Execute Command machine LoadPlatformDescriptionFromString ${UT32_CAN_REPL} 36 Execute Command macro reset "sysbus LoadELF ${bin}" 37 Execute Command runMacro $reset 38 Execute Command connector Connect ${CAN} ${CAN_HUB} 39 Execute Command showAnalyzer ${UART} 40 41Set Emulation Parameters For Better Synchronization Between Machines 42 Execute Command emulation SetGlobalQuantum "0.000025" 43 Execute Command emulation SetGlobalSerialExecution True 44 45*** Test Cases *** 46Should Pass Zephyr CAN Net Socket Test 47 Create CAN Hub 48 Create STM32H7 Machine ${TESTS_NET_SOCKET_CAN_BIN} 49 Create Terminal Tester ${UART} 50 51 Wait For Line On Uart PROJECT EXECUTION SUCCESSFUL 52 53Should Pass Zephyr CAN API Test 54 Create CAN Hub 55 Create STM32H7 Machine ${TESTS_DRIVERS_CAN_API_BIN} 56 Create Terminal Tester ${UART} 57 58 Wait For Line On Uart PROJECT EXECUTION SUCCESSFUL 59 60Should Pass Zephyr CAN Timing Test 61 Create CAN Hub 62 Create STM32H7 Machine ${TESTS_DRIVERS_CAN_TIMING_BIN} 63 Create Terminal Tester ${UART} 64 65 Wait For Line On Uart PROJECT EXECUTION SUCCESSFUL 66 67Should Pass Zephyr CAN Shell Test 68 Create CAN Hub 69 Create STM32H7 Machine ${TESTS_DRIVERS_CAN_SHELL_BIN} 70 Create Terminal Tester ${UART} 71 72 Wait For Line On Uart PROJECT EXECUTION SUCCESSFUL 73 74Should Use CAN Socket API To Exchange Messages In Loopback Mode 75 Create CAN Hub 76 Create STM32H7 Machine ${SAMPLES_NET_SOCKETS_CAN_LOOPBACK_BIN} 77 Create Terminal Tester ${UART} 78 79 # Wait for several successful transmissions 80 ${cnt}= Set Variable 40 81 FOR ${i} IN RANGE 0 ${cnt} 82 Wait For Line On Uart net_socket_can_sample: [0] CAN frame: IDE 0x0 RTR 0x0 ID 0x1 DLC 0x8 83 Wait For Line On Uart f0 f1 f2 f3 f4 f5 f6 f7 84 END 85 86Should Use CAN Socket API To Exchange Messages Between Machines 87 Create CAN Hub 88 Create STM32H7 Machine ${SAMPLES_NET_SOCKETS_CAN_NO_LOOPBACK_BIN} machine-0 89 ${tester-0}= Create Terminal Tester ${UART} machine=machine-0 90 91 Create STM32H7 Machine ${SAMPLES_NET_SOCKETS_CAN_NO_LOOPBACK_BIN} machine-1 92 ${tester-1}= Create Terminal Tester ${UART} machine=machine-1 93 94 Set Emulation Parameters For Better Synchronization Between Machines 95 96 # Wait for several successful transmissions 97 ${cnt}= Set Variable 40 98 FOR ${i} IN RANGE 0 ${cnt} 99 Wait For Line On Uart net_socket_can_sample: [0] CAN frame: IDE 0x0 RTR 0x0 ID 0x1 DLC 0x8 testerId=${tester-0} 100 Wait For Line On Uart net_socket_can_sample: [0] CAN frame: IDE 0x0 RTR 0x0 ID 0x1 DLC 0x8 testerId=${tester-1} 101 Wait For Line On Uart f0 f1 f2 f3 f4 f5 f6 f7 testerId=${tester-0} 102 Wait For Line On Uart f0 f1 f2 f3 f4 f5 f6 f7 testerId=${tester-1} 103 END 104 105Should Run Zephyr CAN Counter Sample In Loopback Mode 106 Create CAN Hub 107 Create STM32H7 Machine ${SAMPLES_DRIVERS_CAN_COUNTER_LOOPBACK_BIN} 108 Create Terminal Tester ${UART} 109 110 # Wait for several successful transmissions 111 ${cnt}= Set Variable 40 112 FOR ${i} IN RANGE 0 ${cnt} 113 Wait For Line On Uart Counter received: ${i} 114 END 115 116Should Run Zephyr CAN Counter Sample To Exchange Messages Between Machines 117 Create CAN Hub 118 Create STM32H7 Machine ${SAMPLES_DRIVERS_CAN_COUNTER_NO_LOOPBACK_BIN} machine-0 119 ${tester-0}= Create Terminal Tester ${UART} machine=machine-0 120 121 Create STM32H7 Machine ${SAMPLES_DRIVERS_CAN_COUNTER_NO_LOOPBACK_BIN} machine-1 122 ${tester-1}= Create Terminal Tester ${UART} machine=machine-1 123 124 Set Emulation Parameters For Better Synchronization Between Machines 125 126 # Wait for several successful transmissions 127 ${cnt}= Set Variable 40 128 FOR ${i} IN RANGE 0 ${cnt} 129 Wait For Line On Uart Counter received: ${i} testerId=${tester-0} 130 Wait For Line On Uart Counter received: ${i} testerId=${tester-1} 131 END 132