| 
									
										
										
										
											2019-03-11 12:48:49 +02:00
										 |  |  |  | This document describes how the STM32F0 port operates and how to work with | 
					
						
							|  |  |  |  | tiny CAN-enabled boards. | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | Required components | 
					
						
							|  |  |  |  | =================== | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #### MCP2515 module
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |  | 
					
						
							| 
									
										
										
										
											2019-03-28 16:21:51 +02:00
										 |  |  |  | or this | 
					
						
							|  |  |  |  |  | 
					
						
							| 
									
										
										
										
											2019-03-11 12:48:49 +02:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | #### St-link dongle
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |  | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | Adding CAN bus to Raspberry Pi | 
					
						
							|  |  |  |  | ============================== | 
					
						
							|  |  |  |  | (Based on Quick Guide https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=141052) | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-28 16:21:51 +02:00
										 |  |  |  | First of all, (only if you have small CAN module) it’s necessary to modify the CAN-module from ebay, because it has | 
					
						
							| 
									
										
										
										
											2019-03-11 12:48:49 +02:00
										 |  |  |  | only one VCC pin, but the MCP2515 needs to be powered from 3V3 and the TJA1050 | 
					
						
							|  |  |  |  | CAN-transceiver needs to be powered from 5V. Powering both chips from 5V would | 
					
						
							|  |  |  |  | work, but then a level-shifter for the SPI would be needed. The Pi's GPIO pins | 
					
						
							|  |  |  |  | are NOT 5V tolerant. Cut a trace on the PCB and soldered a pin onto the trace | 
					
						
							|  |  |  |  | to deliver 5V only to the TJA1050. Be sure to cut the trace before the capacitor: | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |  | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | Next connect the module: | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | | MCP2515 | Raspberry Pi | | 
					
						
							|  |  |  |  | | --- | --- | | 
					
						
							|  |  |  |  | | VCC | 1 (3V3) | | 
					
						
							|  |  |  |  | | TJA 1050 VCC | 2 (5V) | | 
					
						
							|  |  |  |  | | GND | 6 (GND) | | 
					
						
							|  |  |  |  | | CS | 24 (CE0) | | 
					
						
							|  |  |  |  | | MISO | 21 (MISO) | | 
					
						
							|  |  |  |  | | MOSI | 19 (MOSI) | | 
					
						
							|  |  |  |  | | SCK | 23 (SCK) | | 
					
						
							|  |  |  |  | | INT | 22 (GPIO25) | | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | Install can-utils: | 
					
						
							|  |  |  |  | > sudo apt-get install can-utils
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | To activate the driver for the MCP2515 you have to add a kernel overlay, to do | 
					
						
							|  |  |  |  | so edit the /boot/config.txt | 
					
						
							|  |  |  |  | > sudo nano /boot/config.txt
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | And add the following lines (set oscillator value according to crystal on your board): | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ``` | 
					
						
							|  |  |  |  | dtparam=spi=on | 
					
						
							|  |  |  |  | dtoverlay=mcp2515-can0,oscillator=8000000,interrupt=25 | 
					
						
							|  |  |  |  | dtoverlay=spi1-1cs | 
					
						
							|  |  |  |  | ``` | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | Now reboot, after the reboot try to setup the the can interface: | 
					
						
							|  |  |  |  | > sudo ip link set can0 up type can bitrate 500000
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | If no errors occurred, the can interface should be ready now. | 
					
						
							|  |  |  |  | To make the CAN-interface permanent, add the following lines to /etc/network/interfaces | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ``` | 
					
						
							|  |  |  |  | auto can0 | 
					
						
							|  |  |  |  | iface can0 can static | 
					
						
							|  |  |  |  |     bitrate 500000 | 
					
						
							|  |  |  |  | ``` | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | Communicating over CAN | 
					
						
							|  |  |  |  | ====================== | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | Use "Serial over CAN" emulator software to establish connection: | 
					
						
							|  |  |  |  | https://github.com/Delsian/CanSerial | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | Install st-link on Raspberry Pi | 
					
						
							|  |  |  |  | =============================== | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | > sudo apt-get update
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | > sudo apt-get install cmake
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | > sudo apt-get install libusb-1.0-0-dev
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | > git clone https://github.com/texane/stlink stlink-repo
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | > cd stlink-repo
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | > make
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | > cd build/Release/
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | > sudo make install
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | Copy to /etc/udev/rules.d/49-stlinkv2.rules: | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | ``` | 
					
						
							|  |  |  |  | # stm32 discovery boards, with onboard st/linkv2
 | 
					
						
							|  |  |  |  | # ie, STM32L, STM32F4.
 | 
					
						
							|  |  |  |  | # STM32VL has st/linkv1, which is quite different
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", \ | 
					
						
							|  |  |  |  |     MODE:="0666", \ | 
					
						
							|  |  |  |  |     SYMLINK+="stlinkv2_%n" | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", \ | 
					
						
							|  |  |  |  |     KERNEL!="sd*", KERNEL!="sg*", KERNEL!="tty*", SUBSYSTEM!="bsg", \ | 
					
						
							|  |  |  |  |     MODE:="0666", \ | 
					
						
							|  |  |  |  |     SYMLINK+="stlinkv2_%n" | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", \ | 
					
						
							|  |  |  |  |     KERNEL=="sd*", MODE:="0666", \ | 
					
						
							|  |  |  |  |     SYMLINK+="stlinkv2_disk" | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", \ | 
					
						
							|  |  |  |  |     KERNEL=="sg*", MODE:="0666", \ | 
					
						
							|  |  |  |  |     SYMLINK+="stlinkv2_raw_scsi" | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", \ | 
					
						
							|  |  |  |  |     SUBSYSTEM=="bsg", MODE:="0666", \ | 
					
						
							|  |  |  |  |     SYMLINK+="stlinkv2_block_scsi" | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", \ | 
					
						
							|  |  |  |  |     KERNEL=="tty*", MODE:="0666", \ | 
					
						
							|  |  |  |  |     SYMLINK+="stlinkv2_console" | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | # If you share your linux system with other users, or just don't like the
 | 
					
						
							|  |  |  |  | # idea of write permission for everybody, you can replace MODE:="0666" with
 | 
					
						
							|  |  |  |  | # OWNER:="yourusername" to create the device owned by you, or with
 | 
					
						
							|  |  |  |  | # GROUP:="somegroupname" and control access using standard unix groups.
 | 
					
						
							|  |  |  |  | ``` | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | Now "make flash" command can upload HEX into connected board | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | Pins allocation | 
					
						
							|  |  |  |  | =============== | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-28 16:21:51 +02:00
										 |  |  |  | Configurations with CAN and Serial port uses different pins, and during enumeration | 
					
						
							|  |  |  |  | process firmware reports all possible pin names. But actually you can use only | 
					
						
							|  |  |  |  | existing pins, not involved in communication. Wrong pins will generate shutdown. |