From 727da06266b9a0cd7ae592f63c1276823525a42b Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Wed, 20 Dec 2017 11:03:33 +0100 Subject: [PATCH] Files refactoring + costmetics (#5552) --- radio/src/storage/eeprom_rlc.h | 2 +- .../arm/stm32/bootloader/CMakeLists.txt | 2 +- .../{horus => common/arm/stm32}/sdio_sd.c | 1251 ++++------------- .../{horus => common/arm/stm32}/sdio_sd.h | 23 - radio/src/targets/horus/CMakeLists.txt | 2 +- radio/src/targets/horus/diskio.cpp | 2 +- radio/src/targets/taranis/board.h | 4 +- .../targets/taranis/bootloader/CMakeLists.txt | 84 -- 8 files changed, 255 insertions(+), 1115 deletions(-) rename radio/src/targets/{horus => common/arm/stm32}/sdio_sd.c (70%) rename radio/src/targets/{horus => common/arm/stm32}/sdio_sd.h (91%) delete mode 100644 radio/src/targets/taranis/bootloader/CMakeLists.txt diff --git a/radio/src/storage/eeprom_rlc.h b/radio/src/storage/eeprom_rlc.h index 39b6e0bde..958544945 100644 --- a/radio/src/storage/eeprom_rlc.h +++ b/radio/src/storage/eeprom_rlc.h @@ -23,7 +23,7 @@ #include "definitions.h" -#if defined(PCBTARANIS) +#if defined(CPUARM) #define blkid_t uint16_t #define EEFS_VERS 5 #define MAXFILES 62 diff --git a/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt b/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt index d9cd29bcd..3e88f4296 100644 --- a/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt +++ b/radio/src/targets/common/arm/stm32/bootloader/CMakeLists.txt @@ -90,7 +90,7 @@ else() set(BOOTLOADER_SRC ${BOOTLOADER_SRC} ../../../../../targets/${TARGET_DIR}/sdram_driver.c - ../../../../../targets/${TARGET_DIR}/sdio_sd.c + ../../../../../targets/common/arm/stm32/sdio_sd.c ../../../../../targets/${TARGET_DIR}/haptic_driver.cpp ../../../../../gui/${GUI_DIR}/bitmapbuffer.cpp ../../../../../syscalls.c diff --git a/radio/src/targets/horus/sdio_sd.c b/radio/src/targets/common/arm/stm32/sdio_sd.c similarity index 70% rename from radio/src/targets/horus/sdio_sd.c rename to radio/src/targets/common/arm/stm32/sdio_sd.c index e66d29d4e..a5a0e63cf 100644 --- a/radio/src/targets/horus/sdio_sd.c +++ b/radio/src/targets/common/arm/stm32/sdio_sd.c @@ -19,17 +19,11 @@ */ #include "sdio_sd.h" -#include "../../debug.h" +#include "debug.h" -/** - * @brief SDIO Static flags, TimeOut, FIFO Address - */ #define SDIO_STATIC_FLAGS ((uint32_t)0x000005FF) #define SDIO_CMD0TIMEOUT ((uint32_t)0x00010000) -/** - * @brief Mask for errors Card Status R1 (OCR Register) - */ #define SD_OCR_ADDR_OUT_OF_RANGE ((uint32_t)0x80000000) #define SD_OCR_ADDR_MISALIGNED ((uint32_t)0x40000000) #define SD_OCR_BLOCK_LEN_ERR ((uint32_t)0x20000000) @@ -51,9 +45,6 @@ #define SD_OCR_AKE_SEQ_ERROR ((uint32_t)0x00000008) #define SD_OCR_ERRORBITS ((uint32_t)0xFDFFE008) -/** - * @brief Masks for R6 Response - */ #define SD_R6_GENERAL_UNKNOWN_ERROR ((uint32_t)0x00002000) #define SD_R6_ILLEGAL_CMD ((uint32_t)0x00004000) #define SD_R6_COM_CRC_FAILED ((uint32_t)0x00008000) @@ -75,28 +66,10 @@ #define SD_8TO15BITS ((uint32_t)0x0000FF00) #define SD_16TO23BITS ((uint32_t)0x00FF0000) #define SD_24TO31BITS ((uint32_t)0xFF000000) -#define SD_MAX_DATA_LENGTH ((uint32_t)0x01FFFFFF) -#define SD_HALFFIFO ((uint32_t)0x00000008) -#define SD_HALFFIFOBYTES ((uint32_t)0x00000020) - -/** - * @brief Command Class Supported - */ -#define SD_CCCC_LOCK_UNLOCK ((uint32_t)0x00000080) -#define SD_CCCC_WRITE_PROT ((uint32_t)0x00000040) -#define SD_CCCC_ERASE ((uint32_t)0x00000020) - -/** - * @brief Following commands are SD Card Specific commands. - * SDIO_APP_CMD should be sent before sending these commands. - */ #define SDIO_SEND_IF_COND ((uint32_t)0x00000008) -/** - * @brief SDIO Commands Index - */ #define SD_CMD_GO_IDLE_STATE ((uint8_t)0) #define SD_CMD_SEND_OP_COND ((uint8_t)1) #define SD_CMD_ALL_SEND_CID ((uint8_t)2) @@ -144,10 +117,6 @@ #define SD_CMD_GEN_CMD ((uint8_t)56) #define SD_CMD_NO_CMD ((uint8_t)64) -/** - * @brief Following commands are SD Card Specific commands. - * SDIO_APP_CMD should be sent before sending these commands. - */ #define SD_CMD_APP_SD_SET_BUSWIDTH ((uint8_t)6) /*!< For SD Card only */ #define SD_CMD_SD_APP_STAUS ((uint8_t)13) /*!< For SD Card only */ #define SD_CMD_SD_APP_SEND_NUM_WRITE_BLOCKS ((uint8_t)22) /*!< For SD Card only */ @@ -157,10 +126,6 @@ #define SD_CMD_SDIO_RW_DIRECT ((uint8_t)52) /*!< For SD I/O Card only */ #define SD_CMD_SDIO_RW_EXTENDED ((uint8_t)53) /*!< For SD I/O Card only */ -/** - * @brief Following commands are SD Card Specific security commands. - * SDIO_APP_CMD should be sent before sending these commands. - */ #define SD_CMD_SD_APP_GET_MKB ((uint8_t)43) /*!< For SD Card only */ #define SD_CMD_SD_APP_GET_MID ((uint8_t)44) /*!< For SD Card only */ #define SD_CMD_SD_APP_SET_CER_RN1 ((uint8_t)45) /*!< For SD Card only */ @@ -173,9 +138,6 @@ #define SD_CMD_SD_APP_CHANGE_SECURE_AREA ((uint8_t)49) /*!< For SD Card only */ #define SD_CMD_SD_APP_SECURE_WRITE_MKB ((uint8_t)48) /*!< For SD Card only */ -/** - * @brief Supported SD Memory Cards - */ #define SDIO_STD_CAPACITY_SD_CARD_V1_1 ((uint32_t)0x00000000) #define SDIO_STD_CAPACITY_SD_CARD_V2_0 ((uint32_t)0x00000001) #define SDIO_HIGH_CAPACITY_SD_CARD ((uint32_t)0x00000002) @@ -186,9 +148,6 @@ #define SDIO_HIGH_CAPACITY_MMC_CARD ((uint32_t)0x00000007) -/** - * @brief SD Card States - */ typedef enum { SD_CARD_READY = ((uint32_t)0x00000001), @@ -200,13 +159,11 @@ typedef enum SD_CARD_PROGRAMMING = ((uint32_t)0x00000007), SD_CARD_DISCONNECTED = ((uint32_t)0x00000008), SD_CARD_ERROR = ((uint32_t)0x000000FF) -}SDCardState; +} SDCardState; - -static uint32_t CardType = SDIO_STD_CAPACITY_SD_CARD_V1_1; +static uint32_t CardType = SDIO_STD_CAPACITY_SD_CARD_V1_1; static uint32_t CSD_Tab[4], CID_Tab[4], RCA = 0; -// static uint8_t SDSTATUS_Tab[16]; __IO uint8_t StopCondition = 0; __IO SD_Error TransferError = SD_OK; __IO uint8_t TransferEnd = 0, DMAEndOfTransfer = 0; @@ -223,9 +180,7 @@ static SD_Error CmdResp3Error(void); static SD_Error CmdResp2Error(void); static SD_Error CmdResp6Error(uint8_t cmd, uint16_t *prca); static SD_Error SDEnWideBus(FunctionalState NewState); -// static SD_Error IsCardProgramming(uint8_t *pstatus); static SD_Error FindSCR(uint16_t rca, uint32_t *pscr); -// uint8_t convert_from_bytes_to_power_of_two(uint16_t NumberOfBytes); SD_Error SD_PowerON(void); SDCardState SD_GetState(void); @@ -236,69 +191,6 @@ SD_Error SD_SelectDeselect(uint32_t addr); SD_Error SD_StopTransfer(void); SD_Error SD_SendStatus(uint32_t *pcardstatus); - - - - - - - - - - - - - - -/** - * @brief DeInitializes the SDIO interface. - * @param None - * @retval None - */ -// void SD_LowLevel_DeInit(void) -// { -// GPIO_InitTypeDef GPIO_InitStructure; - -// /*!< Disable SDIO Clock */ -// SDIO_ClockCmd(DISABLE); - -// /*!< Set Power State to OFF */ -// SDIO_SetPowerState(SDIO_PowerState_OFF); - -// /*!< DeInitializes the SDIO peripheral */ -// SDIO_DeInit(); - -// /* Disable the SDIO APB2 Clock */ -// RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDIO, DISABLE); - -// GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_MCO); -// GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_MCO); -// GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_MCO); -// GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_MCO); -// GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_MCO); -// GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_MCO); - -// /* Configure PC.08, PC.09, PC.10, PC.11 pins: D0, D1, D2, D3 pins */ -// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11; -// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; -// GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; -// GPIO_Init(GPIOC, &GPIO_InitStructure); - -// /* Configure PD.02 CMD line */ -// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; -// GPIO_Init(GPIOD, &GPIO_InitStructure); - -// /* Configure PC.12 pin: CLK pin */ -// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; -// GPIO_Init(GPIOC, &GPIO_InitStructure); -// } - -/** - * @brief Initializes the SD Card and put it into StandBy State (Ready for - * data transfer). - * @param None - * @retval None - */ void SD_LowLevel_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; @@ -343,13 +235,7 @@ void SD_LowLevel_Init(void) NVIC_Init(&NVIC_InitStructure); } -/** - * @brief Configures the DMA2 Channel4 for SDIO Tx request. - * @param BufferSRC: pointer to the source buffer - * @param BufferSize: buffer size - * @retval None - */ -void SD_LowLevel_DMA_TxConfig(uint32_t *BufferSRC, uint32_t BufferSize) +void SD_LowLevel_DMA_TxConfig(uint32_t * BufferSRC, uint32_t BufferSize) { DMA_InitTypeDef SDDMA_InitStructure; @@ -385,12 +271,6 @@ void SD_LowLevel_DMA_TxConfig(uint32_t *BufferSRC, uint32_t BufferSize) } -/** - * @brief Configures the DMA2 Channel4 for SDIO Rx request. - * @param BufferDST: pointer to the destination buffer - * @param BufferSize: buffer size - * @retval None - */ void SD_LowLevel_DMA_RxConfig(uint32_t *BufferDST, uint32_t BufferSize) { DMA_InitTypeDef SDDMA_InitStructure; @@ -426,32 +306,6 @@ void SD_LowLevel_DMA_RxConfig(uint32_t *BufferDST, uint32_t BufferSize) DMA_Cmd(SD_SDIO_DMA_STREAM, ENABLE); } - -/** - * @} - */ - - -// /** @defgroup STM32F4_DISCOVERY_SDIO_SD_Private_Functions -// * @{ -// */ - -// * -// * @brief DeInitializes the SDIO interface. -// * @param None -// * @retval None - -// void SD_DeInit(void) -// { -// SD_LowLevel_DeInit(); -// } - -/** - * @brief Initializes the SD Card and put it into StandBy State (Ready for data - * transfer). - * @param None - * @retval SD_Error: SD Card Error code. - */ SD_Error SD_Init(void) { __IO SD_Error errorstatus = SD_OK; @@ -462,19 +316,17 @@ SD_Error SD_Init(void) SDIO_DeInit(); errorstatus = SD_PowerON(); - if (errorstatus != SD_OK) - { + if (errorstatus != SD_OK) { TRACE("SD_PowerON() status=%d", errorstatus); /*!< CMD Response TimeOut (wait for CMDSENT flag) */ - return(errorstatus); + return errorstatus; } errorstatus = SD_InitializeCards(); - if (errorstatus != SD_OK) - { + if (errorstatus != SD_OK) { TRACE("SD_InitializeCards() status=%d", errorstatus); /*!< CMD Response TimeOut (wait for CMDSENT flag) */ - return(errorstatus); + return errorstatus; } /*!< Configure the SDIO peripheral */ @@ -491,18 +343,16 @@ SD_Error SD_Init(void) /*----------------- Read CSD/CID MSD registers ------------------*/ errorstatus = SD_GetCardInfo(&SDCardInfo); - if (errorstatus == SD_OK) - { + if (errorstatus == SD_OK) { /*----------------- Select Card --------------------------------*/ errorstatus = SD_SelectDeselect((uint32_t) (SDCardInfo.RCA << 16)); } - if (errorstatus == SD_OK) - { + if (errorstatus == SD_OK) { errorstatus = SD_EnableWideBusOperation(SDIO_BusWide_4b); } - return(errorstatus); + return errorstatus; } /** @@ -515,21 +365,16 @@ SD_Error SD_Init(void) */ SDTransferState SD_GetStatus(void) { - SDCardState cardstate = SD_CARD_TRANSFER; + SDCardState cardstate = SD_GetState(); - cardstate = SD_GetState(); - - if (cardstate == SD_CARD_TRANSFER) - { - return(SD_TRANSFER_OK); + if (cardstate == SD_CARD_TRANSFER) { + return SD_TRANSFER_OK; } - else if(cardstate == SD_CARD_ERROR) - { - return (SD_TRANSFER_ERROR); + else if (cardstate == SD_CARD_ERROR) { + return SD_TRANSFER_ERROR; } - else - { - return(SD_TRANSFER_BUSY); + else { + return SD_TRANSFER_BUSY; } } @@ -542,19 +387,15 @@ SDCardState SD_GetState(void) { uint32_t resp1 = 0; - if(SD_Detect()== SD_PRESENT) - { - if (SD_SendStatus(&resp1) != SD_OK) - { + if (SD_Detect()== SD_PRESENT) { + if (SD_SendStatus(&resp1) != SD_OK) { return SD_CARD_ERROR; } - else - { + else { return (SDCardState)((resp1 >> 9) & 0x0F); } } - else - { + else { return SD_CARD_ERROR; } } @@ -570,8 +411,7 @@ uint8_t SD_Detect(void) #if 0 // TODO /*!< Check GPIO to detect SD */ - if (GPIO_ReadInputDataBit(SD_DETECT_GPIO_PORT, SD_DETECT_PIN) != Bit_RESET) - { + if (GPIO_ReadInputDataBit(SD_DETECT_GPIO_PORT, SD_DETECT_PIN) != Bit_RESET) { status = SD_NOT_PRESENT; } #endif @@ -625,11 +465,10 @@ OPTIMIZE("O0") SD_Error SD_PowerON(void) errorstatus = CmdError(); - if (errorstatus != SD_OK) - { + if (errorstatus != SD_OK) { TRACE("SD_CMD_GO_IDLE_STATE status=%d", errorstatus); /*!< CMD Response TimeOut (wait for CMDSENT flag) */ - return(errorstatus); + return errorstatus; } /*!< CMD8: SEND_IF_COND ----------------------------------------------------*/ @@ -647,13 +486,11 @@ OPTIMIZE("O0") SD_Error SD_PowerON(void) errorstatus = CmdResp7Error(); - if (errorstatus == SD_OK) - { + if (errorstatus == SD_OK) { CardType = SDIO_STD_CAPACITY_SD_CARD_V2_0; /*!< SD Card 2.0 */ SDType = SD_HIGH_CAPACITY; } - else - { + else { /*!< CMD55 */ SDIO_CmdInitStructure.SDIO_Argument = 0x00; SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD; @@ -675,12 +512,10 @@ OPTIMIZE("O0") SD_Error SD_PowerON(void) /*!< If errorstatus is Command TimeOut, it is a MMC card */ /*!< If errorstatus is SD_OK it is a SD card: SD card 2.0 (voltage range mismatch) or SD card 1.x */ - if (errorstatus == SD_OK) - { + if (errorstatus == SD_OK) { /*!< SD CARD */ /*!< Send ACMD41 SD_APP_OP_COND with Argument 0x80100000 */ - while ((!validvoltage) && (count < SD_MAX_VOLT_TRIAL)) - { + while ((!validvoltage) && (count < SD_MAX_VOLT_TRIAL)) { /*!< SEND CMD55 APP_CMD with RCA as 0 */ SDIO_CmdInitStructure.SDIO_Argument = 0x00; @@ -692,10 +527,9 @@ OPTIMIZE("O0") SD_Error SD_PowerON(void) errorstatus = CmdResp1Error(SD_CMD_APP_CMD); - if (errorstatus != SD_OK) - { - TRACE("SD_CMD_APP_CMD status=%d", errorstatus); - return(errorstatus); + if (errorstatus != SD_OK) { + TRACE("SD_CMD_APP_CMD status=%d", errorstatus; + return errorstatus); } SDIO_CmdInitStructure.SDIO_Argument = SD_VOLTAGE_WINDOW_SD | SDType; SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SD_APP_OP_COND; @@ -705,30 +539,27 @@ OPTIMIZE("O0") SD_Error SD_PowerON(void) SDIO_SendCommand(&SDIO_CmdInitStructure); errorstatus = CmdResp3Error(); - if (errorstatus != SD_OK) - { + if (errorstatus != SD_OK) { TRACE("SD_CMD_SD_APP_OP_COND status=%d", errorstatus); - return(errorstatus); + return errorstatus; } response = SDIO_GetResponse(SDIO_RESP1); validvoltage = (((response >> 31) == 1) ? 1 : 0); count++; } - if (count >= SD_MAX_VOLT_TRIAL) - { + if (count >= SD_MAX_VOLT_TRIAL) { errorstatus = SD_INVALID_VOLTRANGE; - return(errorstatus); + return errorstatus; } - if (response &= SD_HIGH_CAPACITY) - { + if (response &= SD_HIGH_CAPACITY) { CardType = SDIO_HIGH_CAPACITY_SD_CARD; } - }/*!< else MMC Card */ + } - return(errorstatus); + return errorstatus; } /** @@ -743,7 +574,7 @@ OPTIMIZE("O0") SD_Error SD_PowerOFF(void) /*!< Set Power State to OFF */ SDIO_SetPowerState(SDIO_PowerState_OFF); - return(errorstatus); + return errorstatus; } /** @@ -757,14 +588,12 @@ OPTIMIZE("O0") SD_Error SD_InitializeCards(void) SD_Error errorstatus = SD_OK; uint16_t rca = 0x01; - if (SDIO_GetPowerState() == SDIO_PowerState_OFF) - { + if (SDIO_GetPowerState() == SDIO_PowerState_OFF) { errorstatus = SD_REQUEST_NOT_APPLICABLE; - return(errorstatus); + return errorstatus; } - if (SDIO_SECURE_DIGITAL_IO_CARD != CardType) - { + if (SDIO_SECURE_DIGITAL_IO_CARD != CardType) { /*!< Send CMD2 ALL_SEND_CID */ SDIO_CmdInitStructure.SDIO_Argument = 0x0; SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_ALL_SEND_CID; @@ -775,9 +604,8 @@ OPTIMIZE("O0") SD_Error SD_InitializeCards(void) errorstatus = CmdResp2Error(); - if (SD_OK != errorstatus) - { - return(errorstatus); + if (SD_OK != errorstatus) { + return errorstatus; } CID_Tab[0] = SDIO_GetResponse(SDIO_RESP1); @@ -785,9 +613,9 @@ OPTIMIZE("O0") SD_Error SD_InitializeCards(void) CID_Tab[2] = SDIO_GetResponse(SDIO_RESP3); CID_Tab[3] = SDIO_GetResponse(SDIO_RESP4); } + if ((SDIO_STD_CAPACITY_SD_CARD_V1_1 == CardType) || (SDIO_STD_CAPACITY_SD_CARD_V2_0 == CardType) || (SDIO_SECURE_DIGITAL_IO_COMBO_CARD == CardType) - || (SDIO_HIGH_CAPACITY_SD_CARD == CardType)) - { + || (SDIO_HIGH_CAPACITY_SD_CARD == CardType)) { /*!< Send CMD3 SET_REL_ADDR with argument 0 */ /*!< SD Card publishes its RCA. */ SDIO_CmdInitStructure.SDIO_Argument = 0x00; @@ -799,14 +627,12 @@ OPTIMIZE("O0") SD_Error SD_InitializeCards(void) errorstatus = CmdResp6Error(SD_CMD_SET_REL_ADDR, &rca); - if (SD_OK != errorstatus) - { - return(errorstatus); + if (SD_OK != errorstatus) { + return errorstatus; } } - if (SDIO_SECURE_DIGITAL_IO_CARD != CardType) - { + if (SDIO_SECURE_DIGITAL_IO_CARD != CardType) { RCA = rca; /*!< Send CMD9 SEND_CSD with argument as card's RCA */ @@ -819,9 +645,8 @@ OPTIMIZE("O0") SD_Error SD_InitializeCards(void) errorstatus = CmdResp2Error(); - if (SD_OK != errorstatus) - { - return(errorstatus); + if (SD_OK != errorstatus) { + return errorstatus; } CSD_Tab[0] = SDIO_GetResponse(SDIO_RESP1); @@ -832,7 +657,7 @@ OPTIMIZE("O0") SD_Error SD_InitializeCards(void) errorstatus = SD_OK; /*!< All cards get intialized */ - return(errorstatus); + return errorstatus; } /** @@ -884,8 +709,7 @@ OPTIMIZE("O0") SD_Error SD_GetCardInfo(SD_CardInfo *cardinfo) cardinfo->SD_csd.DSRImpl = (tmp & 0x10) >> 4; cardinfo->SD_csd.Reserved2 = 0; /*!< Reserved */ - if ((CardType == SDIO_STD_CAPACITY_SD_CARD_V1_1) || (CardType == SDIO_STD_CAPACITY_SD_CARD_V2_0)) - { + if ((CardType == SDIO_STD_CAPACITY_SD_CARD_V1_1) || (CardType == SDIO_STD_CAPACITY_SD_CARD_V2_0)) { cardinfo->SD_csd.DeviceSize = (tmp & 0x03) << 10; /*!< Byte 7 */ @@ -913,8 +737,7 @@ OPTIMIZE("O0") SD_Error SD_GetCardInfo(SD_CardInfo *cardinfo) cardinfo->CardBlockSize = 1 << (cardinfo->SD_csd.RdBlockLen); cardinfo->CardCapacity *= cardinfo->CardBlockSize; } - else if (CardType == SDIO_HIGH_CAPACITY_SD_CARD) - { + else if (CardType == SDIO_HIGH_CAPACITY_SD_CARD) { /*!< Byte 7 */ tmp = (uint8_t)(CSD_Tab[1] & 0x000000FF); cardinfo->SD_csd.DeviceSize = (tmp & 0x3F) << 16; @@ -1040,94 +863,9 @@ OPTIMIZE("O0") SD_Error SD_GetCardInfo(SD_CardInfo *cardinfo) cardinfo->SD_cid.CID_CRC = (tmp & 0xFE) >> 1; cardinfo->SD_cid.Reserved2 = 1; - return(errorstatus); + return errorstatus; } -/** - * @brief Enables wide bus opeartion for the requeseted card if supported by - * card. - * @param WideMode: Specifies the SD card wide bus mode. - * This parameter can be one of the following values: - * @arg SDIO_BusWide_8b: 8-bit data transfer (Only for MMC) - * @arg SDIO_BusWide_4b: 4-bit data transfer - * @arg SDIO_BusWide_1b: 1-bit data transfer - * @retval SD_Error: SD Card Error code. - */ -// OPTIMIZE("O0") SD_Error SD_GetCardStatus(SD_CardStatus *cardstatus) -// { -// SD_Error errorstatus = SD_OK; -// uint8_t tmp = 0; - -// errorstatus = SD_SendSDStatus((uint32_t *)SDSTATUS_Tab); - -// if (errorstatus != SD_OK) -// { -// return(errorstatus); -// } - -// /*!< Byte 0 */ -// tmp = (uint8_t)((SDSTATUS_Tab[0] & 0xC0) >> 6); -// cardstatus->DAT_BUS_WIDTH = tmp; - -// /*!< Byte 0 */ -// tmp = (uint8_t)((SDSTATUS_Tab[0] & 0x20) >> 5); -// cardstatus->SECURED_MODE = tmp; - -// /*!< Byte 2 */ -// tmp = (uint8_t)((SDSTATUS_Tab[2] & 0xFF)); -// cardstatus->SD_CARD_TYPE = tmp << 8; - -// /*!< Byte 3 */ -// tmp = (uint8_t)((SDSTATUS_Tab[3] & 0xFF)); -// cardstatus->SD_CARD_TYPE |= tmp; - -// /*!< Byte 4 */ -// tmp = (uint8_t)(SDSTATUS_Tab[4] & 0xFF); -// cardstatus->SIZE_OF_PROTECTED_AREA = tmp << 24; - -// /*!< Byte 5 */ -// tmp = (uint8_t)(SDSTATUS_Tab[5] & 0xFF); -// cardstatus->SIZE_OF_PROTECTED_AREA |= tmp << 16; - -// /*!< Byte 6 */ -// tmp = (uint8_t)(SDSTATUS_Tab[6] & 0xFF); -// cardstatus->SIZE_OF_PROTECTED_AREA |= tmp << 8; - -// /*!< Byte 7 */ -// tmp = (uint8_t)(SDSTATUS_Tab[7] & 0xFF); -// cardstatus->SIZE_OF_PROTECTED_AREA |= tmp; - -// /*!< Byte 8 */ -// tmp = (uint8_t)((SDSTATUS_Tab[8] & 0xFF)); -// cardstatus->SPEED_CLASS = tmp; - -// /*!< Byte 9 */ -// tmp = (uint8_t)((SDSTATUS_Tab[9] & 0xFF)); -// cardstatus->PERFORMANCE_MOVE = tmp; - -// /*!< Byte 10 */ -// tmp = (uint8_t)((SDSTATUS_Tab[10] & 0xF0) >> 4); -// cardstatus->AU_SIZE = tmp; - -// /*!< Byte 11 */ -// tmp = (uint8_t)(SDSTATUS_Tab[11] & 0xFF); -// cardstatus->ERASE_SIZE = tmp << 8; - -// /*!< Byte 12 */ -// tmp = (uint8_t)(SDSTATUS_Tab[12] & 0xFF); -// cardstatus->ERASE_SIZE |= tmp; - -// /*!< Byte 13 */ -// tmp = (uint8_t)((SDSTATUS_Tab[13] & 0xFC) >> 2); -// cardstatus->ERASE_TIMEOUT = tmp; - -// /*!< Byte 13 */ -// tmp = (uint8_t)((SDSTATUS_Tab[13] & 0x3)); -// cardstatus->ERASE_OFFSET = tmp; - -// return(errorstatus); -// } - /** * @brief Enables wide bus opeartion for the requeseted card if supported by * card. @@ -1143,24 +881,19 @@ OPTIMIZE("O0") SD_Error SD_EnableWideBusOperation(uint32_t WideMode) SD_Error errorstatus = SD_OK; /*!< MMC Card doesn't support this feature */ - if (SDIO_MULTIMEDIA_CARD == CardType) - { + if (SDIO_MULTIMEDIA_CARD == CardType) { errorstatus = SD_UNSUPPORTED_FEATURE; - return(errorstatus); + return errorstatus; } - else if ((SDIO_STD_CAPACITY_SD_CARD_V1_1 == CardType) || (SDIO_STD_CAPACITY_SD_CARD_V2_0 == CardType) || (SDIO_HIGH_CAPACITY_SD_CARD == CardType)) - { - if (SDIO_BusWide_8b == WideMode) - { + else if ((SDIO_STD_CAPACITY_SD_CARD_V1_1 == CardType) || (SDIO_STD_CAPACITY_SD_CARD_V2_0 == CardType) || (SDIO_HIGH_CAPACITY_SD_CARD == CardType)) { + if (SDIO_BusWide_8b == WideMode) { errorstatus = SD_UNSUPPORTED_FEATURE; - return(errorstatus); + return errorstatus; } - else if (SDIO_BusWide_4b == WideMode) - { + else if (SDIO_BusWide_4b == WideMode) { errorstatus = SDEnWideBus(ENABLE); - if (SD_OK == errorstatus) - { + if (SD_OK == errorstatus) { /*!< Configure the SDIO peripheral */ SDIO_InitStructure.SDIO_ClockDiv = SD_SDIO_TRANSFER_CLK_DIV; SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising; @@ -1171,12 +904,10 @@ OPTIMIZE("O0") SD_Error SD_EnableWideBusOperation(uint32_t WideMode) SDIO_Init(&SDIO_InitStructure); } } - else - { + else { errorstatus = SDEnWideBus(DISABLE); - if (SD_OK == errorstatus) - { + if (SD_OK == errorstatus) { /*!< Configure the SDIO peripheral */ SDIO_InitStructure.SDIO_ClockDiv = SD_SDIO_TRANSFER_CLK_DIV; SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising; @@ -1189,7 +920,7 @@ OPTIMIZE("O0") SD_Error SD_EnableWideBusOperation(uint32_t WideMode) } } - return(errorstatus); + return errorstatus; } /** @@ -1199,7 +930,7 @@ OPTIMIZE("O0") SD_Error SD_EnableWideBusOperation(uint32_t WideMode) */ OPTIMIZE("O0") SD_Error SD_SelectDeselect(uint32_t addr) { - SD_Error errorstatus = SD_OK; + SD_Error errorstatus; /*!< Send CMD7 SDIO_SEL_DESEL_CARD */ SDIO_CmdInitStructure.SDIO_Argument = addr; @@ -1211,7 +942,7 @@ OPTIMIZE("O0") SD_Error SD_SelectDeselect(uint32_t addr) errorstatus = CmdResp1Error(SD_CMD_SEL_DESEL_CARD); - return(errorstatus); + return errorstatus; } /** @@ -1258,9 +989,8 @@ OPTIMIZE("O0") SD_Error SD_ReadBlock(uint8_t *readbuff, uint32_t ReadAddr, uint1 errorstatus = CmdResp1Error(SD_CMD_SET_BLOCKLEN); - if (SD_OK != errorstatus) - { - return(errorstatus); + if (SD_OK != errorstatus) { + return errorstatus; } SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT; @@ -1281,12 +1011,11 @@ OPTIMIZE("O0") SD_Error SD_ReadBlock(uint8_t *readbuff, uint32_t ReadAddr, uint1 errorstatus = CmdResp1Error(SD_CMD_READ_SINGLE_BLOCK); - if (errorstatus != SD_OK) - { - return(errorstatus); + if (errorstatus != SD_OK) { + return errorstatus; } - return(errorstatus); + return errorstatus; } /** @@ -1333,9 +1062,8 @@ OPTIMIZE("O0") SD_Error SD_ReadMultiBlocks(uint8_t *readbuff, uint32_t ReadAddr, errorstatus = CmdResp1Error(SD_CMD_SET_BLOCKLEN); - if (SD_OK != errorstatus) - { - return(errorstatus); + if (SD_OK != errorstatus) { + return errorstatus; } SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT * NumberOfBlocks; @@ -1356,12 +1084,11 @@ OPTIMIZE("O0") SD_Error SD_ReadMultiBlocks(uint8_t *readbuff, uint32_t ReadAddr, errorstatus = CmdResp1Error(SD_CMD_READ_MULT_BLOCK); - if (errorstatus != SD_OK) - { - return(errorstatus); + if (errorstatus != SD_OK) { + return errorstatus; } - return(errorstatus); + return errorstatus; } /** @@ -1376,8 +1103,7 @@ OPTIMIZE("O0") SD_Error SD_WaitReadOperation(uint32_t timeout) { SD_Error errorstatus = SD_OK; - while (!DMAEndOfTransfer && !TransferEnd && (TransferError == SD_OK) && (timeout > 0)) - { + while (!DMAEndOfTransfer && !TransferEnd && (TransferError == SD_OK) && (timeout > 0)) { delay_ms(1); timeout--; } @@ -1387,34 +1113,29 @@ OPTIMIZE("O0") SD_Error SD_WaitReadOperation(uint32_t timeout) timeout = 100; - while(((SDIO->STA & SDIO_FLAG_RXACT)) && (timeout > 0)) - { + while(((SDIO->STA & SDIO_FLAG_RXACT)) && (timeout > 0)) { delay_ms(1); timeout--; } TRACE_SD_CARD_EVENT((timeout == 0), sd_wait_read, -1); - if (StopCondition == 1) - { + if (StopCondition == 1) { errorstatus = SD_StopTransfer(); StopCondition = 0; } - if ((timeout == 0) && (errorstatus == SD_OK)) - { + if ((timeout == 0) && (errorstatus == SD_OK)) { errorstatus = SD_DATA_TIMEOUT; } /*!< Clear all the static flags */ SDIO_ClearFlag(SDIO_STATIC_FLAGS); - if (TransferError != SD_OK) - { - return(TransferError); + if (TransferError != SD_OK) { + return TransferError; } - else - { - return(errorstatus); + else { + return errorstatus; } } @@ -1461,9 +1182,8 @@ OPTIMIZE("O0") SD_Error SD_WriteBlock(uint8_t *writebuff, uint32_t WriteAddr, ui errorstatus = CmdResp1Error(SD_CMD_SET_BLOCKLEN); - if (SD_OK != errorstatus) - { - return(errorstatus); + if (SD_OK != errorstatus) { + return errorstatus; } /*!< Send CMD24 WRITE_SINGLE_BLOCK */ @@ -1476,9 +1196,8 @@ OPTIMIZE("O0") SD_Error SD_WriteBlock(uint8_t *writebuff, uint32_t WriteAddr, ui errorstatus = CmdResp1Error(SD_CMD_WRITE_SINGLE_BLOCK); - if (errorstatus != SD_OK) - { - return(errorstatus); + if (errorstatus != SD_OK) { + return errorstatus; } SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT; @@ -1489,7 +1208,7 @@ OPTIMIZE("O0") SD_Error SD_WriteBlock(uint8_t *writebuff, uint32_t WriteAddr, ui SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable; SDIO_DataConfig(&SDIO_DataInitStructure); - return(errorstatus); + return errorstatus; } /** @@ -1538,9 +1257,8 @@ OPTIMIZE("O0") SD_Error SD_WriteMultiBlocks(uint8_t *writebuff, uint32_t WriteAd errorstatus = CmdResp1Error(SD_CMD_SET_BLOCKLEN); - if (SD_OK != errorstatus) - { - return(errorstatus); + if (SD_OK != errorstatus) { + return errorstatus; } /*!< To improve performance */ @@ -1554,9 +1272,8 @@ OPTIMIZE("O0") SD_Error SD_WriteMultiBlocks(uint8_t *writebuff, uint32_t WriteAd errorstatus = CmdResp1Error(SD_CMD_APP_CMD); - if (errorstatus != SD_OK) - { - return(errorstatus); + if (errorstatus != SD_OK) { + return errorstatus; } /*!< To improve performance */ SDIO_CmdInitStructure.SDIO_Argument = (uint32_t)NumberOfBlocks; @@ -1568,9 +1285,8 @@ OPTIMIZE("O0") SD_Error SD_WriteMultiBlocks(uint8_t *writebuff, uint32_t WriteAd errorstatus = CmdResp1Error(SD_CMD_SET_BLOCK_COUNT); - if (errorstatus != SD_OK) - { - return(errorstatus); + if (errorstatus != SD_OK) { + return errorstatus; } @@ -1584,9 +1300,8 @@ OPTIMIZE("O0") SD_Error SD_WriteMultiBlocks(uint8_t *writebuff, uint32_t WriteAd errorstatus = CmdResp1Error(SD_CMD_WRITE_MULT_BLOCK); - if (SD_OK != errorstatus) - { - return(errorstatus); + if (SD_OK != errorstatus) { + return errorstatus; } SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT * NumberOfBlocks; @@ -1597,7 +1312,7 @@ OPTIMIZE("O0") SD_Error SD_WriteMultiBlocks(uint8_t *writebuff, uint32_t WriteAd SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable; SDIO_DataConfig(&SDIO_DataInitStructure); - return(errorstatus); + return errorstatus; } @@ -1613,8 +1328,7 @@ OPTIMIZE("O0") SD_Error SD_WaitWriteOperation(uint32_t timeout) { SD_Error errorstatus = SD_OK; - while (!DMAEndOfTransfer && !TransferEnd && (TransferError == SD_OK) && (timeout > 0)) - { + while (!DMAEndOfTransfer && !TransferEnd && (TransferError == SD_OK) && (timeout > 0)) { delay_ms(1); timeout--; } @@ -1624,34 +1338,29 @@ OPTIMIZE("O0") SD_Error SD_WaitWriteOperation(uint32_t timeout) timeout = 100; - while(((SDIO->STA & SDIO_FLAG_TXACT)) && (timeout > 0)) - { + while(((SDIO->STA & SDIO_FLAG_TXACT)) && (timeout > 0)) { delay_ms(1); timeout--; } TRACE_SD_CARD_EVENT((timeout == 0), sd_wait_write, -1); - if (StopCondition == 1) - { + if (StopCondition == 1) { errorstatus = SD_StopTransfer(); StopCondition = 0; } - if ((timeout == 0) && (errorstatus == SD_OK)) - { + if ((timeout == 0) && (errorstatus == SD_OK)) { errorstatus = SD_DATA_TIMEOUT; } /*!< Clear all the static flags */ SDIO_ClearFlag(SDIO_STATIC_FLAGS); - if (TransferError != SD_OK) - { - return(TransferError); + if (TransferError != SD_OK) { + return TransferError; } - else - { - return(errorstatus); + else { + return errorstatus; } } @@ -1665,13 +1374,11 @@ OPTIMIZE("O0") SD_Error SD_WaitWriteOperation(uint32_t timeout) */ OPTIMIZE("O0") SDTransferState SD_GetTransferState(void) { - if (SDIO->STA & (SDIO_FLAG_TXACT | SDIO_FLAG_RXACT)) - { - return(SD_TRANSFER_BUSY); + if (SDIO->STA & (SDIO_FLAG_TXACT | SDIO_FLAG_RXACT)) { + return SD_TRANSFER_BUSY; } - else - { - return(SD_TRANSFER_OK); + else { + return SD_TRANSFER_OK; } } @@ -1694,105 +1401,9 @@ OPTIMIZE("O0") SD_Error SD_StopTransfer(void) errorstatus = CmdResp1Error(SD_CMD_STOP_TRANSMISSION); - return(errorstatus); + return errorstatus; } -/** - * @brief Allows to erase memory area specified for the given card. - * @param startaddr: the start address. - * @param endaddr: the end address. - * @retval SD_Error: SD Card Error code. - */ -// OPTIMIZE("O0") SD_Error SD_Erase(uint32_t startaddr, uint32_t endaddr) -// { -// SD_Error errorstatus = SD_OK; -// uint32_t delay = 0; -// __IO uint32_t maxdelay = 0; -// uint8_t cardstate = 0; - -// /*!< Check if the card coomnd class supports erase command */ -// if (((CSD_Tab[1] >> 20) & SD_CCCC_ERASE) == 0) -// { -// errorstatus = SD_REQUEST_NOT_APPLICABLE; -// return(errorstatus); -// } - -// maxdelay = 120000 / ((SDIO->CLKCR & 0xFF) + 2); - -// if (SDIO_GetResponse(SDIO_RESP1) & SD_CARD_LOCKED) -// { -// errorstatus = SD_LOCK_UNLOCK_FAILED; -// return(errorstatus); -// } - -// if (CardType == SDIO_HIGH_CAPACITY_SD_CARD) -// { -// startaddr /= 512; -// endaddr /= 512; -// } - -// /*!< According to sd-card spec 1.0 ERASE_GROUP_START (CMD32) and erase_group_end(CMD33) */ -// if ((SDIO_STD_CAPACITY_SD_CARD_V1_1 == CardType) || (SDIO_STD_CAPACITY_SD_CARD_V2_0 == CardType) || (SDIO_HIGH_CAPACITY_SD_CARD == CardType)) -// { -// /*!< Send CMD32 SD_ERASE_GRP_START with argument as addr */ -// SDIO_CmdInitStructure.SDIO_Argument = startaddr; -// SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SD_ERASE_GRP_START; -// SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; -// SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; -// SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; -// SDIO_SendCommand(&SDIO_CmdInitStructure); - -// errorstatus = CmdResp1Error(SD_CMD_SD_ERASE_GRP_START); -// if (errorstatus != SD_OK) -// { -// return(errorstatus); -// } - -// /*!< Send CMD33 SD_ERASE_GRP_END with argument as addr */ -// SDIO_CmdInitStructure.SDIO_Argument = endaddr; -// SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SD_ERASE_GRP_END; -// SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; -// SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; -// SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; -// SDIO_SendCommand(&SDIO_CmdInitStructure); - -// errorstatus = CmdResp1Error(SD_CMD_SD_ERASE_GRP_END); -// if (errorstatus != SD_OK) -// { -// return(errorstatus); -// } -// } - -// /*!< Send CMD38 ERASE */ -// SDIO_CmdInitStructure.SDIO_Argument = 0; -// SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_ERASE; -// SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; -// SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; -// SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; -// SDIO_SendCommand(&SDIO_CmdInitStructure); - -// errorstatus = CmdResp1Error(SD_CMD_ERASE); - -// if (errorstatus != SD_OK) -// { -// return(errorstatus); -// } - -// for (delay = 0; delay < maxdelay; delay++) -// {} - -// /*!< Wait till the card is in programming state */ -// errorstatus = IsCardProgramming(&cardstate); -// delay = SD_DATATIMEOUT; -// while ((delay > 0) && (errorstatus == SD_OK) && ((SD_CARD_PROGRAMMING == cardstate) || (SD_CARD_RECEIVING == cardstate))) -// { -// errorstatus = IsCardProgramming(&cardstate); -// delay--; -// } - -// return(errorstatus); -// } - /** * @brief Returns the current card's status. * @param pcardstatus: pointer to the buffer that will contain the SD card @@ -1803,10 +1414,9 @@ OPTIMIZE("O0") SD_Error SD_SendStatus(uint32_t *pcardstatus) { SD_Error errorstatus = SD_OK; - if (pcardstatus == NULL) - { + if (pcardstatus == NULL) { errorstatus = SD_INVALID_PARAMETER; - return(errorstatus); + return errorstatus; } SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) RCA << 16; @@ -1818,134 +1428,15 @@ OPTIMIZE("O0") SD_Error SD_SendStatus(uint32_t *pcardstatus) errorstatus = CmdResp1Error(SD_CMD_SEND_STATUS); - if (errorstatus != SD_OK) - { - return(errorstatus); + if (errorstatus != SD_OK) { + return errorstatus; } *pcardstatus = SDIO_GetResponse(SDIO_RESP1); - return(errorstatus); + return errorstatus; } -/** - * @brief Returns the current SD card's status. - * @param psdstatus: pointer to the buffer that will contain the SD card status - * (SD Status register). - * @retval SD_Error: SD Card Error code. - */ -// OPTIMIZE("O0") SD_Error SD_SendSDStatus(uint32_t *psdstatus) -// { -// SD_Error errorstatus = SD_OK; -// uint32_t count = 0; - -// if (SDIO_GetResponse(SDIO_RESP1) & SD_CARD_LOCKED) -// { -// errorstatus = SD_LOCK_UNLOCK_FAILED; -// return(errorstatus); -// } - -// /*!< Set block size for card if it is not equal to current block size for card. */ -// SDIO_CmdInitStructure.SDIO_Argument = 64; -// SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SET_BLOCKLEN; -// SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; -// SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; -// SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; -// SDIO_SendCommand(&SDIO_CmdInitStructure); - -// errorstatus = CmdResp1Error(SD_CMD_SET_BLOCKLEN); - -// if (errorstatus != SD_OK) -// { -// return(errorstatus); -// } - -// /*!< CMD55 */ -// SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) RCA << 16; -// SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD; -// SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; -// SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; -// SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; -// SDIO_SendCommand(&SDIO_CmdInitStructure); -// errorstatus = CmdResp1Error(SD_CMD_APP_CMD); - -// if (errorstatus != SD_OK) -// { -// return(errorstatus); -// } - -// SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT; -// SDIO_DataInitStructure.SDIO_DataLength = 64; -// SDIO_DataInitStructure.SDIO_DataBlockSize = SDIO_DataBlockSize_64b; -// SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToSDIO; -// SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Block; -// SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable; -// SDIO_DataConfig(&SDIO_DataInitStructure); - -// /*!< Send ACMD13 SD_APP_STAUS with argument as card's RCA.*/ -// SDIO_CmdInitStructure.SDIO_Argument = 0; -// SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SD_APP_STAUS; -// SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; -// SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; -// SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; -// SDIO_SendCommand(&SDIO_CmdInitStructure); -// errorstatus = CmdResp1Error(SD_CMD_SD_APP_STAUS); - -// if (errorstatus != SD_OK) -// { -// return(errorstatus); -// } - -// while (!(SDIO->STA &(SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND | SDIO_FLAG_STBITERR))) -// { -// if (SDIO_GetFlagStatus(SDIO_FLAG_RXFIFOHF) != RESET) -// { -// for (count = 0; count < 8; count++) -// { -// *(psdstatus + count) = SDIO_ReadData(); -// } -// psdstatus += 8; -// } -// } - -// if (SDIO_GetFlagStatus(SDIO_FLAG_DTIMEOUT) != RESET) -// { -// SDIO_ClearFlag(SDIO_FLAG_DTIMEOUT); -// errorstatus = SD_DATA_TIMEOUT; -// return(errorstatus); -// } -// else if (SDIO_GetFlagStatus(SDIO_FLAG_DCRCFAIL) != RESET) -// { -// SDIO_ClearFlag(SDIO_FLAG_DCRCFAIL); -// errorstatus = SD_DATA_CRC_FAIL; -// return(errorstatus); -// } -// else if (SDIO_GetFlagStatus(SDIO_FLAG_RXOVERR) != RESET) -// { -// SDIO_ClearFlag(SDIO_FLAG_RXOVERR); -// errorstatus = SD_RX_OVERRUN; -// return(errorstatus); -// } -// else if (SDIO_GetFlagStatus(SDIO_FLAG_STBITERR) != RESET) -// { -// SDIO_ClearFlag(SDIO_FLAG_STBITERR); -// errorstatus = SD_START_BIT_ERR; -// return(errorstatus); -// } - -// count = SD_DATATIMEOUT; -// while ((SDIO_GetFlagStatus(SDIO_FLAG_RXDAVL) != RESET) && (count > 0)) -// { -// *psdstatus = SDIO_ReadData(); -// psdstatus++; -// count--; -// } -// /*!< Clear all the static status flags*/ -// SDIO_ClearFlag(SDIO_STATIC_FLAGS); - -// return(errorstatus); -// } - /** * @brief Allows to process all the interrupts that are high. * @param None @@ -1953,34 +1444,28 @@ OPTIMIZE("O0") SD_Error SD_SendStatus(uint32_t *pcardstatus) */ OPTIMIZE("O0") void SD_ProcessIRQ(void) { - if (SDIO_GetITStatus(SDIO_IT_DATAEND) != RESET) - { + if (SDIO_GetITStatus(SDIO_IT_DATAEND) != RESET) { TransferError = SD_OK; SDIO_ClearITPendingBit(SDIO_IT_DATAEND); TransferEnd = 1; } - else if (SDIO_GetITStatus(SDIO_IT_DCRCFAIL) != RESET) - { + else if (SDIO_GetITStatus(SDIO_IT_DCRCFAIL) != RESET) { SDIO_ClearITPendingBit(SDIO_IT_DCRCFAIL); TransferError = SD_DATA_CRC_FAIL; } - else if (SDIO_GetITStatus(SDIO_IT_DTIMEOUT) != RESET) - { + else if (SDIO_GetITStatus(SDIO_IT_DTIMEOUT) != RESET) { SDIO_ClearITPendingBit(SDIO_IT_DTIMEOUT); TransferError = SD_DATA_TIMEOUT; } - else if (SDIO_GetITStatus(SDIO_IT_RXOVERR) != RESET) - { + else if (SDIO_GetITStatus(SDIO_IT_RXOVERR) != RESET) { SDIO_ClearITPendingBit(SDIO_IT_RXOVERR); TransferError = SD_RX_OVERRUN; } - else if (SDIO_GetITStatus(SDIO_IT_TXUNDERR) != RESET) - { + else if (SDIO_GetITStatus(SDIO_IT_TXUNDERR) != RESET) { SDIO_ClearITPendingBit(SDIO_IT_TXUNDERR); TransferError = SD_TX_UNDERRUN; } - else if (SDIO_GetITStatus(SDIO_IT_STBITERR) != RESET) - { + else if (SDIO_GetITStatus(SDIO_IT_STBITERR) != RESET) { SDIO_ClearITPendingBit(SDIO_IT_STBITERR); TransferError = SD_START_BIT_ERR; } @@ -1999,8 +1484,7 @@ OPTIMIZE("O0") void SD_ProcessIRQ(void) */ OPTIMIZE("O0") void SD_ProcessDMAIRQ(void) { - if(DMA2->LISR & SD_SDIO_DMA_FLAG_TCIF) - { + if (DMA2->LISR & SD_SDIO_DMA_FLAG_TCIF) { DMAEndOfTransfer = 1; DMA_ClearFlag(SD_SDIO_DMA_STREAM, SD_SDIO_DMA_FLAG_TCIF|SD_SDIO_DMA_FLAG_FEIF); } @@ -2018,21 +1502,19 @@ OPTIMIZE("O0") static SD_Error CmdError(void) timeout = SDIO_CMD0TIMEOUT; /*!< 10000 */ - while ((timeout > 0) && (SDIO_GetFlagStatus(SDIO_FLAG_CMDSENT) == RESET)) - { + while ((timeout > 0) && (SDIO_GetFlagStatus(SDIO_FLAG_CMDSENT) == RESET)) { timeout--; } - if (timeout == 0) - { + if (timeout == 0) { errorstatus = SD_CMD_RSP_TIMEOUT; - return(errorstatus); + return errorstatus; } /*!< Clear all the static flags */ SDIO_ClearFlag(SDIO_STATIC_FLAGS); - return(errorstatus); + return errorstatus; } /** @@ -2048,28 +1530,25 @@ OPTIMIZE("O0") static SD_Error CmdResp7Error(void) status = SDIO->STA; - while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT)) && (timeout > 0)) - { + while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT)) && (timeout > 0)) { timeout--; status = SDIO->STA; } - if ((timeout == 0) || (status & SDIO_FLAG_CTIMEOUT)) - { + if ((timeout == 0) || (status & SDIO_FLAG_CTIMEOUT)) { /*!< Card is not V2.0 complient or card does not support the set voltage range */ errorstatus = SD_CMD_RSP_TIMEOUT; SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT); - return(errorstatus); + return errorstatus; } - if (status & SDIO_FLAG_CMDREND) - { + if (status & SDIO_FLAG_CMDREND) { /*!< Card is SD V2.0 compliant */ errorstatus = SD_OK; SDIO_ClearFlag(SDIO_FLAG_CMDREND); - return(errorstatus); + return errorstatus; } - return(errorstatus); + return errorstatus; } /** @@ -2085,29 +1564,25 @@ OPTIMIZE("O0") static SD_Error CmdResp1Error(uint8_t cmd) status = SDIO->STA; - while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT))) - { + while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT))) { status = SDIO->STA; } - if (status & SDIO_FLAG_CTIMEOUT) - { + if (status & SDIO_FLAG_CTIMEOUT) { errorstatus = SD_CMD_RSP_TIMEOUT; SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT); - return(errorstatus); + return errorstatus; } - else if (status & SDIO_FLAG_CCRCFAIL) - { + else if (status & SDIO_FLAG_CCRCFAIL) { errorstatus = SD_CMD_CRC_FAIL; SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL); - return(errorstatus); + return errorstatus; } /*!< Check response received is of desired command */ - if (SDIO_GetCommandResponse() != cmd) - { + if (SDIO_GetCommandResponse() != cmd) { errorstatus = SD_ILLEGAL_CMD; - return(errorstatus); + return errorstatus; } /*!< Clear all the static flags */ @@ -2116,106 +1591,87 @@ OPTIMIZE("O0") static SD_Error CmdResp1Error(uint8_t cmd) /*!< We have received response, retrieve it for analysis */ response_r1 = SDIO_GetResponse(SDIO_RESP1); - if ((response_r1 & SD_OCR_ERRORBITS) == SD_ALLZERO) - { - return(errorstatus); + if ((response_r1 & SD_OCR_ERRORBITS) == SD_ALLZERO) { + return errorstatus; } - if (response_r1 & SD_OCR_ADDR_OUT_OF_RANGE) - { - return(SD_ADDR_OUT_OF_RANGE); + if (response_r1 & SD_OCR_ADDR_OUT_OF_RANGE) { + return SD_ADDR_OUT_OF_RANGE; } - if (response_r1 & SD_OCR_ADDR_MISALIGNED) - { - return(SD_ADDR_MISALIGNED); + if (response_r1 & SD_OCR_ADDR_MISALIGNED) { + return SD_ADDR_MISALIGNED; } - if (response_r1 & SD_OCR_BLOCK_LEN_ERR) - { - return(SD_BLOCK_LEN_ERR); + if (response_r1 & SD_OCR_BLOCK_LEN_ERR) { + return SD_BLOCK_LEN_ERR; } - if (response_r1 & SD_OCR_ERASE_SEQ_ERR) - { - return(SD_ERASE_SEQ_ERR); + if (response_r1 & SD_OCR_ERASE_SEQ_ERR) { + return SD_ERASE_SEQ_ERR; } - if (response_r1 & SD_OCR_BAD_ERASE_PARAM) - { - return(SD_BAD_ERASE_PARAM); + if (response_r1 & SD_OCR_BAD_ERASE_PARAM) { + return SD_BAD_ERASE_PARAM; } - if (response_r1 & SD_OCR_WRITE_PROT_VIOLATION) - { - return(SD_WRITE_PROT_VIOLATION); + if (response_r1 & SD_OCR_WRITE_PROT_VIOLATION) { + return SD_WRITE_PROT_VIOLATION; } - if (response_r1 & SD_OCR_LOCK_UNLOCK_FAILED) - { - return(SD_LOCK_UNLOCK_FAILED); + if (response_r1 & SD_OCR_LOCK_UNLOCK_FAILED) { + return SD_LOCK_UNLOCK_FAILED; } - if (response_r1 & SD_OCR_COM_CRC_FAILED) - { - return(SD_COM_CRC_FAILED); + if (response_r1 & SD_OCR_COM_CRC_FAILED) { + return SD_COM_CRC_FAILED; } - if (response_r1 & SD_OCR_ILLEGAL_CMD) - { - return(SD_ILLEGAL_CMD); + if (response_r1 & SD_OCR_ILLEGAL_CMD) { + return SD_ILLEGAL_CMD; } - if (response_r1 & SD_OCR_CARD_ECC_FAILED) - { - return(SD_CARD_ECC_FAILED); + if (response_r1 & SD_OCR_CARD_ECC_FAILED) { + return SD_CARD_ECC_FAILED; } - if (response_r1 & SD_OCR_CC_ERROR) - { - return(SD_CC_ERROR); + if (response_r1 & SD_OCR_CC_ERROR) { + return SD_CC_ERROR; } - if (response_r1 & SD_OCR_GENERAL_UNKNOWN_ERROR) - { - return(SD_GENERAL_UNKNOWN_ERROR); + if (response_r1 & SD_OCR_GENERAL_UNKNOWN_ERROR) { + return SD_GENERAL_UNKNOWN_ERROR; } - if (response_r1 & SD_OCR_STREAM_READ_UNDERRUN) - { - return(SD_STREAM_READ_UNDERRUN); + if (response_r1 & SD_OCR_STREAM_READ_UNDERRUN) { + return SD_STREAM_READ_UNDERRUN; } - if (response_r1 & SD_OCR_STREAM_WRITE_OVERRUN) - { - return(SD_STREAM_WRITE_OVERRUN); + if (response_r1 & SD_OCR_STREAM_WRITE_OVERRUN) { + return SD_STREAM_WRITE_OVERRUN; } - if (response_r1 & SD_OCR_CID_CSD_OVERWRIETE) - { - return(SD_CID_CSD_OVERWRITE); + if (response_r1 & SD_OCR_CID_CSD_OVERWRIETE) { + return SD_CID_CSD_OVERWRITE; } - if (response_r1 & SD_OCR_WP_ERASE_SKIP) - { - return(SD_WP_ERASE_SKIP); + if (response_r1 & SD_OCR_WP_ERASE_SKIP) { + return SD_WP_ERASE_SKIP; } - if (response_r1 & SD_OCR_CARD_ECC_DISABLED) - { - return(SD_CARD_ECC_DISABLED); + if (response_r1 & SD_OCR_CARD_ECC_DISABLED) { + return SD_CARD_ECC_DISABLED; } - if (response_r1 & SD_OCR_ERASE_RESET) - { - return(SD_ERASE_RESET); + if (response_r1 & SD_OCR_ERASE_RESET) { + return SD_ERASE_RESET; } - if (response_r1 & SD_OCR_AKE_SEQ_ERROR) - { - return(SD_AKE_SEQ_ERROR); + if (response_r1 & SD_OCR_AKE_SEQ_ERROR) { + return SD_AKE_SEQ_ERROR; } - return(errorstatus); + + return errorstatus; } /** @@ -2230,20 +1686,18 @@ OPTIMIZE("O0") static SD_Error CmdResp3Error(void) status = SDIO->STA; - while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT))) - { + while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT))) { status = SDIO->STA; } - if (status & SDIO_FLAG_CTIMEOUT) - { + if (status & SDIO_FLAG_CTIMEOUT) { errorstatus = SD_CMD_RSP_TIMEOUT; SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT); - return(errorstatus); + return errorstatus; } /*!< Clear all the static flags */ SDIO_ClearFlag(SDIO_STATIC_FLAGS); - return(errorstatus); + return errorstatus; } /** @@ -2258,28 +1712,25 @@ OPTIMIZE("O0") static SD_Error CmdResp2Error(void) status = SDIO->STA; - while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CTIMEOUT | SDIO_FLAG_CMDREND))) - { + while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CTIMEOUT | SDIO_FLAG_CMDREND))) { status = SDIO->STA; } - if (status & SDIO_FLAG_CTIMEOUT) - { + if (status & SDIO_FLAG_CTIMEOUT) { errorstatus = SD_CMD_RSP_TIMEOUT; SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT); - return(errorstatus); + return errorstatus; } - else if (status & SDIO_FLAG_CCRCFAIL) - { + else if (status & SDIO_FLAG_CCRCFAIL) { errorstatus = SD_CMD_CRC_FAIL; SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL); - return(errorstatus); + return errorstatus; } /*!< Clear all the static flags */ SDIO_ClearFlag(SDIO_STATIC_FLAGS); - return(errorstatus); + return errorstatus; } /** @@ -2297,29 +1748,25 @@ OPTIMIZE("O0") static SD_Error CmdResp6Error(uint8_t cmd, uint16_t *prca) status = SDIO->STA; - while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CTIMEOUT | SDIO_FLAG_CMDREND))) - { + while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CTIMEOUT | SDIO_FLAG_CMDREND))) { status = SDIO->STA; } - if (status & SDIO_FLAG_CTIMEOUT) - { + if (status & SDIO_FLAG_CTIMEOUT) { errorstatus = SD_CMD_RSP_TIMEOUT; SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT); - return(errorstatus); + return errorstatus; } - else if (status & SDIO_FLAG_CCRCFAIL) - { + else if (status & SDIO_FLAG_CCRCFAIL) { errorstatus = SD_CMD_CRC_FAIL; SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL); - return(errorstatus); + return errorstatus; } /*!< Check response received is of desired command */ - if (SDIO_GetCommandResponse() != cmd) - { + if (SDIO_GetCommandResponse() != cmd) { errorstatus = SD_ILLEGAL_CMD; - return(errorstatus); + return errorstatus; } /*!< Clear all the static flags */ @@ -2328,28 +1775,24 @@ OPTIMIZE("O0") static SD_Error CmdResp6Error(uint8_t cmd, uint16_t *prca) /*!< We have received response, retrieve it. */ response_r1 = SDIO_GetResponse(SDIO_RESP1); - if (SD_ALLZERO == (response_r1 & (SD_R6_GENERAL_UNKNOWN_ERROR | SD_R6_ILLEGAL_CMD | SD_R6_COM_CRC_FAILED))) - { + if (SD_ALLZERO == (response_r1 & (SD_R6_GENERAL_UNKNOWN_ERROR | SD_R6_ILLEGAL_CMD | SD_R6_COM_CRC_FAILED))) { *prca = (uint16_t) (response_r1 >> 16); - return(errorstatus); + return errorstatus; } - if (response_r1 & SD_R6_GENERAL_UNKNOWN_ERROR) - { - return(SD_GENERAL_UNKNOWN_ERROR); + if (response_r1 & SD_R6_GENERAL_UNKNOWN_ERROR) { + return SD_GENERAL_UNKNOWN_ERROR; } - if (response_r1 & SD_R6_ILLEGAL_CMD) - { - return(SD_ILLEGAL_CMD); + if (response_r1 & SD_R6_ILLEGAL_CMD) { + return SD_ILLEGAL_CMD; } - if (response_r1 & SD_R6_COM_CRC_FAILED) - { - return(SD_COM_CRC_FAILED); + if (response_r1 & SD_R6_COM_CRC_FAILED) { + return SD_COM_CRC_FAILED; } - return(errorstatus); + return errorstatus; } /** @@ -2364,26 +1807,22 @@ OPTIMIZE("O0") static SD_Error SDEnWideBus(FunctionalState NewState) uint32_t scr[2] = {0, 0}; - if (SDIO_GetResponse(SDIO_RESP1) & SD_CARD_LOCKED) - { + if (SDIO_GetResponse(SDIO_RESP1) & SD_CARD_LOCKED) { errorstatus = SD_LOCK_UNLOCK_FAILED; - return(errorstatus); + return errorstatus; } /*!< Get SCR Register */ errorstatus = FindSCR(RCA, scr); - if (errorstatus != SD_OK) - { - return(errorstatus); + if (errorstatus != SD_OK) { + return errorstatus; } /*!< If wide bus operation to be enabled */ - if (NewState == ENABLE) - { + if (NewState == ENABLE) { /*!< If requested card supports wide bus operation */ - if ((scr[1] & SD_WIDE_BUS_SUPPORT) != SD_ALLZERO) - { + if ((scr[1] & SD_WIDE_BUS_SUPPORT) != SD_ALLZERO) { /*!< Send CMD55 APP_CMD with argument as card's RCA.*/ SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) RCA << 16; SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD; @@ -2394,9 +1833,8 @@ OPTIMIZE("O0") static SD_Error SDEnWideBus(FunctionalState NewState) errorstatus = CmdResp1Error(SD_CMD_APP_CMD); - if (errorstatus != SD_OK) - { - return(errorstatus); + if (errorstatus != SD_OK) { + return errorstatus; } /*!< Send ACMD6 APP_CMD with argument as 2 for wide bus mode */ @@ -2409,23 +1847,19 @@ OPTIMIZE("O0") static SD_Error SDEnWideBus(FunctionalState NewState) errorstatus = CmdResp1Error(SD_CMD_APP_SD_SET_BUSWIDTH); - if (errorstatus != SD_OK) - { - return(errorstatus); + if (errorstatus != SD_OK) { + return errorstatus; } - return(errorstatus); + return errorstatus; } - else - { + else { errorstatus = SD_REQUEST_NOT_APPLICABLE; - return(errorstatus); + return errorstatus; } } /*!< If wide bus operation to be disabled */ - else - { + else { /*!< If requested card supports 1 bit mode operation */ - if ((scr[1] & SD_SINGLE_BUS_SUPPORT) != SD_ALLZERO) - { + if ((scr[1] & SD_SINGLE_BUS_SUPPORT) != SD_ALLZERO) { /*!< Send CMD55 APP_CMD with argument as card's RCA.*/ SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) RCA << 16; SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD; @@ -2437,9 +1871,8 @@ OPTIMIZE("O0") static SD_Error SDEnWideBus(FunctionalState NewState) errorstatus = CmdResp1Error(SD_CMD_APP_CMD); - if (errorstatus != SD_OK) - { - return(errorstatus); + if (errorstatus != SD_OK) { + return errorstatus; } /*!< Send ACMD6 APP_CMD with argument as 2 for wide bus mode */ @@ -2452,179 +1885,19 @@ OPTIMIZE("O0") static SD_Error SDEnWideBus(FunctionalState NewState) errorstatus = CmdResp1Error(SD_CMD_APP_SD_SET_BUSWIDTH); - if (errorstatus != SD_OK) - { - return(errorstatus); + if (errorstatus != SD_OK) { + return errorstatus; } - return(errorstatus); + return errorstatus; } - else - { + else { errorstatus = SD_REQUEST_NOT_APPLICABLE; - return(errorstatus); + return errorstatus; } } } -/** - * @brief Checks if the SD card is in programming state. - * @param pstatus: pointer to the variable that will contain the SD card state. - * @retval SD_Error: SD Card Error code. - */ -// OPTIMIZE("O0") static SD_Error IsCardProgramming(uint8_t *pstatus) -// { -// SD_Error errorstatus = SD_OK; -// __IO uint32_t respR1 = 0, status = 0; - -// SDIO_CmdInitStructure.SDIO_Argument = (uint32_t) RCA << 16; -// SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_SEND_STATUS; -// SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short; -// SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No; -// SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable; -// SDIO_SendCommand(&SDIO_CmdInitStructure); - -// status = SDIO->STA; -// while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT))) -// { -// status = SDIO->STA; -// } - -// if (status & SDIO_FLAG_CTIMEOUT) -// { -// errorstatus = SD_CMD_RSP_TIMEOUT; -// SDIO_ClearFlag(SDIO_FLAG_CTIMEOUT); -// return(errorstatus); -// } -// else if (status & SDIO_FLAG_CCRCFAIL) -// { -// errorstatus = SD_CMD_CRC_FAIL; -// SDIO_ClearFlag(SDIO_FLAG_CCRCFAIL); -// return(errorstatus); -// } - -// status = (uint32_t)SDIO_GetCommandResponse(); - -// /*!< Check response received is of desired command */ -// if (status != SD_CMD_SEND_STATUS) -// { -// errorstatus = SD_ILLEGAL_CMD; -// return(errorstatus); -// } - -// /*!< Clear all the static flags */ -// SDIO_ClearFlag(SDIO_STATIC_FLAGS); - - -// /*!< We have received response, retrieve it for analysis */ -// respR1 = SDIO_GetResponse(SDIO_RESP1); - -// /*!< Find out card status */ -// *pstatus = (uint8_t) ((respR1 >> 9) & 0x0000000F); - -// if ((respR1 & SD_OCR_ERRORBITS) == SD_ALLZERO) -// { -// return(errorstatus); -// } - -// if (respR1 & SD_OCR_ADDR_OUT_OF_RANGE) -// { -// return(SD_ADDR_OUT_OF_RANGE); -// } - -// if (respR1 & SD_OCR_ADDR_MISALIGNED) -// { -// return(SD_ADDR_MISALIGNED); -// } - -// if (respR1 & SD_OCR_BLOCK_LEN_ERR) -// { -// return(SD_BLOCK_LEN_ERR); -// } - -// if (respR1 & SD_OCR_ERASE_SEQ_ERR) -// { -// return(SD_ERASE_SEQ_ERR); -// } - -// if (respR1 & SD_OCR_BAD_ERASE_PARAM) -// { -// return(SD_BAD_ERASE_PARAM); -// } - -// if (respR1 & SD_OCR_WRITE_PROT_VIOLATION) -// { -// return(SD_WRITE_PROT_VIOLATION); -// } - -// if (respR1 & SD_OCR_LOCK_UNLOCK_FAILED) -// { -// return(SD_LOCK_UNLOCK_FAILED); -// } - -// if (respR1 & SD_OCR_COM_CRC_FAILED) -// { -// return(SD_COM_CRC_FAILED); -// } - -// if (respR1 & SD_OCR_ILLEGAL_CMD) -// { -// return(SD_ILLEGAL_CMD); -// } - -// if (respR1 & SD_OCR_CARD_ECC_FAILED) -// { -// return(SD_CARD_ECC_FAILED); -// } - -// if (respR1 & SD_OCR_CC_ERROR) -// { -// return(SD_CC_ERROR); -// } - -// if (respR1 & SD_OCR_GENERAL_UNKNOWN_ERROR) -// { -// return(SD_GENERAL_UNKNOWN_ERROR); -// } - -// if (respR1 & SD_OCR_STREAM_READ_UNDERRUN) -// { -// return(SD_STREAM_READ_UNDERRUN); -// } - -// if (respR1 & SD_OCR_STREAM_WRITE_OVERRUN) -// { -// return(SD_STREAM_WRITE_OVERRUN); -// } - -// if (respR1 & SD_OCR_CID_CSD_OVERWRIETE) -// { -// return(SD_CID_CSD_OVERWRITE); -// } - -// if (respR1 & SD_OCR_WP_ERASE_SKIP) -// { -// return(SD_WP_ERASE_SKIP); -// } - -// if (respR1 & SD_OCR_CARD_ECC_DISABLED) -// { -// return(SD_CARD_ECC_DISABLED); -// } - -// if (respR1 & SD_OCR_ERASE_RESET) -// { -// return(SD_ERASE_RESET); -// } - -// if (respR1 & SD_OCR_AKE_SEQ_ERROR) -// { -// return(SD_AKE_SEQ_ERROR); -// } - -// return(errorstatus); -// } - /** * @brief Find the SD card SCR register value. * @param rca: selected card address. @@ -2648,9 +1921,8 @@ OPTIMIZE("O0") static SD_Error FindSCR(uint16_t rca, uint32_t *pscr) errorstatus = CmdResp1Error(SD_CMD_SET_BLOCKLEN); - if (errorstatus != SD_OK) - { - return(errorstatus); + if (errorstatus != SD_OK) { + return errorstatus; } /*!< Send CMD55 APP_CMD with argument as card's RCA */ @@ -2663,9 +1935,8 @@ OPTIMIZE("O0") static SD_Error FindSCR(uint16_t rca, uint32_t *pscr) errorstatus = CmdResp1Error(SD_CMD_APP_CMD); - if (errorstatus != SD_OK) - { - return(errorstatus); + if (errorstatus != SD_OK) { + return errorstatus; } SDIO_DataInitStructure.SDIO_DataTimeOut = SD_DATATIMEOUT; SDIO_DataInitStructure.SDIO_DataLength = 8; @@ -2686,43 +1957,36 @@ OPTIMIZE("O0") static SD_Error FindSCR(uint16_t rca, uint32_t *pscr) errorstatus = CmdResp1Error(SD_CMD_SD_APP_SEND_SCR); - if (errorstatus != SD_OK) - { - return(errorstatus); + if (errorstatus != SD_OK) { + return errorstatus; } - while (!(SDIO->STA & (SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND | SDIO_FLAG_STBITERR))) - { - if (SDIO_GetFlagStatus(SDIO_FLAG_RXDAVL) != RESET) - { + while (!(SDIO->STA & (SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND | SDIO_FLAG_STBITERR))) { + if (SDIO_GetFlagStatus(SDIO_FLAG_RXDAVL) != RESET) { *(tempscr + index) = SDIO_ReadData(); index++; } } - if (SDIO_GetFlagStatus(SDIO_FLAG_DTIMEOUT) != RESET) - { + if (SDIO_GetFlagStatus(SDIO_FLAG_DTIMEOUT) != RESET) { SDIO_ClearFlag(SDIO_FLAG_DTIMEOUT); errorstatus = SD_DATA_TIMEOUT; - return(errorstatus); + return errorstatus; } - else if (SDIO_GetFlagStatus(SDIO_FLAG_DCRCFAIL) != RESET) - { + else if (SDIO_GetFlagStatus(SDIO_FLAG_DCRCFAIL) != RESET) { SDIO_ClearFlag(SDIO_FLAG_DCRCFAIL); errorstatus = SD_DATA_CRC_FAIL; - return(errorstatus); + return errorstatus; } - else if (SDIO_GetFlagStatus(SDIO_FLAG_RXOVERR) != RESET) - { + else if (SDIO_GetFlagStatus(SDIO_FLAG_RXOVERR) != RESET) { SDIO_ClearFlag(SDIO_FLAG_RXOVERR); errorstatus = SD_RX_OVERRUN; - return(errorstatus); + return errorstatus; } - else if (SDIO_GetFlagStatus(SDIO_FLAG_STBITERR) != RESET) - { + else if (SDIO_GetFlagStatus(SDIO_FLAG_STBITERR) != RESET) { SDIO_ClearFlag(SDIO_FLAG_STBITERR); errorstatus = SD_START_BIT_ERR; - return(errorstatus); + return errorstatus; } /*!< Clear all the static flags */ @@ -2732,26 +1996,9 @@ OPTIMIZE("O0") static SD_Error FindSCR(uint16_t rca, uint32_t *pscr) *(pscr) = ((tempscr[1] & SD_0TO7BITS) << 24) | ((tempscr[1] & SD_8TO15BITS) << 8) | ((tempscr[1] & SD_16TO23BITS) >> 8) | ((tempscr[1] & SD_24TO31BITS) >> 24); - return(errorstatus); + return errorstatus; } -/** - * @brief Converts the number of bytes in power of two and returns the power. - * @param NumberOfBytes: number of bytes. - * @retval None - */ -// OPTIMIZE("O0") uint8_t convert_from_bytes_to_power_of_two(uint16_t NumberOfBytes) -// { -// uint8_t count = 0; - -// while (NumberOfBytes != 1) -// { -// NumberOfBytes >>= 1; -// count++; -// } -// return(count); -// } - void SDIO_IRQHandler(void) { DEBUG_INTERRUPT(INT_SDIO); diff --git a/radio/src/targets/horus/sdio_sd.h b/radio/src/targets/common/arm/stm32/sdio_sd.h similarity index 91% rename from radio/src/targets/horus/sdio_sd.h rename to radio/src/targets/common/arm/stm32/sdio_sd.h index 5ae6f1fb7..123640f3e 100644 --- a/radio/src/targets/horus/sdio_sd.h +++ b/radio/src/targets/common/arm/stm32/sdio_sd.h @@ -155,24 +155,6 @@ typedef struct __IO uint8_t Reserved2; /*!< always 1 */ } SD_CID; -/** - * @brief SD Card Status - */ -// typedef struct -// { -// __IO uint8_t DAT_BUS_WIDTH; -// __IO uint8_t SECURED_MODE; -// __IO uint16_t SD_CARD_TYPE; -// __IO uint32_t SIZE_OF_PROTECTED_AREA; -// __IO uint8_t SPEED_CLASS; -// __IO uint8_t PERFORMANCE_MOVE; -// __IO uint8_t AU_SIZE; -// __IO uint16_t ERASE_SIZE; -// __IO uint8_t ERASE_TIMEOUT; -// __IO uint8_t ERASE_OFFSET; -// } SD_CardStatus; - - /** * @brief SD Card information */ @@ -197,16 +179,11 @@ SD_Error SD_Init(void); SDTransferState SD_GetStatus(void); uint8_t SD_Detect(void); SD_Error SD_PowerOFF(void); -// SD_Error SD_GetCardStatus(SD_CardStatus *cardstatus); SD_Error SD_ReadBlock(uint8_t *readbuff, uint32_t ReadAddr, uint16_t BlockSize); SD_Error SD_ReadMultiBlocks(uint8_t *readbuff, uint32_t ReadAddr, uint16_t BlockSize, uint32_t NumberOfBlocks); -// SD_Error SD_ReadMultiBlocksFIXED(uint8_t *readbuff, uint32_t ReadAddr, uint32_t BlockSize, uint32_t NumberOfBlocks); SD_Error SD_WriteBlock(uint8_t *writebuff, uint32_t WriteAddr, uint16_t BlockSize); SD_Error SD_WriteMultiBlocks(uint8_t *writebuff, uint32_t WriteAddr, uint16_t BlockSize, uint32_t NumberOfBlocks); -// SD_Error SD_WriteMultiBlocksFIXED(uint8_t *writebuff, uint32_t WriteAddr, uint32_t BlockSize, uint32_t NumberOfBlocks); SDTransferState SD_GetTransferState(void); -// SD_Error SD_Erase(uint32_t startaddr, uint32_t endaddr); -// SD_Error SD_SendSDStatus(uint32_t *psdstatus); SD_Error SD_WaitReadOperation(uint32_t timeout); SD_Error SD_WaitWriteOperation(uint32_t timeout); diff --git a/radio/src/targets/horus/CMakeLists.txt b/radio/src/targets/horus/CMakeLists.txt index abbe7dc2e..e848b616d 100644 --- a/radio/src/targets/horus/CMakeLists.txt +++ b/radio/src/targets/horus/CMakeLists.txt @@ -126,12 +126,12 @@ set(TARGET_SRC set(FIRMWARE_TARGET_SRC ${FIRMWARE_TARGET_SRC} - sdio_sd.c ${LCD_DRIVER} backlight_driver.cpp pwr_driver.cpp sdram_driver.c startup_stm32f42_43xxx.s + ../common/arm/stm32/sdio_sd.c ../common/arm/loadboot.cpp ) diff --git a/radio/src/targets/horus/diskio.cpp b/radio/src/targets/horus/diskio.cpp index b0d9e8174..c254463a2 100644 --- a/radio/src/targets/horus/diskio.cpp +++ b/radio/src/targets/horus/diskio.cpp @@ -27,7 +27,7 @@ #include "diskio.h" #include #include "opentx.h" -#include "sdio_sd.h" +#include "targets/common/arm/stm32/sdio_sd.h" /*-----------------------------------------------------------------------*/ /* Lock / unlock functions */ diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index 83ad2095a..4b848911e 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -35,7 +35,7 @@ extern "C" { #pragma clang diagnostic ignored "-Wdeprecated-register" #endif -#if defined(PCBX9E) +#if defined(STM32F4) #include "STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h" #include "STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_rcc.h" #include "STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_gpio.h" @@ -95,7 +95,7 @@ extern "C" { #define LUA_MEM_MAX (0) // max allowed memory usage for complete Lua (in bytes), 0 means unlimited -#if defined(PCBX9E) +#if defined(STM32F4) #define PERI1_FREQUENCY 42000000 #define PERI2_FREQUENCY 84000000 #else diff --git a/radio/src/targets/taranis/bootloader/CMakeLists.txt b/radio/src/targets/taranis/bootloader/CMakeLists.txt deleted file mode 100644 index cf8d79c04..000000000 --- a/radio/src/targets/taranis/bootloader/CMakeLists.txt +++ /dev/null @@ -1,84 +0,0 @@ -# TODO if the files order is different (these 2 SRC sections exchanged), the bootloader hangs for 20s in USB init. Why? - -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - -if(PCB STREQUAL X9E) - set(BOOTLOADER_SRC - ${BOOTLOADER_SRC} - ../../common/arm/stm32/f4/system_stm32f4xx.c - ../../../${STM32LIB_DIR}/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc_ride7/startup_stm32f40_41xxx.s - ../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rcc.c - ../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c - ../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_spi.c - ../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_i2c.c - ../../../${STM32LIB_DIR}/STM32F4xx_StdPeriph_Driver/src/misc.c - ) -else() - set(BOOTLOADER_SRC - ${BOOTLOADER_SRC} - ../../common/arm/stm32/f2/system_stm32f2xx.c - ../../../${STM32LIB_DIR}/CMSIS/Device/ST/STM32F2xx/Source/Templates/gcc_ride7/startup_stm32f2xx.s - ../../../${STM32LIB_DIR}/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_rcc.c - ../../../${STM32LIB_DIR}/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_gpio.c - ../../../${STM32LIB_DIR}/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_spi.c - ../../../${STM32LIB_DIR}/STM32F2xx_StdPeriph_Driver/src/stm32f2xx_i2c.c - ../../../${STM32LIB_DIR}/STM32F2xx_StdPeriph_Driver/src/misc.c - ) -endif() - -set(BOOTLOADER_SRC - ${BOOTLOADER_SRC} - ../../../gui/${GUI_DIR}/lcd.cpp - ../../../gui/${GUI_DIR}/fonts.cpp - ../../../keys.cpp - ../../../strhelpers.cpp - ../../../stamp.cpp - ../../../${STM32USB_DIR}/STM32_USB_OTG_Driver/src/usb_core.c - ../../../${STM32USB_DIR}/STM32_USB_OTG_Driver/src/usb_dcd.c - ../../../${STM32USB_DIR}/STM32_USB_OTG_Driver/src/usb_dcd_int.c - ../../../${STM32USB_DIR}/STM32_USB_Device_Library/Core/src/usbd_core.c - ../../../${STM32USB_DIR}/STM32_USB_Device_Library/Core/src/usbd_ioreq.c - ../../../${STM32USB_DIR}/STM32_USB_Device_Library/Core/src/usbd_req.c - ../../../${STM32USB_DIR}/STM32_USB_Device_Library/Class/msc/src/usbd_msc_data.c - ../../../${STM32USB_DIR}/STM32_USB_Device_Library/Class/msc/src/usbd_msc_scsi.c - ../../../${STM32USB_DIR}/STM32_USB_Device_Library/Class/msc/src/usbd_msc_bot.c - ../../../${STM32USB_DIR}/STM32_USB_Device_Library/Class/msc/src/usbd_msc_core.c - ../../../${FATFS_DIR}/ff.c - ../../../${FATFS_DIR}/option/ccsbcs.c - ../${LCD_DRIVER} - ../backlight_driver.cpp - ../keys_driver.cpp - ../i2c_driver.cpp - ../flash_driver.cpp - ../diskio.cpp - ../../common/arm/stm32/usbd_usr.cpp - ../../common/arm/stm32/usbd_storage_msd.cpp - ../../common/arm/stm32/delays.cpp - ../../common/arm/stm32/usbd_desc.c - ../../common/arm/stm32/usb_bsp.c - ../../common/arm/stm32/usb_driver.cpp - ../pwr_driver.cpp - init.c - boot.cpp - ) - -remove_definitions(-DLUA -DDEBUG) -add_definitions(-DBOOT) - -set(CMAKE_EXE_LINKER_FLAGS "-mcpu=${MCU} -mthumb -nostartfiles -lm -T${RADIO_SRC_DIRECTORY}/targets/taranis/stm32_ramboot.ld -Wl,-Map=bootloader.map,--cref,--no-warn-mismatch,--gc-sections") - -add_executable(bootloader ${BOOTLOADER_SRC}) -add_dependencies(bootloader ${BITMAPS_TARGET} firmware_translations) - -add_custom_command( - TARGET bootloader POST_BUILD - COMMAND arm-none-eabi-objcopy -O binary bootloader.elf bootloader.bin -) -if(PYTHONINTERP_FOUND) - add_custom_command( - TARGET bootloader POST_BUILD - COMMAND ${PYTHON_EXECUTABLE} ${RADIO_DIRECTORY}/util/bin2lbm.py bootloader.bin bootloader.lbm - ) -endif() - -PrintTargetReport("bootloader")