大家好、我将使用 driverlib 和 flashapi 为闪存开发一个紧凑型驱动程序、
我的程序从闪存中执行、但整个驱动程序从 RAM 中执行(包括闪存 API 和必要的闪存函数)
问题是、当我调用 FlashGainPump 时、它第一次工作、然后我从 Fapi 库中调用擦除扇区函数、它返回成功的
在函数的末尾、我调用 FlashLeavePump 函数
在扇区被擦除后、我尝试用128位编程来对其进行编程(ECC 自动生成)、并且我调用 FlashGainPump、但是字段 SEM 在前一个调用的0x2上卡住、因此
while 循环:
while(HWREG(MTOCIPC_BASE + IPC_O_MPUMPREQUEST) != 0) { }
永远运行、即使 FlashLeavePump 应该已经将其复位为零、当我强力地尝试从调试器修改它时(使用相关的密钥和 SEM 值)、它会工作并且值会复位。
由于我的 C28暂时无法引导、我想我将尝试在不获得信号量的情况下对闪存进行编程、程序返回成功、但 FSM 状态寄存器全部为1、且地址未编程、因此可能存在某种错误。
我的初始化:
具有适当系统时钟和等待状态的 FlashInit。
两个区域上的 DCSM 解锁(即使密钥均为 FF)
3. Fapi_Initialize
4. Fapi_setupBankSectorEnable
5.Fapi_setupEepromSectorEnable
6. Fapi_Flash 0;
请注意、MRALLOW 和 MDI 封装了驱动程序中的每个功能。
映射文件显示每个驱动程序函数+我的高级函数都映射到 RAM (调试反汇编显示 RAM 地址)
如前所述、C28未引导。
谢谢。