This is an automated email from the ASF dual-hosted git repository. acassis pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 147134a3fbe9657588a5dc4416aa7bfb123cfa8f Author: raiden00pl <[email protected]> AuthorDate: Sun Jul 5 11:11:16 2026 +0200 boards/sim: add Lely CANopen examples add Lely CANopen examples for sim Signed-off-by: raiden00pl <[email protected]> --- .../platforms/sim/sim/boards/sim/index.rst | 85 ++++++++++++++++++++++ boards/sim/sim/sim/configs/lely-sock/defconfig | 60 +++++++++++++++ boards/sim/sim/sim/configs/lely/defconfig | 59 +++++++++++++++ 3 files changed, 204 insertions(+) diff --git a/Documentation/platforms/sim/sim/boards/sim/index.rst b/Documentation/platforms/sim/sim/boards/sim/index.rst index da849afb5fe..d89ce5f5f84 100644 --- a/Documentation/platforms/sim/sim/boards/sim/index.rst +++ b/Documentation/platforms/sim/sim/boards/sim/index.rst @@ -2009,6 +2009,91 @@ Requirement: ``cansequence`` tool from ``linux-can/can-utils`` can0 002 [1] 12 +lely and lely-sock +------------------ + +These configurations build the Lely CANopen demos over the CAN character +driver. Both the slave (``coslave`` built-in, node ``0x02``) and the master +(``comaster`` built-in, node ``0x01``) are embedded in the single image. See +:doc:`/applications/examples/lely_slave/index` and +:doc:`/applications/examples/lely_master/index`. + +The master orchestrates a small CANopen network: it reads the slave's device +type over an SDO transfer, commands the slave to OPERATIONAL with an NMT +start, then produces SYNC while the slave streams a counter back in a +synchronous TPDO which the master receives via an RPDO. + +The ``sim:lely`` configuration uses the CAN character driver; ``sim:lely-sock`` +is the same demo over SocketCAN (``CONFIG_SIM_CANDEV_SOCK``). Both bridge to a +host ``vcan`` interface named ``can0``, which must exist and be up on the host:: + + sudo modprobe vcan + sudo ip link add dev can0 type vcan + sudo ip link set up can0 + +The SocketCAN example brings its own NuttX interface up (via ``netlib_ifup()``), +so ``coslave``/``comaster`` can be started directly without a manual ``ifup``. + +.. _testing_lely_canopen_sim: + +Testing a CANopen network on the simulator +========================================== + +The simulator CAN character driver (``CONFIG_SIM_CANDEV_CHAR``) bridges +``/dev/can0`` to a host SocketCAN interface named ``can0`` (the index is +``CONFIG_SIM_CANDEV_CHAR_IDX``). Each simulator process owns one host socket, +so the two nodes are run as **two separate processes of the same image** on +the shared ``can0`` bus. + +1. Create a virtual CAN interface named ``can0`` on the host: + + .. code:: console + + $ sudo modprobe vcan + $ sudo ip link add dev can0 type vcan + $ sudo ip link set up can0 + +2. Build the image: + + .. code:: console + + $ ./tools/configure.sh sim:lely + $ make + +3. Run the slave in one terminal and the master in another (start the slave + first so it is up when the master boots it): + + .. code:: console + + # terminal 1 + $ ./nuttx + nsh> coslave & + + # terminal 2 + $ ./nuttx + nsh> comaster & + + The master prints the exchange it drives:: + + SDO: slave device type (0x1000) = 0x00000000 + NMT: master + slave 0x02 OPERATIONAL + PDO rx: counter = 17 + PDO rx: counter = 18 + PDO rx: counter = 19 + +4. Observe the bus from the host with ``candump``: + + .. code:: console + + $ candump can0 + can0 702 [1] 7F # slave heartbeat (pre-op) + can0 602 [8] 40 00 10 00 00 00 00 00 # master SDO upload request + can0 582 [8] 43 00 10 00 00 00 00 00 # slave SDO upload response + can0 000 [2] 01 02 # NMT start node 0x02 + can0 080 [0] # SYNC (master) + can0 182 [4] 11 00 00 00 # slave TPDO (counter) + + nxscope ------- diff --git a/boards/sim/sim/sim/configs/lely-sock/defconfig b/boards/sim/sim/sim/configs/lely-sock/defconfig new file mode 100644 index 00000000000..54d187993e6 --- /dev/null +++ b/boards/sim/sim/sim/configs/lely-sock/defconfig @@ -0,0 +1,60 @@ +# +# This file is autogenerated: PLEASE DO NOT EDIT IT. +# +# You can use "make menuconfig" to make any modifications to the installed .config file. +# You can then do "make savedefconfig" to generate a new defconfig file that includes your +# modifications. +# +CONFIG_ALLOW_BSD_COMPONENTS=y +CONFIG_ARCH="sim" +CONFIG_ARCH_BOARD="sim" +CONFIG_ARCH_BOARD_SIM=y +CONFIG_ARCH_CHIP="sim" +CONFIG_ARCH_SIM=y +CONFIG_BOARDCTL_POWEROFF=y +CONFIG_BOARD_LOOPSPERMSEC=0 +CONFIG_BOOT_RUNFROMEXTSRAM=y +CONFIG_BUILTIN=y +CONFIG_CANUTILS_LELYCANOPEN=y +CONFIG_CANUTILS_LELYCANOPEN_CSDO=y +CONFIG_CANUTILS_LELYCANOPEN_EMCY=y +CONFIG_CANUTILS_LELYCANOPEN_MASTER=y +CONFIG_CANUTILS_LELYCANOPEN_MPDO=y +CONFIG_CANUTILS_LELYCANOPEN_NG=y +CONFIG_CANUTILS_LELYCANOPEN_NMTBOOT=y +CONFIG_CANUTILS_LELYCANOPEN_NMTCFG=y +CONFIG_CANUTILS_LELYCANOPEN_OBJDEFAULT=y +CONFIG_CANUTILS_LELYCANOPEN_OBJFILE=y +CONFIG_CANUTILS_LELYCANOPEN_OBJLIMITS=y +CONFIG_CANUTILS_LELYCANOPEN_OBJNAME=y +CONFIG_CANUTILS_LELYCANOPEN_OBJUPLOAD=y +CONFIG_CANUTILS_LELYCANOPEN_RPDO=y +CONFIG_CANUTILS_LELYCANOPEN_SDEV=y +CONFIG_CANUTILS_LELYCANOPEN_SYNC=y +CONFIG_CANUTILS_LELYCANOPEN_TIME=y +CONFIG_CANUTILS_LELYCANOPEN_TPDO=y +CONFIG_DEBUG_SYMBOLS=y +CONFIG_EXAMPLES_LELYMASTER=y +CONFIG_EXAMPLES_LELYSLAVE=y +CONFIG_FS_PROCFS=y +CONFIG_HAVE_CXXINITIALIZE=y +CONFIG_IDLETHREAD_STACKSIZE=4096 +CONFIG_INIT_ENTRYPOINT="nsh_main" +CONFIG_NET=y +CONFIG_NETDEV_IFINDEX=y +CONFIG_NET_CAN=y +CONFIG_NET_CAN_EXTID=y +CONFIG_NET_CAN_SOCK_OPTS=y +CONFIG_NSH_BUILTIN_APPS=y +CONFIG_NSH_READLINE=y +CONFIG_READLINE_TABCOMPLETION=y +CONFIG_SCHED_BACKTRACE=y +CONFIG_SCHED_EVENTS=y +CONFIG_SCHED_HAVE_PARENT=y +CONFIG_SCHED_WAITPID=y +CONFIG_SIM_CANDEV=y +CONFIG_SIM_CANDEV_SOCK=y +CONFIG_START_MONTH=6 +CONFIG_START_YEAR=2008 +CONFIG_SYSTEM_DUMPSTACK=y +CONFIG_SYSTEM_NSH=y diff --git a/boards/sim/sim/sim/configs/lely/defconfig b/boards/sim/sim/sim/configs/lely/defconfig new file mode 100644 index 00000000000..02642d8ca9b --- /dev/null +++ b/boards/sim/sim/sim/configs/lely/defconfig @@ -0,0 +1,59 @@ +# +# This file is autogenerated: PLEASE DO NOT EDIT IT. +# +# You can use "make menuconfig" to make any modifications to the installed .config file. +# You can then do "make savedefconfig" to generate a new defconfig file that includes your +# modifications. +# +CONFIG_ALLOW_BSD_COMPONENTS=y +CONFIG_ARCH="sim" +CONFIG_ARCH_BOARD="sim" +CONFIG_ARCH_BOARD_SIM=y +CONFIG_ARCH_CHIP="sim" +CONFIG_ARCH_SIM=y +CONFIG_BOARDCTL_POWEROFF=y +CONFIG_BOARD_LOOPSPERMSEC=0 +CONFIG_BOOT_RUNFROMEXTSRAM=y +CONFIG_BUILTIN=y +CONFIG_CAN=y +CONFIG_CANUTILS_LELYCANOPEN=y +CONFIG_CANUTILS_LELYCANOPEN_CSDO=y +CONFIG_CANUTILS_LELYCANOPEN_EMCY=y +CONFIG_CANUTILS_LELYCANOPEN_LSS=y +CONFIG_CANUTILS_LELYCANOPEN_MASTER=y +CONFIG_CANUTILS_LELYCANOPEN_MPDO=y +CONFIG_CANUTILS_LELYCANOPEN_NG=y +CONFIG_CANUTILS_LELYCANOPEN_NMTBOOT=y +CONFIG_CANUTILS_LELYCANOPEN_NMTCFG=y +CONFIG_CANUTILS_LELYCANOPEN_OBJDEFAULT=y +CONFIG_CANUTILS_LELYCANOPEN_OBJFILE=y +CONFIG_CANUTILS_LELYCANOPEN_OBJLIMITS=y +CONFIG_CANUTILS_LELYCANOPEN_OBJNAME=y +CONFIG_CANUTILS_LELYCANOPEN_OBJUPLOAD=y +CONFIG_CANUTILS_LELYCANOPEN_RPDO=y +CONFIG_CANUTILS_LELYCANOPEN_SDEV=y +CONFIG_CANUTILS_LELYCANOPEN_SYNC=y +CONFIG_CANUTILS_LELYCANOPEN_TIME=y +CONFIG_CANUTILS_LELYCANOPEN_TPDO=y +CONFIG_CANUTILS_LELYCANOPEN_WTM=y +CONFIG_CAN_EXTID=y +CONFIG_DEBUG_SYMBOLS=y +CONFIG_EXAMPLES_LELYMASTER=y +CONFIG_EXAMPLES_LELYSLAVE=y +CONFIG_FS_PROCFS=y +CONFIG_HAVE_CXXINITIALIZE=y +CONFIG_IDLETHREAD_STACKSIZE=4096 +CONFIG_INIT_ENTRYPOINT="nsh_main" +CONFIG_NSH_BUILTIN_APPS=y +CONFIG_NSH_READLINE=y +CONFIG_READLINE_TABCOMPLETION=y +CONFIG_SCHED_BACKTRACE=y +CONFIG_SCHED_EVENTS=y +CONFIG_SCHED_HAVE_PARENT=y +CONFIG_SCHED_WAITPID=y +CONFIG_SIM_CANDEV=y +CONFIG_SIM_CANDEV_CHAR=y +CONFIG_START_MONTH=6 +CONFIG_START_YEAR=2008 +CONFIG_SYSTEM_DUMPSTACK=y +CONFIG_SYSTEM_NSH=y
