LinuxでのF-RAMサポート – KBA223028 - Community Translated (JA)

Version 1

    Community Translated by keni_4440091      Version: **

     

    Translation - English: F-RAM Support under Linux – KBA223028

     

    質問:

    どうやってLinuxにシリアルF-RAMデバイスのサポートを付け加えられますか?

     

    回答:

    サイプレスF-RAM製品は標準SPI Flashとドロップイン互換です。両方のデバイスは同一パッケージ、ピンアウト、コマンドコード、およびレジスターレイアウトで使用します。従って、SPI
    Flash
    の標準Linux MTDドライバースタックはシリアルF-RAMでも使用可能です。この場合、デバイスは消去コマンドを無視し、ステータスレジスタはビジーになりません。従って、ポーリングループはすぐに完了します。

     

    現在のLinuxカーネルでは、Flashチップドライバーはdrivers/mtd/spi-nor/spi-nor.cおよびdrivers/mtd/devices/m25p80.cで分割されます。このチップドライバーの下にハードウェア特化したSPIコントローラドライバーが必要です。そのコントローラードライバーには通常Linuxカーネルソースツリーの一部としてボードサポートパッケージも付いています。カーネル構成メニューの中で有効になっているこれらのドライバーを使用して、F-RAM特化デバイスIDspi-nor.cでサポートされるデバイスのリストに追加する必要があります。例えば、CY15B104Q 4-Mビットデバイスでは、下記のエントリーをdrivers/mtd/spi-nor/spi-nor.cspi_nor_ids[]に追加できます。

               
    { "cy15b104q",  INFO(0x7f7f7f, 0,        512, 1024, 0) },

     

    従って、パーツは正しくプローブされています。


    Feb  5 11:10:40 muc-cse-01 kernel: Found Cypress(TM) PISMO(TM) PCI card rev 3
    Feb  5 11:10:40 muc-cse-01 kernel: Active memory bank at CS0: 128 MB, 8-bit
    Feb  5 11:10:42 muc-cse-01 kernel: m25p80 spi0.0: found cy15b104q, expected m25p80
    Feb  5 11:10:42 muc-cse-01 kernel: m25p80 spi0.0: cy15b104q (512 Kbytes)


    # cat /proc/mtd
    dev:    size erasesize  name
    mtd0: 00080000 00000200 "spi0.0"

     

    F-RAMへのraw読み出しおよび書込み動作は機能しています:


    # dd if=/dev/mtd0 bs=32 count=1 | od -v -Ax -tx1
    1+0 records in
    1+0 records out
    32 bytes copied, 0.000133754 s, 239 kB/s
    000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    000020


    # echo "Hello world!" > /dev/mtd0
    # dd if=/dev/mtd0 bs=32 count=1 | od -v -Ax -tx1
    1+0 records in
    1+0 records out
    32 bytes copied, 0.000129754 s, 247 kB/s
    000000 48 65 6c 6c 6f 20 77 6f 72 6c 64 21 0a 00 00 00
    000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    000020

     

    標準MTD分割も機能しています。新しい1.8Vデバイスは、IDエントリーでマイナー変更を求められる他の順序で出力される9つのデバイスIDバイトがあることに注意して下さい。ただし、考え方は同じです。2-Mビットパーツの場合、デバイスサイズはIDエントリーフィールドで512 * 1024 から 256 * 1024 (256 kB)へ変更されます。

     

    ファイルシステムがMTDの上部で求められる場合、512バイトセクターでのセクター配列を定義すると小さいFATファイルシステムを簡単に作成できます。上記IDエントリーは各々152バイトの1024セクターを特定します。基本的に、必要な任意のセクターレイアウトを定義する事が可能です(合計値がデバイスサイズと等しい場合)。デバイスがセクター消去コマンドを無視する、および書込みサイズに関しては制限ないため、これは可能です。クラシックハードディスクでは、512バイトが使用されます。下記のログに示しているように、MTDブロックデバイスでFATを生成する事が可能です: