From 427f6e6b60398a15dd4022a5c399b3ae4b52d899 Mon Sep 17 00:00:00 2001 From: Sergey Date: Mon, 8 Jun 2020 13:36:06 +0300 Subject: [PATCH] SDIO fix --- Marlin/src/HAL/STM32F1/sdio.cpp | 4 +++- Marlin/src/HAL/STM32F1/sdio.h | 4 ++-- Marlin/src/module/mks_wifi/mkf_test_sdio.cpp | 23 ++++++++++++++++++++ Marlin/src/module/mks_wifi/mks_test_sdio.h | 6 +++++ Marlin/src/module/mks_wifi/mks_wifi.cpp | 5 +++++ Marlin/src/module/mks_wifi/mks_wifi.h | 2 ++ 6 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 Marlin/src/module/mks_wifi/mkf_test_sdio.cpp create mode 100644 Marlin/src/module/mks_wifi/mks_test_sdio.h diff --git a/Marlin/src/HAL/STM32F1/sdio.cpp b/Marlin/src/HAL/STM32F1/sdio.cpp index 601d912c8a..66dae3729e 100644 --- a/Marlin/src/HAL/STM32F1/sdio.cpp +++ b/Marlin/src/HAL/STM32F1/sdio.cpp @@ -95,6 +95,7 @@ uint32_t SDIO_ReadBlock_DMA(uint32_t blockAddress, uint8_t *data) { dma_setup_transfer(SDIO_DMA_DEV, SDIO_DMA_CHANNEL, &SDIO->FIFO, DMA_SIZE_32BITS, data, DMA_SIZE_32BITS, DMA_MINC_MODE); dma_set_num_transfers(SDIO_DMA_DEV, SDIO_DMA_CHANNEL, 128); dma_clear_isr_bits(SDIO_DMA_DEV, SDIO_DMA_CHANNEL); + dma_set_priority(SDIO_DMA_DEV,SDIO_DMA_CHANNEL,DMA_PRIORITY_VERY_HIGH); dma_enable(SDIO_DMA_DEV, SDIO_DMA_CHANNEL); sdio_setup_transfer(SDIO_DATA_TIMEOUT * (F_CPU / 1000U), 512, SDIO_BLOCKSIZE_512 | SDIO_DCTRL_DMAEN | SDIO_DCTRL_DTEN | SDIO_DIR_RX); @@ -106,7 +107,8 @@ uint32_t SDIO_ReadBlock_DMA(uint32_t blockAddress, uint8_t *data) { } while (!SDIO_GET_FLAG(SDIO_STA_DATAEND | SDIO_STA_TRX_ERROR_FLAGS)) {} - + while(SDIO_GET_FLAG(SDIO_STA_RXACT) || SDIO_GET_FLAG(SDIO_STA_RXDAVL)){}; + ret_val = SDIO->STA; dma_disable(SDIO_DMA_DEV, SDIO_DMA_CHANNEL); diff --git a/Marlin/src/HAL/STM32F1/sdio.h b/Marlin/src/HAL/STM32F1/sdio.h index 6aeac15247..c9806d42a8 100644 --- a/Marlin/src/HAL/STM32F1/sdio.h +++ b/Marlin/src/HAL/STM32F1/sdio.h @@ -100,9 +100,9 @@ #define SDIO_DATA_TIMEOUT 100U /* Read data transfer timeout */ #define SDIO_WRITE_TIMEOUT 200U /* Write data transfer timeout */ -// #define SDIO_CLOCK 18000000 /* 18 MHz */ +#define SDIO_CLOCK 18000000 /* 18 MHz */ // Setting SDIO_CLOCK to 4.5 MHz fixes random print interruptions with moving to endstops -#define SDIO_CLOCK 4500000 /* 4.5 MHz */ +//#define SDIO_CLOCK 4500000 /* 4.5 MHz */ // ------------------------ // Types diff --git a/Marlin/src/module/mks_wifi/mkf_test_sdio.cpp b/Marlin/src/module/mks_wifi/mkf_test_sdio.cpp new file mode 100644 index 0000000000..346deed934 --- /dev/null +++ b/Marlin/src/module/mks_wifi/mkf_test_sdio.cpp @@ -0,0 +1,23 @@ +#include "mks_test_sdio.h" +#include "../../MarlinCore.h" +#include "../../inc/MarlinConfig.h" +#include "../../libs/Segger/log.h" +#include "../../sd/cardreader.h" + + +void mks_test_sdio(void){ + uint8_t data[512]; + CardReader::mount(); + + DEBUG("Start sdio test"); + + for(uint32_t i=0; i<100000; i++){ + if((i%1000) == 0){ + DEBUG("Progress %d blocks",i); + } + SDIO_ReadBlock(i,data); + } + + DEBUG("Finish sdio test"); + +} \ No newline at end of file diff --git a/Marlin/src/module/mks_wifi/mks_test_sdio.h b/Marlin/src/module/mks_wifi/mks_test_sdio.h new file mode 100644 index 0000000000..9e16807cca --- /dev/null +++ b/Marlin/src/module/mks_wifi/mks_test_sdio.h @@ -0,0 +1,6 @@ +#ifndef MKS_WIFI_SDIOTEST_H +#define MKS_WIFI_SDIOTEST_H + +void mks_test_sdio(void); + +#endif \ No newline at end of file diff --git a/Marlin/src/module/mks_wifi/mks_wifi.cpp b/Marlin/src/module/mks_wifi/mks_wifi.cpp index 839d1b28d3..76cbb2b4e1 100644 --- a/Marlin/src/module/mks_wifi/mks_wifi.cpp +++ b/Marlin/src/module/mks_wifi/mks_wifi.cpp @@ -2,6 +2,7 @@ #include "../../lcd/ultralcd.h" #include "mks_wifi_sd.h" +#include "mks_test_sdio.h" uint8_t mks_in_buffer[ESP_PACKET_DATA_MAX_SIZE]; uint8_t mks_out_buffer[ESP_PACKET_DATA_MAX_SIZE]; @@ -30,6 +31,10 @@ void mks_wifi_init(void){ safe_delay(1000); WRITE(MKS_WIFI_IO4, LOW); + #ifdef SDIO_TEST_AT_STARTUP + mks_test_sdio(); + #endif + #ifdef LIST_FILES_AT_STARTUP mks_wifi_sd_deinit(); mks_wifi_sd_init(); diff --git a/Marlin/src/module/mks_wifi/mks_wifi.h b/Marlin/src/module/mks_wifi/mks_wifi.h index c7bfe84e33..41a1b1536c 100644 --- a/Marlin/src/module/mks_wifi/mks_wifi.h +++ b/Marlin/src/module/mks_wifi/mks_wifi.h @@ -6,6 +6,8 @@ #include "../../libs/Segger/log.h" #include "mks_wifi_settings.h" +//#define SDIO_TEST_AT_STARTUP + #define MKS_WIFI_SERIAL_NUM (uint8_t)1 #define WIFI_MODE_STA (uint8_t)2