主题中讨论的其他器件:LAUNCHXL2-TMS57012、 HALCOGEN
尊敬的支持:
我尝试将一个字节写入闪存(正如 SPNA148中描述的那样)。 我从 RAM 中执行此操作、也看不到任何问题、因为闪存未更新。 我还尝试更新 EEPROM、但得到的结果相同。
void flash_write_byte (uint32_t 地址) { Fapi_StatusType oReturnCheck = Fapi_Status_FsmReady; FwpWriteByteAccessorType * oFwpWriteByteAccessor = FWPWRITE_BYTE_ACCEMER_ADDRESS; oReturnCheck = Fapi_initializeFlashBanks (160);//示例代码假设正在运行 180MHz */ if ((oReturnCheck = fapi_Status_Success)&&(flash_control_register->fmstat.fmstat_bits.busy) != Fapi_Status_FsmBusy)) { oReturnCheck = Fapi_setActiveFlashBank (Fapi_FlashBank7); flash_control_register->Fbprot.u32Register = 1U;//禁用1级保护 /*启用当前组的所有扇区以进行擦除和编程。 EEPROM 组的更多信息 必须为0xFFFF */ FLASH_CONTRAL_REGISTER->Fbse.u32Register = 0xFFFF; flash_control_register->Fbprot.u32Register = 0U;//启用1级保护 /*解锁 FSM 寄存器以写入*/ FLASH_CONTRAL_REGISTER->FsmWrEna.u32Register = 0x5U; /*将命令设置为"清除状态寄存器"*/ FLASH_CONTRAL_REGISTER->FsmCommand.FSM_COMMAND_BITS .FSMCMD = Fapi_ClearStatus; /*执行清除状态命令*/ flash_control_register->FsmExecute.FSM_execute _bits.FSMEXECUTE = 0x15U; /*将地址写入 FADDR 寄存器*/ FLASH_CONTRAL_REGISTER->Faddr.u32Register = 0xF0000111; /*在地址0x0102处放置字节*/ oFwpWriteByteAccessor[2]= 0xBB; /*将命令设置为"Program"*/ FLASH_CONTRAL_REGISTER->FsmCommand.FSM_COMMAND_BITS .FSMCMD = Fapi_ProgramData; /*执行程序命令*/ flash_control_register->FsmExecute.FSM_execute _bits.FSMEXECUTE = 0x15U; /*重新锁定 FSM 寄存器以防止写入*/ flash_control_register->FsmWrEna.u32Register = 0x2U; /*等待 FSM 完成*/ while (flash_control_register->fmstat.fmstat_bits.busy) =Fapi_Status_FsmBusy) ; /*检查 FSM 状态以查看是否没有错误*/ if (flash_control_register->fmstat.u32Register!= 0) { /*在此输入错误处理代码*/ } }
此外、我在论坛上发现了其他实施方案、我尝试了以下方案、但结果相同:
void flash_write_byte (uint32_t 地址) { Fapi_StatusType oReturnCheck = Fapi_Status_FsmReady; FwpWriteByteAccessorType * oFwpWriteByteAccessor= FWPWRITE_BYTE_ACCESER_ADDRESS; uint8_t au8MainDataBuffer[16]={0xAA、0x17、0x19、0x2E、0x0A、 0xB9、0x11、0x70、0x5F、0xC1、 0x9C、0xFD、0x54、0x51、0xED、 0x86}; uint8_t au8EccDataBuffer[16]; uint32_t * pu32StartAddress =(uint32_t *)(0xF0000111); uint8_t *p1; uint8_t * eccp1; P1 = au8MainDataBuffer; eccp1 = au8EccDataBuffer; oReturnCheck = Fapi_initializeFlashBanks (160);//示例代码假设正在运行 180MHz */ if ((oReturnCheck = fapi_Status_Success)&&(flash_control_register->fmstat.fmstat_bits.busy) != Fapi_Status_FsmBusy)) { oReturnCheck = Fapi_setActiveFlashBank (Fapi_FlashBank7); oReturnCheck = Fapi_enableEprom 组安全器(0xF、0); while (fapi_checkFsmForReady ()=fapi_Status_FsmBusy) ; if ((oReturnCheck = Fapi_Status_Success) &&(Fapi_checkFsmForReady()!= Fapi_Status_FsmBusy) { oReturnCheck = Fapi_issueProgrammingCommand (&pu32StartAddress、 P1、 16、 null、 0、 Fapi_AutoEccGeneration); /*等待 FSM 完成*/ while (fapi_checkFsmForReady ()=fapi_Status_FsmBusy) ; if ((oReturnCheck = Fapi_Status_Success) &&(Fapi_checkFsmForReady()!= Fapi_Status_FsmBusy) { /*检查 FSM 状态以查看是否没有错误*/ if (flash_control_register->fmstat.u32Register!= 0) { /*在此输入错误处理代码*/ } } }
可以帮帮我吗? 谢谢!
此致、
Keno

