Linux での F-RAM のサポートについて – Community Translated (JA)

Version 1

    Community Translated by  MoTa_728816          Version : **

     

    質問:

    シリアル F-RAM デバイスのサポートをLinux に追加するにはどのようにするのでしょうか?

     

    回答:

    Cypress F-RAM パーツは標準のSPI フラッシュ のドロップイン互換品です。両デバイスのパッケージ、ピンアウト、コマンドコード、レジスター配置は同一になっています。その為、標準のSPI フラッシュ用 Linux MTD ドライバスタックが F-RAM にも使用可能です。この場合、消去コマンドは無視され、ステータスレジスタがビジィになることはありません、よってポーリングループは即座に終了します。

     

    現在の Linux カーネルでは、フラッシュチップドライバは drivers/mtd/spi-nor/spi-nor.c drivers/mtd/devices/m25p80.c に分割されています。その下にチップドライバ、ハードウェア依存のSPIコントローラドライバが必要になります。そのコントローラドライバは通常 Linux のカーネルソースツリーの一部になっているボードサポートパッケージに含まれています。カーネルコンフィグレーションメニューでこれらのドライバを有効にした上で、 特定の F-RAM デバイス ID  spi-nor.c のサポートデバイスリストに追加する必要があります。例えば、CY15B104Q 4-Mbit デバイスの場合、下記のエントリが drivers/mtd/spi-nor/spi-nor.c 内の spi_nor_ids[] に追加される必要があります。

     

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

     

    その後、そのF-RAM は正常に検出されます、   

     

    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 デバイスでは9byte のデバイスID が異なった順番で出力される為、IDエントリに少しの修正が必要となりますが、基本的な考え方に違いはありません。2-Mbit 品でデバイスでは IDエントリフィールドのサイズを 512 * 1024 から 256 * 1024 (256kB)に変更します。

     

    もし、MTD の上にファイルシステムを構築したい場合、512 byte/セクタに定義しておくと容易に小型の FAT ファイルシステムを構築できます。上記のID エントリでは 512byte/セクタの1024セクタという定義になっていました。基本的に(トータルのサイズがデバイスのサイズと一致する限り) 自由なセクターレイアウトを定義することが可能です。これはデバイスがセクタイレーズコマンドを無視することと書込みサイズに制限がないことにより実現可能となっています。標準的なハードディスクの場合、512bytes/セクタ が使用されています。以下のログのように MTD  ブロック


    デバイス上に
    FAT を構築することが可能です:

     

    # cat /proc/mtd

    dev: size erasesize name

    mtd0: 00080000 00000200 "spi0.0"

    # mkfs.vfat /dev/mtdblock0 mkfs.fat 3.0.28 (2015-05-16)

    unable to get drive geometry, using default 255/63

    # mount -t vfat /dev/mtdblock0 /tt

    # echo "Hello world!" > /tt/hello.txt

    # umount /tt

    # mount -t vfat /dev/mtdblock0 /tt

    # ls -l /tt

    total 2

    -rwxr-xr-x 1 root root 13 Feb 5 11:13 hello.txt