Tip / ログイン to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

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

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

ChaitanyaV_61
Employee
Employee
50 questions asked 25 likes received 25 sign-ins

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

0 件の賞賛
1219 件の閲覧回数
寄稿者