spif.h 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. #ifndef _SPIF_H_
  2. #define _SPIF_H_
  3. /***********************************************************************************************************
  4. Author: Nima Askari
  5. Github: https://www.github.com/NimaLTD
  6. LinkedIn: https://www.linkedin.com/in/nimaltd
  7. Youtube: https://www.youtube.com/@nimaltd
  8. Instagram: https://instagram.com/github.NimaLTD
  9. Version: 2.3.2
  10. History:
  11. 2.3.2
  12. - Fixed SPIF_Read() offset. Fixed ISSI ID
  13. 2.3.1
  14. - Fixed SPIF_WriteSector() and SPIF_WriteBlock()
  15. 2.3.0
  16. - Added ThreadX Configuration
  17. 2.2.2
  18. - Compile error
  19. 2.2.1
  20. - Updated SPIF_WriteAddress()
  21. 2.2.0
  22. - Added SPI_Trasmit and SPI_Receive again :)
  23. 2.1.0
  24. - Added Support HAL-DMA
  25. - Removed SPI_Trasmit function
  26. 2.0.1
  27. - Removed SPI_Receive function
  28. 2.0.0
  29. - Rewrite again
  30. - Supported STM32CubeMx Packet installer
  31. ***********************************************************************************************************/
  32. #ifdef __cplusplus
  33. extern "C"
  34. {
  35. #endif
  36. /************************************************************************************************************
  37. ************** Include Headers
  38. ************************************************************************************************************/
  39. #include <stdbool.h>
  40. #include <string.h>
  41. #include "NimaLTD.I-CUBE-SPIF_conf.h"
  42. #include "spi.h"
  43. /************************************************************************************************************
  44. ************** Public Definitions
  45. ************************************************************************************************************/
  46. #define SPIF_PAGE_SIZE 0x100
  47. #define SPIF_SECTOR_SIZE 0x1000
  48. #define SPIF_BLOCK_SIZE 0x10000
  49. #define SPIF_PageToSector(PageNumber) ((PageNumber * SPIF_PAGE_SIZE) / SPIF_SECTOR_SIZE)
  50. #define SPIF_PageToBlock(PageNumber) ((PageNumber * SPIF_PAGE_SIZE) / SPIF_BLOCK_SIZE)
  51. #define SPIF_SectorToBlock(SectorNumber) ((SectorNumber * SPIF_SECTOR_SIZE) / SPIF_BLOCK_SIZE)
  52. #define SPIF_SectorToPage(SectorNumber) ((SectorNumber * SPIF_SECTOR_SIZE) / SPIF_PAGE_SIZE)
  53. #define SPIF_BlockToPage(BlockNumber) ((BlockNumber * SPIF_BLOCK_SIZE) / SPIF_PAGE_SIZE)
  54. #define SPIF_PageToAddress(PageNumber) (PageNumber * SPIF_PAGE_SIZE)
  55. #define SPIF_SectorToAddress(SectorNumber) (SectorNumber * SPIF_SECTOR_SIZE)
  56. #define SPIF_BlockToAddress(BlockNumber) (BlockNumber * SPIF_BLOCK_SIZE)
  57. #define SPIF_AddressToPage(Address) (Address / SPIF_PAGE_SIZE)
  58. #define SPIF_AddressToSector(Address) (Address / SPIF_SECTOR_SIZE)
  59. #define SPIF_AddressToBlock(Address) (Address / SPIF_BLOCK_SIZE)
  60. /************************************************************************************************************
  61. ************** Public struct/enum
  62. ************************************************************************************************************/
  63. typedef enum
  64. {
  65. SPIF_MANUFACTOR_ERROR = 0,
  66. SPIF_MANUFACTOR_WINBOND = 0xEF,
  67. SPIF_MANUFACTOR_ISSI = 0x9D,
  68. SPIF_MANUFACTOR_MICRON = 0x20,
  69. SPIF_MANUFACTOR_GIGADEVICE = 0xC8,
  70. SPIF_MANUFACTOR_MACRONIX = 0xC2,
  71. SPIF_MANUFACTOR_SPANSION = 0x01,
  72. SPIF_MANUFACTOR_AMIC = 0x37,
  73. SPIF_MANUFACTOR_SST = 0xBF,
  74. SPIF_MANUFACTOR_HYUNDAI = 0xAD,
  75. SPIF_MANUFACTOR_ATMEL = 0x1F,
  76. SPIF_MANUFACTOR_FUDAN = 0xA1,
  77. SPIF_MANUFACTOR_ESMT = 0x8C,
  78. SPIF_MANUFACTOR_INTEL = 0x89,
  79. SPIF_MANUFACTOR_SANYO = 0x62,
  80. SPIF_MANUFACTOR_FUJITSU = 0x04,
  81. SPIF_MANUFACTOR_EON = 0x1C,
  82. SPIF_MANUFACTOR_PUYA = 0x85,
  83. } SPIF_ManufactorTypeDef;
  84. typedef enum
  85. {
  86. SPIF_SIZE_ERROR = 0,
  87. SPIF_SIZE_1MBIT = 0x11,
  88. SPIF_SIZE_2MBIT = 0x12,
  89. SPIF_SIZE_4MBIT = 0x13,
  90. SPIF_SIZE_8MBIT = 0x14,
  91. SPIF_SIZE_16MBIT = 0x15,
  92. SPIF_SIZE_32MBIT = 0x16,
  93. SPIF_SIZE_64MBIT = 0x17,
  94. SPIF_SIZE_128MBIT = 0x18,
  95. SPIF_SIZE_256MBIT = 0x19,
  96. SPIF_SIZE_512MBIT = 0x20,
  97. } SPIF_SizeTypeDef;
  98. typedef struct
  99. {
  100. SPI_HandleTypeDef *HSpi;
  101. GPIO_TypeDef *Gpio;
  102. SPIF_ManufactorTypeDef Manufactor;
  103. SPIF_SizeTypeDef Size;
  104. uint8_t Inited;
  105. uint8_t MemType;
  106. uint8_t Lock;
  107. uint8_t Reserved;
  108. uint32_t Pin;
  109. uint32_t PageCnt;
  110. uint32_t SectorCnt;
  111. uint32_t BlockCnt;
  112. } SPIF_HandleTypeDef;
  113. /************************************************************************************************************
  114. ************** Public Functions
  115. ************************************************************************************************************/
  116. bool SPIF_Init(SPIF_HandleTypeDef *Handle, SPI_HandleTypeDef *HSpi, GPIO_TypeDef *Gpio, uint16_t Pin);
  117. bool SPIF_EraseChip(SPIF_HandleTypeDef *Handle);
  118. bool SPIF_EraseSector(SPIF_HandleTypeDef *Handle, uint32_t Sector);
  119. bool SPIF_EraseBlock(SPIF_HandleTypeDef *Handle, uint32_t Block);
  120. bool SPIF_WriteAddress(SPIF_HandleTypeDef *Handle, uint32_t Address, uint8_t *Data, uint32_t Size);
  121. bool SPIF_WritePage(SPIF_HandleTypeDef *Handle, uint32_t PageNumber, uint8_t *Data, uint32_t Size, uint32_t Offset);
  122. bool SPIF_WriteSector(SPIF_HandleTypeDef *Handle, uint32_t SectorNumber, uint8_t *Data, uint32_t Size, uint32_t Offset);
  123. bool SPIF_WriteBlock(SPIF_HandleTypeDef *Handle, uint32_t BlockNumber, uint8_t *Data, uint32_t Size, uint32_t Offset);
  124. bool SPIF_ReadAddress(SPIF_HandleTypeDef *Handle, uint32_t Address, uint8_t *Data, uint32_t Size);
  125. bool SPIF_ReadPage(SPIF_HandleTypeDef *Handle, uint32_t PageNumber, uint8_t *Data, uint32_t Size, uint32_t Offset);
  126. bool SPIF_ReadSector(SPIF_HandleTypeDef *Handle, uint32_t SectorNumber, uint8_t *Data, uint32_t Size, uint32_t Offset);
  127. bool SPIF_ReadBlock(SPIF_HandleTypeDef *Handle, uint32_t BlockNumber, uint8_t *Data, uint32_t Size, uint32_t Offset);
  128. #ifdef __cplusplus
  129. }
  130. #endif
  131. #endif