*** 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}