Other Parts Discussed in Thread: UNIFLASH
部件号: AM3358
Thread 中讨论的其他器件: UNIFLASH
尊敬的 TI 专家:
我们正在开发单个固件映像、以在 AM335x 定制板上支持两个不同的 NAND 闪存。
-
NAND A (Micron):OOB 大小 224
-
NAND B (Macronix):OOB 大小 256
我们使用的是较旧的 TI SDK (U-Boot 2014.07、Linux 内核 3.14)。
【我们的硬件限制和识别方法】要完全透明地了解我们的硬件情况:我们的定制电路板目前绝对没有备用的 GPIO 引脚、并且充分利用了 I2C EEPROM 地址/数据字段。 唯一可用于电路板版本识别的引脚是 ADC 通道 4 (AIN4)。 因此、我们被迫在 U-Boot 阶段读取 ADC 电压、以确定安装的是哪个 NAND 闪存。
鉴于这种严格的硬件限制、我们希望确保我们的软件架构稳健可靠、并且不会破坏 ONFI 检测。 我们正在计划以下流程:
【我们建议的软件架构】
-
U-Boot 阶段:U-Boot 读取 ADC (AIN4) 以识别电路板版本。 然后、它将自定义参数
bootargs附加到(例如,通过nand_type=macronixU-Boot 环境变量附加)。 我们不会在 U-Boot 中覆盖 OOB 大小board_nand_init。 -
Linux 内核阶段:Linux 内核解析
nand_typeFROMbootargs。 -
MTD 驱动程序覆盖:在 Linux NAND 驱动程序内部
omap2.cnand_scan_ident()(例如),完成后(因此 ONFInand_scan_tail()被尊重),但之前被调用,我们截取和覆盖,mtd->oobsize并chip->ecc.layout基于解析的nand_type。
【我们的问题】
-
这种
bootargs通过和 Linux MTD 驱动程序覆盖方法是否是处理具有不同 OOB 大小的双源 NAN 的最安全且最推荐的方法? -
内核 3.14 中是否存在任何已知问题、GPMC 硬件查询或 MTD 子系统限制、在像这样动态覆盖 OOB 大小和 ECC 布局时、我们应该小心?
-
我们知道、使用 ADC 进行电路板识别不是标准方法、但鉴于我们的引脚有严格的限制、这种整体切换架构 (U-Boot ADC -> bootargs -> Linux MTD) 是否可以足够用于大规模生产?
任何架构建议或验证都将受到高度赞赏。
谢谢你、安基焕




