Like any good maker, I like to buy the cheapest version of something that I can. If buying from two sources gets me something a few £s cheaper then thats what I’ll do.

What did I order?

I ordered an SKR v1.4 turbo (which has a 120Mhz processor compared to the standard 100Mhz processor) and 5 x Fysetc TMC2209 v3. Buying this combination saved me around £5, which in my eyes was worth it.

Whats the problem?

What I didn’t realise is that Fysetc had changed the pinout of the TMC2209 v3 from the earlier versions. This means that the jumper settings detailed on the SKR v1.4 page on aliexpress do not work. This results in a TMC connection error in Marlin and the inability to set the steps, current or use sensorless homing (which is a gimmick I know).

So what now?

Luckily I was able to find a fix for the issue. Even better is that no soldering or modification of the driver is required.

All that’s needed is to add the jumpers as shown (look for the green box) underneath each driver

No more TMC connection errors.

Thanks to the fantastic work of sdavi (and gloomyandy – but I will come to his work later on) over on the reprap forums, its possible to run RepRapFirmware on a number of different LPC17XX based 3D printer controllers. If you don’t know what the RepRapFirmware is, its the same software that runs on the duet family of controllers.

The boards that are supported with example configs are:

  • AZSMZ Mini
  • Azteeg Mini
  • SKR v1.1, 1.3 and 1.4 (both normal and turbo)
  • MKS Sbase v1.3
  • Re-ARM controller for Ramps
  • The original Smoothieboard

One of the limitations of the builds that sdavi was producing (which is in no way his fault) was the lack of control of software UART/SPI based drivers (such as the TMC2208 or TMC2209). Boards such as the smoothieboard or the MKS Sbase use hardware SPI to set the motor currents and this was natively supported in RRF (as this is the way the duet boards control the drivers). Cheaper boards, such as the SKR v1.X range use software to set the currents etc.

This is where GloomyAndy comes in. (He added flash eeprom emulation, improved the USBMSD/USBCDC support and implemented software serial, for TMC devices in Marlin, so the printing community already have a lot to thank him for). He has implemented code for software UART/SPI control of TMC 22XX drivers. This code is still being tested but by all accounts is very stable and I am planning to fit an SKR v1.4 turbo to my Da Vinci Jr this week to help with the testing.

I can hear you all ask how you get in on the action. In that case, read on…

Compiling RepRapFirmware

First off, you need to download 4 different github repos. The best way to do it would be using git and cloning each one, but for this guide, we’re just going to download a copy of each one. Please download the following:

All the repos linked to above are for GloomyAndys version for using with software UART/SPI of TMC 22XX drivers. If you don’t need that control, then use sdavi’s version. Make usre you choose the 3.01 branches.

Unzip all of the repos and arrange them so each of the one is in the CoreLPC4RRF folder. The result should look like this.

Make sure you rename any folders to remove the branch name.

Now download and install VSCode.

Open VSCode and open the extension tab (this can be done by using the shortcut Ctrl+Shift+X) and search for windows-arm-none-eabi. Install the version by metalcode-eu.

Download and install git if you haven’t already.

Then download and install make. Use the “complete package except sources” version. Once installed you will need to add the location of the bin folder that is installed to your windows path environment setting. While there also add the location of mkdir.exe which will have been installed with git. It can be found in the usr/bin folder where git is installed. Once thats done, close VSCode and then reopen it.

Now in VSCode, open the CoreRRF4LPC folder (which has everything else in it) and click terminal, run task and then build. Sit back, relax and in about 10 or 15 minutes, the build should’ve completed.

There’s no longer any need to build gloomyandy’s version of the firmware. He has released a prebuilt binary here. This is for the version that supports TMC22XX via UART. Sdavi also releases prebuilt versions (currently without the UART code). They can be found here.

All thats left then is to copy the firmware.bin from the build folder in the CoreRRF4LPC folder to the sd card in your SKR (or other) board. Put that in your SKR board and you’ll soon be running RepRapFirmware. This can be confirmed by connecting the board to your PC, connecting to it with pronterface, and typing M122. The output will confirm that you are running RRF3.

You will also need to replicate the correct folder structure for RepRapFirmware as described here.

Connecting an ESP (wireless control)

I’ve used a nodemcu ESP8266 with USB programming as it already 5v tolerant and it allows for updating via USB. I have created a fritzing schematic available here.

BOM

  • 1 x nodemcu ESP8266 oe Wemos D1 mini
  • 3 x 47R resistor
  • 1 x 470R resistor
  • 3 x 2200R resistor
  • jumpers or other ways of connecting to the SKR

The image for to flash to the ESP can be found here. It should be flashed using esptools.py. Use the code below as an example. Change the Com port to match the ESP device and make sure you give the .bin file its complete file location if its not in the same folder as esptools.

esptools.py --port COM4 write_flash 0x00000 duetwifi.bin

On a side note, I have a very handy little tool installed on my main laptop thats monitoring for any serial devices as they are plugged in and you get a popup with the Com port number. If you’re interested, it can be found here.

Once the ESP is flashed with the correct binary, the next thing to do is connect it to the SKR. The pinout for the SKR can be found here and the schematic for the Duet 2 Wifi for reference can be found here. The table below shows the pins required on the ESP and what they are connected to on the SKR.

ESP PinSKR PinResistor Value
RST1.31470R
CS/GPIO150.162200R
MOSI/GPIO130.1847R
MISO/GPIO120.1747R
SCLK/GPIO140.1547R
ESP_DATA_Ready/GPIO00.282200R
LPC_DATA_Ready/GPIO41.30None
VIN(5v)5V on EXP1
GNDGND on EXP12200R to RST

Before you connect to the board, you need to ensure that an SD card is inserted and it has the correct files required by RepRapFirmware. An overview can be found here. You also need to ensure that the latest version of DWC is on your SD card. It can be found here. You will need to generate the config files required. That can be achieved by using the RRF config tool found here. Once generated, you’ll need to make sure the pin names are correct for the board you have built RRF for. These can be found in this section of github. Looking in the BIQU_SKR.h file, it can be seen that the x endstop pin is called “xstop” etc.

Finally, you will also need a board.txt file in the sys folder. For the SKR v1.4, mine contains the following

//Config file to define Hardware Pins LPC Boards.
//Note: Each line should be less than 120 characters.
//    : Unwanted options can be commented out or set to NoPin. Lines commented out will get default values
//    : for pins the default is NoPin.
//    : Values for Arrays need to be contained within { and }
//    : Comments can be defined with // or # (comments are not supported inside arrays)
//    : Each config entry must be all on a single line.

//Config for BIQU SKR v1.4 (using config setting from Rob Mendon)

lpc.board = biquskr_1.4

//wifi pins
8266wifi.EspDataReadyPin = 0.28
8266wifi.LpcTfrReadyPin = 1.30
8266wifi.EspResetPin = 1.31

Once connected, power up the SKR board using 12-24v and connect to the USB port on the board. Using a program such as YAT or pronterface, connect to the board. Then type in the following

M552 S0
M587 S"your SSID" P"your password"
M552 S1

If you are using pronteface, it has a tendency to convert all text to upper case, in which case, if you wanted to use “PassWord”, you would write P”P’a’s’sW’o’r’d” with the ‘ indicating the following letter should be lower case. Explanation here.

The blue light on the wifi chip shoould then flash blue and will go solid when a connection has been established. The ip address will be shown on the serial connection. It is also possible to type just M552 to get the current ip address reported back.

The final thing to do is add the line “M552 S1” to your config file. This can be done through the web interface. This just ensures that the wifi connection is started at start up. There is no need to add the M587 command as this is written permanently to the flash of the ESP chip.

Now what?

Work your way through configuring the firmware. All of it is one through the web interface so there is no need for you to compile the firmware every time.

Keep an eye on the thread on the reprap forum for updates made. sdavi may even start releasing pre compiled builds. And remember, if you find any bugs, make sure you report them in the forum.

I will point out that with the SKR v1.4, there is no way to disable sensorless homing (unlike other boards that use a jumper), and as sensorless homing is currently not supported, you will have to either remove or bend the diag pin on the TMC2209 to be able to use mechanical endstops. That caught me out for a couple of hours.

As always, any comments for improvements or questions are always welcomed.

As can be seen by the image above, the router is installed in my Dads garage and we’ve carried out a couple of test runs. All in all we are very happy with how it has turned out. I’ve got a few more parts to print to put the duet wifi in and tidy up the cabling. I also need to print a dust shoe to attach the vacuum to.

To generate the CNC gcode, we are using fusion 360. As I mentioned, we are using a duet wifi as the main controller and luckily for us, thats also the the controller used by Ooznest. They have very kindly provided us with a post processor for fusion 360 to allow the CNC gcode to be output fully formatted for the duet.

A copy of the config we are using for the duet can be found here.

I think I’m going to end up building a larger CNC router for myself as my next project once the CoreXY is out of the way.