하드웨어

GD32 마를린 DMA 문제 해결

팔나래 2023. 3. 6. 20:12
728x90

STM32F103의 수급 부족으로 인해 GD32F303 MCU를 탑재한 보드들이 시중에 많이 유통되었습니다.

문제는 GD32F303의 경우, DMA 컨트롤러의 결함으로 인해 LCD와 SD 카드 슬롯을 병렬로 사용할 수 없으며, 이로 인해 마를린 순정 펌웨어를 그대로 컴파일 해서 사용할 경우 SD 카드 읽기 오류가 발생할 수 있습니다.


해결 방법

Marlin > src > HAL > STM32 > tft > tft_fsmc.cpp

위 디렉토리를 따라 해당 파일을 찾아주시기 바랍니다.

HAL_SRAM_Init(&SRAMx, &Timing, &ExtTiming);

  __HAL_RCC_DMA2_CLK_ENABLE();

  #ifdef STM32F1xx
    DMAtx.Instance = DMA2_Channel1;
  #elif defined(STM32F4xx)
    DMAtx.Instance = DMA2_Stream0;
    DMAtx.Init.Channel = DMA_CHANNEL_0;
    DMAtx.Init.FIFOMode = DMA_FIFOMODE_ENABLE;

Line 103을 보면 위와 같이 되어 있는데, 이 부분을 아래와 같이 수정해 주시기 바랍니다.

HAL_SRAM_Init(&SRAMx, &Timing, &ExtTiming);

  #ifdef STM32F1xx
    __HAL_RCC_DMA1_CLK_ENABLE();
    DMAtx.Instance = DMA1_Channel1;
  #elif defined(STM32F4xx)
    __HAL_RCC_DMA2_CLK_ENABLE();
    DMAtx.Instance = DMA2_Stream0;
    DMAtx.Init.Channel = DMA_CHANNEL_0;
    DMAtx.Init.FIFOMode = DMA_FIFOMODE_ENABLE;

출처: https://github.com/jmz52/Marlin/commit/1940418bbe89d07863ed05c6cddb1edf285a5a31

728x90