+++ /dev/null
-diff --git b/STM32CubeMX/SCSI2SD-V6/Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_sd.c a/STM32CubeMX/SCSI2SD-V6/Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_sd.c
-index 4df41a0..7312d0e 100755
---- b/STM32CubeMX/SCSI2SD-V6/Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_sd.c
-+++ a/STM32CubeMX/SCSI2SD-V6/Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_sd.c
-@@ -178,7 +178,6 @@
-
- /* Includes ------------------------------------------------------------------*/
- #include "stm32f2xx_hal.h"
--
- #ifdef HAL_SD_MODULE_ENABLED
-
- /** @addtogroup STM32F2xx_HAL_Driver
-@@ -893,7 +892,7 @@ HAL_SD_ErrorTypedef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint32_t *pRead
- SDIO_IT_STBITERR));
-
- /* Enable SDIO DMA transfer */
-- __HAL_SD_SDIO_DMA_ENABLE();
-+ // MM disabled, as this fails on fast cards. __HAL_SD_SDIO_DMA_ENABLE();
-
- /* Configure DMA user callbacks */
- hsd->hdmarx->XferCpltCallback = SD_DMA_RxCplt;
-@@ -902,26 +901,29 @@ HAL_SD_ErrorTypedef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint32_t *pRead
- /* Enable the DMA Stream */
- HAL_DMA_Start_IT(hsd->hdmarx, (uint32_t)&hsd->Instance->FIFO, (uint32_t)pReadBuffer, (uint32_t)(BlockSize * NumberOfBlocks)/4);
-
-+ sdio_cmdinitstructure.Response = SDIO_RESPONSE_SHORT;
-+ sdio_cmdinitstructure.WaitForInterrupt = SDIO_WAIT_NO;
-+ sdio_cmdinitstructure.CPSM = SDIO_CPSM_ENABLE;
-+
- if (hsd->CardType == HIGH_CAPACITY_SD_CARD)
- {
- BlockSize = 512;
- ReadAddr /= 512;
-- }
-+ } else {
-
-- /* Set Block Size for Card */
-- sdio_cmdinitstructure.Argument = (uint32_t)BlockSize;
-- sdio_cmdinitstructure.CmdIndex = SD_CMD_SET_BLOCKLEN;
-- sdio_cmdinitstructure.Response = SDIO_RESPONSE_SHORT;
-- sdio_cmdinitstructure.WaitForInterrupt = SDIO_WAIT_NO;
-- sdio_cmdinitstructure.CPSM = SDIO_CPSM_ENABLE;
-- SDIO_SendCommand(hsd->Instance, &sdio_cmdinitstructure);
-+ /* Set Block Size for Card */
-+ sdio_cmdinitstructure.Argument = (uint32_t)BlockSize;
-+ sdio_cmdinitstructure.CmdIndex = SD_CMD_SET_BLOCKLEN;
-+
-+ SDIO_SendCommand(hsd->Instance, &sdio_cmdinitstructure);
-
-- /* Check for error conditions */
-- errorstate = SD_CmdResp1Error(hsd, SD_CMD_SET_BLOCKLEN);
-+ /* Check for error conditions */
-+ errorstate = SD_CmdResp1Error(hsd, SD_CMD_SET_BLOCKLEN);
-
-- if (errorstate != SD_OK)
-- {
-- return errorstate;
-+ if (errorstate != SD_OK)
-+ {
-+ return errorstate;
-+ }
- }
-
- /* Configure the SD DPSM (Data Path State Machine) */
-@@ -931,6 +933,11 @@ HAL_SD_ErrorTypedef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint32_t *pRead
- sdio_datainitstructure.TransferDir = SDIO_TRANSFER_DIR_TO_SDIO;
- sdio_datainitstructure.TransferMode = SDIO_TRANSFER_MODE_BLOCK;
- sdio_datainitstructure.DPSM = SDIO_DPSM_ENABLE;
-+
-+ // We cannot enable DMA too early on UHS-I class 3 SD cards, or else the
-+ // data is just discarded before the dpsm is started.
-+ __HAL_SD_SDIO_DMA_ENABLE();
-+
- SDIO_DataConfig(hsd->Instance, &sdio_datainitstructure);
-
- /* Check number of blocks command */
-@@ -1017,28 +1024,30 @@ HAL_SD_ErrorTypedef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint32_t *pWri
- HAL_DMA_Start_IT(hsd->hdmatx, (uint32_t)pWriteBuffer, (uint32_t)&hsd->Instance->FIFO, (uint32_t)(BlockSize * NumberOfBlocks)/4);
-
- /* Enable SDIO DMA transfer */
-- __HAL_SD_SDIO_DMA_ENABLE();
-+ // MM disabled, as this fails on fast cards. __HAL_SD_SDIO_DMA_ENABLE();
-+
-+ sdio_cmdinitstructure.Response = SDIO_RESPONSE_SHORT;
-+ sdio_cmdinitstructure.WaitForInterrupt = SDIO_WAIT_NO;
-+ sdio_cmdinitstructure.CPSM = SDIO_CPSM_ENABLE;
-
- if (hsd->CardType == HIGH_CAPACITY_SD_CARD)
- {
- BlockSize = 512;
- WriteAddr /= 512;
-- }
-+ } else {
-+ /* Set Block Size for Card */
-+ sdio_cmdinitstructure.Argument = (uint32_t)BlockSize;
-+ sdio_cmdinitstructure.CmdIndex = SD_CMD_SET_BLOCKLEN;
-
-- /* Set Block Size for Card */
-- sdio_cmdinitstructure.Argument = (uint32_t)BlockSize;
-- sdio_cmdinitstructure.CmdIndex = SD_CMD_SET_BLOCKLEN;
-- sdio_cmdinitstructure.Response = SDIO_RESPONSE_SHORT;
-- sdio_cmdinitstructure.WaitForInterrupt = SDIO_WAIT_NO;
-- sdio_cmdinitstructure.CPSM = SDIO_CPSM_ENABLE;
-- SDIO_SendCommand(hsd->Instance, &sdio_cmdinitstructure);
-+ SDIO_SendCommand(hsd->Instance, &sdio_cmdinitstructure);
-
-- /* Check for error conditions */
-- errorstate = SD_CmdResp1Error(hsd, SD_CMD_SET_BLOCKLEN);
-+ /* Check for error conditions */
-+ errorstate = SD_CmdResp1Error(hsd, SD_CMD_SET_BLOCKLEN);
-
-- if (errorstate != SD_OK)
-- {
-- return errorstate;
-+ if (errorstate != SD_OK)
-+ {
-+ return errorstate;
-+ }
- }
-
- /* Check number of blocks command */
-@@ -1049,13 +1058,34 @@ HAL_SD_ErrorTypedef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint32_t *pWri
- }
- else
- {
-+ /* MM: Prepare for write */
-+ sdio_cmdinitstructure.Argument = (uint32_t)(hsd->RCA << 16);
-+ sdio_cmdinitstructure.CmdIndex = SD_CMD_APP_CMD;
-+ SDIO_SendCommand(hsd->Instance, &sdio_cmdinitstructure);
-+ errorstate = SD_CmdResp1Error(hsd, SD_CMD_APP_CMD);
-+ if (errorstate != SD_OK)
-+ {
-+ return errorstate;
-+ }
-+ sdio_cmdinitstructure.Argument = (uint32_t)NumberOfBlocks;
-+ sdio_cmdinitstructure.CmdIndex = SD_CMD_SET_BLOCK_COUNT;
-+ SDIO_SendCommand(hsd->Instance, &sdio_cmdinitstructure);
-+ errorstate = SD_CmdResp1Error(hsd, SD_CMD_SET_BLOCK_COUNT);
-+ if (errorstate != SD_OK)
-+ {
-+ return errorstate;
-+ }
-+
-+ /* /MM */
-+
- /* Send CMD25 WRITE_MULT_BLOCK with argument data address */
- sdio_cmdinitstructure.CmdIndex = SD_CMD_WRITE_MULT_BLOCK;
- }
--
-+
- sdio_cmdinitstructure.Argument = (uint32_t)WriteAddr;
- SDIO_SendCommand(hsd->Instance, &sdio_cmdinitstructure);
-
-+
- /* Check for error conditions */
- if(NumberOfBlocks > 1)
- {
-@@ -1078,6 +1108,11 @@ HAL_SD_ErrorTypedef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint32_t *pWri
- sdio_datainitstructure.TransferDir = SDIO_TRANSFER_DIR_TO_CARD;
- sdio_datainitstructure.TransferMode = SDIO_TRANSFER_MODE_BLOCK;
- sdio_datainitstructure.DPSM = SDIO_DPSM_ENABLE;
-+
-+ // We cannot enable DMA too early on UHS-I class 3 SD cards, or else the
-+ // data is just discarded before the dpsm is started.
-+ __HAL_SD_SDIO_DMA_ENABLE();
-+
- SDIO_DataConfig(hsd->Instance, &sdio_datainitstructure);
-
- hsd->SdTransferErr = errorstate;
-@@ -1116,7 +1151,9 @@ HAL_SD_ErrorTypedef HAL_SD_CheckReadOperation(SD_HandleTypeDef *hsd, uint32_t Ti
-
- timeout = Timeout;
-
-- /* Wait until the Rx transfer is no longer active */
-+ /* Wait until the Rx transfer is no longer active. IE. fifo is empty.
-+Once FIFO is empty, the DMA will have finished and DmaTransferCplt should
-+be true */
- while((__HAL_SD_SDIO_GET_FLAG(hsd, SDIO_FLAG_RXACT)) && (timeout > 0))
- {
- timeout--;
-@@ -1916,10 +1953,12 @@ HAL_SD_ErrorTypedef HAL_SD_HighSpeed (SD_HandleTypeDef *hsd)
- __HAL_SD_SDIO_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
-
- /* Test if the switch mode HS is ok */
-- if ((SD_hs[13]& 2) != 2)
-- {
-- errorstate = SD_UNSUPPORTED_FEATURE;
-- }
-+ // MM: These bits (0 to 271) are reserved in the spec I'm looking at ???
-+ // Should be safe to ignore the result.
-+ //if ((SD_hs[13]& 2) != 2)
-+ //{
-+ //errorstate = SD_UNSUPPORTED_FEATURE;
-+ //}
- }
-
- return errorstate;
-diff --git b/STM32CubeMX/SCSI2SD-V6/Inc/stm32f2xx_hal_conf.h a/STM32CubeMX/SCSI2SD-V6/Inc/stm32f2xx_hal_conf.h
-index ef23c94..c899300 100755
---- b/STM32CubeMX/SCSI2SD-V6/Inc/stm32f2xx_hal_conf.h
-+++ a/STM32CubeMX/SCSI2SD-V6/Inc/stm32f2xx_hal_conf.h
-@@ -76,7 +76,7 @@
- //#define HAL_SMARTCARD_MODULE_ENABLED
- //#define HAL_WWDG_MODULE_ENABLED
- #define HAL_PCD_MODULE_ENABLED
--//#define HAL_HCD_MODULE_ENABLED
-+#define HAL_HCD_MODULE_ENABLED
- #define HAL_GPIO_MODULE_ENABLED
- #define HAL_DMA_MODULE_ENABLED
- #define HAL_RCC_MODULE_ENABLED
-diff --git b/STM32CubeMX/SCSI2SD-V6/Src/fsmc.c a/STM32CubeMX/SCSI2SD-V6/Src/fsmc.c
-index c257924..5261aa9 100755
---- b/STM32CubeMX/SCSI2SD-V6/Src/fsmc.c
-+++ a/STM32CubeMX/SCSI2SD-V6/Src/fsmc.c
-@@ -66,12 +66,28 @@ void MX_FSMC_Init(void)
- hsram1.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE;
- hsram1.Init.WriteBurst = FSMC_WRITE_BURST_DISABLE;
- /* Timing */
-+
-+ // 1 clock to read the address, + 1 for synchroniser skew
- Timing.AddressSetupTime = 2;
- Timing.AddressHoldTime = 1;
-+
-+ // Writes to device:
-+ // 1 for synchroniser skew (dbx also delayed)
-+ // 1 to skip hold time
-+ // 1 to write data.
-+
-+ // Reads from device:
-+ // 3 for syncroniser
-+ // 1 to write back to fsmc bus.
- Timing.DataSetupTime = 4;
-+
-+ // Allow a clock for us to release signals
-+ // Need to avoid both devices acting as outputs
-+ // on the multiplexed lines at the same time.
- Timing.BusTurnAroundDuration = 1;
-- Timing.CLKDivision = 16;
-- Timing.DataLatency = 17;
-+
-+ Timing.CLKDivision = 16; // Ignored for async
-+ Timing.DataLatency = 17; // Ignored for async
- Timing.AccessMode = FSMC_ACCESS_MODE_A;
- /* ExtTiming */
-
-@@ -91,7 +107,7 @@ static void HAL_FSMC_MspInit(void){
- }
- FSMC_Initialized = 1;
- /* Peripheral clock enable */
-- #__FSMC_CLK_ENABLE();
-+ __FSMC_CLK_ENABLE();
-
- /** FSMC GPIO Configuration
- PE7 ------> FSMC_DA4
-@@ -103,9 +119,6 @@ static void HAL_FSMC_MspInit(void){
- PE13 ------> FSMC_DA10
- PE14 ------> FSMC_DA11
- PE15 ------> FSMC_DA12
-- PD8 ------> FSMC_DA13
-- PD9 ------> FSMC_DA14
-- PD10 ------> FSMC_DA15
- PD14 ------> FSMC_DA0
- PD15 ------> FSMC_DA1
- PD0 ------> FSMC_DA2
-@@ -113,28 +126,31 @@ static void HAL_FSMC_MspInit(void){
- PD4 ------> FSMC_NOE
- PD5 ------> FSMC_NWE
- PD7 ------> FSMC_NE1
-+ PD8 ------> FSMC_DA13
-+ PD9 ------> FSMC_DA14
-+ PD10 ------> FSMC_DA15
- PB7 ------> FSMC_NL
- PE0 ------> FSMC_NBL0
- PE1 ------> FSMC_NBL1
- */
-+ // MM: GPIO_SPEED_FREQ_MEDIUM is rated up to 50MHz, which is fine as all the
-+ // fsmc timings are > 1 (ie. so clock speed / 2 is around 50MHz).
-+
- /* GPIO_InitStruct */
-- GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10
-- |GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14
-- |GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1;
-+ GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
-- GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
-+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM; //HIGH;
- GPIO_InitStruct.Alternate = GPIO_AF12_FSMC;
-
- HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
-
- /* GPIO_InitStruct */
-- GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_14
-- |GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4
-- |GPIO_PIN_5|GPIO_PIN_7;
-+ GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1
-+ |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
-- GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
-+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM; //HIGH;
- GPIO_InitStruct.Alternate = GPIO_AF12_FSMC;
-
- HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
-@@ -143,7 +159,7 @@ static void HAL_FSMC_MspInit(void){
- GPIO_InitStruct.Pin = GPIO_PIN_7;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
-- GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
-+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;//HIGH;
- GPIO_InitStruct.Alternate = GPIO_AF12_FSMC;
-
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
-@@ -186,9 +202,6 @@ static void HAL_FSMC_MspDeInit(void){
- PE13 ------> FSMC_DA10
- PE14 ------> FSMC_DA11
- PE15 ------> FSMC_DA12
-- PD8 ------> FSMC_DA13
-- PD9 ------> FSMC_DA14
-- PD10 ------> FSMC_DA15
- PD14 ------> FSMC_DA0
- PD15 ------> FSMC_DA1
- PD0 ------> FSMC_DA2
-@@ -196,18 +209,18 @@ static void HAL_FSMC_MspDeInit(void){
- PD4 ------> FSMC_NOE
- PD5 ------> FSMC_NWE
- PD7 ------> FSMC_NE1
-+ PD8 ------> FSMC_DA13
-+ PD9 ------> FSMC_DA14
-+ PD10 ------> FSMC_DA15
- PB7 ------> FSMC_NL
- PE0 ------> FSMC_NBL0
- PE1 ------> FSMC_NBL1
- */
-
-- HAL_GPIO_DeInit(GPIOE, GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10
-- |GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14
-- |GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1);
-+ HAL_GPIO_DeInit(GPIOE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15);
-
-- HAL_GPIO_DeInit(GPIOD, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_14
-- |GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4
-- |GPIO_PIN_5|GPIO_PIN_7);
-+ HAL_GPIO_DeInit(GPIOD, GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1
-+ |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10);
-
- HAL_GPIO_DeInit(GPIOB, GPIO_PIN_7);
-
-diff --git b/STM32CubeMX/SCSI2SD-V6/Src/main.c a/STM32CubeMX/SCSI2SD-V6/Src/main.c
-index 48e1f9a..a80e078 100755
---- b/STM32CubeMX/SCSI2SD-V6/Src/main.c
-+++ a/STM32CubeMX/SCSI2SD-V6/Src/main.c
-@@ -32,12 +32,10 @@
- */
- /* Includes ------------------------------------------------------------------*/
- #include "stm32f2xx_hal.h"
--#include "dma.h"
- #include "sdio.h"
- #include "spi.h"
--#include "tim.h"
- #include "usart.h"
- #include "usb_device.h"
- #include "gpio.h"
- #include "fsmc.h"
-
-@@ -87,14 +87,10 @@ int main(void)
-
- /* Initialize all configured peripherals */
- MX_GPIO_Init();
-- MX_DMA_Init();
-- SystemClock_Config();
- MX_FSMC_Init();
- MX_SDIO_SD_Init();
- MX_SPI1_Init();
-- MX_TIM4_Init();
-- MX_USART3_UART_Init();
-- MX_USB_DEVICE_Init();
-+ MX_USART3_UART_Init(); // Not used, but we don't want the pins floating.
-
- /* USER CODE BEGIN 2 */
- mainInit();
-diff --git b/STM32CubeMX/SCSI2SD-V6/Src/sdio.c a/STM32CubeMX/SCSI2SD-V6/Src/sdio.c
-index e8b2ad8..0f9a34b 100755
---- b/STM32CubeMX/SCSI2SD-V6/Src/sdio.c
-+++ a/STM32CubeMX/SCSI2SD-V6/Src/sdio.c
-@@ -36,7 +36,6 @@
- #include "sdio.h"
-
- #include "gpio.h"
--#include "dma.h"
-
- /* USER CODE BEGIN 0 */
-
-@@ -59,9 +58,6 @@ void MX_SDIO_SD_Init(void)
- hsd.Init.BusWide = SDIO_BUS_WIDE_1B;
- hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
- hsd.Init.ClockDiv = 0;
-- HAL_SD_Init(&hsd, &SDCardInfo);
--
-- HAL_SD_WideBusOperation_Config(&hsd, SDIO_BUS_WIDE_4B);
-
- }
-
-@@ -143,6 +140,7 @@ void HAL_SD_MspInit(SD_HandleTypeDef* hsd)
- __HAL_LINKDMA(hsd,hdmarx,hdma_sdio_rx);
-
- /* Peripheral interrupt init*/
-+ HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
- HAL_NVIC_SetPriority(SDIO_IRQn, 0, 0);
- HAL_NVIC_EnableIRQ(SDIO_IRQn);
- /* USER CODE BEGIN SDIO_MspInit 1 */
-diff --git b/STM32CubeMX/SCSI2SD-V6/Src/spi.c a/STM32CubeMX/SCSI2SD-V6/Src/spi.c
-index cfb19ce..25e0745 100755
---- b/STM32CubeMX/SCSI2SD-V6/Src/spi.c
-+++ a/STM32CubeMX/SCSI2SD-V6/Src/spi.c
-@@ -54,6 +54,7 @@ void MX_SPI1_Init(void)
- hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;
- hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
- hspi1.Init.NSS = SPI_NSS_SOFT;
-+ // (96MHz / 2) / 4 = 12MHz. FPGA device allows up to 25MHz write
- hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
- hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
- hspi1.Init.TIMode = SPI_TIMODE_DISABLED;
-diff --git b/STM32CubeMX/SCSI2SD-V6/Src/stm32f2xx_hal_msp.c a/STM32CubeMX/SCSI2SD-V6/Src/stm32f2xx_hal_msp.c
-index e6b7783..b7ab0a3 100755
---- b/STM32CubeMX/SCSI2SD-V6/Src/stm32f2xx_hal_msp.c
-+++ a/STM32CubeMX/SCSI2SD-V6/Src/stm32f2xx_hal_msp.c
-@@ -50,14 +50,6 @@ void HAL_MspInit(void)
- HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
-
- /* System interrupt init*/
-- /* MemoryManagement_IRQn interrupt configuration */
-- HAL_NVIC_SetPriority(MemoryManagement_IRQn, 0, 0);
-- /* BusFault_IRQn interrupt configuration */
-- HAL_NVIC_SetPriority(BusFault_IRQn, 0, 0);
-- /* UsageFault_IRQn interrupt configuration */
-- HAL_NVIC_SetPriority(UsageFault_IRQn, 0, 0);
-- /* DebugMonitor_IRQn interrupt configuration */
-- HAL_NVIC_SetPriority(DebugMonitor_IRQn, 0, 0);
- /* SysTick_IRQn interrupt configuration */
- HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
-
-diff --git b/STM32CubeMX/SCSI2SD-V6/Src/usbd_conf.c a/STM32CubeMX/SCSI2SD-V6/Src/usbd_conf.c
-index 272d388..07387ca 100755
---- b/STM32CubeMX/SCSI2SD-V6/Src/usbd_conf.c
-+++ a/STM32CubeMX/SCSI2SD-V6/Src/usbd_conf.c
-@@ -108,7 +108,18 @@ void HAL_PCD_MspDeInit(PCD_HandleTypeDef* hpcd)
- PA11 ------> USB_OTG_FS_DM
- PA12 ------> USB_OTG_FS_DP
- */
-- HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_11|GPIO_PIN_12);
-+ // HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_11|GPIO_PIN_12);
-+ // MM: Don't let pins float.
-+ GPIO_InitTypeDef GPIO_InitStruct;
-+ GPIO_InitStruct.Pin = GPIO_PIN_9;
-+ GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
-+ GPIO_InitStruct.Pull = GPIO_PULLDOWN;
-+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
-+
-+ GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12;
-+ GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
-+ GPIO_InitStruct.Pull = GPIO_PULLDOWN;
-+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
-
- /* Peripheral interrupt Deinit*/
- HAL_NVIC_DisableIRQ(OTG_FS_IRQn);
-@@ -294,9 +305,11 @@ USBD_StatusTypeDef USBD_LL_Init (USBD_HandleTypeDef *pdev)
- hpcd_USB_OTG_FS.Init.use_dedicated_ep1 = DISABLE;
- HAL_PCD_Init(&hpcd_USB_OTG_FS);
-
-+ // Sum of all FIFOs must be <= 320.
- HAL_PCD_SetRxFiFo(&hpcd_USB_OTG_FS, 0x80);
- HAL_PCD_SetTxFiFo(&hpcd_USB_OTG_FS, 0, 0x40);
-- HAL_PCD_SetTxFiFo(&hpcd_USB_OTG_FS, 1, 0x80);
-+ HAL_PCD_SetTxFiFo(&hpcd_USB_OTG_FS, 1, 0x40);
-+ HAL_PCD_SetTxFiFo(&hpcd_USB_OTG_FS, 2, 0x40);
- }
- return USBD_OK;
- }