已经发布
H7-TOOL自制Flash读写保护算法系列,为复旦微FM33LG和FM33LE制作使能和解除算法,支持在线烧录和脱机烧录使用(2024-12-03)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=126725

从他们的技术手册和SDK软包里面了解到,只有内部Flash的操作步骤,没有提供选项字节的操作步骤:
SDK里面仅有的选项字节操作是读操作,没有写操作说明:
[C] 纯文本查看 复制代码 /**
* @brief Get debug read protection enable status
* @rmtoll OPTBR DBRDPEN FL_FLASH_GetSWDReadProtectionState
* @param FLASHx FLASH instance
* @retval Returned value can be one of the following values:
* @arg @ref FL_FLASH_SWD_READ_PEOTECTION_DISABLE
* @arg @ref FL_FLASH_SWD_READ_PEOTECTION_ENABLE
*/
__STATIC_INLINE uint32_t FL_FLASH_GetSWDReadProtectionState(FLASH_Type *FLASHx)
{
return (uint32_t)(READ_BIT(FLASHx->OPTBR, FLASH_OPTBR_DBRDPEN_Msk));
}
这个使用TOOL也可以方便读取
按照内部Flash的访问方法,使用LUA小程序访问了下,无法正常操作选项字节:
[Lua] 纯文本查看 复制代码 function printf(...)
print(string.format(...))
end
beep()
pg_init()
-- FL_RCC_EnableGroup2BusClock(FL_RCC_GROUP2_BUSCLK_FLASH);
-- pg_write32(0x4000022C, 0x000000A0)
value = pg_read32(0x4000022C)
print_hex(value)
pg_write32(0x4000022C, 0x000000A0)
value = pg_read32(0x4000022C)
print_hex(value)
-- FL_RCC_EnableGroup2BusClock(FL_RCC_GROUP2_BUSCLK_FLASH);
-- pg_write32(0x40000270, 0x00400000)
value = pg_read32(0x40000270)
print_hex(value)
pg_write32(0x40000270, 0x00400000)
value = pg_read32(0x40000270)
print_hex(value)
-- CLEAR_BIT(FLASHx->EPCR, FLASH_EPCR_EREQ_Msk);
value = pg_read32(0x40001014)
print_hex(value)
pg_write32(0x40001014, (value & 0xFFFFFFFE))
value = pg_read32(0x40001014)
print_hex(value)
-- SET_BIT(FLASHx->EPCR, FLASH_EPCR_PREQ_Msk);
pg_write32(0x40001014, (value |0x00000002))
value = pg_read32(0x40001014)
print_hex(value)
-- FL_FLASH_UnlockFlash(FLASHx, FL_FLASH_PROGRAM_KEY1);
-- FL_FLASH_UnlockFlash(FLASHx, FL_FLASH_PROGRAM_KEY2);
pg_write32(0x40001018, 0xA5A5A5A5)
pg_write32(0x40001018, 0xF1F1F1F1)
delayms(1000)
value = pg_read32(0x40001008)
printf("pg_read32 = %x", value)
re = pg_write32(0x1FFFFC00, 0xCC5533aa)
print_hex(re)
value = pg_read32(0x1FFFFC00)
printf("pg_read32 = %x", value)
只能联系厂家获取操作步骤了,根据其它厂家的IC的操作方法,复旦微这个选项字节的Unlock命令提供下,应该就可以了。当前没有提供这个命令。
也就是下面这个
[Lua] 纯文本查看 复制代码 pg_write32(0x40001018, 0xA5A5A5A5)
pg_write32(0x40001018, 0xF1F1F1F1)
|