主题中讨论的其他器件: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 正常工作、我希望收到任何建议或指导。 位翻转显示为文件系统的错误、会导致文件系统将该块视为不可写、从而锁定文件系统。