104 #if defined(FMC_Bank4) || defined(FSMC_Bank4)
110 #ifdef HAL_PCCARD_MODULE_ENABLED
122 #define PCCARD_TIMEOUT_READ_ID 0x0000FFFFU
123 #define PCCARD_TIMEOUT_READ_WRITE_SECTOR 0x0000FFFFU
124 #define PCCARD_TIMEOUT_ERASE_SECTOR 0x00000400U
125 #define PCCARD_TIMEOUT_STATUS 0x01000000U
127 #define PCCARD_STATUS_OK (uint8_t)0x58
128 #define PCCARD_STATUS_WRITE_OK (uint8_t)0x50
177 hpccard->Lock = HAL_UNLOCKED;
178 #if (USE_HAL_PCCARD_REGISTER_CALLBACKS == 1)
179 if (hpccard->MspInitCallback == NULL)
186 hpccard->MspInitCallback(hpccard);
209 __FMC_PCCARD_ENABLE(hpccard->Instance);
226 #if (USE_HAL_PCCARD_REGISTER_CALLBACKS == 1)
227 if (hpccard->MspDeInitCallback == NULL)
233 hpccard->MspDeInitCallback(hpccard);
246 __HAL_UNLOCK(hpccard);
310 uint32_t timeout = PCCARD_TIMEOUT_READ_ID, index = 0U;
326 *pStatus = PCCARD_READY;
329 *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD) = (uint16_t)0xECEC;
335 status = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
338 }
while ((status != PCCARD_STATUS_OK) && timeout);
342 *pStatus = PCCARD_TIMEOUT_ERROR;
347 for (index = 0U; index < 16U; index++)
349 CompactFlash_ID[index] = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_DATA);
357 __HAL_UNLOCK(hpccard);
374 uint32_t timeout = PCCARD_TIMEOUT_READ_WRITE_SECTOR, index = 0U;
390 *pStatus = PCCARD_READY;
393 *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_CYLINDER_HIGH) = (uint16_t)0x0000;
394 *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_SECTOR_COUNT) = ((uint16_t)0x0100) | ((uint16_t)SectorAddress);
395 *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD) = (uint16_t)0xE4A0;
400 status = *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
402 }
while ((status == 0x80U) && timeout);
406 *pStatus = PCCARD_TIMEOUT_ERROR;
409 timeout = PCCARD_TIMEOUT_READ_WRITE_SECTOR;
414 status = *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
416 }
while ((status != PCCARD_STATUS_OK) && timeout);
420 *pStatus = PCCARD_TIMEOUT_ERROR;
424 for (; index < PCCARD_SECTOR_SIZE; index++)
426 *(uint16_t *)pBuffer++ = *(uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR);
433 __HAL_UNLOCK(hpccard);
451 uint32_t timeout = PCCARD_TIMEOUT_READ_WRITE_SECTOR, index = 0U;
467 *pStatus = PCCARD_READY;
470 *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_CYLINDER_HIGH) = (uint16_t)0x0000;
471 *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_SECTOR_COUNT) = ((uint16_t)0x0100) | ((uint16_t)SectorAddress);
472 *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD) = (uint16_t)0x30A0;
477 status = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
479 }
while ((status != PCCARD_STATUS_OK) && timeout);
483 *pStatus = PCCARD_TIMEOUT_ERROR;
487 for (; index < PCCARD_SECTOR_SIZE; index++)
489 *(uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR) = *(uint16_t *)pBuffer++;
495 status = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
497 }
while ((status != PCCARD_STATUS_WRITE_OK) && timeout);
501 *pStatus = PCCARD_TIMEOUT_ERROR;
508 __HAL_UNLOCK(hpccard);
524 uint32_t timeout = PCCARD_TIMEOUT_ERASE_SECTOR;
540 *pStatus = PCCARD_READY;
543 *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_CYLINDER_LOW) = 0x00;
544 *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_CYLINDER_HIGH) = 0x00;
545 *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_SECTOR_NUMBER) = SectorAddress;
546 *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_SECTOR_COUNT) = 0x01;
547 *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_CARD_HEAD) = 0xA0;
548 *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD) = ATA_ERASE_SECTOR_CMD;
551 status = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
553 while ((status != PCCARD_STATUS_WRITE_OK) && timeout)
555 status = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
561 *pStatus = PCCARD_TIMEOUT_ERROR;
568 __HAL_UNLOCK(hpccard);
600 *(__IO uint8_t *)(PCCARD_ATTRIBUTE_SPACE_ADDRESS | ATA_CARD_CONFIGURATION) = 0x01;
606 __HAL_UNLOCK(hpccard);
620 if (__FMC_PCCARD_GET_FLAG(hpccard->Instance, FMC_FLAG_RISING_EDGE))
623 #if (USE_HAL_PCCARD_REGISTER_CALLBACKS == 1)
624 hpccard->ItCallback(hpccard);
630 __FMC_PCCARD_CLEAR_FLAG(hpccard->Instance, FMC_FLAG_RISING_EDGE);
634 if (__FMC_PCCARD_GET_FLAG(hpccard->Instance, FMC_FLAG_LEVEL))
637 #if (USE_HAL_PCCARD_REGISTER_CALLBACKS == 1)
638 hpccard->ItCallback(hpccard);
644 __FMC_PCCARD_CLEAR_FLAG(hpccard->Instance, FMC_FLAG_LEVEL);
648 if (__FMC_PCCARD_GET_FLAG(hpccard->Instance, FMC_FLAG_FALLING_EDGE))
651 #if (USE_HAL_PCCARD_REGISTER_CALLBACKS == 1)
652 hpccard->ItCallback(hpccard);
658 __FMC_PCCARD_CLEAR_FLAG(hpccard->Instance, FMC_FLAG_FALLING_EDGE);
662 if (__FMC_PCCARD_GET_FLAG(hpccard->Instance, FMC_FLAG_FEMPT))
665 #if (USE_HAL_PCCARD_REGISTER_CALLBACKS == 1)
666 hpccard->ItCallback(hpccard);
672 __FMC_PCCARD_CLEAR_FLAG(hpccard->Instance, FMC_FLAG_FEMPT);
691 #if (USE_HAL_PCCARD_REGISTER_CALLBACKS == 1)
707 HAL_StatusTypeDef status = HAL_OK;
709 if (pCallback == NULL)
722 hpccard->MspInitCallback = pCallback;
725 hpccard->MspDeInitCallback = pCallback;
728 hpccard->ItCallback = pCallback;
741 hpccard->MspInitCallback = pCallback;
744 hpccard->MspDeInitCallback = pCallback;
759 __HAL_UNLOCK(hpccard);
776 HAL_StatusTypeDef status = HAL_OK;
823 __HAL_UNLOCK(hpccard);
855 return hpccard->State;
869 uint32_t timeout = PCCARD_TIMEOUT_STATUS, status_pccard = 0U;
874 return HAL_PCCARD_STATUS_ONGOING;
877 status_pccard = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
879 while ((status_pccard == PCCARD_BUSY) && timeout)
881 status_pccard = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
887 status_pccard = PCCARD_TIMEOUT_ERROR;
891 return (HAL_PCCARD_StatusTypeDef) status_pccard;
905 uint8_t data = 0U, status_pccard = PCCARD_BUSY;
910 return HAL_PCCARD_STATUS_ONGOING;
914 data = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
916 if ((data & PCCARD_TIMEOUT_ERROR) == PCCARD_TIMEOUT_ERROR)
918 status_pccard = PCCARD_TIMEOUT_ERROR;
920 else if ((data & PCCARD_READY) == PCCARD_READY)
922 status_pccard = PCCARD_READY;
925 return (HAL_PCCARD_StatusTypeDef) status_pccard;
FMC NAND Timing parameters structure definition.
HAL_StatusTypeDef FMC_PCCARD_CommonSpace_Timing_Init(FMC_PCCARD_TypeDef *Device, FMC_NAND_PCC_TimingTypeDef *Timing)
Initializes the FMC_PCCARD Common space Timing according to the specified parameters in the FMC_NAND_...
HAL_StatusTypeDef FMC_PCCARD_AttributeSpace_Timing_Init(FMC_PCCARD_TypeDef *Device, FMC_NAND_PCC_TimingTypeDef *Timing)
Initializes the FMC_PCCARD Attribute space Timing according to the specified parameters in the FMC_NA...
HAL_StatusTypeDef FMC_PCCARD_DeInit(FMC_PCCARD_TypeDef *Device)
DeInitializes the FMC_PCCARD device.
HAL_StatusTypeDef FMC_PCCARD_Init(FMC_PCCARD_TypeDef *Device, FMC_PCCARD_InitTypeDef *Init)
Initializes the FMC_PCCARD device according to the specified control parameters in the FMC_PCCARD_Han...
HAL_StatusTypeDef FMC_PCCARD_IOSpace_Timing_Init(FMC_PCCARD_TypeDef *Device, FMC_NAND_PCC_TimingTypeDef *Timing)
Initializes the FMC_PCCARD IO space Timing according to the specified parameters in the FMC_NAND_PCC_...
HAL_StatusTypeDef HAL_PCCARD_Init(PCCARD_HandleTypeDef *hpccard, FMC_NAND_PCC_TimingTypeDef *ComSpaceTiming, FMC_NAND_PCC_TimingTypeDef *AttSpaceTiming, FMC_NAND_PCC_TimingTypeDef *IOSpaceTiming)
Perform the PCCARD memory Initialization sequence.
void HAL_PCCARD_MspInit(PCCARD_HandleTypeDef *hpccard)
PCCARD MSP Init.
HAL_StatusTypeDef HAL_PCCARD_DeInit(PCCARD_HandleTypeDef *hpccard)
Perform the PCCARD memory De-initialization sequence.
void HAL_PCCARD_MspDeInit(PCCARD_HandleTypeDef *hpccard)
PCCARD MSP DeInit.
HAL_StatusTypeDef HAL_PCCARD_UnRegisterCallback(PCCARD_HandleTypeDef *hpccard, HAL_PCCARD_CallbackIDTypeDef CallbackId)
Unregister a User PCCARD Callback PCCARD Callback is redirected to the weak (surcharged) predefined c...
HAL_StatusTypeDef HAL_PCCARD_Reset(PCCARD_HandleTypeDef *hpccard)
Reset the PCCARD memory.
HAL_StatusTypeDef HAL_PCCARD_Read_ID(PCCARD_HandleTypeDef *hpccard, uint8_t CompactFlash_ID[], uint8_t *pStatus)
Read Compact Flash's ID.
HAL_StatusTypeDef HAL_PCCARD_Erase_Sector(PCCARD_HandleTypeDef *hpccard, uint16_t SectorAddress, uint8_t *pStatus)
Erase sector from PCCARD memory.
HAL_StatusTypeDef HAL_PCCARD_RegisterCallback(PCCARD_HandleTypeDef *hpccard, HAL_PCCARD_CallbackIDTypeDef CallbackId, pPCCARD_CallbackTypeDef pCallback)
Register a User PCCARD Callback To be used instead of the weak (surcharged) predefined callback.
void HAL_PCCARD_ITCallback(PCCARD_HandleTypeDef *hpccard)
PCCARD interrupt feature callback.
HAL_StatusTypeDef HAL_PCCARD_Write_Sector(PCCARD_HandleTypeDef *hpccard, uint16_t *pBuffer, uint16_t SectorAddress, uint8_t *pStatus)
Write sector to PCCARD memory.
void HAL_PCCARD_IRQHandler(PCCARD_HandleTypeDef *hpccard)
This function handles PCCARD device interrupt request.
HAL_StatusTypeDef HAL_PCCARD_Read_Sector(PCCARD_HandleTypeDef *hpccard, uint16_t *pBuffer, uint16_t SectorAddress, uint8_t *pStatus)
Read sector from PCCARD memory.
HAL_PCCARD_StatusTypeDef HAL_PCCARD_ReadStatus(PCCARD_HandleTypeDef *hpccard)
Reads the Compact Flash memory status using the Read status command.
HAL_PCCARD_StatusTypeDef HAL_PCCARD_GetStatus(PCCARD_HandleTypeDef *hpccard)
Get the compact flash memory status.
HAL_PCCARD_StateTypeDef HAL_PCCARD_GetState(PCCARD_HandleTypeDef *hpccard)
return the PCCARD controller state
HAL_PCCARD_CallbackIDTypeDef
HAL PCCARD Callback ID enumeration definition.
HAL_PCCARD_StateTypeDef
HAL PCCARD State structures definition.
struct __PCCARD_HandleTypeDef else typedef struct endif PCCARD_HandleTypeDef
FMC_PCCARD handle Structure definition.
void(* pPCCARD_CallbackTypeDef)(PCCARD_HandleTypeDef *hpccard)
HAL PCCARD Callback pointer definition.
@ HAL_PCCARD_MSP_DEINIT_CB_ID
@ HAL_PCCARD_MSP_INIT_CB_ID
This file contains all the functions prototypes for the HAL module driver.