Simple 3 wire serial connection from PI3 to SKR V1.3 board

I meant hooking the Pi's 5V pin to the 5V pin of the TFT port on the SKR 1.3. Seems like it should work but IDK...

Mostly it's that I haven't found someone somewhere that says "YES, this works and I have done it" and I don't really feel like risking both my Pi and SKR all to make one connection slightly easier

If the SKR can deliver the additional 2.5A at that port that the Pi needs (should be found in the documents).
The cable than should have devices to surppress electrical noise on the voltage.

I hope you mean "pins" or "wires" there rather than four distinct TFT displays.

  • 4 = 5V
  • 6 = Gnd
  • 8 = Tx
  • 10 = Rx

Should be able to. Just disable Bluetooth (or push it to the cheap UART), disable the console's use of the UART and enable the UART. Oh, and you want the Tx from one side of the communication to land at Rx on the other, and vice versa.

Yeah pins. IDK how ports got there. Autocorrect fail?

1 Like

Do you still need to Swapping ports used by GPIO and Bluetooth on a Raspberry pi 4B? Or does swapping the ports used by GPIO and Bluetooth chip is only needed for raspberry pi 3B+?

Like the 3B and earlier, the 4B still has two UARTs: one good and one not-so-good. Anytime you're trying to connect serial over GPIO pins then you need to play games with the configuration, as suggested.

1 Like

Cant for the life of me to get this work despite trying everything.
Only difference is I'm running an SKR 1.4

Would this work on a pi2 if i omitted the bluetooth part?
Thanks in advance

right ok so you can't do this is you are using the TFT35 touch screen then because it uses both of those ports.

Am I understanding this right - can I hook up via the serial port in the TFT35 v2 as the USART3 port to the serial on a pi and have everything work straight through?

For the serial connection, yes.
The board cannot supply enough power for the Pi however.
It will work but you will get under voltage errors so best to stick with a dc-dc converter for power.

All understood, thanks. I'm waiting for my crimp gear to arrive - then I'll be able to make a cable up to test this... I'm not fussed about power - as I have a 24v -> 5v power adapter that can still be used to power the Pi...

This will also solve the problem of having the Pi supply power to the SKR Mini e3 v1.2 via USB - so two wins via this method - as long as the TFT35 v2 does proper proxying between the serial ports....

I haven't gone through the board level schematic as yet - is this a CPU thing to transfer IN/OUT over two serial ports, or are the multiple ports physically connected via the same tracks on he PCB and we're essentially multi-tapping?

Any updates on this? I would also like to connect my pi directly to SKR 1.4 Turbo, but am also running TFT35v3.

Sounds like it works if you plug the Pi into the TFT via UART3, but it may introduce some delay: https://github.com/bigtreetech/BIGTREETECH-TouchScreenFirmware/issues/281

I got an SKR 1.4 Turbo as well and trying to use it with klipper. USB serial is working fine, but can't see the device when running ls /dev/serial/by-id/*.

Klipper make menuconfig:

[*] Enable extra low-level configuration options
    Micro-controller Architecture (LPC176x (Smoothieboard))  --->
    Processor model (lpc1769 (120 MHz))  --->
[*] Target board uses Smoothieware bootloader
[ ] Use USB for communication (instead of serial)
(250000) Baud rate for serial port
[ ] Specify a custom step pulse duration
()  GPIO pins to set at micro-controller startup

dmesg | grep "tty" output:

[    0.000000] Kernel command line: coherent_pool=1M 8250.nr_uarts=1 bcm2708_fb.fbwidth=656 bcm2708_fb.fbheight=416 bcm2708_fb.fbswap=1 smsc95xx.macaddr=B8:27:EB:10:6D:DD vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000  console=tt 1 root=PARTUUID=738a4d67-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
[    0.000906] console [tty1] enabled
[    0.895860] 3f201000.serial: ttyAMA0 at MMIO 0x3f201000 (irq = 81, base_baud = 0) is a PL011 rev2
[    0.902485] 3f215040.serial: ttyS0 at MMIO 0x0 (irq = 53, base_baud = 31250000) is a 16550

/boot/config.txt:

dtparam=audio=on

[pi4]
dtoverlay=vc4-fkms-v3d
max_framebuffers=2

[all]
#dtoverlay=vc4-fkms-v3d
dtoverlay=pi3-miniuart-bt
enable_uart=1

/boot/cmdline.txt:
console=tty1 root=PARTUUID=738a4d67-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

Were you able to figure this out? I am struggling with the same issue(except I'm using the SKR mini e3 v1.2)

Actually yes I got it! It was mainly an Klipper config missing. More on that here: https://github.com/KevinOConnor/klipper/issues/2913

Would somebody be able to help with this?
https://github.com/bigtreetech/BIGTREETECH-SKR-V1.3/issues/350

Could someone please make a start-to-finish guide on setting up this supposedly "simple" 3-wire UART stuff? I've pulled information from multiple sources (Which I can't tell if they're outdated) and even after a good 3-4 hours of trying to figure this out, I still can't get it to connect.

I̶'̶v̶e̶ ̶f̶o̶l̶l̶o̶w̶e̶d̶ ̶a̶l̶l̶ ̶t̶h̶e̶ ̶s̶t̶e̶p̶s̶ ̶i̶n̶ ̶t̶h̶i̶s̶ ̶t̶h̶r̶e̶a̶d̶ ̶t̶o̶ ̶n̶o̶ ̶a̶v̶a̶i̶l̶.̶ ̶I̶'̶v̶e̶ ̶t̶r̶i̶e̶d̶ ̶a̶p̶p̶l̶y̶i̶n̶g̶ ̶f̶i̶x̶e̶s̶ ̶f̶r̶o̶m̶ ̶o̶t̶h̶e̶r̶ ̶g̶u̶i̶d̶e̶s̶.̶ ̶I̶'̶v̶e̶ ̶q̶u̶a̶d̶r̶u̶p̶l̶e̶-̶c̶h̶e̶c̶k̶e̶d̶ ̶t̶h̶e̶ ̶w̶i̶r̶i̶n̶g̶.̶ ̶I̶ ̶e̶v̶e̶n̶ ̶s̶t̶a̶r̶t̶e̶d̶ ̶w̶i̶t̶h̶ ̶a̶ ̶c̶l̶e̶a̶n̶ ̶O̶c̶t̶o̶p̶r̶i̶n̶t̶ ̶i̶n̶s̶t̶a̶l̶l̶ ̶t̶o̶ ̶m̶a̶k̶e̶ ̶s̶u̶r̶e̶ ̶e̶v̶e̶r̶y̶t̶h̶i̶n̶g̶ ̶w̶a̶s̶ ̶f̶r̶e̶s̶h̶.̶ ̶T̶h̶e̶ ̶d̶a̶n̶g̶ ̶t̶h̶i̶n̶g̶ ̶s̶t̶i̶l̶l̶ ̶t̶i̶m̶e̶s̶ ̶o̶u̶t̶ ̶a̶n̶d̶ ̶r̶e̶f̶u̶s̶e̶s̶ ̶t̶o̶ ̶c̶o̶n̶n̶e̶c̶t̶.

EDIT: In a desperate attempt for results, I swapped out the pi (with the same SD card as the last), wired it up again, and lo and behold, it gets a connection when the baudrate is set to AUTO. I popped the old pi back in and now it's working, too. Some voodoo magic must've happened but in the end, it's working.

1 Like

I personally am using a SKR 1.4 Turbo board, with a Raspberry Pi 3b+, powered from a DC Voltage converter on the same 24V input to the SKR. The Pi 2 and SKR 1.3 have minor differences from this. I also use the I2C connector for this, as described at the bottom.

Layout

The relevant Raspberry Pi GPIO pins are numbered 1-10 as below:
1 2
3 4
5 6
7 8
9 10

The SKR 1.3 has 5 pins for the TFT. With the SD card towards the bottom, I will refer to these as A to E.
This connector is reversed on the SKR 1.4

SKR1.3 - A B C D E
SKR1.4 - E D C B A

If you are unsure in any way, you can check for 5V on the pins with a multimeter. If you are not powering the Pi from the SKR, it will be the centre three pins, and incorrect connections should not be harmful to the boards, and you can rewire and attempt to reconnect(not thoroughly tested).

Connections - Power

Pins 2 and 4 are 5V lines. Pins 6 and 9 are ground. These can be used to power the Pi. If you are not powering from the SKR board, the ground voltage must be the same between the SKR and the Pi, or the communications are unlikely to work (Ground loop - Discovered that this is the case this evening).

Pin A is 5V, and should be suitable to power the Pi (not tested by me). Do not connect the 5V to anything else on the Pi. Only pins 2 and 4 are 5V safe, and you can break parts of your Pi if you get this wrong (also tested the hard way).

According to other forums, the Pi is rated to take between 4.75 and 5.25V on these pins, but no overload protection is present. I have found that the Pi generally draws less than 1A, but may potentially go slightly higher - the need for 3A is to provide power to USB ports.
TL;DR

  • Pin 4 to Pin A only if powering Pi from SKR board

Connections - 3 wire serial
Note that Transmit and Receive must be cross connected between the two devices.

  • Pin 6 to Pin B
  • Pin 8 to Pin D
  • Pin 10 to Pin C

Raspberry Pi configuration
The Raspberry Pi 2 has one serial port - /dev/ttyAMA0
The Raspberry Pi 3 has two serial ports - /dev/ttyAMA0 and /dev/ttyS0
/dev/ttyAMA0 is connected to the bluetooth adaptor on this model.

Although you can use the device tree overlay to change this configuration, there is no need to. Any changes to this will not change the GPIO pins in use.

Enabling the serial port can be achieved through editing config files, but it is far simpler to run the following:
sudo raspi-config
Select option 5 - Interfacing Options.
Select option P6 - Serial.
Select No - a serial console should not be available.
Select Yes - The serial hardware should be enabled.

running:
ls /dev/tty
The output should now include /dev/ttyS0 on a Pi 3 and /dev/ttyAMA0 on a Pi 2

Use this port to connect in OctoPrint.

SKR1.4 alternative
In addition to having the TFT connection reversed, the SKR 1.4 also includes a WiFi port and an I2C port.

The I2C connector has ports with the same layout as those on the TFT, without the E pin:

D C B A

If you wish to use the I2C port, it is on UART3. Use the following in Configuration.h:
#define SERIAL_PORT 3
#define SERIAL_PORT_2 0

This will disable the use of the USB port to control the board, but if you are only going to connect from the Pi, this is not needed. However, this will enable the use of the BTT TFT35 module as well as control from OctoPrint (although this may be confusing with two machines attempting to control the printer).

If you are not using the WiFi module, it may be possible to use the WiFi port for this, but I have not succeeded with this (The pins in use are a secondary connection for UART3, not enabled by arduino framework for this board. I don't know if Marlin uses software based serial for this). The WiFi Tx/Rx ports are on the top right and bottom left of the 2x4 connector (not 100% certain on Tx/Rx orientation), with Gnd on bottom right.

P x x C
D x x B

1 Like