Raspberry Pi 4B LinuxCNC: Initial Setup for the Mesa 7I96S Ethernet Motion Control
In this post, I describe the initial setup for the Mesa 7I96S Ethernet motion control STEP/IO Step & Dir plus I/O card. The setup includes selecting the power supply and configuring the network IP address.
🐧 Index of the Complete Series.
![]() |
---|
Raspberry Pi 4B LinuxCNC: Initial Setup for the Mesa 7I96S Ethernet Motion Control |
I am just an ordinary computer programmer and not trained in any of the electronic engineering disciplines. This LinuxCNC project is a learning process for me. This post is not meant to be a tutorial or instructional guide; it is my own documentation so I will not forget what I have learned.
I am not to be held responsible for any damages or injuries resulting from using the information presented in this post.
I use the following official image: https://linuxcnc.org/iso/rpi-4-debian-bookworm-6.12.11-arm64-ext4-2025-01-27-0404.img.xz. Then, I enabled WiFi, installed Samba, and set up remote desktop access. For more information on these official images, please refer to this forum post: Linuxcnc & the Rpasberry Pi (4 & 5).
The command:
C:\Users\behai>ssh cnc@192.168.0.45
reports the following information:
cnc@192.168.0.45's password:
Debian GNU/Linux 12 (bookworm) 6.12.11 #1_RT Mon Jan 27 02:47:25 AEDT 2025
aarch64
Raspberry Pi 4 Model B Rev 1.5
── DISK
Filesystem Size Used Avail Use% Mounted on
/dev/mmcblk0p2 29G 4.8G 23G 18% /
/dev/mmcblk0p1 508M 97M 411M 20% /boot/broadcom
── NETWORK
Hostname: picnc
Wired: eth0 DOWN 10.10.10.100
Wireless: wlan0 UP 192.168.0.45
── SYSTEM
Processor: Cortex-A72 @ 1800MHz 43°C
Frequency: 1800MHz
Online: 0-3
Governor: performance
Memory: 7.6G 370M
Entropy: 256
Uptime: 14:08:00 up 4 min, 0 user, load average: 0.03, 0.18, 0.09
Last login: Fri Feb 7 01:22:37 2025 from 192.168.0.2
And the kernel information:
$ uname -a
reports:
Linux picnc 6.12.11 #1 SMP PREEMPT_RT Mon Jan 27 02:47:25 AEDT 2025 aarch64 GNU/Linux
❶ The Mesa
7I96S STEP/IO Step & dir plus I/O card
I have is Rev E
. This is its
PDF manual.
The detailed diagram is on page 5. An older
but larger and clearer Rev B
diagram can be found in
this forum post.
Page 6 of the manual specifies the power requirements and connection.
Initially, I reused a USB cable to make a 5V
DC power supply:
I used a multimeter to ascertain that the USB power supply outputs 5V
before using it.
I used this power supply to power on the Mesa 7I96S card, set up its IP address, and ping it. However, I have been told that this USB power supply is not suitable for a production setup.
Based on the following two forum posts: MESA 7i96S power supply and 7i96S PSU, I purchased the Mean Well MDR-10-5.
I am in Australia. The electrical system is 50Hz and 240V AC. The outlets are rated for 10 amps. The standard 3-pin plugs consist of an Active/Live, Neutral, and Earth connection. Please refer to this page for further information. I have been tutored on this subject before by an electrical engineer.
The AC input connection is shown in the image below. Please note that the colours for the Active/Live, Neutral, and Earth wires match the colours described on this page:
![]() |
---|
MEAN WELL MDR-10-5 AC Input Connection |
👉 As with the USB power supply, I used a multimeter to ascertain that the output voltage is 5V before connecting it to the Mesa 7I96S card.
💥 Please note: We must connect the power supply’s positive (+) DC output line to the Mesa 7I96S positive (+) power input and the power supply’s negative (-) DC output line to the Mesa 7I96S negative (-) power input. Otherwise, the Mesa 7I96S might get damaged.
Based on page 6 of the Mesa 7I96S manual, the connection to the power supply is illustrated in the image below:
![]() |
---|
MEAN WELL MDR-10-5 to Mesa 7I96S Connection |
❸ IP Jumper Setting and Network Configuration
I started with the official page INTERFACE CONFIGURATION and the Mesa 7I96S manual, page 4, under the “IP Address Selection” section. I initially failed to get it to work correctly. I requested help from the LinuxCNC forum, and this thread set me on the right path: network configuration 🙏.
Jumper W5
needs to be in the up position as illustrated in the image below:
![]() |
---|
Mesa 7I96S Jumper W5 Is In Up Position |
The 7I96S is an Ethernet-connected motion control interface. We use an RJ45 cable to connect it to the Raspberry Pi 4B via their Ethernet ports. We query the Pi 4B for available network interfaces with the following command:
$ ip link show
The output is:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
link/ether d8:3a:dd:25:8c:37 brd ff:ff:ff:ff:ff:ff
altname end0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DORMANT group default qlen 1000
link/ether d8:3a:dd:25:8c:38 brd ff:ff:ff:ff:ff:ff
-
lo
: The loopback interface. -
eth0
: The first Ethernet interface. -
wlan0
: The first wireless network interface.
The dedicated network interface to use is eth0
.
Use the nano
text editor to edit the /etc/network/interfaces
file with the following command:
$ sudo nano /etc/network/interfaces
Add the following lines to the end of /etc/network/interfaces
:
auto eth0
iface eth0 inet static
address 10.10.10.100
hardware-irq-coalesce-rx-usecs 0
Then restart the network interfaces with the following commands:
$ sudo ifdown -a
$ sudo ifup -a
Power on the 7I96S card and ping it using its fixed EEPROM IP address:
$ ping 10.10.10.10
If everything goes well, it should respond successfully. When the network cable is disconnected in the middle of pinging, it reports Destination Host Unreachable
, which is what should happen. When reconnected, it picks up again. The output of this sequence looks as follows:
PING 10.10.10.10 (10.10.10.10) 56(84) bytes of data.
64 bytes from 10.10.10.10: icmp_seq=1 ttl=64 time=0.202 ms
64 bytes from 10.10.10.10: icmp_seq=2 ttl=64 time=0.086 ms
64 bytes from 10.10.10.10: icmp_seq=3 ttl=64 time=0.086 ms
64 bytes from 10.10.10.10: icmp_seq=4 ttl=64 time=0.083 ms
64 bytes from 10.10.10.10: icmp_seq=5 ttl=64 time=0.102 ms
64 bytes from 10.10.10.10: icmp_seq=6 ttl=64 time=0.080 ms
From 10.10.10.100 icmp_seq=9 Destination Host Unreachable
From 10.10.10.100 icmp_seq=13 Destination Host Unreachable
From 10.10.10.100 icmp_seq=16 Destination Host Unreachable
From 10.10.10.100 icmp_seq=19 Destination Host Unreachable
From 10.10.10.100 icmp_seq=20 Destination Host Unreachable
64 bytes from 10.10.10.10: icmp_seq=21 ttl=64 time=0.143 ms
64 bytes from 10.10.10.10: icmp_seq=22 ttl=64 time=0.085 ms
^C
--- 10.10.10.10 ping statistics ---
26 packets transmitted, 14 received, +5 errors, 46.1538% packet loss, time 25587ms
rtt min/avg/max/mdev = 0.080/0.099/0.202/0.032 ms, pipe 4
❹ It has been an interesting learning experience. There is still a lot to learn ahead. Hopefully, I can finish this project successfully at some point in the future.
If you happen to read this post, thank you for your time, and I hope I did not waste it. Stay safe, as always.
✿✿✿
Feature image source:
- https://commons.wikimedia.org/wiki/File:Debian_12_%28Bookworm%29_-_GNOME_desktop.png
- https://www.instructables.com/Easy-Raspberry-Pi-Based-ScreensaverSlideshow-for-E/
- https://store.mesanet.com/index.php?route=product/product&product_id=374
- https://forum.linuxcnc.org/show-your-stuff/32672-linuxcnc-logo?start=20#gallery-6