From 66d51272af4383b689aebba3663cd3186cb59079 Mon Sep 17 00:00:00 2001 From: 3DSmitty <51137582+3DSmitty@users.noreply.github.com> Date: Sat, 15 Jun 2019 19:12:05 -0400 Subject: [PATCH] Fix SPI, SD for BIGTREETECH SKR Mini (#14287) --- .../src/HAL/HAL_STM32F1/HAL_spi_STM32F1.cpp | 47 ++++++------------- Marlin/src/HAL/HAL_STM32F1/spi_pins.h | 26 ++++++++-- Marlin/src/pins/pins_BIGTREE_SKR_MINI_V1_1.h | 26 ++++++---- 3 files changed, 51 insertions(+), 48 deletions(-) diff --git a/Marlin/src/HAL/HAL_STM32F1/HAL_spi_STM32F1.cpp b/Marlin/src/HAL/HAL_STM32F1/HAL_spi_STM32F1.cpp index 29713f4c1d..b5c49bd08d 100644 --- a/Marlin/src/HAL/HAL_STM32F1/HAL_spi_STM32F1.cpp +++ b/Marlin/src/HAL/HAL_STM32F1/HAL_spi_STM32F1.cpp @@ -36,20 +36,14 @@ // Includes // -------------------------------------------------------------------------- -#include "HAL.h" -#include "../shared/HAL_SPI.h" -#include "pins_arduino.h" -#include "spi_pins.h" +#include "../../inc/MarlinConfig.h" #include -#include "../../inc/MarlinConfigPre.h" // -------------------------------------------------------------------------- // Public Variables // -------------------------------------------------------------------------- -static SPISettings spiConfig; - // -------------------------------------------------------------------------- // Public functions // -------------------------------------------------------------------------- @@ -82,8 +76,7 @@ void spiBegin() { #if !PIN_EXISTS(SS) #error "SS_PIN not defined!" #endif - SET_OUTPUT(SS_PIN); - WRITE(SS_PIN, HIGH); + OUT_WRITE(SS_PIN, HIGH); } /** @@ -105,8 +98,11 @@ void spiInit(uint8_t spiRate) { case SPI_SPEED_6: clock = SPI_CLOCK_DIV64; break; default: clock = SPI_CLOCK_DIV2; // Default from the SPI library } - spiConfig = SPISettings(clock, MSBFIRST, SPI_MODE0); + SPI.setModule(SPI_DEVICE); SPI.begin(); + SPI.setClockDivider(clock); + SPI.setBitOrder(MSBFIRST); + SPI.setDataMode(SPI_MODE0); } /** @@ -117,9 +113,9 @@ void spiInit(uint8_t spiRate) { * @details */ uint8_t spiRec(void) { - SPI.beginTransaction(spiConfig); + WRITE(SS_PIN, LOW); uint8_t returnByte = SPI.transfer(0xFF); - SPI.endTransaction(); + WRITE(SS_PIN, HIGH); return returnByte; } @@ -133,9 +129,9 @@ uint8_t spiRec(void) { * @details Uses DMA */ void spiRead(uint8_t* buf, uint16_t nbyte) { - SPI.beginTransaction(spiConfig); + WRITE(SS_PIN, LOW); SPI.dmaTransfer(0, const_cast(buf), nbyte); - SPI.endTransaction(); + WRITE(SS_PIN, HIGH); } /** @@ -146,9 +142,9 @@ void spiRead(uint8_t* buf, uint16_t nbyte) { * @details */ void spiSend(uint8_t b) { - SPI.beginTransaction(spiConfig); + WRITE(SS_PIN, LOW); SPI.send(b); - SPI.endTransaction(); + WRITE(SS_PIN, HIGH); } /** @@ -160,25 +156,10 @@ void spiSend(uint8_t b) { * @details Use DMA */ void spiSendBlock(uint8_t token, const uint8_t* buf) { - SPI.beginTransaction(spiConfig); + WRITE(SS_PIN, LOW); SPI.send(token); SPI.dmaSend(const_cast(buf), 512); - SPI.endTransaction(); -} - -/** - * @brief Begin SPI transaction, set clock, bit order, data mode - * - * @param spiClock Clock setting - * @param bitOrder Bit Order setting - * @param dataMode Data Mode setting - * @return Nothing - * - * @details Uses an SPI Config via SPISettings - */ -void spiBeginTransaction(uint32_t spiClock, uint8_t bitOrder, uint8_t dataMode) { - spiConfig = SPISettings(spiClock, (BitOrder)bitOrder, dataMode); - SPI.beginTransaction(spiConfig); + WRITE(SS_PIN, HIGH); } #if ENABLED(SPI_EEPROM) diff --git a/Marlin/src/HAL/HAL_STM32F1/spi_pins.h b/Marlin/src/HAL/HAL_STM32F1/spi_pins.h index 97005a309e..388e760584 100644 --- a/Marlin/src/HAL/HAL_STM32F1/spi_pins.h +++ b/Marlin/src/HAL/HAL_STM32F1/spi_pins.h @@ -21,13 +21,29 @@ /** * HAL for stm32duino.com based on Libmaple and compatible (STM32F1) */ - /** * Define SPI Pins: SCK, MISO, MOSI, SS * * Any PIN can be used for Chip Select (SS) + * + * SPI1 is enabled by default */ -#define SCK_PIN PA5 -#define MISO_PIN PA6 -#define MOSI_PIN PA7 -#define SS_PIN PA4 +#if ENABLED(ENABLE_SPI3) + #define SPI_DEVICE 3 + #define SCK_PIN BOARD_SPI3_SCK_PIN + #define MISO_PIN BOARD_SPI3_MISO_PIN + #define MOSI_PIN BOARD_SPI3_MOSI_PIN + #define SS_PIN BOARD_SPI3_NSS_PIN +#elif ENABLED(ENABLE_SPI2) + #define SPI_DEVICE 2 + #define SCK_PIN BOARD_SPI2_SCK_PIN + #define MISO_PIN BOARD_SPI2_MISO_PIN + #define MOSI_PIN BOARD_SPI2_MOSI_PIN + #define SS_PIN BOARD_SPI2_NSS_PIN +#else + #define SPI_DEVICE 1 + #define SCK_PIN BOARD_SPI1_SCK_PIN + #define MISO_PIN BOARD_SPI1_MISO_PIN + #define MOSI_PIN BOARD_SPI1_MOSI_PIN + #define SS_PIN BOARD_SPI1_NSS_PIN +#endif \ No newline at end of file diff --git a/Marlin/src/pins/pins_BIGTREE_SKR_MINI_V1_1.h b/Marlin/src/pins/pins_BIGTREE_SKR_MINI_V1_1.h index 3f3f78446d..99630179e0 100644 --- a/Marlin/src/pins/pins_BIGTREE_SKR_MINI_V1_1.h +++ b/Marlin/src/pins/pins_BIGTREE_SKR_MINI_V1_1.h @@ -28,6 +28,9 @@ #define BOARD_NAME "BIGTREE SKR mini V1.1" #endif + //#define DISABLE_DEBUG + #define DISABLE_JTAG + // Ignore temp readings during develpment. //#define BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE @@ -89,14 +92,14 @@ // /** - * _____ _____ - * NC | · · | GND 5V | · · | GND - * RESET | · · | 1.31(SD_DETECT) (LCD_D7) 1.23 | · · | 1.22 (LCD_D6) - * (MOSI)0.18 | · · | 3.25(BTN_EN2) (LCD_D5) 1.21 | · · | 1.20 (LCD_D4) - * (SD_SS)0.16 | · · | 3.26(BTN_EN1) (LCD_RS) 1.19 | · · | 1.18 (LCD_EN) - * (SCK)0.15 | · · | 0.17(MISO) (BTN_ENC) 0.28 | · · | 1.30 (BEEPER) - *  ̄ ̄  ̄ ̄ - * EXP2 EXP1 + * _____ _____ + * NC | · · | GND 5V | · · | GND + * RESET | · · | PB9 (SD_DETECT) (LCD_D7) PC14 | · · | PC15 (LCD_D6) + * (MOSI) PB5 | · · | PB8 (BTN_EN2) (LCD_D5) PB7 | · · | PC13 (LCD_D4) + * (SD_SS) PA15 | · · | PD2 (BTN_EN1) (LCD_RS) PC12 | · · | PB6 (LCD_EN) + * (SCK) PB3 | · · | PB4 (MISO) (BTN_ENC) PC11 | · · | PC10 (BEEPER) + *  ̄ ̄ ̄  ̄ ̄ ̄ + * EXP2 EXP1 */ #if ENABLED(ULTRA_LCD) @@ -123,10 +126,13 @@ // SD Card // -// Marlin uses the SD drive attached to the LCD +// By default the onboard SD is enabled. +// To disable it and use an external SD (connected to LCD) +// enable STM32_SD_LCD. + //#define STM32_SD_LCD -#ifdef STM32_SD_LCD +#if ENABLED(STM32_SD_LCD) #define SD_DETECT_PIN PB9 #define ENABLE_SPI3 #else