comparison Discovery/Src/externLogbookFlash.c @ 870:bc6c90e20d9e Evo_2_23

Instrument code for Bootloader: the Bootloader was reactivated. Because some functions have changed in the past years an instrumentation had to be done to avoid compile issues (e.g. no multilanguage in Bootloader, no special fonts)
author Ideenmodellierer
date Mon, 12 Aug 2024 22:25:46 +0200
parents 2702bfa7b177
children 158100a84ebd
comparison
equal deleted inserted replaced
869:4e10a3e087a1 870:bc6c90e20d9e
113 113
114 114
115 /* Exported variables --------------------------------------------------------*/ 115 /* Exported variables --------------------------------------------------------*/
116 116
117 /* Private variables ---------------------------------------------------------*/ 117 /* Private variables ---------------------------------------------------------*/
118
119 #ifndef BOOTLOADER_STANDALONE
120 static uint32_t entryPoint = 0;
121 static uint32_t LengthLeftSampleRead = 0;
122 static uint32_t actualPointerDevicedata_Read = DDSTART;
123 #endif
124
118 static uint32_t actualAddress = 0; 125 static uint32_t actualAddress = 0;
119 static uint32_t preparedPageAddress = 0; 126 static uint32_t preparedPageAddress = 0;
120 static uint32_t closeSectorAddress = 0; 127 static uint32_t closeSectorAddress = 0;
121 static uint32_t entryPoint = 0;
122
123 static uint32_t actualPointerHeader = 0; 128 static uint32_t actualPointerHeader = 0;
124 static uint32_t actualPointerSample = 0; 129 static uint32_t actualPointerSample = 0;
125 static uint32_t LengthLeftSampleRead = 0;
126 static uint32_t actualPointerDevicedata = DDSTART; 130 static uint32_t actualPointerDevicedata = DDSTART;
127 static uint32_t actualPointerDevicedata_Read = DDSTART;
128 static uint32_t actualPointerVPM = 0; 131 static uint32_t actualPointerVPM = 0;
129 static uint32_t actualPointerSettings = SETTINGSSTART; 132 static uint32_t actualPointerSettings = SETTINGSSTART;
130 static uint32_t actualPointerFirmware = 0; 133 static uint32_t actualPointerFirmware = 0;
131 static uint32_t actualPointerFirmware2 = 0; 134 static uint32_t actualPointerFirmware2 = 0;
132 135
133 /* Private function prototypes -----------------------------------------------*/ 136 /* Private function prototypes -----------------------------------------------*/
134 static void chip_unselect(void); 137 static void chip_unselect(void);
135 static void chip_select(void); 138 static void chip_select(void);
139 #ifndef BOOTLOADER_STANDALONE
136 static void error_led_on(void); 140 static void error_led_on(void);
137 static void error_led_off(void); 141 static void error_led_off(void);
138 142 static void ext_flash_decf_address_ring(uint8_t type);
143 static void ext_flash_disable_protection(void);
144 static _Bool ext_flash_test_remaining_space_of_page_empty(uint32_t pointer, uint16_t length);
145 static void ext_flash_set_to_begin_of_next_page(uint32_t *pointer, uint8_t type);
146 #endif
139 static void write_spi(uint8_t data, uint8_t unselect_CS_afterwards); 147 static void write_spi(uint8_t data, uint8_t unselect_CS_afterwards);
140 static uint8_t read_spi(uint8_t unselect_CS_afterwards); 148 static uint8_t read_spi(uint8_t unselect_CS_afterwards);
141 static void write_address(uint8_t unselect_CS_afterwards); 149 static void write_address(uint8_t unselect_CS_afterwards);
142 static void Error_Handler_extflash(void); 150 static void Error_Handler_extflash(void);
143 static void wait_chip_not_busy(void); 151 static void wait_chip_not_busy(void);
144 static void ext_flash_incf_address(uint8_t type); 152 static void ext_flash_incf_address(uint8_t type);
145 //void ext_flash_incf_address_ring(void); 153 //void ext_flash_incf_address_ring(void);
146 static void ext_flash_decf_address_ring(uint8_t type);
147 154
148 static void ext_flash_erase4kB(void); 155 static void ext_flash_erase4kB(void);
149 static void ext_flash_erase32kB(void); 156 static void ext_flash_erase32kB(void);
150 static void ext_flash_erase64kB(void); 157 static void ext_flash_erase64kB(void);
151 static uint8_t ext_flash_erase_if_on_page_start(void); 158 static uint8_t ext_flash_erase_if_on_page_start(void);
157 static void ext_flash_read_block_stop(void); 164 static void ext_flash_read_block_stop(void);
158 165
159 static void ef_hw_rough_delay_us(uint32_t delayUs); 166 static void ef_hw_rough_delay_us(uint32_t delayUs);
160 static void ef_erase_64K(uint32_t blocks); 167 static void ef_erase_64K(uint32_t blocks);
161 168
169 #ifndef BOOTLOADER_STANDALONE
162 static void ext_flash_overwrite_sample_without_erase(uint8_t *pSample, uint16_t length); 170 static void ext_flash_overwrite_sample_without_erase(uint8_t *pSample, uint16_t length);
163
164 static void ext_flash_disable_protection(void);
165
166 static _Bool ext_flash_test_remaining_space_of_page_empty(uint32_t pointer, uint16_t length);
167 static void ext_flash_set_to_begin_of_next_page(uint32_t *pointer, uint8_t type);
168 static void ext_flash_find_start(void); 171 static void ext_flash_find_start(void);
172 #endif
173
169 174
170 175
171 /* Exported functions --------------------------------------------------------*/ 176 /* Exported functions --------------------------------------------------------*/
172 177
173 void ext_flash_write_firmware(uint8_t *pSample1, uint32_t length1)//, uint8_t *pSample2, uint32_t length2) 178 void ext_flash_write_firmware(uint8_t *pSample1, uint32_t length1)//, uint8_t *pSample2, uint32_t length2)
1579 settings->logFlashNextSampleStartAddress = SAMPLESTART; 1584 settings->logFlashNextSampleStartAddress = SAMPLESTART;
1580 } 1585 }
1581 } 1586 }
1582 1587
1583 1588
1584 #endif 1589
1585 1590
1586 static void ext_flash_disable_protection(void) 1591 static void ext_flash_disable_protection(void)
1587 { 1592 {
1588 /* 1593 /*
1589 extFlashStatusBit8_Type status; 1594 extFlashStatusBit8_Type status;
1594 write_spi(0x50,RELEASE); // EWSR 1599 write_spi(0x50,RELEASE); // EWSR
1595 write_spi(0x01,HOLDCS); // WRSR 1600 write_spi(0x01,HOLDCS); // WRSR
1596 write_spi(status.uw,RELEASE); // new status 1601 write_spi(status.uw,RELEASE); // new status
1597 */ 1602 */
1598 } 1603 }
1599 1604 #endif
1600 1605
1601 void ext_flash_disable_protection_for_logbook(void) 1606 void ext_flash_disable_protection_for_logbook(void)
1602 { 1607 {
1603 /* 1608 /*
1604 extFlashStatusBit8_Type status; 1609 extFlashStatusBit8_Type status;
1930 default: 1935 default:
1931 break; 1936 break;
1932 } 1937 }
1933 } 1938 }
1934 1939
1935 1940 #ifndef BOOTLOADER_STANDALONE
1936 static _Bool ext_flash_test_remaining_space_of_page_empty(uint32_t pointer, uint16_t length) 1941 static _Bool ext_flash_test_remaining_space_of_page_empty(uint32_t pointer, uint16_t length)
1937 { 1942 {
1938 if((pointer & 0xFFF) == 0) 1943 if((pointer & 0xFFF) == 0)
1939 return 1; 1944 return 1;
1940 1945
2000 *pointer = (*pointer & 0xFFF) + 0x1000; 2005 *pointer = (*pointer & 0xFFF) + 0x1000;
2001 2006
2002 if((*pointer < ringStart) || (*pointer >= ringStop)) 2007 if((*pointer < ringStart) || (*pointer >= ringStop))
2003 *pointer = ringStart; 2008 *pointer = ringStart;
2004 } 2009 }
2005 2010 #endif
2006 2011
2007 static void ef_erase_64K(uint32_t blocks) 2012 static void ef_erase_64K(uint32_t blocks)
2008 { 2013 {
2009 for(uint32_t i = 0; i < blocks; i++) 2014 for(uint32_t i = 0; i < blocks; i++)
2010 { 2015 {
2025 2030
2026 static void chip_select(void) 2031 static void chip_select(void)
2027 { 2032 {
2028 HAL_GPIO_WritePin(EXTFLASH_CSB_GPIO_PORT,EXTFLASH_CSB_PIN,GPIO_PIN_RESET); // chip select 2033 HAL_GPIO_WritePin(EXTFLASH_CSB_GPIO_PORT,EXTFLASH_CSB_PIN,GPIO_PIN_RESET); // chip select
2029 } 2034 }
2030 2035 #ifndef BOOTLOADER_STANDALONE
2031 static void error_led_on(void) 2036 static void error_led_on(void)
2032 { 2037 {
2033 HAL_GPIO_WritePin(OSCILLOSCOPE_GPIO_PORT,OSCILLOSCOPE_PIN,GPIO_PIN_SET); 2038 HAL_GPIO_WritePin(OSCILLOSCOPE_GPIO_PORT,OSCILLOSCOPE_PIN,GPIO_PIN_SET);
2034 } 2039 }
2035 2040
2036 static void error_led_off(void) 2041 static void error_led_off(void)
2037 { 2042 {
2038 HAL_GPIO_WritePin(OSCILLOSCOPE_GPIO_PORT,OSCILLOSCOPE_PIN,GPIO_PIN_RESET); 2043 HAL_GPIO_WritePin(OSCILLOSCOPE_GPIO_PORT,OSCILLOSCOPE_PIN,GPIO_PIN_RESET);
2039 } 2044 }
2040 2045 #endif
2041 2046
2042 static uint8_t read_spi(uint8_t unselect_CS_afterwards) 2047 static uint8_t read_spi(uint8_t unselect_CS_afterwards)
2043 { 2048 {
2044 uint8_t byte; 2049 uint8_t byte;
2045 2050
2148 2153
2149 if((actualAddress < ringStart) || (actualAddress > ringStop)) 2154 if((actualAddress < ringStart) || (actualAddress > ringStop))
2150 actualAddress = ringStart; 2155 actualAddress = ringStart;
2151 } 2156 }
2152 2157
2153 2158 #ifndef BOOTLOADER_STANDALONE
2154 static void ext_flash_decf_address_ring(uint8_t type) 2159 static void ext_flash_decf_address_ring(uint8_t type)
2155 { 2160 {
2156 uint32_t ringStart, ringStop; 2161 uint32_t ringStart, ringStop;
2157 2162
2158 switch(type) 2163 switch(type)
2194 if((actualAddress <= ringStart) || (actualAddress > ringStop)) 2199 if((actualAddress <= ringStart) || (actualAddress > ringStop))
2195 actualAddress = ringStop; 2200 actualAddress = ringStop;
2196 else 2201 else
2197 actualAddress -= 1; 2202 actualAddress -= 1;
2198 } 2203 }
2199 2204 #endif
2200 2205
2201 static void ef_hw_rough_delay_us(uint32_t delayUs) 2206 static void ef_hw_rough_delay_us(uint32_t delayUs)
2202 { 2207 {
2203 if(!delayUs) 2208 if(!delayUs)
2204 return; 2209 return;
2378 ext_flash_close_read_sample(); 2383 ext_flash_close_read_sample();
2379 return profileLength; 2384 return profileLength;
2380 } 2385 }
2381 2386
2382 2387
2383 /* 2388
2384 uint8_t ext_flash_erase_firmware_if_not_empty(void) 2389 uint8_t ext_flash_erase_firmware_if_not_empty(void)
2385 { 2390 {
2386 const uint8_t TESTSIZE_FW = 4; 2391 const uint8_t TESTSIZE_FW = 4;
2387 2392
2388 uint8_t data[TESTSIZE_FW]; 2393 uint8_t data[TESTSIZE_FW];
2429 ext_flash_erase_firmware2(); 2434 ext_flash_erase_firmware2();
2430 return 1; 2435 return 1;
2431 } 2436 }
2432 else 2437 else
2433 return 0; 2438 return 0;
2434 }*/ 2439 }