Valentin Bruchet
/
a_sd_card
sd lecture
eeprom_flash.cpp@4:3269abcc9c73, 2021-03-16 (annotated)
- Committer:
- valentinbruchet
- Date:
- Tue Mar 16 14:58:12 2021 +0000
- Revision:
- 4:3269abcc9c73
- Parent:
- 3:46c0511e25af
- Child:
- 5:66c8b598de04
eeprom
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
olympux | 0:ea2bec485611 | 1 | #include "mbed.h" |
olympux | 0:ea2bec485611 | 2 | #include "eeprom_flash.h" |
pathae | 2:68c9ff91504c | 3 | Serial pc(USBTX, USBRX); //Initalise PC serial comms |
pathae | 2:68c9ff91504c | 4 | DigitalOut myled(LED1); |
olympux | 0:ea2bec485611 | 5 | /* |
valentinbruchet | 4:3269abcc9c73 | 6 | * Must call this first to enable writing |
valentinbruchet | 4:3269abcc9c73 | 7 | */ |
olympux | 0:ea2bec485611 | 8 | void enableEEPROMWriting() { |
valentinbruchet | 4:3269abcc9c73 | 9 | HAL_StatusTypeDef status = HAL_FLASH_Unlock(); |
valentinbruchet | 4:3269abcc9c73 | 10 | FLASH_PageErase(EEPROM_START_ADDRESS); // required to re-write |
valentinbruchet | 4:3269abcc9c73 | 11 | CLEAR_BIT(FLASH->CR, FLASH_CR_PER); // Bug fix: bit PER has been set in Flash_PageErase(), must clear it here |
olympux | 0:ea2bec485611 | 12 | } |
olympux | 0:ea2bec485611 | 13 | void disableEEPROMWriting() { |
valentinbruchet | 4:3269abcc9c73 | 14 | HAL_FLASH_Lock(); |
olympux | 0:ea2bec485611 | 15 | } |
olympux | 0:ea2bec485611 | 16 | /* |
valentinbruchet | 4:3269abcc9c73 | 17 | * Writing functions |
valentinbruchet | 4:3269abcc9c73 | 18 | * Must call enableEEPROMWriting() first |
valentinbruchet | 4:3269abcc9c73 | 19 | */ |
olympux | 0:ea2bec485611 | 20 | HAL_StatusTypeDef writeEEPROMHalfWord(uint32_t address, uint16_t data) { |
valentinbruchet | 4:3269abcc9c73 | 21 | HAL_StatusTypeDef status; |
valentinbruchet | 4:3269abcc9c73 | 22 | address = address + EEPROM_START_ADDRESS; |
valentinbruchet | 4:3269abcc9c73 | 23 | status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, address, data); |
valentinbruchet | 4:3269abcc9c73 | 24 | return status; |
olympux | 0:ea2bec485611 | 25 | } |
olympux | 0:ea2bec485611 | 26 | /* |
valentinbruchet | 4:3269abcc9c73 | 27 | * Reading functions |
valentinbruchet | 4:3269abcc9c73 | 28 | */ |
olympux | 0:ea2bec485611 | 29 | uint16_t readEEPROMHalfWord(uint32_t address) { |
valentinbruchet | 4:3269abcc9c73 | 30 | uint16_t val = 0; |
valentinbruchet | 4:3269abcc9c73 | 31 | address = address + EEPROM_START_ADDRESS; |
valentinbruchet | 4:3269abcc9c73 | 32 | val = *(__IO uint16_t*)address; |
valentinbruchet | 4:3269abcc9c73 | 33 | return val; |
olympux | 0:ea2bec485611 | 34 | } |
pathae | 2:68c9ff91504c | 35 | //Programme de test |
pathae | 2:68c9ff91504c | 36 | int main() { |
valentinbruchet | 4:3269abcc9c73 | 37 | int tab[40]= {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}; |
pathae | 2:68c9ff91504c | 38 | int adresse = 0x00; |
pathae | 2:68c9ff91504c | 39 | int lecture; |
pathae | 2:68c9ff91504c | 40 | pc.baud(9600); |
pathae | 2:68c9ff91504c | 41 | /* Ecriture*/ |
pathae | 2:68c9ff91504c | 42 | enableEEPROMWriting(); //autorisation d'ecriture dans l'eeprom |
valentinbruchet | 4:3269abcc9c73 | 43 | writeEEPROMHalfWord(adresse, tab[0]); |
valentinbruchet | 4:3269abcc9c73 | 44 | writeEEPROMHalfWord(adresse+2, tab[1]); |
valentinbruchet | 4:3269abcc9c73 | 45 | writeEEPROMHalfWord(adresse+4, tab[2]); |
valentinbruchet | 4:3269abcc9c73 | 46 | writeEEPROMHalfWord(adresse+6, tab[3]); |
valentinbruchet | 4:3269abcc9c73 | 47 | writeEEPROMHalfWord(adresse+8, tab[4]); |
valentinbruchet | 4:3269abcc9c73 | 48 | writeEEPROMHalfWord(adresse+10, tab[5]); |
valentinbruchet | 4:3269abcc9c73 | 49 | writeEEPROMHalfWord(adresse+12, tab[6]); |
valentinbruchet | 4:3269abcc9c73 | 50 | writeEEPROMHalfWord(adresse+14, tab[7]); |
valentinbruchet | 4:3269abcc9c73 | 51 | writeEEPROMHalfWord(adresse+16, tab[8]); |
valentinbruchet | 4:3269abcc9c73 | 52 | writeEEPROMHalfWord(adresse+18, tab[9]); |
valentinbruchet | 4:3269abcc9c73 | 53 | writeEEPROMHalfWord(adresse+20, tab[10]); |
valentinbruchet | 4:3269abcc9c73 | 54 | writeEEPROMHalfWord(adresse+22, tab[11]); |
valentinbruchet | 4:3269abcc9c73 | 55 | writeEEPROMHalfWord(adresse+24, tab[12]); |
valentinbruchet | 4:3269abcc9c73 | 56 | writeEEPROMHalfWord(adresse+26, tab[13]); |
valentinbruchet | 4:3269abcc9c73 | 57 | writeEEPROMHalfWord(adresse+28, tab[14]); |
valentinbruchet | 4:3269abcc9c73 | 58 | writeEEPROMHalfWord(adresse+30, tab[15]); |
valentinbruchet | 4:3269abcc9c73 | 59 | writeEEPROMHalfWord(adresse+32, tab[16]); |
valentinbruchet | 4:3269abcc9c73 | 60 | writeEEPROMHalfWord(adresse+34, tab[17]); |
valentinbruchet | 4:3269abcc9c73 | 61 | writeEEPROMHalfWord(adresse+36, tab[18]); |
valentinbruchet | 4:3269abcc9c73 | 62 | writeEEPROMHalfWord(adresse+38, tab[19]); |
valentinbruchet | 4:3269abcc9c73 | 63 | writeEEPROMHalfWord(adresse+40, tab[20]); |
valentinbruchet | 4:3269abcc9c73 | 64 | writeEEPROMHalfWord(adresse+42, tab[21]); |
valentinbruchet | 4:3269abcc9c73 | 65 | writeEEPROMHalfWord(adresse+44, tab[22]); |
valentinbruchet | 4:3269abcc9c73 | 66 | writeEEPROMHalfWord(adresse+46, tab[23]); |
valentinbruchet | 4:3269abcc9c73 | 67 | writeEEPROMHalfWord(adresse+48, tab[24]); |
valentinbruchet | 4:3269abcc9c73 | 68 | writeEEPROMHalfWord(adresse+50, tab[25]); |
valentinbruchet | 4:3269abcc9c73 | 69 | writeEEPROMHalfWord(adresse+52, tab[26]); |
valentinbruchet | 4:3269abcc9c73 | 70 | writeEEPROMHalfWord(adresse+54, tab[27]); |
valentinbruchet | 4:3269abcc9c73 | 71 | writeEEPROMHalfWord(adresse+56, tab[28]); |
valentinbruchet | 4:3269abcc9c73 | 72 | writeEEPROMHalfWord(adresse+58, tab[29]); |
valentinbruchet | 4:3269abcc9c73 | 73 | writeEEPROMHalfWord(adresse+60, tab[30]); |
valentinbruchet | 4:3269abcc9c73 | 74 | writeEEPROMHalfWord(adresse+62, tab[31]); |
valentinbruchet | 4:3269abcc9c73 | 75 | writeEEPROMHalfWord(adresse+64, tab[32]); |
valentinbruchet | 4:3269abcc9c73 | 76 | writeEEPROMHalfWord(adresse+66, tab[33]); |
valentinbruchet | 4:3269abcc9c73 | 77 | writeEEPROMHalfWord(adresse+68, tab[34]); |
valentinbruchet | 4:3269abcc9c73 | 78 | writeEEPROMHalfWord(adresse+70, tab[35]); |
valentinbruchet | 4:3269abcc9c73 | 79 | writeEEPROMHalfWord(adresse+72, tab[36]); |
valentinbruchet | 4:3269abcc9c73 | 80 | writeEEPROMHalfWord(adresse+74, tab[37]); |
valentinbruchet | 4:3269abcc9c73 | 81 | writeEEPROMHalfWord(adresse+76, tab[38]); |
valentinbruchet | 4:3269abcc9c73 | 82 | writeEEPROMHalfWord(adresse+78, tab[39]); |
pathae | 2:68c9ff91504c | 83 | disableEEPROMWriting(); //Interdiction d'ecriture |
valentinbruchet | 4:3269abcc9c73 | 84 | myled=!myled; |
valentinbruchet | 4:3269abcc9c73 | 85 | wait(0.5); |
valentinbruchet | 4:3269abcc9c73 | 86 | myled=!myled; |
valentinbruchet | 4:3269abcc9c73 | 87 | wait(0.5); |
pathae | 2:68c9ff91504c | 88 | /*lecture et affichage*/ |
pathae | 2:68c9ff91504c | 89 | lecture=readEEPROMHalfWord(adresse); |
pathae | 2:68c9ff91504c | 90 | pc.printf ("valeur lue: %d\n\r",lecture); |
pathae | 2:68c9ff91504c | 91 | lecture=readEEPROMHalfWord(adresse+2); |
pathae | 2:68c9ff91504c | 92 | pc.printf ("valeur lue: %d\n\r",lecture); |
pathae | 2:68c9ff91504c | 93 | lecture=readEEPROMHalfWord(adresse+4); |
pathae | 2:68c9ff91504c | 94 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 95 | lecture=readEEPROMHalfWord(adresse+6); |
valentinbruchet | 4:3269abcc9c73 | 96 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 97 | lecture=readEEPROMHalfWord(adresse+8); |
valentinbruchet | 4:3269abcc9c73 | 98 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 99 | lecture=readEEPROMHalfWord(adresse+10); |
valentinbruchet | 4:3269abcc9c73 | 100 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 101 | lecture=readEEPROMHalfWord(adresse+12); |
valentinbruchet | 4:3269abcc9c73 | 102 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 103 | lecture=readEEPROMHalfWord(adresse+14); |
valentinbruchet | 4:3269abcc9c73 | 104 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 105 | lecture=readEEPROMHalfWord(adresse+16); |
valentinbruchet | 4:3269abcc9c73 | 106 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 107 | lecture=readEEPROMHalfWord(adresse+18); |
valentinbruchet | 4:3269abcc9c73 | 108 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 109 | lecture=readEEPROMHalfWord(adresse+20); |
valentinbruchet | 4:3269abcc9c73 | 110 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 111 | lecture=readEEPROMHalfWord(adresse+22); |
valentinbruchet | 4:3269abcc9c73 | 112 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 113 | lecture=readEEPROMHalfWord(adresse+24); |
valentinbruchet | 4:3269abcc9c73 | 114 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 115 | lecture=readEEPROMHalfWord(adresse+26); |
valentinbruchet | 4:3269abcc9c73 | 116 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 117 | lecture=readEEPROMHalfWord(adresse+28); |
valentinbruchet | 4:3269abcc9c73 | 118 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 119 | lecture=readEEPROMHalfWord(adresse+30); |
valentinbruchet | 4:3269abcc9c73 | 120 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 121 | lecture=readEEPROMHalfWord(adresse+32); |
valentinbruchet | 4:3269abcc9c73 | 122 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 123 | lecture=readEEPROMHalfWord(adresse+34); |
valentinbruchet | 4:3269abcc9c73 | 124 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 125 | lecture=readEEPROMHalfWord(adresse+36); |
valentinbruchet | 4:3269abcc9c73 | 126 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 127 | lecture=readEEPROMHalfWord(adresse+38); |
valentinbruchet | 4:3269abcc9c73 | 128 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 129 | lecture=readEEPROMHalfWord(adresse+40); |
valentinbruchet | 4:3269abcc9c73 | 130 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 131 | lecture=readEEPROMHalfWord(adresse+42); |
valentinbruchet | 4:3269abcc9c73 | 132 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 133 | lecture=readEEPROMHalfWord(adresse+44); |
valentinbruchet | 4:3269abcc9c73 | 134 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 135 | lecture=readEEPROMHalfWord(adresse+46); |
valentinbruchet | 4:3269abcc9c73 | 136 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 137 | lecture=readEEPROMHalfWord(adresse+48); |
valentinbruchet | 4:3269abcc9c73 | 138 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 139 | lecture=readEEPROMHalfWord(adresse+50); |
valentinbruchet | 4:3269abcc9c73 | 140 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 141 | lecture=readEEPROMHalfWord(adresse+52); |
valentinbruchet | 4:3269abcc9c73 | 142 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 143 | lecture=readEEPROMHalfWord(adresse+54); |
valentinbruchet | 4:3269abcc9c73 | 144 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 145 | lecture=readEEPROMHalfWord(adresse+56); |
valentinbruchet | 4:3269abcc9c73 | 146 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 147 | lecture=readEEPROMHalfWord(adresse+58); |
valentinbruchet | 4:3269abcc9c73 | 148 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 149 | lecture=readEEPROMHalfWord(adresse+60); |
valentinbruchet | 4:3269abcc9c73 | 150 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 151 | lecture=readEEPROMHalfWord(adresse+62); |
valentinbruchet | 4:3269abcc9c73 | 152 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 153 | lecture=readEEPROMHalfWord(adresse+64); |
valentinbruchet | 4:3269abcc9c73 | 154 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 155 | lecture=readEEPROMHalfWord(adresse+68); |
valentinbruchet | 4:3269abcc9c73 | 156 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 157 | lecture=readEEPROMHalfWord(adresse+70); |
valentinbruchet | 4:3269abcc9c73 | 158 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 159 | lecture=readEEPROMHalfWord(adresse+72); |
valentinbruchet | 4:3269abcc9c73 | 160 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 161 | lecture=readEEPROMHalfWord(adresse+76); |
valentinbruchet | 4:3269abcc9c73 | 162 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 163 | lecture=readEEPROMHalfWord(adresse+78); |
valentinbruchet | 4:3269abcc9c73 | 164 | pc.printf ("valeur lue: %d\n\r",lecture); |
valentinbruchet | 4:3269abcc9c73 | 165 | while(1); |
valentinbruchet | 4:3269abcc9c73 | 166 | } |