Lerdge.com is saying Klipper works on their boards now?

Basic Information:

Printer Model: xvico pioneer highly modified, with LERDGE K board now, and Creality E-Fit extruder / all new motors, all new fans, etc.
MCU / Printerboard: LERDGE K Board, version 2
klippy.log

Fill out above information and in all cases attach your klippy.log file. Pasting your printer.cfg is not needed

Describe your issue: I’m trying to get OctoKlipperPi to work on the above described printer. I’m using a Raspberry Pi 3B+ to serve the board. Since there’s no config file listed, I’m dead in the water. I asked LERDGE.COM via Instagram to comment; they said KLIPPER WORKS ON THEIR BOARDS NOW???

Corlissmedia2.0

Hello @xvicolkmstr !

That seems to a bit tricky:

Here is an attempt to run Marlin on it:

AFAIK there is no progress. Marlin has “hacked” the firmware encryption and thus can run on the Lerdge boards.
So far no attempt has been made to port this to Klipper. Consequently there are two solutions:

  • Lerdge removes their encryption to allow free choice of firmware → From hardware PoV Klipper should work out of the box as far as I can tell
  • Some developer takes up the task to port the Marlin hack

I had a talk with the person posting on Instagram. They thought providing the STL files for their little iV printer constituted OPEN SOURCE. I told them it didn’t.

I think a common 32 bit board would have quite less effort to get Klipper on it.

Either I’ve lost my mind, or, I just found the Klipper info on the m.letdge.com website.

Mark

Never tried. Seems they have released a tool to encrypt the firmware.

Yes, I think so. Only via pc, though. I’m going to follow their instructions to the letter, and see how it goes. I’ll post results on my YouTube site: Corlissmedia2.0

Mark

i’ve successfully managed to flash klipper onto the lerdge k
following their guide here 1 and here2


i had to look through klipper github history to find a close match for the firmware make “kconfig” file
not sure if it “needs” the 64kib bootloader offset.

the board needs the USB/wifi adapter thing in order for it to work though. "there is no Serial connection without it "
i’ve de-compiled the “encrypting software” too, doesn’t look like it really does anything.


using Microsoft.VisualBasic.Devices;
using Microsoft.Win32;
using System;
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Markup;

namespace Lerdge_Encrypting_oftware
{
  public class MainWindow : Window, IComponentConnector
  {
    public static string FirmwareFilePath;
    internal Button OpenButton;
    internal Button EncryptingButton;
    internal TextBlock FileNameTextBloack;
    internal ProgressBar PB;
    internal TextBlock StatusTextBlock;
    private bool _contentLoaded;

    public MainWindow() => this.InitializeComponent();

    private void OpenButton_Click(object sender, RoutedEventArgs e)
    {
      OpenFileDialog openFileDialog = new OpenFileDialog();
      openFileDialog.Title = "Select the firmware that needs to be make";
      openFileDialog.Filter = "bin files(*.bin)|*.bin";
      openFileDialog.FilterIndex = 1;
      openFileDialog.Multiselect = false;
      openFileDialog.RestoreDirectory = true;
      bool? nullable = openFileDialog.ShowDialog();
      bool flag = true;
      if (nullable.GetValueOrDefault() == flag & nullable.HasValue)
      {
        MainWindow.FirmwareFilePath = openFileDialog.FileName;
        this.FileNameTextBloack.Text = MainWindow.FirmwareFilePath;
        FileInfo fileInfo = new FileInfo(MainWindow.FirmwareFilePath);
        if (fileInfo != null && fileInfo.Exists)
          this.StatusTextBlock.Text = "waiting to start make";
        else
          this.StatusTextBlock.Text = "Select the firmware that needs to be make";
      }
      else
        MainWindow.FirmwareFilePath = (string) null;
    }

    private void EncryptingButton_Click(object sender, RoutedEventArgs e)
    {
      try
      {
        FileInfo fileInfo = new FileInfo(MainWindow.FirmwareFilePath);
        if (fileInfo != null && fileInfo.Exists)
        {
          new Task((Action) (() => this.Encrypting())).Start();
        }
        else
        {
          MainWindow.FirmwareFilePath = (string) null;
          this.StatusTextBlock.Text = "Fail (file open failed)";
        }
      }
      catch
      {
        int num = (int) MessageBox.Show("Please select the firmware to be make first.", "error", MessageBoxButton.OK, MessageBoxImage.Exclamation);
      }
    }

    private void Encrypting()
    {
      FileStream fileStream;
      try
      {
        fileStream = new FileStream(MainWindow.FirmwareFilePath, FileMode.Open);
      }
      catch
      {
        this.Dispatcher.Invoke((Action) (() => this.StatusTextBlock.Text = "Fail (file open failed)"));
        return;
      }
      fileStream.Seek(0L, SeekOrigin.Begin);
      byte[] buffer = new byte[fileStream.Length];
      uint index = 0;
      int p = 0;
      this.Dispatcher.Invoke((Action) (() => this.StatusTextBlock.Text = "making..."));
      fileStream.Read(buffer, 0, (int) fileStream.Length);
      for (; (long) index < fileStream.Length; ++index)
      {
        buffer[(int) index] = ~buffer[(int) index];
        buffer[(int) index] = (byte) ((int) buffer[(int) index] >> 5 | (int) buffer[(int) index] << 3);
        buffer[(int) index] = (byte) ((uint) buffer[(int) index] + 85U);
        buffer[(int) index] = ~buffer[(int) index];
        buffer[(int) index] = (byte) ((int) buffer[(int) index] << 3 | (int) buffer[(int) index] >> 5);
        int np = (int) ((long) (index * 100U) / fileStream.Length);
        if (np > p + 1)
          this.Dispatcher.Invoke((Action) (() =>
          {
            this.PB.Value = (double) np;
            p = np;
          }));
      }
      fileStream.Seek(0L, SeekOrigin.Begin);
      fileStream.Write(buffer, 0, (int) fileStream.Length);
      fileStream.Close();
      FileInfo fileInfo = new FileInfo(MainWindow.FirmwareFilePath);
      new Computer().FileSystem.RenameFile(MainWindow.FirmwareFilePath, "Klipper for Lerdge.bin");
      this.Dispatcher.Invoke((Action) (() =>
      {
        this.PB.Value = 100.0;
        this.StatusTextBlock.Text = "success (the original file has been overwritten)";
      }));
      MainWindow.FirmwareFilePath = (string) null;
    }

    [DebuggerNonUserCode]
    [GeneratedCode("PresentationBuildTasks", "4.0.0.0")]
    public void InitializeComponent()
    {
      if (this._contentLoaded)
        return;
      this._contentLoaded = true;
      Application.LoadComponent((object) this, new Uri("/Lerdge_Firmware_Tool;component/mainwindow.xaml", UriKind.Relative));
    }

    [DebuggerNonUserCode]
    [GeneratedCode("PresentationBuildTasks", "4.0.0.0")]
    [EditorBrowsable(EditorBrowsableState.Never)]
    void IComponentConnector.Connect(int connectionId, object target)
    {
      switch (connectionId)
      {
        case 1:
          this.OpenButton = (Button) target;
          this.OpenButton.Click += new RoutedEventHandler(this.OpenButton_Click);
          break;
        case 2:
          this.EncryptingButton = (Button) target;
          this.EncryptingButton.Click += new RoutedEventHandler(this.EncryptingButton_Click);
          break;
        case 3:
          this.FileNameTextBloack = (TextBlock) target;
          break;
        case 4:
          this.PB = (ProgressBar) target;
          break;
        case 5:
          this.StatusTextBlock = (TextBlock) target;
          break;
        default:
          this._contentLoaded = true;
          break;
      }
    }
  }
}

Is there supposed to be anything special about these boards compared to the usual suspects from btt et al?

not really no, infact it’s worse than a btt octopus.
it’s just a cheaper option.

I tried to flash klipper onto the LERDGE K-Board without success. “make” failed to complete and ended with errors.

There is now a build image from Lerdge Lerdge-Make 3D printing more simple!

On the top of the site you can download the firmware and printer config.

I has tried it but I could not get it work. Can it be that the firmware must be in sync with the klipper software on the raspberry pi ?

It’s relative easy to swap between klipper firmware and stock firmware.
If you want to go back use the force method with de SDCard and you run the Lerdge firmware.