将数据写入mtd和mtdblock

问题描述 投票:0回答:1

我正在尝试将数据写入 MTD 设备,如下主题:在 mtd 块设备上写入

但是当我使用

/dev/mtd0
时,我只是读取正确的第一个字节,另一个字节仍然是0xFF,例如:

MTD Type: 3
MTD total size: 200000 bytes
MTD erase size: 1000 bytes
buf[0] = 0xde
buf[1] = 0xff
buf[2] = 0xff
buf[3] = 0xff
...
buf[18] = 0xff
buf[19] = 0xff

当我使用

/dev/mtdblock0
时,这工作正常。

MTD Type: 10
MTD total size: befcfb60 bytes
MTD erase size: 0 bytes
buf[0] = 0xde
buf[1] = 0xad
buf[2] = 0xbe
buf[3] = 0xef
...
buf[18] = 0xbe
buf[19] = 0xef

此外,当我通过

hexdump /dev/mtd0 -n64 -C
hexdump /dev/mtdblock0 -n64 -C
检查Flash内容时,两者的内容是相同的。

最终目的是使用 /dev/mtd0 而不是 mtdblock,请帮助我

linux embedded-linux flash-memory
1个回答
0
投票

我经过研究并意识到这个问题是由于我的闪存设备导致的

flash: flash@0 {
    compatible = "sst,sst25vf016b", "jedec,spi-nor";
    spi-max-frequency = <50000000>;
};

我看到对 SST25VF016B 执行多字节写入会失败。 要修复它,我们可以将应用程序从写入多字节修复为写入每个字节,如下所示:

lseek(fd, 0x150000, SEEK_SET);
for (i = 0; i < 32; i++)
    result = write(fd, writedata[i], sizeof(writedata[i]));

或者我们可以使用参考补丁修复内核:https://lore.kernel.org/lkml/[email protected]/T/

© www.soinside.com 2019 - 2024. All rights reserved.