mirror of https://github.com/Desuuuu/klipper.git
docs: Update CAN bus documents
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
parent
5e0503f643
commit
c7dc3e78bf
|
@ -0,0 +1,74 @@
|
|||
This document describes Klipper's CAN bus support.
|
||||
|
||||
# Device Hardware
|
||||
|
||||
Klipper currently only supports CAN on stm32 chips. In addition, the
|
||||
micro-controller chip must support CAN and it must be on a board that
|
||||
has a CAN transceiver.
|
||||
|
||||
To compile for CAN, run "make menuconfig", unselect "Use USB for
|
||||
communication (instead of serial)" and then select "Use CAN for
|
||||
communication (instead of serial)". Finally, compile the
|
||||
micro-controller code and flash it to the target board.
|
||||
|
||||
# Host Hardware
|
||||
|
||||
In order to use a CAN bus, it is necessary to have a host adapter.
|
||||
There are currently two common options:
|
||||
|
||||
1. Use a [Waveshare Raspberry Pi CAN
|
||||
hat](https://www.waveshare.com/rs485-can-hat.htm) or one of its
|
||||
many clones.
|
||||
|
||||
2. Use a USB CAN adapter (for example
|
||||
[https://hacker-gadgets.com/product/cantact-usb-can-adapter/](https://hacker-gadgets.com/product/cantact-usb-can-adapter/)). There
|
||||
are many different USB to CAN adapters available - when choosing
|
||||
one, we recommend verifying it can run the [candlelight
|
||||
firmware](https://github.com/candle-usb/candleLight_fw). (Unfortunately,
|
||||
we've found some USB adapters run defective firmware and are locked
|
||||
down, so verify before purchasing.)
|
||||
|
||||
It is also necessary to configure the host operating system to use the
|
||||
adapter. This is typically done by creating a new file named
|
||||
`/etc/network/interfaces.d/can0` with the following contents:
|
||||
```
|
||||
auto can0
|
||||
iface can0 can static
|
||||
bitrate 500000
|
||||
up ifconfig $IFACE txqueuelen 128
|
||||
```
|
||||
|
||||
Note that the "Raspberry Pi CAN hat" also requires [changes to
|
||||
config.txt](https://www.waveshare.com/wiki/RS485_CAN_HAT).
|
||||
|
||||
# Finding the canbus_uuid for new micro-controllers
|
||||
|
||||
Each micro-controller on the CAN bus is assigned a unique id based on
|
||||
the factory chip identifier encoded into each micro-controller. To
|
||||
find each micro-controller device id, make sure the hardware is
|
||||
powered and wired correctly, and then run:
|
||||
```
|
||||
~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0
|
||||
```
|
||||
|
||||
If uninitialized CAN devices are detected the above command will
|
||||
report lines like the following:
|
||||
```
|
||||
Found canbus_uuid=11aa22bb33cc
|
||||
```
|
||||
|
||||
Each device will have a unique identifier. In the above example,
|
||||
`11aa22bb33cc` is the micro-controller's "canbus_uuid".
|
||||
|
||||
Note that the `canbus_query.py` tool will only report uninitialized
|
||||
devices - if Klipper (or a similar tool) configures the device then it
|
||||
will no longer appear in the list.
|
||||
|
||||
# Configuring Klipper
|
||||
|
||||
Update the Klipper [mcu configuration](Config_Reference.md#mcu) to use
|
||||
the CAN bus to communicate with the device - for example:
|
||||
```
|
||||
[mcu my_can_mcu]
|
||||
canbus_uuid: 11aa22bb33cc
|
||||
```
|
|
@ -1,5 +1,7 @@
|
|||
This document describes the protocol Klipper uses to communicate over
|
||||
[CAN bus](https://en.wikipedia.org/wiki/CAN_bus).
|
||||
[CAN bus](https://en.wikipedia.org/wiki/CAN_bus). See
|
||||
[CANBUS.md](CANBUS.md) for information on configuring Klipper with CAN
|
||||
bus.
|
||||
|
||||
# Micro-controller id assignment
|
||||
|
||||
|
|
|
@ -6,6 +6,11 @@ All dates in this document are approximate.
|
|||
|
||||
# Changes
|
||||
|
||||
20210313: Klipper's support for micro-controllers that communicate
|
||||
with CAN bus has changed. If using CAN bus then all micro-controllers
|
||||
must be reflashed and the [Klipper configuration must be
|
||||
updated](CANBUS.md).
|
||||
|
||||
20210310: The TMC2660 default for driver_SFILT has been changed from 1
|
||||
to 0.
|
||||
|
||||
|
|
|
@ -80,7 +80,6 @@ communication with the Klipper developers.
|
|||
Beaglebone PRU.
|
||||
- [Bootloaders](Bootloaders.md): Developer information on
|
||||
micro-controller flashing.
|
||||
- [stm32f0](stm32f0_CAN.md): Information on the STM32F0 micro-controller
|
||||
port.
|
||||
- [CAN bus](CANBUS.md): Information on using CAN bus with Klipper.
|
||||
- [TSL1401CL filament width sensor](TSL1401CL_Filament_Width_Sensor.md)
|
||||
- [Hall filament width sensor](HallFilamentWidthSensor.md)
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 118 KiB |
Binary file not shown.
Before Width: | Height: | Size: 136 KiB |
Binary file not shown.
Before Width: | Height: | Size: 2.0 MiB |
Binary file not shown.
Before Width: | Height: | Size: 32 KiB |
|
@ -1,142 +0,0 @@
|
|||
This document describes how the STM32F0 port operates and how to work with
|
||||
tiny CAN-enabled boards.
|
||||
|
||||
Required components
|
||||
===================
|
||||
|
||||
#### MCP2515 module
|
||||
|
||||
![MCP2515](img/mcp2515.jpg)
|
||||
or this
|
||||
![CAN/RS485 hat](img/canhat.jpg)
|
||||
|
||||
#### St-link dongle
|
||||
|
||||
![st-link v2](img/stlinkv2-700x700.jpg)
|
||||
|
||||
|
||||
Adding CAN bus to Raspberry Pi
|
||||
==============================
|
||||
(Based on Quick Guide https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=141052)
|
||||
|
||||
First of all, (only if you have small CAN module) it’s necessary to modify the CAN-module from ebay, because it has
|
||||
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:
|
||||
|
||||
![VCC cut](img/mcp2515_vcc_cut.png)
|
||||
|
||||
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
|
||||
===============
|
||||
|
||||
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.
|
Loading…
Reference in New Issue