From 83a726679bd4d4abf37604c9a3e14d1096ef1369 Mon Sep 17 00:00:00 2001 From: Sergey Date: Mon, 8 Jun 2020 11:18:58 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B8=D0=BD=D0=B8=D1=86=D0=B8=D0=B0=D0=BB?= =?UTF-8?q?=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BD=D0=BE=D0=B3=20SPI?= =?UTF-8?q?,=20=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=20=D0=B2=D1=8B?= =?UTF-8?q?=D0=B2=D0=BE=D0=B4=20=D0=BE=D1=82=D0=BB=D0=B0=D0=B4=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=B2=20SDIO.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration.h | 3 +- Marlin/src/HAL/STM32F1/HAL.h | 2 -- Marlin/src/HAL/STM32F1/eeprom_spi_w25q.cpp | 21 ++++++++------ Marlin/src/HAL/STM32F1/sdio.cpp | 33 ++++++++++++++++------ Marlin/src/gcode/gcode.cpp | 2 +- 5 files changed, 38 insertions(+), 23 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index e9f6e0207e..e89fed7032 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -763,7 +763,6 @@ * Override with M201 * X, Y, Z, E0 [, E1[, E2...]] */ -// @efim-a-efim - decreased E0 acceleration to make it less noisy (yes, even with TMC2208 drivers) #define DEFAULT_MAX_ACCELERATION { 1000, 1000, 100, 800 } #define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 @@ -1155,7 +1154,7 @@ * For other boards you may need to define FIL_RUNOUT_PIN, FIL_RUNOUT2_PIN, etc. * By default the firmware assumes HIGH=FILAMENT PRESENT. */ -#define FILAMENT_RUNOUT_SENSOR +//#define FILAMENT_RUNOUT_SENSOR #if ENABLED(FILAMENT_RUNOUT_SENSOR) #define NUM_RUNOUT_SENSORS 1 // Number of sensors, up to one per extruder. Define a FIL_RUNOUT#_PIN for each. #define FIL_RUNOUT_INVERTING true // Set to true to invert the logic of the sensor. diff --git a/Marlin/src/HAL/STM32F1/HAL.h b/Marlin/src/HAL/STM32F1/HAL.h index b87800c194..08e25a3a54 100644 --- a/Marlin/src/HAL/STM32F1/HAL.h +++ b/Marlin/src/HAL/STM32F1/HAL.h @@ -267,8 +267,6 @@ void eeprom_read_block(void *__dst, const void *__src, size_t __n); void eeprom_update_block(const void *__src, void *__dst, size_t __n); - - // // ADC // diff --git a/Marlin/src/HAL/STM32F1/eeprom_spi_w25q.cpp b/Marlin/src/HAL/STM32F1/eeprom_spi_w25q.cpp index 495500e3ba..625e0c265f 100644 --- a/Marlin/src/HAL/STM32F1/eeprom_spi_w25q.cpp +++ b/Marlin/src/HAL/STM32F1/eeprom_spi_w25q.cpp @@ -63,24 +63,28 @@ CS - PB12 Out push-pull dwt_init(); - RCC->APB2ENR |= RCC_APB2ENR_IOPBEN|RCC_APB2ENR_AFIOEN; + RCC->APB2ENR |= RCC_APB2ENR_IOPBEN|RCC_APB2ENR_IOPAEN|RCC_APB2ENR_AFIOEN; tmp = PORTB->CRH; - tmp |= (GPIO_CRH_MODE13|GPIO_CRH_MODE15|GPIO_CRH_CNF13|GPIO_CRH_CNF15); - tmp &= ~(GPIO_CRH_MODE14|GPIO_CRH_CNF14); - tmp |= GPIO_CRH_CNF14_0; - tmp &= ~GPIO_CRH_CNF12; - tmp |= GPIO_CRH_MODE12; + tmp &= ~(GPIO_CRH_MODE14|GPIO_CRH_CNF14|GPIO_CRH_CNF12|GPIO_CRH_CNF13|GPIO_CRH_CNF14|GPIO_CRH_CNF15); + tmp |= (GPIO_CRH_MODE12|GPIO_CRH_MODE13|GPIO_CRH_MODE15|GPIO_CRH_CNF13_1|GPIO_CRH_CNF15_1|GPIO_CRH_CNF14_0); PORTB->CRH = tmp; + //CS PIN + tmp= PORTA->CRL; + tmp &= ~GPIO_CRL_CNF7; + tmp |= GPIO_CRL_MODE7; + PORTA->CRL = tmp; + + PORTA->BSRR = GPIO_BSRR_BS7; + SPI2_STOP; RCC->APB1ENR|= RCC_APB1ENR_SPI2EN; SPI2->CR1 = SPI_CR1_SSM|\ SPI_CR1_SSI|\ - (6 << SPI_CR1_BR_Pos)|\ - SPI_CR1_CPHA|\ + (4 << SPI_CR1_BR_Pos)|\ SPI_CR1_MSTR; SPI2->CR1 |= SPI_CR1_SPE; @@ -171,7 +175,6 @@ void eeprom_update_block(const void *__src, void *__dst, size_t __n){ uint8_t spi_send(uint8_t data){ - while((SPI2->SR & SPI_SR_TXE) == 0){NOP;}; SPI2->DR = data; diff --git a/Marlin/src/HAL/STM32F1/sdio.cpp b/Marlin/src/HAL/STM32F1/sdio.cpp index 838316b4f4..601d912c8a 100644 --- a/Marlin/src/HAL/STM32F1/sdio.cpp +++ b/Marlin/src/HAL/STM32F1/sdio.cpp @@ -26,6 +26,7 @@ #include #include "../../inc/MarlinConfig.h" // Allow pins/pins.h to set density +#include "../../module/mks_wifi/debug_to_uart.h" #if defined(STM32_HIGH_DENSITY) || defined(STM32_XL_DENSITY) @@ -82,10 +83,12 @@ bool SDIO_Init() { return true; } -bool SDIO_ReadBlock_DMA(uint32_t blockAddress, uint8_t *data) { - if (SDIO_GetCardState() != SDIO_CARD_TRANSFER) return false; - if (blockAddress >= SdCard.LogBlockNbr) return false; - if ((0x03 & (uint32_t)data)) return false; // misaligned data +uint32_t SDIO_ReadBlock_DMA(uint32_t blockAddress, uint8_t *data) { + uint32_t ret_val; + + if (SDIO_GetCardState() != SDIO_CARD_TRANSFER) return 0xF0000000; + if (blockAddress >= SdCard.LogBlockNbr) return 0xF1000000; + if ((0x03 & (uint32_t)data)) return 0xF2000000; // misaligned data if (SdCard.CardType != CARD_SDHC_SDXC) { blockAddress *= 512U; } @@ -99,30 +102,42 @@ bool SDIO_ReadBlock_DMA(uint32_t blockAddress, uint8_t *data) { if (!SDIO_CmdReadSingleBlock(blockAddress)) { SDIO_CLEAR_FLAG(SDIO_ICR_CMD_FLAGS); dma_disable(SDIO_DMA_DEV, SDIO_DMA_CHANNEL); - return false; + return 0xF3000000; } while (!SDIO_GET_FLAG(SDIO_STA_DATAEND | SDIO_STA_TRX_ERROR_FLAGS)) {} + ret_val = SDIO->STA; + dma_disable(SDIO_DMA_DEV, SDIO_DMA_CHANNEL); if (SDIO->STA & SDIO_STA_RXDAVL) { + DEBUG("SDIO_STA_RXDAVL"); while (SDIO->STA & SDIO_STA_RXDAVL) (void)SDIO->FIFO; SDIO_CLEAR_FLAG(SDIO_ICR_CMD_FLAGS | SDIO_ICR_DATA_FLAGS); - return false; + return ret_val; } if (SDIO_GET_FLAG(SDIO_STA_TRX_ERROR_FLAGS)) { + DEBUG("SDIO_STA_TRX_ERROR_FLAGS"); SDIO_CLEAR_FLAG(SDIO_ICR_CMD_FLAGS | SDIO_ICR_DATA_FLAGS); - return false; + return ret_val; } SDIO_CLEAR_FLAG(SDIO_ICR_CMD_FLAGS | SDIO_ICR_DATA_FLAGS); - return true; + return 0; } bool SDIO_ReadBlock(uint32_t blockAddress, uint8_t *data) { uint32_t retries = 10; - while (retries--) if (SDIO_ReadBlock_DMA(blockAddress, data)) return true; + uint32_t status; + while (retries--){ + status = SDIO_ReadBlock_DMA(blockAddress, data); + if (status == 0){ + return true; + }else{ + DEBUG("SD error, R: %d STA=0x%0X",retries,status); + } + } return false; } diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp index 828e0f2e51..23b28a73b2 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -230,7 +230,7 @@ void GcodeSuite::dwell(millis_t time) { void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) { KEEPALIVE_STATE(IN_HANDLER); - DEBUG("Cmd %c %d",parser.command_letter,parser.codenum); + //DEBUG("Cmd %c %d",parser.command_letter,parser.codenum); // Handle a known G, M, or T switch (parser.command_letter) {