| | |
| | | } |
| | | else |
| | | { |
| | | #if 0 |
| | | /* Bank 2 ���� 8-15 */ |
| | | /* Bank 2 扇区 0-7 (实际编号8-15,但HAL库使用0-7) */ |
| | | if (address <= FLASH_SECTOR8_END) |
| | | return FLASH_SECTOR_8; |
| | | return FLASH_SECTOR_0; |
| | | else if (address <= FLASH_SECTOR9_END) |
| | | return FLASH_SECTOR_9; |
| | | return FLASH_SECTOR_1; |
| | | else if (address <= FLASH_SECTOR10_END) |
| | | return FLASH_SECTOR_10; |
| | | return FLASH_SECTOR_2; |
| | | else if (address <= FLASH_SECTOR11_END) |
| | | return FLASH_SECTOR_11; |
| | | return FLASH_SECTOR_3; |
| | | else if (address <= FLASH_SECTOR12_END) |
| | | return FLASH_SECTOR_12; |
| | | return FLASH_SECTOR_4; |
| | | else if (address <= FLASH_SECTOR13_END) |
| | | return FLASH_SECTOR_13; |
| | | return FLASH_SECTOR_5; |
| | | else if (address <= FLASH_SECTOR14_END) |
| | | return FLASH_SECTOR_14; |
| | | return FLASH_SECTOR_6; |
| | | else if (address <= FLASH_SECTOR15_END) |
| | | return FLASH_SECTOR_15; |
| | | #endif |
| | | return FLASH_SECTOR_7; |
| | | } |
| | | |
| | | return 0xFFFFFFFF; |
| | |
| | | /* 已擦除校验:当前 Flash 中该 32 字节必须全为 0xFF */ |
| | | for (HIDO_UINT32 i = 0; i < MCU_FLASH_WORD_BYTES; i++) |
| | | { |
| | | if (*(volatile HIDO_UINT8 *)(addr + i) != 0xFF) |
| | | HIDO_UINT8 byteVal = *(volatile HIDO_UINT8 *)(addr + i); |
| | | if (byteVal != 0xFF) |
| | | { |
| | | /* 打印详细的擦除检查失败信息 */ |
| | | HIDO_Debug("[MCUFlash] Write failed: Address 0x%08X+%d not erased (value=0x%02X, expected=0xFF)\r\n", |
| | | addr, i, byteVal); |
| | | /* 打印周围8字节的内容 */ |
| | | HIDO_UINT32 dumpStart = (i >= 4) ? (i - 4) : 0; |
| | | HIDO_Debug("[MCUFlash] Context[%d-%d]: ", dumpStart, dumpStart + 7); |
| | | for (HIDO_UINT32 j = dumpStart; j < dumpStart + 8 && j < MCU_FLASH_WORD_BYTES; j++) |
| | | { |
| | | HIDO_Debug("%02X ", *(volatile HIDO_UINT8 *)(addr + j)); |
| | | } |
| | | HIDO_Debug("\r\n"); |
| | | return HIDO_ERR; /* 未擦除或脏数据,需先调用 MCUFlash_Erase */ |
| | | } |
| | | } |