主题中讨论的其他器件:HALCOGEN
我一直在尝试将 littlefs 文件系统实施到 RM57Lx 上的仿真 EEPROM 以存储配置值。
EEPROM 具有错误校正代码、最初使用链接器脚本生成的 ECC 代码进行编程。
我像这样初始化闪存存储体、然后提供回调函数、以便将数据写入和读取到由小 FS 处理的特定地址。
Fapi_initializeFlashBanks(150); Fapi_setActiveFlashBank(Fapi_FlashBank7); Fapi_enableEepromBankSectors(0xFFFFFFFF, 0);
读取函数的实现方式如下:
int eeprom_read(const struct lfs_config *c, lfs_block_t block, lfs_off_t off, void *buffer, lfs_size_t size) { struct lfs_context *ltxt = c->context; uint32_t addr = (ltxt->flash_sectors.u32BankStartAddress + (c->block_size * block) + off); while (Fapi_checkFsmForReady() != Fapi_Status_FsmReady) { } Fapi_StatusType status = Fapi_doMarginRead( (uint32_t *)addr, (uint32_t *)buffer, size / 4, Fapi_NormalRead); if (status != Fapi_Status_Success) { fapiIndicateError(status); } return status; }
程序函数的实现方式如下:
int eeprom_prog(const struct lfs_config *c, lfs_block_t block, lfs_off_t off, const void *buffer, lfs_size_t size) { struct lfs_context *ltxt = c->context; while (Fapi_checkFsmForReady() != Fapi_Status_FsmReady) { ; } Fapi_StatusType status = Fapi_issueProgrammingCommand( (uint32_t *)(ltxt->flash_sectors.u32BankStartAddress + (c->block_size * block) + off), (uint8_t *) buffer, size, NULL, 0, Fapi_AutoEccGeneration); if (status != Fapi_Status_Success) { fapiIndicateError(status); } return status; }
我还会通过以下方式格式化扇区:
int eeprom_erase(const struct lfs_config *c, lfs_block_t block) { struct lfs_context *ltxt = c->context; while (Fapi_checkFsmForReady() != Fapi_Status_FsmReady) { ; } Fapi_StatusType status = Fapi_issueAsyncCommandWithAddress( Fapi_EraseSector, (uint32_t *)(ltxt->flash_sectors.u32BankStartAddress + (c->block_size * block))); if (status != Fapi_Status_Success) { fapiIndicateError(status); } return status; }
编程后、EEPROM 被擦除、看起来正确:
0xf0200000: 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xf0200010: 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xf0200020: 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xf0200030: 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xf0200040: 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xf0200050: 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xf0200060: 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xf0200070: 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xf0200080: 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xf0200090: 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xf02000a0: 0xffffffff 0xffffffff 0xffffffff 0xffffffff
不过、在最初创建和写入一些文件后:
该位会再次翻转。 在此、如果能让 EEPROM 正常工作、我希望收到任何建议或指导。 位翻转显示为文件系统的错误、会导致文件系统将该块视为不可写、从而锁定文件系统。