Supported MCU list?

Hi,

I’m struggling to find which MCU is support, where is beta support for dev etc…

I was trying to find the current status for the following

ESP8266
ESP32
CH32V003
STM32F103C8T6
atmega328p
rp2040

Now there is a list on the github.

Here

And it leads to this page

Which is a board list. That is a problem, unless you know of a supported board and you know if uses the MCU you are trying to find out, it is difficult to search.

Reading for instance this random board

The comment say it should be ATMega2560, but none of the settings explicitely define this.

I am trying where the specific MCU is defined ? What specific command ? Perhaps from that command I could find a direct list of supported MCUs ?

This is probably speaking out of turn, but I would consider the most authoritative resource for finding out whether or not a specific MCU is supported is to SSH into your printer, execute make menuconfig and search for the device you’re looking for:

If it ain’t there, it ain’t supported.

In your original list:

ESP8266 <- Not supported
ESP32 <- Not Supported
CH32V003 <- Not Supported
STM32F103C8T6 < "STM32F103" is and I believe the 'C8T6 is part of that family
atmega328p < Supported
rp2040 < Supported

Ah yes, good idea

I searched the whole repo for the word menuconfig

“repo:Klipper3d/klipper menuconfig”

From there I found the file

But that was a bit of a dead end…

Searching for “Processor model”, looks like the answer spreads all around the code base in files called Kconfig, those that have a section “config MCU”

For instance


config MCU
    string
    default "atmega168" if MACH_atmega168
    default "atmega328" if MACH_atmega328
    default "atmega328p" if MACH_atmega328p
    default "atmega1284p" if MACH_atmega1284p
    default "atmega644p" if MACH_atmega644p
    default "at90usb1286" if MACH_at90usb1286
    default "at90usb646" if MACH_at90usb646
    default "atmega32u4" if MACH_atmega32u4
    default "atmega1280" if MACH_atmega1280
    default "atmega2560" if MACH_atmega2560

So the exhaustive list would be

    default "sam3x8e" if MACH_SAM3X8E
    default "sam3x8c" if MACH_SAM3X8C
    default "sam4s8c" if MACH_SAM4S8C
    default "sam4e8e" if MACH_SAM4E8E
    default "same70q20b" if MACH_SAME70Q20B

    default "samc21g18a" if MACH_SAMC21G18
    default "samd21g18a" if MACH_SAMD21G18
    default "samd21e18a" if MACH_SAMD21E18
    default "samd21j18a" if MACH_SAMD21J18
    default "samd21e15a" if MACH_SAMD21E15
    default "samd51g19a" if MACH_SAMD51G19
    default "samd51j19a" if MACH_SAMD51J19
    default "samd51n19a" if MACH_SAMD51N19
    default "samd51p20a" if MACH_SAMD51P20
    default "same51j19a" if MACH_SAME51J19
    default "same54p20a" if MACH_SAME54P20

    default "atmega168" if MACH_atmega168
    default "atmega328" if MACH_atmega328
    default "atmega328p" if MACH_atmega328p
    default "atmega1284p" if MACH_atmega1284p
    default "atmega644p" if MACH_atmega644p
    default "at90usb1286" if MACH_at90usb1286
    default "at90usb646" if MACH_at90usb646
    default "atmega32u4" if MACH_atmega32u4
    default "atmega1280" if MACH_atmega1280
    default "atmega2560" if MACH_atmega2560

    default "HC32F460"

    default "lpc1768" if MACH_LPC1768
    default "lpc1769" if MACH_LPC1769

    default "rp2040"

    default "stm32f031x6" if MACH_STM32F031
    default "stm32f042x6" if MACH_STM32F042
    default "stm32f070xb" if MACH_STM32F070
    default "stm32f072xb" if MACH_STM32F072
    default "stm32f103xe" if MACH_STM32F103
    default "stm32f207xx" if MACH_STM32F207
    default "stm32f401xc" if MACH_STM32F401
    default "stm32f405xx" if MACH_STM32F405
    default "stm32f407xx" if MACH_STM32F407
    default "stm32f429xx" if MACH_STM32F429
    default "stm32f446xx" if MACH_STM32F446
    default "stm32f765xx" if MACH_STM32F765
    default "stm32g070xx" if MACH_STM32G070
    default "stm32g071xx" if MACH_STM32G071
    default "stm32g0b0xx" if MACH_STM32G0B0
    default "stm32g0b1xx" if MACH_STM32G0B1
    default "stm32g431xx" if MACH_STM32G431
    default "stm32h723xx" if MACH_STM32H723
    default "stm32h743xx" if MACH_STM32H743
    default "stm32h750xx" if MACH_STM32H750
    default "stm32l412xx" if MACH_STM32L412
    default "stm32f103xe" if MACH_N32G45x

I wonder what these are … Could it run off x86 or linux with GPIO/SPI/I2C ports ?

AR100 ?
generic ?
linux ?
pru ?
simulator ?

I asked chatgpt to clean that up a bit, here is the result

Atmel SAM3 Series

sam3x8e // High performance and connectivity features
sam3x8c

Atmel SAM4 Series

sam4s8c // Superior performance in signal processing
sam4e8e // Enhanced networking capabilities

Atmel SAME Series

same70q20b // High-performance ARM Cortex-M7 based MCU
same51j19a // Cortex-M4 with Low Power and Enhanced Analog Features
same54p20a // High performance with advanced connectivity

Atmel SAMC Series

samc21g18a // Cortex-M0+ with CAN-FD feature

Atmel SAMD Series

samd21g18a
samd21e18a
samd21j18a
samd21e15a // Lower pin count and memory variant
samd51g19a // High performance Cortex-M4
samd51j19a
samd51n19a
samd51p20a // Advanced features with more pins and memory

Atmel ATmega Series

atmega168
atmega328
atmega328p // picoPower technology for low power consumption
atmega1284p // Large memory capacity
atmega644p
atmega32u4 // USB 2.0 Full-speed/low-speed Device Module with Interrupt on Transfer Completion
atmega1280 // High memory density
atmega2560 // Extended memory and peripherals

Atmel AT90 Series

at90usb1286 // USB functionality
at90usb646

HC32 Series

HC32F460 // General purpose ARM Cortex-M4 MCU

NXP LPC Series

lpc1768 // Extensive peripheral integration
lpc1769 // Higher frequency variant of LPC1768

Raspberry Pi

rp2040 // Dual-core ARM Cortex-M0+ processor with flexible IO

STMicroelectronics STM32 Series

stm32f031x6 // Basic ARM Cortex-M0 MCU
stm32f042x6 // USB capabilities
stm32f070xb
stm32f072xb // Improved connectivity
stm32f103xe // High performance Cortex-M3
stm32f207xx // Advanced connectivity and performance
stm32f401xc // Balance of power and performance
stm32f405xx // Rich in connectivity features
stm32f407xx // Enhanced features for digital signal processing
stm32f429xx // Advanced graphics and high computation power
stm32f446xx // Enhanced cryptographic and DSP capabilities
stm32f765xx // Advanced performance with large memory
stm32g070xx // Cost-effective Cortex-M0+
stm32g071xx // General purpose Cortex-M0+
stm32g0b0xx // Entry level with advanced peripherals
stm32g0b1xx // Bigger memory with advanced features
stm32g431xx // High performance with motor control peripherals
stm32h723xx // High performance Cortex-M7
stm32h743xx // Very high performance with large internal memory
stm32h750xx // High performance with cost-efficient memory usage
stm32l412xx // Ultra-low-power Cortex-M4

Perhaps that list could be included in the Klipper documentation.

As with most things posted here, let me ask this in general.

What are you trying to figure out? What is your end goal?
That helps answer your question.

Maybe not the one you asked, but the one you’re thinking about, which is more often than not the answer people really want.

Well, I wanted to know, what MCU would work with klipper.

I don’t like the current boards, they are too expensive and bloated in my opinion.

I would prefer multiple boards, that run either off canbus or ethernet, preferably ethernet.

Looks like the arduino’s nano mcu would be good for that.

The CH32V003, at 0.30$ for a 38MHz would have been much better. I might port klipper to it and put ethernet using the W5500 if I can figure it out.

For now I will investigate atmega328 plus a CH9121 920kilobaud ethernet to serial bridge, see if I can make that work.

I would be thrilled to have just arduino nano bare board, plus CH9121 and tmc2209 off the shelf boards driving a single stepper over ethernet.

It sound like you want to implement simplified version of BTT “EBB42 CAN” micro-board which cost around 11$

I would suggest to look at it here and use it as starting point.