FAQ : NANDフラッシュモジュールを使っていると読み書きに失敗する

対象製品: Armadillo-240Armadillo-230Armadillo-220

Armadillo-200シリーズの 2.6.12.3-a9-15までのカーネルでは、 NANDフラッシュメモリモジュール (RTC版も含む)で読み書きに失敗することがあります。 問題がある場合は、最新版のカーネルを使用してください。

この問題は、以下のようなエラーとして顕在化します。

データリード時のエラー:


    [armadillo ~]# md5sum /mnt/test.data
    Data CRC afd81501 != calculated CRC bff8713d for node at 0ffa7b18
    mtd->read(0x1000 bytes from 0xffb8fe0) returned ECC error
    Data CRC 58795974 != calculated CRC b5096602 for node at 0ffb8f9c
    mtd->read(0x44 bytes from 0xffa7b18) returned ECC error

マウント時のエラー:


    [armadillo ~]# mount -t jffs2 /dev/mtdblock4 /mnt/
    mtd->read(0x1f580 bytes from 0xff60a80) returned ECC error
    mtd->read(0x1ee00 bytes from 0xff81200) returned ECC error
    mtd->read(0x1f6c4 bytes from 0xffa093c) returned ECC error

この問題は、OP-NF256MRTC-20およびOP-MF256M-20で使用しているマイクロン製 NANDフラッシュメモリの最新ダイに、信号タイミングの変更が入っているため、 従来のドライバが対応できていなかったことが原因でした。この対応のために、 SMCBCRレジスタのIDCY設定値を修正しています。設定は drivers/mtd/nand/armadillo2x0.c内の関数 armadillo2x0_initで行なっています。


-       outl(0x000004c0, SMCBCR3);
+       outl(0x000004c9, SMCBCR3);

ただし、上記の問題の解析中に、Linux 2.6.12のMTDサブシステムに別の不具合を確認したため、 2.6.18系の MTDサブシステムをバックポートしています。こちらの問題は、すべての Armadillo-200シリーズ製品に影響します。 バックポートが入っているカーネルは、2.6.12.3-a9-16 からになります。

対象商品

  • Armadillo-220/230/240(Armadillo-2X0シリーズ基板本体)
  • OP-NF256MRTC-20/OP-NF256MRTC-10(RTC付NANDフラッシュモジュール)
  • OP-MF256M-20/OP-NF256M-10/OP-NF256M-00/OP-NF128M-00(NANDフラッシュモジュール)