Thread 中讨论的其他器件:controlSUITE、 C2000WARE
bool FlashWrite (void) { uint32 u32Index = 0; uint16 i = 0; Fapi_StatusType oReturnCheck; 易失性 Fapi_FlashStatusType oFlashStatus; Dint; // //增益泵信标 // SeizeFlashPump(); Fapi_FlashStatusWordType oFlashStatusWord; EALLOW; // //需要此函数来根据系统初始化闪存 API //频率才能执行任何其他闪存 API 操作 // oReturnCheck = Fapi_initializeAPI (F021_CPU0_BASE_ADDRESS、200); if (oReturnCheck!= Fapi_Status_Success) { // //检查闪存 API 文档以了解可能的错误 // 返回 false; } // // Fapi_setActiveFlashBank 函数进一步设置闪存组和 FMC //闪存操作将在组上执行 // oReturnCheck = Fapi_setActiveFlashBank (Fapi_FlashBank0); if (oReturnCheck!= Fapi_Status_Success) { // //检查闪存 API 文档以了解可能的错误 // 返回 false; } // //验证 SectorL 是否被擦除。 擦除步骤本身会执行 //进行验证。 此验证是可以执行的第二次验证。 // oReturnCheck = Fapi_doBlankCheck ((UINT32 *) Bzero_SectorG_START、 Bzero_16KSector u32length、 oFlashStatusWord (&O); if (oReturnCheck!= Fapi_Status_Success) { // //检查闪存 API 文档以了解可能的错误 //如果 Erase 命令失败,请使用 Fapi_getFsmStatus()函数获取 // fmstat 寄存器内容,查看是否有 EV 位、ESUSP 位、 // Cstat 位或 VOLTSTAT 位被置位(请参阅 API 文档 //更多详细信息) // 返回 false; } //填充要写入的数据的一些片段的开头 //不调用函数 //填充要写入的数据的片段结束 对于(i = 0、u32Index = Bzero_SectorG_start; (u32Index <(Bzero_SectorG_start + wors_in_flash_buffer))和&(oReturnCheck = Fapi_Status_Success); i+=8、u32Index+=8) { oReturnCheck = fapi_issueProgrammingCommand ((UINT32 *) u32Index、 Flash_Array + I、 8、 0、 0、 Fapi_AutoEccGeneration); while (fapi_checkFsmForReady ()=fapi_Status_FsmBusy); if (oReturnCheck!= Fapi_Status_Success) { // //检查闪存 API 文档以了解可能的错误 // 返回 false; } // //读取 fmstat 寄存器内容以了解之后 FSM 的状态 //用于任何调试的程序命令 // oFlashStatus = fapi_getFsmStatus(); // //验证编程的值。 Program 步骤本身会进行验证 //进行。 此验证是可以执行的第二次验证。 // oReturnCheck = fapi_doVerify (((uint32 *) u32Index、 4、pFlashArray+(I/2)、 oFlashStatusWord (&O); if (oReturnCheck!= Fapi_Status_Success) { // //检查闪存 API 文档以了解可能的错误 // 返回 false; } } // //启用 ECC // Flash0EccRegs.ecc_enable.bit.enable = 0xA; EDIS; EINT; // //保持对闪存泵的控制 // ReleaseFlashPump(); 返回 true;
}
我在这里遇到了闪存 API 问题。
上面的函数(截至目前)在其中一个扇区中写入一些数据、并使用 controlSUITE 中的参考代码进行写入。
调试时、我可以看到'Fapi_setActiveFlashBank (Fapi_FlashBank0);'返回的值始终为'Fapi_Error_InvalidHclkValue'。 我已确保在应用程序循环之前的一次性初始化期间调用 InitFlash()。
问题可能出在哪呢?
此致、
Prasad