RS232 RS485 CAN Board
| ||
Overview
Introduction
Are you still worried that Raspberry Pi can't be used in industrial environment? The isolated industrial interface expansion board is specially designed for Raspberry Pi 4B and Raspberry Pi 5! This industrial expansion board provides a variety of industrial communication interfaces for your Raspberry Pi: 2x RS485, 1x RS232, 1x CAN FD and 1x CAN, and each interface boasts electrical isolation protection. It provides stable communication with lightning-proof and anti-electrostatic protection and so on. Also, it comes with customized industrial rail-mount enclosure for easy integration in industrial control applications. For Raspberry Pi 5, it reserves PCIe interface for further expansion function, and provides sufficient internal space for users to stack and expand functions. This expansion board not only make your Raspberry Pi better integrated into industrial control applications, but also provide the possibility for future expansion.
Features
- Compatibility
- Compatible with Raspberry Pi 4B and Raspberry Pi 5 with standard Raspberry Pi 40pin GPIO headers.
- Multiple Industrial Communication Interfaces
- Provide 2x RS485, 1x RS232, 1x CAN FD and 1x CAN communication interface
- Electrical Isolation Protection
- Each interface boasts electrical isolation, ensuring communication safety and reliability.
- Flexible Expandability
- Adopt SC16IS752 and SP485 dual chips, expand 2x RS485 interfaces through SPI interface.
- Adopt MCP2515 and SN65HVD230 dual chips, expand 1x CAB interface through SPI interface.
- Adopt MCP2518FD and MCP2562FD dual chips, expand 1x CAN FD interface.
- Adopt Raspberry UART and SP3232EEN dual chips, expand 1x RS232 through UART interface.
- Protection
- Onboard TVS (Transient Voltage Suppressor), lightningproof and ESD protection.
- Onboard self-recovery fuse and protection diodes, boasting anti-surge, over-voltage protection and improving anti-shock ability.
- Power Isolation
- Onboard unibody power isolation, no additional power supply, ensuring the stable current and voltage output of RS232, RS485, CAN, and CAN FD, with powerful anti-interference ability.
- Signal Isolation
- Onboard digital isolation chip, improving the safety, stability and anti-interference of signal isolation.
- Flexible Power Supply
- Support 7~36V wide voltage input and can work with Pi5 Connector Adapter (B) to power the Raspberry Pi and the HAT.
- Adjustable Terminal Resistor
- Onboard 120Ω terminal resistor, enable through jumper cap.
- Reserve Interrupt Resistor
- Reserve interrupt resistor pad, support flexible interrupt pin switching, avoid occupying special pins.
- Expansion and Installation
- Reserve PCIe connector for Raspberry Pi 5 for further function expansion.
- Provide customized industrial rail-mount case, reserves enough internal space for stacking boards for customizable functions.
- Complete Resources
- Provide online development resources and manuals including Raspberry Python, C demos and so on.
Parameters
Model | Industrial Isolated Interface Expansion Board for Raspberry Pi | |||
Applicable Boards | Raspberry Pi 4B, Raspberry Pi 5 | |||
---|---|---|---|---|
Communication Interface | SPI + UART | |||
Industrial Interface | ||||
Interface Description | Chip Scheme | Baudrate | ||
1x Isolated CAN FD | MCP2518FD + MCP2562FD | 5kbps - 8 Mbps | ||
1x Isolated CAN | MCP2515 + SN65HVD230 | 5kbps - 1 Mbps | ||
2x Isolated RS485 | SC16IS752 + SP485 | 300 bps - 921600 bps | ||
1x Isolated RS232 | SP3232EEN | |||
Expandability | Support Pi5 expands interfaces such as NVME, ETH, USB and 4G/5G through PCIe connector | |||
Support Pi 4B/5 stack some HATs through 40PIN GPIO header (the pin and size must be consistent) | ||||
Power Supply (optional) | Onboard 5V Type-C port | |||
External screw terminal DC 7-36V wide voltage input | ||||
Dimensions | 154.6 × 83.7 × 59 mm | |||
Enclosure | Eco-friendly plastic case, support rail-mount and wall-mount installation |
Onboard Interface
Pinout Definition
CAN Bus
The function of the CAN module is to handle the reception and transmission of all messages on the CAN bus. When a message is sent, the message is first loaded into the correct message buffer and control registers. A transmit operation can be initiated by setting the corresponding bit in the control register through the SPI interface or by using the transmit enable pin. Communication status and errors can be checked by reading the corresponding registers. Any message detected on the CAN bus is checked for errors and then matched against a user-defined filter to determine whether to move the message to one of two receive buffers.
Since the Raspberry Pi itself does not support the CAN bus, the CAN controller with the SPI interface is used with a transceiver to complete the CAN function.
Microchip's MCP2515 is a CAN protocol controller that fully supports the CAN V2.0B specification. The device can send and receive standard and extended data frames as well as remote frames. The MCP2515 comes with two acceptance mask registers and six acceptance filter registers to filter out unwanted messages, thus saving resources of the main microcontroller (MCU), which connects to the device via the SPI interface, i.e., the Raspberry Pi connects to the chip via the SPI interface, and the Raspberry Pi doesn't need to compile the driver but only needs to open the kernel driver in the device tree to use it. Support using with the MCP2518FD through one channel, only the chip selector pin is different!
The MCP2518FD is a CAN FD (Flexible Data Rate) controller produced by Microchip, which fully supports CAN framing in the Classic (CAN2.0) and CAN Flexible Data Rate (CAN FD) formats. The arbitration bit rate is as high as 1Mbps, the data baud rate also breaks through the 1Mbps limit of traditional CAN2.0, and the SPI clock speed is as high as 20MHz, which conforms to the ISO11898-1:2015 standard. The device can transmit and receive standard and extended data frames as well as remote frames. The MCP2518FD comes with 32 flexible filters and shielding objects that can filter out unwanted packets, thus reducing the overhead of the main microcontroller (MCU). The MCU is connected to the device through the SPI interface, that is, the Raspberry Pi is connected to the chip through the SPI interface. For the Raspberry Pi to use the chip, the device can be driven through the prepared device tree file. For more details, please refer to #Resource.
RS-485 Bus
Controller
This product adopts SC16IS752 as a controller. SC16IS752 is a high-performance UART expansion chip with dual channel support: SPI and I2C. This module adopts the SPI interface. Onboard power isolation, ADI magnetical isolation, onboard TVS (transient voltage suppression tube), self-recovery fuses and protection diodes and automatic transceiver conversion circuit. It can effectively suppress the surge voltage and transient spike voltage in the circuit, prevent lightning and static electricity, prevent overcurrent and overvoltage, improve the shock resistance, can be signal isolation, has the advantages of high reliability, strong anti-interference, low power consumption.
Communication Protocol
- CS: Slave chip selection, when CS is low, the slave chip is enabled.
- SCLK: SPI communication clock.
- MOSI/SI: SPI Communication host sends the data and the slave receives it.
- MOSI/SI: SPI Communication host receives the data and the slave sends it.
RS232 Bus
This product adopts SP3232 as a receiver. The SP3232E series are RS232 transceiver solutions intended for portable or hand-held applications such as notebook or palmtop computers. The SP3232E series has a high-efficiency, charge-pump power supply that requires only 0.1µF capacitors in 3.3V operation. This charge pump allows the SP3232E series to deliver true RS232 performance from a single power supply ranging from 3.0V to 5.5V. The SP3232E are 2-driver/2-receiver devices. During shutdown, the supply current falls to less than 1µA. For more details, you can refer to datasheet.
Dimensions
How to Assemble
Install Necessary Function Libraries
- Install BCM2835, open the Raspberry Pi terminal and run the following commands:
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.60.tar.gz tar zxvf bcm2835-1.60.tar.gz cd bcm2835-1.60/ sudo ./configure sudo make sudo make check sudo make install #for more details, you can refer to http://www.airspayce.com/mikem/bcm2835/
wiringPi
32-bit Raspberry Pi System
#Open the Raspberry Pi terminal and run the following commands: cd sudo apt-get install wiringpi #For Raspberry Pi systems after May 2019 (earlier may not support), upgrade may be required: wget https://project-downloads.drogon.net/wiringpi-latest.deb sudo dpkg -i wiringpi-latest.deb gpio -v #Running gpio -v and displays 2.52 version, if no, the installation is wrong #For Bullseye branch system, you can run the following commands: git clone https://github.com/WiringPi/WiringPi cd WiringPi ./build sudo gpio -v #Running gpio -v and displays 2.70 version, if no, the installation is wrong
64-bit Raspberry Pi System
Use the command to copy the resource package to Raspberry Pi:
wget https://files.waveshare.com/upload/8/8c/WiringPi-master.zip
(Optional, you can skip this step if you have used the command to unzip it) Install environment to unzip
sudo apt-get install unzip
Enter the file path, and execute the command to unzip:
unzip WiringPi-master.zip
Enter the file directory (Enter the "WiringPi-master" file folder)
cd WiringPi-master/
Execute sudo ./build
sudo ./build
(Optional, see step 4 if it is error) If ". /build" does not work, run "chmod +x . /build" and then "sudo . /build".
chmod +x ./build
- Install Python function library:
#python2 sudo apt-get update sudo apt-get install python-pip sudo apt-get install python-pil sudo apt-get install python-numpy sudo pip install RPi.GPIO sudo pip install spidev sudo pip install python-can #python3 sudo apt-get update sudo apt-get install python3-pip sudo apt-get install python3-pil sudo apt-get install python3-numpy sudo pip3 install RPi.GPIO sudo pip3 install spidev sudo pip3 install python-can
- Find the corresponding product on the official website, open the download path in the product information, and download the sample demo in the wiki:
- Get the unzipped package, unzip it and copy the demo to the Raspberry Pi.
Preparation
Enable Interface
Open the Raspberry PI terminal, execute the following command to enter the Raspberry Pi configuration:
sudo raspi-config
You need to disable the login shell and enable the serial port hardware.
Choose Interfacing Options -> Serial -> No -> Yes:
Open the /boot/config.txt file and find the following configuration statement to enable the serial port, if not, add it at the end of the file:
enable_uart=1
- Select:
Interfacing Options -> SPI -> Yes to enable SPI interface
sudo reboot
Please ensure the SPI does not be occupied by other devices, you can check it in /boot/config.txt.
Modify config.txt
Attach the module on the Raspberry Pi, and modify config.txt:
sudo nano /boot/config.txt #if you use Pi 5, please change it to /boot/firmwave/config.txt
Add the following commands at the last line:
dtparam=spi=on dtoverlay=i2c0 dtoverlay=spi1-3cs dtoverlay=sc16is752-spi1,int_pin=25 dtoverlay=mcp2515,spi0-0,oscillator=16000000,interrupt=23 dtoverlay=mcp251xfd,spi0-1,interrupt=24
- Reboot the Raspberry Pi to apply all settings:
sudo reboot
- After resetting the Raspberry Pi, view the SPI information:
dmesg | grep spi1
- Open CAN:
sudo ip link set can0 up type can bitrate 1000000 sudo ip link set can1 up type can bitrate 1000000 sudo ifconfig can0 txqueuelen 65536 sudo ifconfig can1 txqueuelen 65536
- For more CAN kernel commands, you can refer to:
https://www.kernel.org/doc/Documentation/networking/can.txt
- View ifconfig:
ifconfig
- Turn off the CAN device:
sudo ifconfig can0 down sudo ifconfig can1 down
CAN Bus Demo
- Browse the directory.
- The receiver runs receive.py:
sudo python reveive.py
- The sender runs send.py:
sudo python send.py
Please note that the sender is sent using CAN1, and the receiver is CAN0. For more details, you can refer to the demo below:
Demo Description
【Python Demo】
This demo is based on Python platform, please ensure the "python-can" library is installed.
Please create a can device before sending as it only enables the MCP2515 kernel.
os.system('sudo ip link set can0 type can bitrate 100000') os.system('sudo ifconfig can0 up')
The above command is initialized and enabled by configuring CAN0 and specifying CAN0 as the transmit/receive interface. To change to CAN1, the code is as follows:
os.system('sudo ip link set can1 type can bitrate 100000') os.system('sudo ifconfig can1 up')
Step 1: Connect to CAN Bus
can0 = can.interface.Bus(channel = 'can0', bustyp = 'socketcan_ctypes')
can1 = can.interface.Bus(channel = 'can0', bustype = 'socketcan')
- It must be modified as CAN1, and the demo as shown below:
can0 = can.interface.Bus(channel = 'can1', bustyp = 'socketcan')
Step 2: Create Messages
msg = can.Message(arbitration_id=0x123, data=[0, 1, 2, 3, 4, 5, 6, 7], extended_id=False)
msg = can.Message(is_extended_id=False, arbitration_id=0x123, data=[0, 1, 2, 3, 4, 5, 6, 7])
Step 3: Send Messages
can0.send(msg)
- It must be modified as CAN1, and the demo is shown below:
can1.send(msg)
- Finally, the can device must be turned off.
os.system('sudo ifconfig can0 down')
- It must be modified as CAN1, and the demo as shown below:
os.system('sudo ifconfig can1 down')
- Receives data:
msg = can0.recv(10.0)
recv() defines the timeout receive time.
For more details, you can refer to https://python-can.readthedocs.io/en/stable/interfaces/socketcan.html
【WringPi Demo】
- Blocking reception, the Raspberry Pi opens a terminal and runs:
cd 2-CH_CAN_HAT_Code/wiringPi/receive/ make clean sudo make sudo ./can_receive
- Send, the Raspberry Pi opens a terminal and runs:
cd 2-CH_CAN_HAT_Code/ wiringPi/receive/ make clean sudo make sudo ./can_send
RS-485 Bus Demo
- Download and run the test demo:
sudo apt-get install p7zip-full wget https://files.waveshare.com/upload/4/44/2-CH_RS485_HAT_code.7z 7z x 2-CH_RS485_HAT_code.7z sudo chmod 777 -R 2-CH_RS485_HAT cd 2-CH_RS485_HAT/
- In addition, you can download the project from Github:
sudo git clone https://github.com/waveshare/2-CH-RS485-HAT cd 2-CH-RS485-HAT/
*Please note that the directory may be different.
- C demo:
cd c make clean make sudo ./main
- PYTHON demo:
cd python cd examples sudo python3 main.py #or sudo python3 test.py
RS-232 Bus
It is easier to use RS-232: open the Raspberry Pi UART function, and it can be used directly after /dev/ttyAMA0 as a serial port communication.
Resource
Document
Demo
Document
- MCP2515 Datasheet
- SC16IS752 Datasheet
- SN65HVD230 Datasheet
- MCP2518FDT Datasheet
- SP3481 SP3485 Datasheet
FAQ
Question: After installing the Raspbian OS image version released on 2024-10-28, or after upgrading to kernel version 6.6.51, does enabling CAN FD result in a segmentation fault error?
It seems this is also a bug in the new version of Raspbian OS (see: https://github.com/raspberrypi/linux/issues/6407). Please try executing the commands, or downgrade to an older image version.
sudo rpi-update pulls/6466
This product has used all Raspberry Pi SPI interfaces and UART ports, does not support stacking of other SPI-driven HAT, RS485 will take up the whole channel of SPI1, and cannot access more.
{{{5}}}
Yes, the CAN bus can connect to multiple CAN slaves in parallel, but the address can not conflict, in addition, you need to consider the actual data communication volume and interference, which is subject to actual measurement.
{{{5}}}
Connecting it to the ground pin can ensure the stability and reliability of the signal to avoid signal interference and noise. If your device has not CAN interface, it can also not be connected as CAN is the differential line.
{{{5}}}
If the initialization fails, you can restart the Raspberry Pi or other host control platform development board, to ensure that the wiring is correct, refer to the wiki to double-check the configuration of whether there is a leakage of the operation, and the logic of the voltage jump cap pin is selected correctly.
{{{5}}}
G represents the ground signal or isolated ground. In the industrial environment, the CAN is subject to variable surroundings, and to ensure stability, the G's of the two communication modules need to be connected.
{{{5}}}
As the chip is affected by various factors such as the environment, communication distance, cable material, software and so on, the data baud rate may not reach the nominal maximum rate when in high-speed communication, so the user needs to select the appropriate communication speed based on actual measurements to ensure stability.
{{{5}}}
- Please check whether the A, B interface of 485 is respectively connected to A, B interface of the controlled 485 device.
- Please use USB to 485 device to communicate with the module, and ensure the setting of the Raspberry Pi is correct.
- Check the setting of the odd-even parity of the serial communication parameters.
{{{5}}}
1. The Raspberry Pi can be used after installing the mainstream ubuntu.
2. The config.txt file of the Ubuntu system is generally at /boot/firmware file folder.
3. The Ubuntu system for Raspberry Pi is generally 64-bit, and you can install the wiringpi library by the following commands:
Download 64-bit Arm wiringpi wget https://gitee.com/LJYSCIENTIST/raspberry-pi-software-storage/raw/master/wiringpi-2.60-1_arm64.deb Install 64-bit Arm wiringpi sudo dpkg -i wiringpi-2.60-1_arm64.deb
{{{5}}}
The sensor may send hex data (sometimes it is necessary to send hex data to the sensor to request data), follow the steps below to send and receive hex data:
wget https://files.waveshare.com/upload/0/00/RS485-CAN-HAT-For-Hex.zip unzip RS485-CAN-HAT-For-Hex.zip sudo chmod 777 RS485-CAN-HAT-For-Hex.zip cd RS485-CAN-HAT-For-Hex sudo python3 RS485-CAN-HAT-send-hex.py
{{{5}}}
Support
Technical Support
If you need technical support or have any feedback/review, please click the Submit Now button to submit a ticket, Our support team will check and reply to you within 1 to 2 working days. Please be patient as we make every effort to help you to resolve the issue.
Working Time: 9 AM - 6 PM GMT+8 (Monday to Friday)