@@ -55,33 +55,26 @@ flash_word_t fmc_read(uint32_t addr) {
5555 return * ((flash_word_t * )(_config_flash + addr ));
5656}
5757
58- void fmc_read_buf (uint32_t offset , uint8_t * data , uint32_t size ) {
59- flash_word_t * ptr = (flash_word_t * )data ;
58+ void fmc_read_buf (uint32_t start , uint8_t * data , uint32_t size ) {
59+ if (size < FLASH_WORD_SIZE || (size % FLASH_WORD_SIZE ) || (start + size ) > sizeof (_config_flash )) {
60+ fmc_lock ();
61+ failloop (FAILLOOP_FAULT );
62+ }
6063
64+ flash_word_t * ptr = (flash_word_t * )data ;
6165 for (uint32_t i = 0 ; i < (size / sizeof (flash_word_t )); i ++ ) {
62- ptr [i ] = fmc_read (offset + i * sizeof (flash_word_t ));
66+ ptr [i ] = fmc_read (start + i * sizeof (flash_word_t ));
6367 }
6468}
6569
66- void fmc_write (uint32_t offset , flash_word_t value ) {
67- #ifdef STM32H7
68- uint8_t data [FLASH_WORD_SIZE ];
69- memcpy (data , & value , sizeof (flash_word_t ));
70-
71- HAL_StatusTypeDef result = HAL_FLASH_Program (PROGRAM_TYPE , (uint32_t )FLASH_PTR (offset ), (uint64_t )(uint32_t )(data ));
72- #else
73- HAL_StatusTypeDef result = HAL_FLASH_Program (PROGRAM_TYPE , (uint32_t )FLASH_PTR (offset ), value );
74- #endif
75-
76- if (result != HAL_OK ) {
70+ void fmc_write_buf (uint32_t start , uint8_t * data , uint32_t size ) {
71+ if (size < FLASH_WORD_SIZE || (size % FLASH_WORD_SIZE ) || (start + size ) > sizeof (_config_flash )) {
7772 fmc_lock ();
7873 failloop (FAILLOOP_FAULT );
7974 }
80- }
8175
82- void fmc_write_buf (uint32_t offset , uint8_t * data , uint32_t size ) {
8376 for (uint32_t i = 0 ; i < (size / FLASH_WORD_SIZE ); i ++ ) {
84- const uint32_t addr = (uint32_t )FLASH_PTR (offset + i * FLASH_WORD_SIZE );
77+ const uint32_t addr = (uint32_t )FLASH_PTR (start + i * FLASH_WORD_SIZE );
8578
8679#ifdef STM32H7
8780 const uint32_t ptr = (uint32_t )(data + i * FLASH_WORD_SIZE );
0 commit comments