主题中讨论的其他器件:HALCOGEN
我正在尝试实现引导加载程序。 引导加载程序示例中有一些模块、例如 BL_FLASH.c /.h、允许我们修改闪存和 EEPROM。
我尝试使用此模块。 在 Halcogen 中启用 FEE 驱动器并确保系统时钟为160MHz。
我包括了 Fapi 静态库及其路径、然后还包括 BL_FLASH 模块。
然后我编写了这样的测试代码;
FlashBank7SectorErase((uint32_t) BOOTLOADER_REQUEST_ADDRESS);
uint8_t Data2Wr = PENDING_BL_REQUEST;
uint8_t BlockProgramStatus = FlashBank7Program(BOOTLOADER_REQUEST_ADDRESS, (uint32_t) &Data2Wr, sizeof(Data2Wr));
if(BlockProgramStatus != 1)
{
/* send somethingh from uart*/
}
以上代码段不起作用。 当程序进入扇区擦除功能时、下面有一个函数。
Fapi_initializeFlashBanks((uint32_t) SYS_CLK_FREQ); /* used for API Rev2.01 */
当开始执行此函数时,programram 会出现以下错误: Can't find a source file at "C:\Sid\work\GIT\catmcuauto-flashapi-f021-int\api\makefile/./Source/FlashStateMachine InitializeFlashBanks.c
1.问题出在哪呢?
我尝试了第二个解决方案、决定使用 FEE API 函数并编写了此代码块。
uint8_t Data2Wr = PENDING_BL_REQUEST;
uint8_t BlockNumber=0x1;
Std_ReturnType ret;
ret = TI_Fee_WriteSync(BlockNumber, &Data2Wr);
ret=TI_Fee_Read(BlockNumber,0,&Read_Ptr,1);
TI_FeeModuleStatusType Status;
do
{
TI_Fee_MainFunction();
delay();
Status=TI_Fee_GetStatus(0);
}
while(Status!=IDLE);
if(ret == E_OK)
{
// Send UART..
}
上面的代码正常工作、并将 内容写入0xF020_0038地址、但正如您在图片中看到的、闪存组7从0xF020_0000开始。
它在图片中被分离了4个块。

2.数据表中的数据块与 Halcogen Fee 驱动程序中的数据块有何区别?
在 FEE 驱动器中、指定了一个标头在大小为16字节的块顶部参与。 但在我的例子中、偏移量是0x38H、也就是56个字节。

3.该偏移可以来自哪里?
第四、假设我的设计是在 Halcogen 中有一个块、那么我必须根据字节来设置块的大小。
但没有关于此大小的最大限制的任何信息。
4.我应该如何知道 块大小的最大限制,我必须将其作为 Halcogen 的输入值?
Okey 我找到了它、在 FEE API Documantary 中有写入
注意:所有数据块的大小不能超过虚拟扇区长度。
默认情况下、为一个虚拟扇区分配一个闪存扇区。

5.最后,您是否有用于编程和擦除 BANK0和 BANK1 或建议使用 BL_FLASH 的闪存编程 API?