25 #include "SDK_EVAL_EEPROM.h" 43 static SPI_HandleTypeDef EepromSpiHandle;
44 static uint8_t s_eeprom = 0;
47 static uint8_t BoardType = 0;
49 static uint32_t MainCs_ModerGpioReg;
50 static uint32_t MainCs_OtyperGpioReg;
51 static uint32_t MainCs_OspeedrGpioReg;
52 static uint32_t MainCs_PupdrGpioReg;
53 static uint32_t MainCs_OdrGpioReg;
54 static uint32_t MainCs_AfrGpioReg[2];
59 if (BoardType==1) HAL_GPIO_WritePin(EEPROM_SPI_PERIPH_XNUCLEO_CS_PORT, EEPROM_SPI_PERIPH_XNUCLEO_CS_PIN, GPIO_PIN_RESET);
60 else HAL_GPIO_WritePin(EEPROM_SPI_PERIPH_CS_PORT, EEPROM_SPI_PERIPH_CS_PIN, GPIO_PIN_RESET);
63 void EepromSPICSHigh()
65 if (BoardType==1) HAL_GPIO_WritePin(EEPROM_SPI_PERIPH_XNUCLEO_CS_PORT, EEPROM_SPI_PERIPH_XNUCLEO_CS_PIN, GPIO_PIN_SET);
66 else HAL_GPIO_WritePin(EEPROM_SPI_PERIPH_CS_PORT, EEPROM_SPI_PERIPH_CS_PIN, GPIO_PIN_SET);
81 GPIO_InitTypeDef GPIO_InitStructure;
84 EEPROM_SPI_PERIPH_RCC();
85 EEPROM_SPI_PERIPH_MOSI_RCC();
86 EEPROM_SPI_PERIPH_MISO_RCC();
87 EEPROM_SPI_PERIPH_SCLK_RCC();
88 EEPROM_SPI_PERIPH_CS_RCC();
92 GPIO_InitStructure.Pin = EEPROM_SPI_PERIPH_SCLK_PIN;
93 GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;
94 GPIO_InitStructure.Pull = GPIO_PULLUP;
95 GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;
96 GPIO_InitStructure.Alternate = EEPROM_SPI_PERIPH_SCLK_AF;
97 HAL_GPIO_Init(EEPROM_SPI_PERIPH_SCLK_PORT, &GPIO_InitStructure);
99 GPIO_InitStructure.Pin = EEPROM_SPI_PERIPH_MISO_PIN;
100 GPIO_InitStructure.Alternate = EEPROM_SPI_PERIPH_MISO_AF;
101 HAL_GPIO_Init(EEPROM_SPI_PERIPH_MISO_PORT, &GPIO_InitStructure);
103 GPIO_InitStructure.Pin = EEPROM_SPI_PERIPH_MOSI_PIN;
104 GPIO_InitStructure.Alternate = EEPROM_SPI_PERIPH_MOSI_AF;
105 HAL_GPIO_Init(EEPROM_SPI_PERIPH_MOSI_PORT, &GPIO_InitStructure);
110 GPIO_TypeDef *MainCsEepromPort;
111 MainCsEepromPort = EEPROM_SPI_PERIPH_CS_PORT;
114 MainCs_ModerGpioReg = MainCsEepromPort->MODER;
117 MainCs_AfrGpioReg[0] = MainCsEepromPort->AFR[0] ;
118 MainCs_AfrGpioReg[1] = MainCsEepromPort->AFR[1] ;
121 MainCs_OspeedrGpioReg = MainCsEepromPort->OSPEEDR;
124 MainCs_OtyperGpioReg = MainCsEepromPort->OTYPER ;
127 MainCs_OdrGpioReg = MainCsEepromPort->ODR ;
130 MainCs_PupdrGpioReg = MainCsEepromPort->PUPDR;
134 GPIO_InitStructure.Pin = EEPROM_SPI_PERIPH_CS_PIN;
135 GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
136 HAL_GPIO_Init(EEPROM_SPI_PERIPH_CS_PORT, &GPIO_InitStructure);
140 if(HAL_SPI_GetState(&EepromSpiHandle) == HAL_SPI_STATE_RESET)
143 EepromSpiHandle.Instance = EEPROM_SPI_PERIPH_NB;
144 EepromSpiHandle.Init.Mode = SPI_MODE_MASTER;
145 EepromSpiHandle.Init.BaudRatePrescaler = SDK_EVAL_SPI_PRESCALER;
147 EepromSpiHandle.Init.Direction = SPI_DIRECTION_2LINES;
148 EepromSpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE;
149 EepromSpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW;
150 EepromSpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
151 EepromSpiHandle.Init.CRCPolynomial = 7;
152 EepromSpiHandle.Init.DataSize = SPI_DATASIZE_8BIT;
153 EepromSpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB;
154 EepromSpiHandle.Init.NSS = SPI_NSS_SOFT;
155 EepromSpiHandle.Init.TIMode = SPI_TIMODE_DISABLED;
157 if(HAL_SPI_Init(&EepromSpiHandle) != HAL_OK) {
160 __HAL_SPI_ENABLE(&EepromSpiHandle);
179 GPIO_InitTypeDef GPIO_InitStructure;
181 GPIO_InitStructure.Pin = EEPROM_SPI_PERIPH_CS_PIN;
182 GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
183 GPIO_InitStructure.Pull = GPIO_PULLUP;
184 GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;
185 HAL_GPIO_Init(EEPROM_SPI_PERIPH_CS_PORT, &GPIO_InitStructure);
188 EEPROM_SPI_PERIPH_CS_RCC();
204 GPIO_TypeDef *MainCsEepromPort;
205 MainCsEepromPort = EEPROM_SPI_PERIPH_CS_PORT;
208 MainCsEepromPort->MODER = MainCs_ModerGpioReg;
211 MainCsEepromPort->AFR[0] = MainCs_AfrGpioReg[0];
212 MainCsEepromPort->AFR[1]= MainCs_AfrGpioReg[1];
215 MainCsEepromPort->OSPEEDR = MainCs_OspeedrGpioReg;
218 MainCsEepromPort->OTYPER = MainCs_OtyperGpioReg;
221 MainCsEepromPort->ODR = MainCs_OdrGpioReg;
224 MainCsEepromPort->PUPDR = MainCs_PupdrGpioReg;
230 GPIO_InitTypeDef GPIO_InitStructure;
232 GPIO_InitStructure.Pin = EEPROM_SPI_PERIPH_XNUCLEO_CS_PIN;
233 GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
234 GPIO_InitStructure.Pull = GPIO_PULLUP;
235 GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;
236 HAL_GPIO_Init(EEPROM_SPI_PERIPH_XNUCLEO_CS_PORT, &GPIO_InitStructure);
238 EEPROM_SPI_PERIPH_XNUCLEO_CS_RCC();
252 uint8_t cmd = EEPROM_CMD_RDSR;
253 uint8_t dummy = 0xFF;
260 HAL_SPI_TransmitReceive(&EepromSpiHandle, &cmd, &status, 1, 1000);
264 HAL_SPI_TransmitReceive(&EepromSpiHandle, &dummy, &status, 1, 1000);
265 }
while(status&EEPROM_STATUS_WIP);
281 uint8_t cmd[] = {EEPROM_CMD_RDSR, 0xFF};
287 HAL_SPI_TransmitReceive(&EepromSpiHandle, cmd, status, 2, 1000);
304 uint8_t cmd[] = {EEPROM_CMD_WRSR, EEPROM_STATUS_SRWD};
310 HAL_SPI_TransmitReceive(&EepromSpiHandle, cmd, status, 2, 1000);
327 uint8_t cmd[] = {EEPROM_CMD_WRSR, 0};
335 HAL_SPI_TransmitReceive(&EepromSpiHandle, cmd, status, 2, 1000);
351 uint8_t cmd = EEPROM_CMD_WREN;
357 HAL_SPI_TransmitReceive(&EepromSpiHandle, &cmd, &status, 1, 1000);
376 void EepromRead(uint16_t nAddress, uint8_t cNbBytes, uint8_t* pcBuffer)
380 cmd[0] = EEPROM_CMD_READ;
382 for(uint8_t k=0; k<2; k++) {
383 cmd[k+1] = (uint8_t)(nAddress>>((1-k)*8));
393 HAL_SPI_TransmitReceive(&EepromSpiHandle, cmd, dummy, 3, 1000);
396 HAL_SPI_TransmitReceive(&EepromSpiHandle, dummy, pcBuffer, cNbBytes, 1000);
418 void EepromWrite(uint16_t nAddress, uint8_t cNbBytes, uint8_t* pcBuffer)
420 uint8_t cmd = EEPROM_CMD_WRITE, tmp[255];
429 for(uint8_t k=0; k<2; k++) {
430 address[k] = (uint8_t)(nAddress>>((1-k)*8));
438 HAL_SPI_TransmitReceive(&EepromSpiHandle, &cmd, tmp, 1, 1000);
440 HAL_SPI_TransmitReceive(&EepromSpiHandle, address, tmp, 2, 1000);
442 HAL_SPI_TransmitReceive(&EepromSpiHandle, pcBuffer, tmp, cNbBytes, 1000);
This file contains SDK EVAL configuration and useful defines.
void SdkEvalSetHasEeprom(uint8_t eeprom)
This function is to set if EEPROM is present or not.
void EepromWriteEnable(void)
Set the internal WEL flag to allow write operation.
uint8_t EepromResetSrwd(void)
Reset the ERSR status bit.
void EepromWrite(uint16_t nAddress, uint8_t cNbBytes, uint8_t *pcBuffer)
Write a page of the EEPROM. A page size is 32 bytes. The pages are 256. Page 0 address: 0x0000 Page 1...
void EepromCsXnucleoPinInitialization(void)
Initialization of the CSn pin of the EEPROM for XNUCLEO boards.
void EepromSpiInitialization(void)
Initializes the SPI for the EEPROM. SPI, MISO, MOSI and SCLK are the same used for the SPIRIT1....
uint8_t EepromSetSrwd(void)
Set the ERSR status bit.
uint8_t SdkEvalGetHasEeprom(void)
This function is to query if EEPROM is present or not.
void EepromCsPinInitialization(void)
Initialization of the CSn pin of the EEPROM. This function is called internally by EepromCsPinInitial...
void EepromRead(uint16_t nAddress, uint8_t cNbBytes, uint8_t *pcBuffer)
Read a page of the EEPROM. A page size is 32 bytes. The pages are 256. Page 0 address: 0x0000 Page 1 ...
void EepromWaitEndWriteOperation(void)
Wait polling the SPI until the internal WIP flag is RESET. The flag is SET when a write operation is ...
uint8_t EepromStatus(void)
Read the status register.