Add support for MKS Robin board (#12650)
Implement initial support for MKS Robin (STM32F103ZET6) board. Custom build script is used to generate encrypted firmware compatible with original MSK Robin bootloader (i.e. safe firmware update from SD card and possibility to go back to original close-source firmware).
This commit is contained in:
		
							parent
							
								
									367a9f65aa
								
							
						
					
					
						commit
						33abb86b7e
					
				@ -43,7 +43,7 @@
 | 
			
		||||
// --------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
#define __I
 | 
			
		||||
#define __IO
 | 
			
		||||
#define __IO volatile
 | 
			
		||||
 typedef struct
 | 
			
		||||
 {
 | 
			
		||||
   __I  uint32_t CPUID;                   /*!< Offset: 0x000 (R/ )  CPUID Base Register                                   */
 | 
			
		||||
@ -105,7 +105,7 @@ uint8 adc_pins[] = {
 | 
			
		||||
    TEMP_0_PIN,
 | 
			
		||||
  #endif
 | 
			
		||||
  #if HAS_TEMP_ADC_1
 | 
			
		||||
    TEMP_1_PIN
 | 
			
		||||
    TEMP_1_PIN,
 | 
			
		||||
  #endif
 | 
			
		||||
  #if HAS_TEMP_ADC_2
 | 
			
		||||
    TEMP_2_PIN,
 | 
			
		||||
@ -175,6 +175,24 @@ static void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) {
 | 
			
		||||
// Public functions
 | 
			
		||||
// --------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Leave PA11/PA12 intact if USBSerial is not used
 | 
			
		||||
//
 | 
			
		||||
#if SERIAL_USB
 | 
			
		||||
  namespace wirish { namespace priv {
 | 
			
		||||
    #if SERIAL_PORT > 0
 | 
			
		||||
      #if SERIAL_PORT2
 | 
			
		||||
        #if SERIAL_PORT2 > 0
 | 
			
		||||
          void board_setup_usb(void) {}
 | 
			
		||||
        #endif
 | 
			
		||||
      #else
 | 
			
		||||
        void board_setup_usb(void) {}
 | 
			
		||||
      #endif
 | 
			
		||||
    #endif
 | 
			
		||||
  } }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void HAL_init(void) {
 | 
			
		||||
  NVIC_SetPriorityGrouping(0x3);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2021
									
								
								Marlin/src/config/examples/Mks/Robin/Configuration.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2021
									
								
								Marlin/src/config/examples/Mks/Robin/Configuration.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1971
									
								
								Marlin/src/config/examples/Mks/Robin/Configuration_adv.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1971
									
								
								Marlin/src/config/examples/Mks/Robin/Configuration_adv.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -224,6 +224,7 @@
 | 
			
		||||
#define BOARD_STM3R_MINI       1803   // STM32 Libmaple based stm32f1 controller
 | 
			
		||||
#define BOARD_GTM32_PRO_VB     1805   // STM32f103VET6 controller
 | 
			
		||||
#define BOARD_MORPHEUS         1806   // STM32F103C8/STM32F103CB Libmaple based stm32f1 controller
 | 
			
		||||
#define BOARD_MKS_ROBIN        1808   // MKS Robin / STM32F103ZET6
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// STM32 ARM Cortex-M4F
 | 
			
		||||
 | 
			
		||||
@ -392,6 +392,8 @@
 | 
			
		||||
  #include "pins_GTM32_PRO_VB.h"      // STM32F1                                    env:STM32F1
 | 
			
		||||
#elif MB(MORPHEUS)
 | 
			
		||||
  #include "pins_MORPHEUS.h"          // STM32F1                                    env:STM32F1
 | 
			
		||||
#elif MB(MKS_ROBIN)
 | 
			
		||||
  #include "pins_MKS_ROBIN.h"         // STM32F1                                    env:STM32F1
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// STM32 ARM Cortex-M4F
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										109
									
								
								Marlin/src/pins/pins_MKS_ROBIN.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								Marlin/src/pins/pins_MKS_ROBIN.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,109 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Marlin 3D Printer Firmware
 | 
			
		||||
 * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
 | 
			
		||||
 *
 | 
			
		||||
 * Based on Sprinter and grbl.
 | 
			
		||||
 * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * MKS Robin (STM32F130ZET6) board pin assignments
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __STM32F1__
 | 
			
		||||
  #error "Oops! Select an STM32F1 board in 'Tools > Board.'"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if HOTENDS > 2 || E_STEPPERS > 2
 | 
			
		||||
  #error "MKS Robin supports up to 2 hotends / E-steppers. Comment out this line to continue."
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define BOARD_NAME "MKS Robin / STM32F103ZET6"
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Release PB4 (Y_ENABLE_PIN) from JTAG NRST role
 | 
			
		||||
//
 | 
			
		||||
#define DISABLE_DEBUG
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Limit Switches
 | 
			
		||||
//
 | 
			
		||||
#define X_MIN_PIN          PB12
 | 
			
		||||
#define X_MAX_PIN          PB0
 | 
			
		||||
#define Y_MIN_PIN          PC5
 | 
			
		||||
#define Y_MAX_PIN          PC4
 | 
			
		||||
#define Z_MIN_PIN          PA4
 | 
			
		||||
#define Z_MAX_PIN          PF7
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Steppers
 | 
			
		||||
//
 | 
			
		||||
#define X_ENABLE_PIN       PB9
 | 
			
		||||
#define X_STEP_PIN         PB8
 | 
			
		||||
#define X_DIR_PIN          PB5
 | 
			
		||||
 | 
			
		||||
#define Y_ENABLE_PIN       PB4
 | 
			
		||||
#define Y_STEP_PIN         PG15
 | 
			
		||||
#define Y_DIR_PIN          PG10
 | 
			
		||||
 | 
			
		||||
#define Z_ENABLE_PIN       PD7
 | 
			
		||||
#define Z_STEP_PIN         PD3
 | 
			
		||||
#define Z_DIR_PIN          PG14
 | 
			
		||||
 | 
			
		||||
#define E0_ENABLE_PIN      PG13
 | 
			
		||||
#define E0_STEP_PIN        PG8
 | 
			
		||||
#define E0_DIR_PIN         PA15
 | 
			
		||||
 | 
			
		||||
#define E1_ENABLE_PIN      PA12
 | 
			
		||||
#define E1_STEP_PIN        PA11
 | 
			
		||||
#define E1_DIR_PIN         PA8
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Temperature Sensors
 | 
			
		||||
//
 | 
			
		||||
#define TEMP_0_PIN         PC1   // TH1
 | 
			
		||||
#define TEMP_1_PIN         PC2   // TH2
 | 
			
		||||
#define TEMP_BED_PIN       PC0   // TB1
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Heaters / Fans
 | 
			
		||||
//
 | 
			
		||||
#define HEATER_0_PIN       PC7   // HEATER1
 | 
			
		||||
#define HEATER_1_PIN       PA6   // HEATER2
 | 
			
		||||
#define HEATER_BED_PIN     PC6   // HOT BED
 | 
			
		||||
 | 
			
		||||
#define FAN_PIN            PA7   // FAN
 | 
			
		||||
 | 
			
		||||
#define SERVO0_PIN         PC3  // XS1 - 5
 | 
			
		||||
#define SERVO1_PIN         PA1  // XS1 - 6
 | 
			
		||||
#define SERVO2_PIN         PF9  // XS2 - 5
 | 
			
		||||
#define SERVO3_PIN         PF8  // XS2 - 6
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Note: MKS Robin board is using SPI2 interface, make sure your stm32duino library is configured accordingly
 | 
			
		||||
 */
 | 
			
		||||
//#define MAX6675_SS_PIN     PE5  // TC1 - CS1
 | 
			
		||||
//#define MAX6675_SS_PIN     PE6  // TC2 - CS2
 | 
			
		||||
 | 
			
		||||
#define POWER_LOSS_PIN     PA2   // PW_DET
 | 
			
		||||
#define PS_ON_PIN          PA3   // PW_OFF
 | 
			
		||||
#define FIL_RUNOUT_PIN     PF11  // MT_DET
 | 
			
		||||
 | 
			
		||||
#define BEEPER_PIN         PC13
 | 
			
		||||
#define LED_PIN            PB2
 | 
			
		||||
 | 
			
		||||
#define SDSS               -1
 | 
			
		||||
							
								
								
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/mks_robin.ld
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/mks_robin.ld
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,14 @@
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
  ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K - 40
 | 
			
		||||
  rom (rx)  : ORIGIN = 0x08007000, LENGTH = 512K - 28K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Provide memory region aliases for common.inc */
 | 
			
		||||
REGION_ALIAS("REGION_TEXT", rom);
 | 
			
		||||
REGION_ALIAS("REGION_DATA", ram);
 | 
			
		||||
REGION_ALIAS("REGION_BSS", ram);
 | 
			
		||||
REGION_ALIAS("REGION_RODATA", rom);
 | 
			
		||||
 | 
			
		||||
/* Let common.inc handle the real work. */
 | 
			
		||||
INCLUDE common.inc
 | 
			
		||||
							
								
								
									
										28
									
								
								buildroot/share/PlatformIO/scripts/mks_robin.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								buildroot/share/PlatformIO/scripts/mks_robin.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,28 @@
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
# Relocate firmware from 0x08000000 to 0x08007000
 | 
			
		||||
env['CPPDEFINES'].remove(("VECT_TAB_ADDR", 134217728))
 | 
			
		||||
env['CPPDEFINES'].append(("VECT_TAB_ADDR", "0x08007000"))
 | 
			
		||||
env.Replace(LDSCRIPT_PATH="buildroot/share/PlatformIO/ldscripts/mks_robin.ld")
 | 
			
		||||
 | 
			
		||||
# Encrypt ${PROGNAME}.bin and save it as 'Robin.bin'
 | 
			
		||||
def encrypt(source, target, env):
 | 
			
		||||
    import os
 | 
			
		||||
 | 
			
		||||
    key = [0xA3, 0xBD, 0xAD, 0x0D, 0x41, 0x11, 0xBB, 0x8D, 0xDC, 0x80, 0x2D, 0xD0, 0xD2, 0xC4, 0x9B, 0x1E, 0x26, 0xEB, 0xE3, 0x33, 0x4A, 0x15, 0xE4, 0x0A, 0xB3, 0xB1, 0x3C, 0x93, 0xBB, 0xAF, 0xF7, 0x3E]
 | 
			
		||||
 | 
			
		||||
    firmware = open(target[0].path, "rb")
 | 
			
		||||
    robin = open(target[0].dir.path +'/Robin.bin', "wb")
 | 
			
		||||
    length = os.path.getsize(target[0].path)
 | 
			
		||||
    position = 0
 | 
			
		||||
    try:
 | 
			
		||||
        while position < length:
 | 
			
		||||
            byte = firmware.read(1)
 | 
			
		||||
            if position >= 320 and position < 31040:
 | 
			
		||||
                byte = chr(ord(byte) ^ key[position & 31])
 | 
			
		||||
            robin.write(byte)
 | 
			
		||||
            position += 1
 | 
			
		||||
    finally:
 | 
			
		||||
        firmware.close()
 | 
			
		||||
        robin.close()
 | 
			
		||||
env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", encrypt);
 | 
			
		||||
@ -293,6 +293,26 @@ lib_ignore    = Adafruit NeoPixel, c1921b4
 | 
			
		||||
src_filter    = ${common.default_src_filter} +<src/HAL/HAL_STM32F4>
 | 
			
		||||
monitor_speed = 250000
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# MKS Robin (STM32F103ZET6)
 | 
			
		||||
#
 | 
			
		||||
[env:mks_robin]
 | 
			
		||||
platform      = ststm32
 | 
			
		||||
framework     = arduino
 | 
			
		||||
board         = genericSTM32F103ZE
 | 
			
		||||
extra_scripts = buildroot/share/PlatformIO/scripts/mks_robin.py
 | 
			
		||||
build_flags   = !python Marlin/src/HAL/HAL_STM32F1/stm32f1_flag_script.py
 | 
			
		||||
  ${common.build_flags}
 | 
			
		||||
src_filter    = ${common.default_src_filter} +<src/HAL/HAL_STM32F1>
 | 
			
		||||
lib_deps      = ${common.lib_deps}
 | 
			
		||||
lib_ignore    = c1921b4
 | 
			
		||||
  libf3c
 | 
			
		||||
  lib066
 | 
			
		||||
  Adafruit NeoPixel_ID28
 | 
			
		||||
  Adafruit NeoPixel
 | 
			
		||||
  libf3e
 | 
			
		||||
  TMC26XStepper
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Teensy 3.5 / 3.6 (ARM Cortex-M4)
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user