Browse Source

SDIO fix

pull/3/head
Sergey 4 years ago
parent
commit
427f6e6b60
  1. 4
      Marlin/src/HAL/STM32F1/sdio.cpp
  2. 4
      Marlin/src/HAL/STM32F1/sdio.h
  3. 23
      Marlin/src/module/mks_wifi/mkf_test_sdio.cpp
  4. 6
      Marlin/src/module/mks_wifi/mks_test_sdio.h
  5. 5
      Marlin/src/module/mks_wifi/mks_wifi.cpp
  6. 2
      Marlin/src/module/mks_wifi/mks_wifi.h

4
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);

4
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

23
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");
}

6
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

5
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();

2
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

Loading…
Cancel
Save