/** * @brief Programs the 8-bit EEPROM memory value. * @param Address: The EEPROM memory byte address. * @param BankSelector: Selects EEPROM Bank (Main Bank or Information Bank). * This parameter can be one of the following values: * @arg EEPROM_Main_Bank_Select: The EEPROM Main Bank selector. * @arg EEPROM_Info_Bank_Select: The EEPROM Information Bank selector. * @param Data: The data value to be programmed. * @retval None */ __RAMFUNC void EEPROM_ProgramByte(uint32_t Address, uint32_t BankSelector, uint32_t Data) { uint32_t Mask; uint32_t Tmp; uint32_t Shift; assert_param(IS_EEPROM_BANK_SELECTOR(BankSelector)); Shift = (Address & 3) * 8; Data = Data << Shift; Mask = 0xFF << Shift; Tmp = EEPROM_ReadWord(Address, BankSelector); EEPROM_ProgramWord(Address, BankSelector, (Tmp & ~Mask) | (Data & Mask)); }
/** * @brief Main program. * @param None * @retval None */ void main (void) { uint32_t Address; uint32_t BankSelector; uint32_t Data; int i; uint8_t EraseErrMM=0; uint8_t WriteErrMM=0; uint8_t EraseErrIM=0; uint8_t WriteErrIM=0; /* Enables the clock on PORTD */ RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTD, ENABLE); /* Enables the clock on EEPROM */ RST_CLK_PCLKcmd(RST_CLK_PCLK_EEPROM, ENABLE); /* Configure PORTD pins 10..14 for output to switch LEDs on/off */ PORT_InitStructure.PORT_Pin = (PORT_Pin_10 | PORT_Pin_11 | PORT_Pin_12 | PORT_Pin_13 | PORT_Pin_14); PORT_InitStructure.PORT_OE = PORT_OE_OUT; PORT_InitStructure.PORT_FUNC = PORT_FUNC_PORT; PORT_InitStructure.PORT_MODE = PORT_MODE_DIGITAL; PORT_InitStructure.PORT_SPEED = PORT_SPEED_SLOW; PORT_Init(MDR_PORTD, &PORT_InitStructure); /* Erase main memory page 0 */ Address = 0x08000000; BankSelector = 0; EEPROM_ErasePage (Address,BankSelector); /* Check main memory page 0 */ Data = 0xFFFFFFFF; for (i=0;i<1024;i++) { if (EEPROM_ReadWord (Address+i*4,BankSelector) != Data) EraseErrMM = 1; } /* Indicate status of erasing main memory page 0*/ if (EraseErrMM == 0) { PORT_SetBits(MDR_PORTD, PORT_Pin_10); } /* Fill main memory page 0 */ Address = 0x08000000; BankSelector = 0; for (i=0;i<1024;i++) { Data = Pseudo_Rand (Address+i*4); EEPROM_ProgramWord (Address+i*4,BankSelector,Data); } /* Check main memory page 0 */ Address = 0x08000000; BankSelector = 0; for (i=0;i<1024;i++) { Data = Pseudo_Rand (Address+i*4); if (EEPROM_ReadWord (Address+i*4,BankSelector) != Data) { WriteErrMM = 1; } } /* Indicate status of writing main memory page 0*/ if (WriteErrMM == 0) { PORT_SetBits(MDR_PORTD, PORT_Pin_11); } /* Full Erase information memory */ Address = 0x08000000; BankSelector = 1; EEPROM_EraseAllPages (BankSelector); /* Check information memory */ Data = 0xFFFFFFFF; for (i=0;i<1024;i++) { if (EEPROM_ReadWord (Address+i*4,BankSelector) != Data) { EraseErrIM = 1; } } /* Indicate status of erasing information memory */ if (EraseErrIM == 0) { PORT_SetBits(MDR_PORTD, PORT_Pin_12); } /* fill information memory */ Address = 0x08000000; BankSelector = 1; for (i=0;i<1024;i++) { Data = Pseudo_Rand (Address+i*4); EEPROM_ProgramWord (Address+i*4,BankSelector,Data); } /* Check information memory */ Address = 0x08000000; BankSelector = 1; for (i=0;i<1024;i++) { Data = Pseudo_Rand (Address+i*4); if(EEPROM_ReadWord (Address+i*4,BankSelector) != Data) { WriteErrIM = 1; } } /* Indicate status of writing information memory */ if (WriteErrIM == 0) { PORT_SetBits(MDR_PORTD, PORT_Pin_13); } while (1) { } }