主题中讨论的其他器件:HALCOGEN
您好!
这是完全相同的问题、没有解决方案
https://e2e.ti.com/support/microcontrollers/hercules/f/312/t/323571?tisearch=e2e-quicksearch&keymatch=PGV
因此、我得到与错误标记相同的 PGV 和 CMat 位。
对组7执行擦除操作看起来正常(不返回错误、不能说任何其他操作、因为组已被擦除、因此数据不会改变)。
组0和1擦除和写入工作正常、因此 flashAPI 使用逻辑应该正常。
根据 SPNU501G.pdf 第5.3章、Bank7中唯一的区别应该是使用不同的"启用组功能"。
但我看了 FEE 驱动器是如何实现的、对于未使用 FlashAPI 的写入命令、FlashAPI 仅用于擦除操作、我感到惊讶... 为什么它不会使用 FlashAPI、因为它会将其用于其他操作?
关于 EWAIT:还尝试了 FlashAPI 宏、相同的结果(也没有更改寄存器)和 system.c 设置正确的 EWAIT 值(3)(使用 halcogen 生成的文件)、因此如果理解正确、不应有任何理由调用该宏...
此外、还尝试了'Fapi_DataOnly"并尝试写入0xFF、0xFF 数据、所有这些都失败。
我正在尝试写入0xF0200000地址(通过 RAM 函数内的 R0寄存器验证)、因此应是有效的 EEPROM 地址(扇区0)
=========== 代码===================
#define USed_EEPROM_Sectors 0x1 //也尝试了0xFFFF
FAPI_RET_ON_ERROR (Fapi_initiataleFlashBanks (HAL_u32SystemClockMHz ()));//用于 API Rev2.01 *
FAPI_RET_ON_ERROR (Fapi_enableEpromBankSecitors (USED_EEPROM_Sectors,0U));
while (fapi_check_FSM_ready_busy =fapi_Status_FsmBusy);
FSM_STATUS_RET_ON_ERROR (FAPI_GET_FSM_STATUS);
//这在 RAM 中
fapi_RET_ON_ERROR (tFapi_Program ((UINT32*) u32Dst、(uint8*) u32Src、(UINT32)u32Bytes));
其中 tFapi_Program-Function 为:
//此代码需要位于 RAM 中
#pragma LOCATION ="RAMCODE"
静态 Fapi_StatusType tFapi_Program (uint32* pu32dst、uint8* pu8src、uint32 u32字节)
{
fapi_rt_on_error (fapi_issueProgrammingCommand (pu32dst、pu8src、u32bytes、0、0、 Fapi_AutoEccGeneration));
while (fapi_check_FSM_ready_busy =fapi_Status_FsmBusy);
FSM_STATUS_RET_ON_ERROR (FAPI_GET_FSM_STATUS);//// 代码如此之远、因此 API 接口返回 OK
返回 Fapi_Status_Success;
}
=========== 代码结束======
关于 Fapi_issueProgrammingCommand()的一般问题,如果它用作 FAP_AutoEccGeneration,则只能说给 API 和内部 API 的5个字节将被“填充”为8个字节,或者我是否需要给8/16/32字节数组复制5字节有效负载 (保留其他字段我想说0xFF 的任何数据)并将长度指定为8/16/32? 从 3.3.1中了解到、最有可能在 API 中执行自动填充 (或在 ECC 计算中自动使用至少全部8个字节、因此只能将5个字节分配给 API、这意味着无法同时尝试再次写入此剩余数据、因为 ECC 已通过它计算得出。