From: Michael McMaster Date: Mon, 13 Jan 2020 08:51:49 +0000 (+1000) Subject: In-progress 2020 update X-Git-Tag: v6.3.0-2020~5 X-Git-Url: http://git.codesrc.com/gitweb.cgi?a=commitdiff_plain;h=4d9db5ebd3dadd4efb58962d23e59668a2801065;p=SCSI2SD-V6.git In-progress 2020 update --- diff --git a/STM32CubeMX/SCSI2SD-V6/Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_sd.c b/STM32CubeMX/SCSI2SD-V6/Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_sd.c index 4df41a0a..233f4249 100755 --- a/STM32CubeMX/SCSI2SD-V6/Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_sd.c +++ b/STM32CubeMX/SCSI2SD-V6/Drivers/STM32F2xx_HAL_Driver/Src/stm32f2xx_hal_sd.c @@ -893,7 +893,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; @@ -901,27 +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; - } - - /* 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); + } else { + /* 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,29 @@ 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,6 +1057,26 @@ 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; } @@ -1078,6 +1106,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 +1149,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 +1951,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 a/STM32CubeMX/SCSI2SD-V6/Inc/stm32f2xx_hal_conf.h b/STM32CubeMX/SCSI2SD-V6/Inc/stm32f2xx_hal_conf.h index ef23c94f..223aa4a2 100755 --- a/STM32CubeMX/SCSI2SD-V6/Inc/stm32f2xx_hal_conf.h +++ b/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 a/STM32CubeMX/SCSI2SD-V6/Inc/stm32f2xx_it.h b/STM32CubeMX/SCSI2SD-V6/Inc/stm32f2xx_it.h index 5c39a9d7..293f87be 100755 --- a/STM32CubeMX/SCSI2SD-V6/Inc/stm32f2xx_it.h +++ b/STM32CubeMX/SCSI2SD-V6/Inc/stm32f2xx_it.h @@ -49,6 +49,7 @@ void SysTick_Handler(void); void EXTI4_IRQHandler(void); void SDIO_IRQHandler(void); void DMA2_Stream3_IRQHandler(void); +void OTG_FS_IRQHandler(void); void DMA2_Stream6_IRQHandler(void); void OTG_HS_IRQHandler(void); diff --git a/STM32CubeMX/SCSI2SD-V6/Inc/usb_device.h b/STM32CubeMX/SCSI2SD-V6/Inc/usb_device.h index dd6f2867..4ccb6216 100755 --- a/STM32CubeMX/SCSI2SD-V6/Inc/usb_device.h +++ b/STM32CubeMX/SCSI2SD-V6/Inc/usb_device.h @@ -42,7 +42,7 @@ #include "stm32f2xx_hal.h" #include "usbd_def.h" -extern USBD_HandleTypeDef hUsbDeviceHS; +extern USBD_HandleTypeDef hUsbDeviceFS; /* USB_Device init function */ void MX_USB_DEVICE_Init(void); diff --git a/STM32CubeMX/SCSI2SD-V6/Inc/usbd_conf.h b/STM32CubeMX/SCSI2SD-V6/Inc/usbd_conf.h index a3c56187..b4dd875e 100755 --- a/STM32CubeMX/SCSI2SD-V6/Inc/usbd_conf.h +++ b/STM32CubeMX/SCSI2SD-V6/Inc/usbd_conf.h @@ -57,7 +57,7 @@ */ /*---------- -----------*/ -#define USBD_MAX_NUM_INTERFACES 1 +#define USBD_MAX_NUM_INTERFACES 2 /*---------- -----------*/ #define USBD_MAX_NUM_CONFIGURATION 1 /*---------- -----------*/ @@ -70,8 +70,6 @@ #define USBD_LPM_ENABLED 0 /*---------- -----------*/ #define USBD_SELF_POWERED 1 -/*---------- -----------*/ -#define MSC_MEDIA_PACKET 512 /****************************************/ /* #define for FS and HS identification */ diff --git a/STM32CubeMX/SCSI2SD-V6/Inc/usbd_desc.h b/STM32CubeMX/SCSI2SD-V6/Inc/usbd_desc.h index a7036688..50dfc6fc 100755 --- a/STM32CubeMX/SCSI2SD-V6/Inc/usbd_desc.h +++ b/STM32CubeMX/SCSI2SD-V6/Inc/usbd_desc.h @@ -75,7 +75,7 @@ /** @defgroup USBD_DESC_Exported_Variables * @{ */ -extern USBD_DescriptorsTypeDef HS_Desc; +extern USBD_DescriptorsTypeDef FS_Desc; /** * @} */ diff --git a/STM32CubeMX/SCSI2SD-V6/SCSI2SD-V6.ioc b/STM32CubeMX/SCSI2SD-V6/SCSI2SD-V6.ioc index a1b5b62b..2255c6e8 100755 --- a/STM32CubeMX/SCSI2SD-V6/SCSI2SD-V6.ioc +++ b/STM32CubeMX/SCSI2SD-V6/SCSI2SD-V6.ioc @@ -67,16 +67,17 @@ KeepUserPlacement=true Mcu.Family=STM32F2 Mcu.IP0=DMA Mcu.IP1=FSMC -Mcu.IP10=USB_OTG_HS +Mcu.IP10=USB_OTG_FS +Mcu.IP11=USB_OTG_HS Mcu.IP2=NVIC Mcu.IP3=RCC Mcu.IP4=SDIO Mcu.IP5=SPI1 -Mcu.IP6=TIM4 -Mcu.IP7=UART4 -Mcu.IP8=USB_DEVICE -Mcu.IP9=USB_OTG_FS -Mcu.IPNb=11 +Mcu.IP6=SYS +Mcu.IP7=TIM4 +Mcu.IP8=UART4 +Mcu.IP9=USB_DEVICE +Mcu.IPNb=12 Mcu.Name=STM32F205V(B-C-E-F-G)Tx Mcu.Package=LQFP100 Mcu.Pin0=PE2 @@ -160,23 +161,32 @@ Mcu.Pin79=PB9 Mcu.Pin8=PH0-OSC_IN Mcu.Pin80=PE0 Mcu.Pin81=PE1 -Mcu.Pin82=VP_TIM4_VS_ControllerModeClock -Mcu.Pin83=VP_USB_DEVICE_VS_USB_DEVICE_MSC_HS +Mcu.Pin82=VP_SYS_VS_Systick +Mcu.Pin83=VP_TIM4_VS_ControllerModeClock +Mcu.Pin84=VP_USB_DEVICE_VS_USB_DEVICE_MSC_HS Mcu.Pin9=PH1-OSC_OUT -Mcu.PinsNb=84 +Mcu.PinsNb=85 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F205VCTx -MxCube.Version=4.11.0 -MxDb.Version=DB.4.0.110 +MxCube.Version=5.4.0 +MxDb.Version=DB.5.0.40 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:false\:false\:false NVIC.DMA2_Stream3_IRQn=true\:0\:0\:false\:false\:true\:true\:true NVIC.DMA2_Stream6_IRQn=true\:0\:0\:false\:false\:true\:true\:true +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:false\:false\:false NVIC.EXTI4_IRQn=true\:10\:0\:true\:false\:true\:true\:true NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:false\:false\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:false\:false\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:false\:false\:false NVIC.OTG_HS_IRQn=true\:0\:0\:false\:false\:true\:false\:true +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:false\:false\:false NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 NVIC.SDIO_IRQn=true\:0\:0\:true\:false\:true\:true\:true +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:false NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:true\:true +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:false\:false\:false PA0-WKUP.Locked=true PA0-WKUP.Mode=Asynchronous PA0-WKUP.Signal=UART4_TX @@ -217,7 +227,7 @@ PA7.Locked=true PA7.Mode=Full_Duplex_Master PA7.Signal=SPI1_MOSI PA8.GPIOParameters=GPIO_Speed -PA8.GPIO_Speed=GPIO_SPEED_HIGH +PA8.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH PA8.Mode=Clock-out-1 PA8.Signal=RCC_MCO_1 PA9.GPIOParameters=GPIO_Label @@ -246,8 +256,9 @@ PB14.GPIOParameters=GPIO_Label PB14.GPIO_Label=nTERM_EN PB14.Locked=true PB14.Signal=GPIO_Output -PB15.GPIOParameters=GPIO_Label +PB15.GPIOParameters=GPIO_PuPd,GPIO_Label PB15.GPIO_Label=LED_IO +PB15.GPIO_PuPd=GPIO_PULLDOWN PB15.Locked=true PB15.Signal=GPIO_Output PB2.GPIOParameters=GPIO_PuPd,GPIO_Label @@ -266,7 +277,7 @@ PB5.Signal=USB_OTG_HS_ULPI_D7 PB6.Locked=true PB6.Signal=GPIO_Analog PB7.GPIOParameters=GPIO_Speed_High_Default -PB7.GPIO_Speed_High_Default=GPIO_SPEED_MEDIUM +PB7.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_MEDIUM PB7.Signal=FSMC_NL PB8.GPIOParameters=GPIO_PuPd,GPIO_Label PB8.GPIO_Label=nSD_WP @@ -333,16 +344,24 @@ PC9.GPIOParameters=GPIO_PuPd PC9.GPIO_PuPd=GPIO_PULLUP PC9.Mode=SD_4_bits_Wide_bus PC9.Signal=SDIO_D1 +PCC.Checker=false +PCC.Line=STM32F2x5 +PCC.MCU=STM32F205V(B-C-E-F-G)Tx +PCC.PartNumber=STM32F205VCTx +PCC.Seq0=0 +PCC.Series=STM32F2 +PCC.Temperature=25 +PCC.Vdd=3.3 PD0.GPIOParameters=GPIO_Speed_High_Default -PD0.GPIO_Speed_High_Default=GPIO_SPEED_MEDIUM +PD0.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_MEDIUM PD0.Mode=16b-da1 PD0.Signal=FSMC_DA2 PD1.GPIOParameters=GPIO_Speed_High_Default -PD1.GPIO_Speed_High_Default=GPIO_SPEED_MEDIUM +PD1.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_MEDIUM PD1.Mode=16b-da1 PD1.Signal=FSMC_DA3 PD10.GPIOParameters=GPIO_Speed_High_Default -PD10.GPIO_Speed_High_Default=GPIO_SPEED_MEDIUM +PD10.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_MEDIUM PD10.Mode=16b-da1 PD10.Signal=FSMC_DA15 PD11.Locked=true @@ -355,11 +374,11 @@ PD13.GPIO_PuPd=GPIO_NOPULL PD13.Locked=true PD13.Signal=GPIO_Output PD14.GPIOParameters=GPIO_Speed_High_Default -PD14.GPIO_Speed_High_Default=GPIO_SPEED_MEDIUM +PD14.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_MEDIUM PD14.Mode=16b-da1 PD14.Signal=FSMC_DA0 PD15.GPIOParameters=GPIO_Speed_High_Default -PD15.GPIO_Speed_High_Default=GPIO_SPEED_MEDIUM +PD15.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_MEDIUM PD15.Mode=16b-da1 PD15.Signal=FSMC_DA1 PD2.GPIOParameters=GPIO_PuPd @@ -372,11 +391,11 @@ PD3.GPIO_PuPd=GPIO_PULLDOWN PD3.Locked=true PD3.Signal=GPIO_Input PD4.GPIOParameters=GPIO_Speed_High_Default -PD4.GPIO_Speed_High_Default=GPIO_SPEED_MEDIUM +PD4.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_MEDIUM PD4.Mode=MuxedPsram1 PD4.Signal=FSMC_NOE PD5.GPIOParameters=GPIO_Speed_High_Default -PD5.GPIO_Speed_High_Default=GPIO_SPEED_MEDIUM +PD5.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_MEDIUM PD5.Mode=MuxedPsram1 PD5.Signal=FSMC_NWE PD6.GPIOParameters=GPIO_Label @@ -384,47 +403,47 @@ PD6.GPIO_Label=NWAIT_UNUSED PD6.Locked=true PD6.Signal=GPIO_Analog PD7.GPIOParameters=GPIO_Speed_High_Default -PD7.GPIO_Speed_High_Default=GPIO_SPEED_MEDIUM +PD7.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_MEDIUM PD7.Mode=NorPsramChipSelect1_1 PD7.Signal=FSMC_NE1 PD8.GPIOParameters=GPIO_Speed_High_Default -PD8.GPIO_Speed_High_Default=GPIO_SPEED_MEDIUM +PD8.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_MEDIUM PD8.Mode=16b-da1 PD8.Signal=FSMC_DA13 PD9.GPIOParameters=GPIO_Speed_High_Default -PD9.GPIO_Speed_High_Default=GPIO_SPEED_MEDIUM +PD9.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_MEDIUM PD9.Mode=16b-da1 PD9.Signal=FSMC_DA14 PE0.GPIOParameters=GPIO_Speed_High_Default -PE0.GPIO_Speed_High_Default=GPIO_SPEED_MEDIUM +PE0.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_MEDIUM PE0.Mode=2ByteEnable1 PE0.Signal=FSMC_NBL0 PE1.GPIOParameters=GPIO_Speed_High_Default -PE1.GPIO_Speed_High_Default=GPIO_SPEED_MEDIUM +PE1.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_MEDIUM PE1.Mode=2ByteEnable1 PE1.Signal=FSMC_NBL1 PE10.GPIOParameters=GPIO_Speed_High_Default -PE10.GPIO_Speed_High_Default=GPIO_SPEED_MEDIUM +PE10.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_MEDIUM PE10.Mode=16b-da1 PE10.Signal=FSMC_DA7 PE11.GPIOParameters=GPIO_Speed_High_Default -PE11.GPIO_Speed_High_Default=GPIO_SPEED_MEDIUM +PE11.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_MEDIUM PE11.Mode=16b-da1 PE11.Signal=FSMC_DA8 PE12.GPIOParameters=GPIO_Speed_High_Default -PE12.GPIO_Speed_High_Default=GPIO_SPEED_MEDIUM +PE12.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_MEDIUM PE12.Mode=16b-da1 PE12.Signal=FSMC_DA9 PE13.GPIOParameters=GPIO_Speed_High_Default -PE13.GPIO_Speed_High_Default=GPIO_SPEED_MEDIUM +PE13.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_MEDIUM PE13.Mode=16b-da1 PE13.Signal=FSMC_DA10 PE14.GPIOParameters=GPIO_Speed_High_Default -PE14.GPIO_Speed_High_Default=GPIO_SPEED_MEDIUM +PE14.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_MEDIUM PE14.Mode=16b-da1 PE14.Signal=FSMC_DA11 PE15.GPIOParameters=GPIO_Speed_High_Default -PE15.GPIO_Speed_High_Default=GPIO_SPEED_MEDIUM +PE15.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_MEDIUM PE15.Mode=16b-da1 PE15.Signal=FSMC_DA12 PE2.GPIOParameters=GPIO_PuPd,GPIO_Label @@ -449,15 +468,15 @@ PE6.GPIO_PuPd=GPIO_PULLDOWN PE6.Locked=true PE6.Signal=GPIO_Input PE7.GPIOParameters=GPIO_Speed_High_Default -PE7.GPIO_Speed_High_Default=GPIO_SPEED_MEDIUM +PE7.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_MEDIUM PE7.Mode=16b-da1 PE7.Signal=FSMC_DA4 PE8.GPIOParameters=GPIO_Speed_High_Default -PE8.GPIO_Speed_High_Default=GPIO_SPEED_MEDIUM +PE8.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_MEDIUM PE8.Mode=16b-da1 PE8.Signal=FSMC_DA5 PE9.GPIOParameters=GPIO_Speed_High_Default -PE9.GPIO_Speed_High_Default=GPIO_SPEED_MEDIUM +PE9.GPIO_Speed_High_Default=GPIO_SPEED_FREQ_MEDIUM PE9.Mode=16b-da1 PE9.Signal=FSMC_DA6 PH0-OSC_IN.Mode=HSE-External-Oscillator @@ -505,29 +524,30 @@ RCC.EthernetFreq_Value=108000000 RCC.FCLKCortexFreq_Value=108000000 RCC.FamilyName=M RCC.HCLKFreq_Value=108000000 -RCC.HSE_VALUE=20000000 +RCC.HSE_VALUE=12000000 RCC.HSI_VALUE=16000000 RCC.I2SClocksFreq_Value=96000000 -RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSE_VALUE,LSI_VALUE,MCO1PinFreq_Value,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLP,PLLQ,RCC_MCO1Source,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VcooutputI2S +RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSE_VALUE,LSI_VALUE,MCO1PinFreq_Value,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLP,PLLQ,PLLSourceVirtual,RCC_MCO1Source,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VcooutputI2S RCC.LSE_VALUE=32768 RCC.LSI_VALUE=32000 RCC.MCO1PinFreq_Value=108000000 RCC.MCO2PinFreq_Value=108000000 RCC.PLLCLKFreq_Value=108000000 -RCC.PLLM=20 +RCC.PLLM=12 RCC.PLLN=432 RCC.PLLP=RCC_PLLP_DIV4 RCC.PLLQ=9 +RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE RCC.RCC_MCO1Source=RCC_MCO1SOURCE_PLLCLK RCC.RTCFreq_Value=32000 -RCC.RTCHSEDivFreq_Value=10000000 +RCC.RTCHSEDivFreq_Value=6000000 RCC.SYSCLKFreq_VALUE=108000000 RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK RCC.VCOI2SOutputFreq_Value=192000000 RCC.VCOInputFreq_Value=1000000 RCC.VCOOutputFreq_Value=432000000 RCC.VcooutputI2S=96000000 -SH.FSMC_NL.0=FSMC_NL,MuxedPsram1 +SH.FSMC_NL.0=FSMC_NL,AddressValid1 SH.FSMC_NL.ConfNb=1 SH.GPXTI4.0=GPIO_EXTI4 SH.GPXTI4.ConfNb=1 @@ -537,13 +557,15 @@ SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_4 SPI1.CLKPhase=SPI_PHASE_2EDGE SPI1.CLKPolarity=SPI_POLARITY_HIGH SPI1.CalculateBaudRate=13.5 MBits/s -SPI1.IPParameters=VirtualType,Mode,CalculateBaudRate,BaudRatePrescaler,CLKPolarity,CLKPhase +SPI1.Direction=SPI_DIRECTION_2LINES +SPI1.IPParameters=VirtualType,Mode,CalculateBaudRate,BaudRatePrescaler,CLKPolarity,CLKPhase,Direction SPI1.Mode=SPI_MODE_MASTER SPI1.VirtualType=VM_MASTER UART4.BaudRate=9600 UART4.IPParameters=VirtualMode,BaudRate UART4.VirtualMode=Asynchronous -USB_DEVICE.IPParameters=VirtualMode-MSC_HS,USBD_HandleTypeDef-MSC_HS,VirtualModeHS +USB_DEVICE.CLASS_NAME_HS=MSC +USB_DEVICE.IPParameters=VirtualMode-MSC_HS,USBD_HandleTypeDef-MSC_HS,VirtualModeHS,CLASS_NAME_HS USB_DEVICE.USBD_HandleTypeDef-MSC_HS=hUsbDeviceHS USB_DEVICE.VirtualMode-MSC_HS=Msc USB_DEVICE.VirtualModeHS=Msc_HS @@ -552,6 +574,8 @@ USB_OTG_FS.VirtualMode=Device_Only USB_OTG_HS.IPParameters=VirtualMode-Device_HS,dma_enable-Device_HS USB_OTG_HS.VirtualMode-Device_HS=Device_HS USB_OTG_HS.dma_enable-Device_HS=ENABLE +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick VP_TIM4_VS_ControllerModeClock.Mode=Clock Mode VP_TIM4_VS_ControllerModeClock.Signal=TIM4_VS_ControllerModeClock VP_USB_DEVICE_VS_USB_DEVICE_MSC_HS.Mode=MSC_HS diff --git a/STM32CubeMX/SCSI2SD-V6/Src/fsmc.c b/STM32CubeMX/SCSI2SD-V6/Src/fsmc.c index c2579243..9f34729a 100755 --- a/STM32CubeMX/SCSI2SD-V6/Src/fsmc.c +++ b/STM32CubeMX/SCSI2SD-V6/Src/fsmc.c @@ -91,7 +91,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 diff --git a/STM32CubeMX/SCSI2SD-V6/Src/gpio.c b/STM32CubeMX/SCSI2SD-V6/Src/gpio.c index eb469982..78e5996f 100755 --- a/STM32CubeMX/SCSI2SD-V6/Src/gpio.c +++ b/STM32CubeMX/SCSI2SD-V6/Src/gpio.c @@ -117,13 +117,20 @@ void MX_GPIO_Init(void) GPIO_InitStruct.Pull = GPIO_PULLDOWN; HAL_GPIO_Init(BOOT1_GPIO_Port, &GPIO_InitStruct); - /*Configure GPIO pins : PBPin PBPin */ - GPIO_InitStruct.Pin = nTERM_EN_Pin|LED_IO_Pin; + /*Configure GPIO pins : PBPin */ + GPIO_InitStruct.Pin = nTERM_EN_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + /*Configure GPIO pins : PBPin */ + GPIO_InitStruct.Pin = LED_IO_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Speed = GPIO_SPEED_LOW; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + /*Configure GPIO pins : PD11 PDPin */ GPIO_InitStruct.Pin = GPIO_PIN_11|NWAIT_UNUSED_Pin; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; diff --git a/STM32CubeMX/SCSI2SD-V6/Src/main.c b/STM32CubeMX/SCSI2SD-V6/Src/main.c index 78207ba2..281ec07d 100755 --- a/STM32CubeMX/SCSI2SD-V6/Src/main.c +++ b/STM32CubeMX/SCSI2SD-V6/Src/main.c @@ -32,13 +32,11 @@ */ /* 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 "usb_otg_fs.h" +//#include "usb_otg_fs.h" #include "gpio.h" #include "fsmc.h" @@ -88,15 +86,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_USB_DEVICE_Init(); MX_UART4_Init(); - MX_USB_OTG_FS_PCD_Init(); /* USER CODE BEGIN 2 */ mainInit(); @@ -130,7 +123,7 @@ void SystemClock_Config(void) RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLM = 20; + RCC_OscInitStruct.PLL.PLLM = 12; RCC_OscInitStruct.PLL.PLLN = 432; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4; RCC_OscInitStruct.PLL.PLLQ = 9; diff --git a/STM32CubeMX/SCSI2SD-V6/Src/sdio.c b/STM32CubeMX/SCSI2SD-V6/Src/sdio.c index e8b2ad88..3d4a3572 100755 --- a/STM32CubeMX/SCSI2SD-V6/Src/sdio.c +++ b/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 +139,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 a/STM32CubeMX/SCSI2SD-V6/Src/stm32f2xx_hal_msp.c b/STM32CubeMX/SCSI2SD-V6/Src/stm32f2xx_hal_msp.c index e6b77838..cc6e0c44 100755 --- a/STM32CubeMX/SCSI2SD-V6/Src/stm32f2xx_hal_msp.c +++ b/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 a/STM32CubeMX/SCSI2SD-V6/Src/stm32f2xx_it.c b/STM32CubeMX/SCSI2SD-V6/Src/stm32f2xx_it.c index a22ddca6..b562ca45 100755 --- a/STM32CubeMX/SCSI2SD-V6/Src/stm32f2xx_it.c +++ b/STM32CubeMX/SCSI2SD-V6/Src/stm32f2xx_it.c @@ -40,7 +40,8 @@ /* USER CODE END 0 */ /* External variables --------------------------------------------------------*/ -extern PCD_HandleTypeDef hpcd_USB_OTG_HS; +extern PCD_HandleTypeDef hpcd_USB_OTG_FS; +extern HCD_HandleTypeDef hhcd_USB_OTG_HS; extern DMA_HandleTypeDef hdma_sdio_tx; extern DMA_HandleTypeDef hdma_sdio_rx; extern SD_HandleTypeDef hsd; @@ -113,6 +114,21 @@ void DMA2_Stream3_IRQHandler(void) /* USER CODE END DMA2_Stream3_IRQn 1 */ } +/** +* @brief This function handles USB On The Go FS global interrupt. +*/ +void OTG_FS_IRQHandler(void) +{ + /* USER CODE BEGIN OTG_FS_IRQn 0 */ + + /* USER CODE END OTG_FS_IRQn 0 */ + HAL_PCD_IRQHandler(&hpcd_USB_OTG_FS); + /* USER CODE BEGIN OTG_FS_IRQn 1 */ + + /* USER CODE END OTG_FS_IRQn 1 */ +} + + /** * @brief This function handles DMA2 Stream6 global interrupt. */ @@ -135,7 +151,7 @@ void OTG_HS_IRQHandler(void) /* USER CODE BEGIN OTG_HS_IRQn 0 */ /* USER CODE END OTG_HS_IRQn 0 */ - HAL_PCD_IRQHandler(&hpcd_USB_OTG_HS); + //HAL_HCD_IRQHandler(&hhcd_USB_OTG_HS); /* USER CODE BEGIN OTG_HS_IRQn 1 */ /* USER CODE END OTG_HS_IRQn 1 */ diff --git a/STM32CubeMX/SCSI2SD-V6/Src/usb_device.c b/STM32CubeMX/SCSI2SD-V6/Src/usb_device.c index 5a044dfe..f410ba7b 100755 --- a/STM32CubeMX/SCSI2SD-V6/Src/usb_device.c +++ b/STM32CubeMX/SCSI2SD-V6/Src/usb_device.c @@ -37,23 +37,20 @@ #include "usb_device.h" #include "usbd_core.h" #include "usbd_desc.h" -#include "usbd_msc.h" -#include "usbd_storage_if.h" +#include "usbd_hid.h" /* USB Device Core handle declaration */ -USBD_HandleTypeDef hUsbDeviceHS; +USBD_HandleTypeDef hUsbDeviceFS; /* init function */ void MX_USB_DEVICE_Init(void) { /* Init Device Library,Add Supported Class and Start the library*/ - USBD_Init(&hUsbDeviceHS, &HS_Desc, DEVICE_HS); + USBD_Init(&hUsbDeviceFS, &FS_Desc, DEVICE_FS); - USBD_RegisterClass(&hUsbDeviceHS, &USBD_MSC); + USBD_RegisterClass(&hUsbDeviceFS, &USBD_HID); - USBD_MSC_RegisterStorage(&hUsbDeviceHS, &USBD_Storage_Interface_fops_HS); - - USBD_Start(&hUsbDeviceHS); + USBD_Start(&hUsbDeviceFS); } /** diff --git a/STM32CubeMX/SCSI2SD-V6/Src/usbd_conf.c b/STM32CubeMX/SCSI2SD-V6/Src/usbd_conf.c index 915a3fce..29e0812f 100755 --- a/STM32CubeMX/SCSI2SD-V6/Src/usbd_conf.c +++ b/STM32CubeMX/SCSI2SD-V6/Src/usbd_conf.c @@ -37,7 +37,7 @@ #include "usbd_def.h" #include "usbd_core.h" -PCD_HandleTypeDef hpcd_USB_OTG_HS; +PCD_HandleTypeDef hpcd_USB_OTG_FS; /* External functions --------------------------------------------------------*/ void SystemClock_Config(void); @@ -355,8 +355,35 @@ void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd) USBD_StatusTypeDef USBD_LL_Init (USBD_HandleTypeDef *pdev) { /* Init USB_IP */ - if (pdev->id == DEVICE_HS) { + if (pdev->id == DEVICE_FS) { /* Link The driver to the stack */ + hpcd_USB_OTG_FS.pData = pdev; + pdev->pData = &hpcd_USB_OTG_FS; + + hpcd_USB_OTG_FS.Instance = USB_OTG_FS; + hpcd_USB_OTG_FS.Init.dev_endpoints = 7; + hpcd_USB_OTG_FS.Init.speed = PCD_SPEED_FULL; + hpcd_USB_OTG_FS.Init.dma_enable = DISABLE; + hpcd_USB_OTG_FS.Init.ep0_mps = DEP0CTL_MPS_64; + hpcd_USB_OTG_FS.Init.phy_itface = PCD_PHY_EMBEDDED; + hpcd_USB_OTG_FS.Init.Sof_enable = DISABLE; + hpcd_USB_OTG_FS.Init.low_power_enable = DISABLE; + hpcd_USB_OTG_FS.Init.vbus_sensing_enable = DISABLE; // VBUS NOT CONNECTED ?? CHECK. + 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, 0x40); + HAL_PCD_SetTxFiFo(&hpcd_USB_OTG_FS, 2, 0x40); + + HAL_NVIC_SetPriority(OTG_FS_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(OTG_FS_IRQn); + + } else if (pdev->id == DEVICE_HS) { + /* Link The driver to the stack */ + /* hpcd_USB_OTG_HS.pData = pdev; pdev->pData = &hpcd_USB_OTG_HS; @@ -374,8 +401,10 @@ USBD_StatusTypeDef USBD_LL_Init (USBD_HandleTypeDef *pdev) HAL_PCD_Init(&hpcd_USB_OTG_HS); HAL_PCD_SetRxFiFo(&hpcd_USB_OTG_HS, 0x200); - HAL_PCD_SetTxFiFo(&hpcd_USB_OTG_HS, 0, 0x80); - HAL_PCD_SetTxFiFo(&hpcd_USB_OTG_HS, 1, 0x174); + HAL_PCD_SetTxFiFo(&hpcd_USB_OTG_HS, 0, 0x40); + HAL_PCD_SetTxFiFo(&hpcd_USB_OTG_HS, 1, 0x40); + HAL_PCD_SetTxFiFo(&hpcd_USB_OTG_HS, 2, 0x174); + */ } return USBD_OK; } diff --git a/rtl/fpga_bitmap.o b/rtl/fpga_bitmap.o index e877e44b..7eb0ff63 100644 Binary files a/rtl/fpga_bitmap.o and b/rtl/fpga_bitmap.o differ diff --git a/src/firmware/cubemx.patch b/src/firmware/cubemx.patch index 943b1af5..7362ff7c 100644 --- a/src/firmware/cubemx.patch +++ b/src/firmware/cubemx.patch @@ -346,99 +346,6 @@ index c257924..5261aa9 100755 HAL_GPIO_DeInit(GPIOB, GPIO_PIN_7); -diff --git b/STM32CubeMX/SCSI2SD-V6/Src/gpio.c a/STM32CubeMX/SCSI2SD-V6/Src/gpio.c -index 21529ff..5682f25 100755 ---- b/STM32CubeMX/SCSI2SD-V6/Src/gpio.c -+++ a/STM32CubeMX/SCSI2SD-V6/Src/gpio.c -@@ -68,17 +68,17 @@ void MX_GPIO_Init(void) - __GPIOB_CLK_ENABLE(); - __GPIOD_CLK_ENABLE(); - -- /*Configure GPIO pins : PEPin PEPin PEPin */ -+ /*Configure GPIO pins : PEPin PEPin PEPin PEPin */ - GPIO_InitStruct.Pin = FPGA_GPIO2_Pin|UNUSED_PE5_Pin|UNUSED_PE6_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - GPIO_InitStruct.Pull = GPIO_PULLDOWN; - HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); - -- /*Configure GPIO pin : PtPin */ -+ /*Configure GPIO pin : PE3 */ - GPIO_InitStruct.Pin = FPGA_GPIO3_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - GPIO_InitStruct.Pull = GPIO_NOPULL; -- HAL_GPIO_Init(FPGA_GPIO3_GPIO_Port, &GPIO_InitStruct); -+ HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); - - /*Configure GPIO pin : PE4 */ - GPIO_InitStruct.Pin = GPIO_PIN_4; -@@ -96,10 +96,8 @@ void MX_GPIO_Init(void) - GPIO_InitStruct.Pull = GPIO_PULLDOWN; - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - -- /*Configure GPIO pins : PAPin PAPin PAPin PAPin -- PA10 */ -- GPIO_InitStruct.Pin = UNUSED_PA0_Pin|UNUSED_PA1_Pin|UNUSED_PA2_Pin|UNUSED_PA3_Pin -- |GPIO_PIN_10; -+ /*Configure GPIO pins : PAPin PAPin PAPin PAPin */ -+ GPIO_InitStruct.Pin = UNUSED_PA0_Pin|UNUSED_PA1_Pin|UNUSED_PA2_Pin|UNUSED_PA3_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - GPIO_InitStruct.Pull = GPIO_PULLDOWN; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); -@@ -125,14 +123,26 @@ void MX_GPIO_Init(void) - GPIO_InitStruct.Speed = GPIO_SPEED_LOW; - HAL_GPIO_Init(nTERM_EN_GPIO_Port, &GPIO_InitStruct); - -- /*Configure GPIO pins : PBPin PBPin PBPin PB14 -- PB15 PBPin PBPin */ -- GPIO_InitStruct.Pin = BOOT1_Pin|UNUSED_PB12_Pin|UNUSED_PB13_Pin|GPIO_PIN_14 -- |GPIO_PIN_15|UNUSED_PB5_Pin|UNUSED_PB6_Pin; -+ /*Configure GPIO pins : PBPin PBPin PBPin */ -+ GPIO_InitStruct.Pin = BOOT1_Pin|UNUSED_PB5_Pin|UNUSED_PB6_Pin; -+ GPIO_InitStruct.Mode = GPIO_MODE_INPUT; -+ GPIO_InitStruct.Pull = GPIO_PULLDOWN; -+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); -+ -+ /*Configure GPIO pins : PBPin PBPin */ -+ GPIO_InitStruct.Pin = UNUSED_PB12_Pin|UNUSED_PB13_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - GPIO_InitStruct.Pull = GPIO_PULLDOWN; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - -+ /*Configure GPIO pins : PD6, PD12 */ -+ // PD6: FSMC NWAIT, not used yet.PULLED UP in fpga pin config -+ // PD12: FPGA_GPIO1, not used. -+ GPIO_InitStruct.Pin = GPIO_PIN_6 | GPIO_PIN_12; -+ GPIO_InitStruct.Mode = GPIO_MODE_INPUT; -+ GPIO_InitStruct.Pull = GPIO_PULLUP; -+ HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); -+ - /*Configure GPIO pins : PDPin PDPin */ - GPIO_InitStruct.Pin = UNUSED_PD11_Pin|FSMC_UNUSED_CLK_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; -@@ -160,11 +170,18 @@ void MX_GPIO_Init(void) - GPIO_InitStruct.Alternate = GPIO_AF0_MCO; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - -- /*Configure GPIO pin : PD6 */ -- GPIO_InitStruct.Pin = GPIO_PIN_6; -- GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; -- GPIO_InitStruct.Pull = GPIO_NOPULL; -- HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); -+ /*Configure GPIO pin : PA10 */ -+ // USB Host OTG ID pin -+ GPIO_InitStruct.Pin = GPIO_PIN_10; -+ GPIO_InitStruct.Mode = GPIO_MODE_INPUT; -+ GPIO_InitStruct.Pull = GPIO_PULLDOWN; -+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); -+ -+ // USB Host pins, currently unused. -+ GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15; -+ GPIO_InitStruct.Mode = GPIO_MODE_INPUT; -+ GPIO_InitStruct.Pull = GPIO_PULLDOWN; -+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - /*Configure GPIO pins : PBPin PBPin */ - GPIO_InitStruct.Pin = nSD_WP_Pin|nSD_CD_Pin; 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 diff --git a/src/firmware/led.c b/src/firmware/led.c index 4ae74a9d..8a1d62b6 100755 --- a/src/firmware/led.c +++ b/src/firmware/led.c @@ -26,22 +26,22 @@ void s2s_ledInit() s2s_ledOff(); GPIO_InitTypeDef ledDef = { - LED_Pin, // Pin + LED_IO_Pin, // Pin GPIO_MODE_OUTPUT_PP, // Mode GPIO_NOPULL, // Pull(ups) GPIO_SPEED_FREQ_LOW, // Speed (2MHz) 0 // Alternate function }; - HAL_GPIO_Init(LED_GPIO_Port, &ledDef); + HAL_GPIO_Init(LED_IO_GPIO_Port, &ledDef); } void s2s_ledOn() { - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET); + HAL_GPIO_WritePin(LED_IO_GPIO_Port, LED_IO_Pin, GPIO_PIN_RESET); } void s2s_ledOff() { - HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(LED_IO_GPIO_Port, LED_IO_Pin, GPIO_PIN_SET); } diff --git a/src/firmware/main.c b/src/firmware/main.c index ed37b5cc..8a8e3653 100755 --- a/src/firmware/main.c +++ b/src/firmware/main.c @@ -32,7 +32,7 @@ #include "usb_device/usbd_msc_storage_sd.h" -const char* Notice = "Copyright (C) 2016 Michael McMaster "; +const char* Notice = "Copyright (C) 2019 Michael McMaster "; uint32_t lastSDPoll; static int isUsbStarted; @@ -45,6 +45,10 @@ void mainEarlyInit() void mainInit() { + // DISable the ULPI chip + // NO SEE AN4879: CLOCK IS INPUT ONLY YOU IDIOT. + HAL_GPIO_WritePin(nULPI_RESET_GPIO_Port, nULPI_RESET_Pin, GPIO_PIN_RESET); + s2s_timeInit(); s2s_ledInit(); s2s_fpgaInit(); @@ -102,14 +106,17 @@ void mainLoop() scsiInit(); // Is a USB host connected ? +/* TODO DEAL WITH THIS if (isUsbStarted) { USBD_Stop(&hUsbDeviceFS); s2s_delay_ms(128); USBD_Start(&hUsbDeviceFS); } +*/ } +/* TODO DEAL WITH THIS // Can we speed up the SD card ? // Don't combine with the above block because that won't // run if the SD card is present at startup. @@ -136,6 +143,7 @@ void mainLoop() USBD_Start(&hUsbDeviceFS); isUsbStarted = 1; } + */ } else { diff --git a/src/firmware/usb_device/usbd_desc.c b/src/firmware/usb_device/usbd_desc.c index f7b30d39..a9e71482 100755 --- a/src/firmware/usb_device/usbd_desc.c +++ b/src/firmware/usb_device/usbd_desc.c @@ -263,7 +263,7 @@ uint8_t * USBD_FS_ConfigStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *leng } /** -* @brief USBD_HS_InterfaceStrDescriptor +* @brief USBD_FS_InterfaceStrDescriptor * return the interface string descriptor * @param speed : current device speed * @param length : pointer to data length variable