memory - NAND 闪存接口(interface) ARM9 MTD 分区未生成

标签 memory embedded arm embedded-resource embedded-linux

我正在使用 UBUNTU 10.04 和 GCC 作为编译器在基于 ARM9 的板上开发应用程序。

之前我已经连接过 STMicroElectronics 的 NAND 闪存 ( NAND512W3A25NB )。它的大小为 64MByte。它的页面大小为 512Kbit。

有了这个 NAND,我的应用程序运行得非常好。

由于内存要求的一些升级,我需要切换到更大的 Micron NAND 闪存 (MT29F2G08ABAEA)。它的大小为 256MByte,页大小为 2048Kbit。

更改后,我的主板无法启动。

我获得了制造商 ID 和芯片 ID。但 MTD 分区没有生成。

经过一番搜索,我发现 PAGE_SIZE 有一些问题。 我不知道如何解决这个问题,因为我浏览了 linux/include/mtd/nand.h 它的 MAX_ALLWABLE_PAGE_SIZE 为 8216 并且也在 m 要求之内,所以我无法确切地知道我在哪里出错了??

最佳答案

我在 IMX25 设计上使用相同的芯片,Micron MT29F2G08ABAEA。链式店mtd->ubi->ubifs对这个芯片组非常满意。我们的差异是NAND flash controllers及其配置。

Micron 芯片有子页面,您的 Controller 可能不支持。搜索davinci_nand.c ,我没有看到任何子页面处理。

对于MXC Nand Controller ,我们使用hw_eccflash_bbt宽度为1。 Micron芯片只有8位,尽管有一些16位版本,例如Micron MT29F2G16ABAEA。确保几何形状正确。我认为Linux MTD 支持多个芯片并行。

通过数据表可以快速验证该部件是否更快。我怀疑 ST 部分比 Micron 部分慢,并且时序不是您的问题。

Micron MT29F2G08ABAEA的时序分析表明IMX25 NAND闪存 Controller 实际上是瓶颈。 微米闪存看起来相当快。这要么是 NAND Controller 中的错误,或更可能是配置问题。

一些其他有帮助的信息(对您或帮助您的人),

  • 一些dmesg控制台输出。
  • 数据表链接。
  • 使用的确切NAND Controller
  • 使用的平台数据DT信息。
  • grep '^[^#].*MTD' .configMTD 相关配置。

我认为没有人可以完全正确地回答您的问题,但我很高兴感到惊讶。

关于memory - NAND 闪存接口(interface) ARM9 MTD 分区未生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16318357/

相关文章:

c - 释放使用 malloc 创建的结构,其成员也有一个 malloc

json - 如何在嵌入式系统上用 jsmn 解析一个小的 JSON 文件?

Lauterbach 调试器无法在特定函数中设置断点

android - 在没有内存访问的线路上发出 SIGBUS 信号

ios - 双核 ARM7 是否提供内核之间的缓存一致性?

CMSIS FIR 带通滤波器

c - 如何获取指针指向的内存大小?

C++ 3d array - 动态内存分配在一行中对齐

C - 无法访问地址处的内存

c++ - 删除指针和将其设置为 nullptr 之间有什么区别?