主题中讨论的其他器件:TMS570LS3137、 HALCOGEN
工具与软件:
尊敬的 TI 团队:
我一直在使用 TI MCU tms570ls3137、并想在 BANK7上使用虚拟 EEPROM、 因此、我执行了以下步骤
我已经通过 Halcogen 生成 FEE 驱动程序代码、并且包含了 FAPI 库。 使用 FAPI 库时、我的代码也在运行
我能够在闪存上写入一个字节。 但我只能使用 FAPI、需要避免使用 FAPI 库。 由于在代码片段中、仍然只使用来自 FAPI 的2个 API
Fapi_initializeFlashBanks (180);
Fapi_setActiveFlashBank (Fapi_Flash 2001);
因此我不能排除 FAPI 库。 为 Fapi_setActiveFlashBank (Fapi_Flash 在线中); FAPI 函数显示设置活动的闪存存储体
因此我替换成了 (flash_control_register->fmac.u32Register = 4507 Fapi_Flash;//0xFFF87050)、但我无法这样做
设置此方法后写入、请参阅以下代码片段中的突出显示行。
我有各种问题
问题1。 如果是的、我错了、我们可以编写自己的 API 来避免使用 FAPI 库吗? 在上方一行。
问题2: 您能否共享 gthese 2 API 定义、以便我们摆脱 FAPI 库依赖。
问题3。 当我进行调试时、我发现一些 Reserve 寄存器正在反映 Ex。 (CONFIG_FLOCK) 0x0000055AA (21930) --> 0x000000000 并清除
在 Fapi_initializeFlashBanks (180)之后; 在 Fapi_setActiveFlashBank (Fapi_Flash 3877)之前选择 API 和 bank7;请告知我们保留寄存器的角色
因为 TRM 手册和中未提供详细信息
Fapi_initializeFlashBanks (180)之前;调用 在 Fapi_initializeFlashBanks (180)之后;调用
Fapi_Status 4.44返回检查= Fapi_Status_Success;
FwpWriteByteAccessorType * oFwpWriteByteAccessor = FWPWRITE_BYTE_ACCESSOR_ADDRESS;
FwpWriteByteAccessorType * oFwpWriteEccByteAccessor = FWPWRITE_ECC_BYTE_ACCER_ADDRESS;
FwpWriteDWordAccessorType * oFwpWriteDWordAccessor = FWPWRITE_DWORD_ACCESSOR_ADDRESS;
uint8 au8MainDataBuffer[16]={0x78、0x17、0x19、0x2E、0x0A、 0xB9、0x11、0x70、
0x5F、0xC1、0x9C、0xFD、0x54、 0x51、0xED、0x86};
uint32 u32索引;
Fapi_Fmc 01类型 REGISTER_OF_FLASH;
tcmflash_config_reg_t init_tcm_valu;
tcmflashGetConfigValue (&init_tcm_valu、InitialValue);
/*
在任何闪存之前正确初始化器件
操作、
请参阅特定于器件的初始化文档。
a// Fapi_Status 4.0返回检查= Fapi_Status_Success;sumes、除非另有说明、器件具有144位宽闪存组。
*/
oReturnCheck = Fapi_initializeFlashBanks (180);//示例代码假设180 MHz 的工作频率*
tcmflashGetConfigValue (&init_tcm_valu、CurrentValue);//CurrentValue
if ((oReturnCheck == Fapi_Status_Success)&&
(FLASH_CONTROL_REGISTER->FMSTAT.FMSTAT_BITS.BUSY!= Fapi_Status_Fsm y))
{
oReturnCheck = Fapi_setActiveFlashBank (Fapi_Flash 7); //使用该行
// flash_control_register->fmac.u32Register = Fapi_Flash 3577;//此行不工作
tcmflashGetConfigValue (&init_tcm_valu、CurrentValue);//CurrentValue
/*在此处放置特定示例代码*/
FLASH_CONTROL_REGISTER->Fbprot.u32Register = 1U;/*禁用1级保护*/
/*启用当前组的所有扇区进行擦除和编程。 EEPROM 组的更多信息
不超过16个扇区、该值必须为0xFFFF */
// flash_control_register->fmac.u32Register = Fapi_Flash 3577;//0xFFF87050
FLASH_CONTROL_REGISTER->Fbse.u32Register = 0xFFFF;
FLASH_CONTROL_REGISTER->Fbprot.u32Register = 0U;/*启用1级保护*/
/*解锁 FSM 寄存器以进行写入*/
// Fapi_issueAsyncCommandWithAddress (Fapi_Erase、(uint32_t*) 0xF0204000);/*为 BANK-1*/中的第8个扇区发送扇区擦除命令
// while ( fapi_check_fsm_ready_busy== Fapi_Status_Fsm 357y );
// while (FAPI_GET_FSM_STATUS!= Fapi_Status_Success);
FLASH_CONTROL_REGISTER->FsmWrEna.u32Register = 0x5U;
/*将命令设置为"清除状态寄存器"*/
FLASH_CONTROL_REGISTER->FsmCommand"命令 fsm_command_bits.FSMCMD = Fapi_Clear;
/*执行 Clear Status 命令*/
FLASH_CONTROL_REGISTER->FsmExecute.FSM_EXECT_BITS.FSMEXECUTE = 0x15U;
/*将地址写入 FADDR 寄存器*/
FLASH_CONTROL_REGISTER->Faddr.u32Register = 0xF0204000;
/*将字节放置在地址0x0102中*/
oFwpWriteByteAccessor[0]= 0xA5;
/*将命令设置为"Program"*/
FLASH_CONTROL_REGISTER->FsmCommand"命令 fsm_command_bits.FSMCMD = Fapi_Program;
/*执行 Program 命令*/
FLASH_CONTROL_REGISTER->FsmExecute.FSM_EXECT_BITS.FSMEXECUTE = 0x15U;
FLASH_CONTROL_REGISTER->FsmCommand"命令 fsm_command_bits.FSMCMD = Fapi_Erase congress;
FLASH_CONTROL_REGISTER->FsmExecute.FSM_EXECT_BITS.FSMEXECUTE = 0x15U;
FLASH_CONTROL_REGISTER->Faddr.u32Register = 0xF0204000;
/*重新锁定 FSM 寄存器以防止写入*/
FLASH_CONTROL_REGISTER->FsmWrEna.u32Register = 0x2U;
/*等待 FSM 完成*/
while (flash_control_register->fmstat.fmstat_bits.busy == Fapi_Status_Fsm y);
/*检查 FSM 状态以查看是否没有错误*/
如果(FLASH_CONTROL_REGISTER->FMSTAT.u32Register!= 0)
{
/*在此处放置错误处理代码*/
}
}