Armadilloフォーラム

IoT G3Lで、システム起動時、SanDiskのSDカード(8GByte、Speed Class: 4)で、データ転送エラーが発生する。

matsuoka.yasufumi

2018年2月9日 10時27分

「Armadillo IoT G3L」で、システム起動時、SanDiskのSDカード(8GByte、Speed Class: 4)で、
データ転送エラーが発生し、SDカードをマウントできません。
Linuxシェルのログでのエラーメッセージを以下に示します。(★印)
SDカードのデータ転送速度は、Speed Class: 4(4MB/秒)で、Armadilloの仕様を満たしていると考えています。

原因と対策をアドバイスして頂けないでしょうか?

動作環境の情報を以下に示します。

補足情報ですが、
Armadilloの動作確認済みのSDカードとして、
SanDiskのSDカード16GBは、登録されていましたが、
SanDiskのSDカード8GByte(Speed Class: 4)は、登録されていませんでした。

○Linuxシェルのログ
★mmcblk0: error -84 transferring data, sector 0, nr 8, cmd response 0x900, card status 0xb00
mmcblk0: retrying using single block read
mmcblk0: error -84 transferring data, sector 0, nr 8, cmd response 0x900, card status 0x0
end_request: I/O error, dev mmcblk0, sector 0
Buffer I/O error on device mmcblk0, logical block 0

■動作環境
1.製品 :Armadillo IoT G3L
2.Linuxカーネルのバージョン :Linux armadillo 3.14.79-at18
3.SDカードの情報
 メーカー名:SanDisk
 品番   :SDSDQ-008G-J35U
 容量:8GByte
 Speed Class: 4 読み書き時のデータ転送速度が最低 4MB/秒
 URL:https://www.sandisk.co.jp/home/memory-cards/microsd-cards/sandisk-micro…
4.添付ファイル
 1)システム起動時のLinuxシェルのログ、dmesgコマンドのログ
   ファイル:Linuxシェルログ_SDカードでデータ転送エラー_20180208.log
   参照箇所:★印
5.補足情報
 1)SanDiskのSDカード16GBは、Armadilloの動作確認済みのSDカードとして登録されています。
   microSDHC 16GB SDSDQ-016G [SanDisk]
   容量: 16GB
   Speed Class: 2

 2)下記の東芝のSDカード(32GByte)で動作確認した結果、データ転送エラーは発生していません。
  メーカー名:TOSHIBA
  品番:TO3308M302RD-2
  容量:32GByte
  Speed Class: 10 :読み書き時のデータ転送速度が最低 10MB/秒
  UHSスピードクラス:スピードクラス3 (U3) 

コメント

matsuoka.yasufumi

2018年2月9日 10時41分

申し訳ありません。名前の記載を忘れていました。
松岡と申します。いつもお世話になっています。
お手数ですが、原因と対策のアドバイスを宜しくお願いいたします。

安藤です。

ご報告ありがとうございます。
弊社でも再現確認をしてみます。

安藤です。

添付いただいたログは、別のSDカードを挿したときのログではありませんか?
ログを拝見したところ、カードをDDR50モードとして認識していますが、
SanDisk SDSDQ-008G-J35U はClass 4のカードであり、UHS-I対応のカードではないため
そのようなログにはならないかと思います。

mmc0: new ultra high speed DDR50 SDHC card at address 0007

現在、Armadillo-IoT G3/G3L, Armadillo-X1 で、DDR50モードで動作する
SD/microSD を挿した際、正しく認識できないことがある不具合を確認しています。
ご迷惑をおかけし申し訳ありません。

UHS-I対応SD/microSDカードで、DDR50で動作するものをArmadilloに挿入すると
以下のようなエラーメッセージが表示され、正しく認識できないことがあります。

mmcblk0: error -84 transferring data, sector 0, nr 8, cmd response 0x900, card status 0xb00
mmcblk0: retrying using single block read
mmcblk0: error -84 transferring data, sector 0, nr 8, cmd response 0x900, card status 0x0
end_request: I/O error, dev mmcblk0, sector 0
mmcblk0: error -84 transferring data, sector 2, nr 6, cmd response 0x900, card status 0x0
end_request: I/O error, dev mmcblk0, sector 2 Buffer I/O error on device mmcblk0, logical block 0

Armadillo-IoT G3/G3L, Armadillo-X1では現在、ハードウェアとしてDDRをサポートしていないにも関わらず、
DDR50対応カードを挿入した際、DDR50モードで動作させてしまっています。
そのため、DDR50モードで動作させる際に不適切なDrive Strengthを設定してしまっているのが原因です。

DDR50モードを無効にし、SDR50モードで動作させるパッチ(暫定版)を添付します。
linux-3.14-x1-at20 を対象に作成しています。以下のように適用し、カーネルイメージとDTB(Device Tree Blob)とをビルドしてください。

[ATDE ~/linux-3.14-x1-at20]$ patch -p1 < linux-3.14-x1-at20_no-support-ddr50.patch
[ATDE ~/linux-3.14-x1-at20]$ make ARCH=arm x1_defconfig
[ATDE ~/linux-3.14-x1-at20]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
[ATDE ~/linux-3.14-x1-at20]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x80008000 uImage

DDR50とSDR50とではクロックスピードが違いますが、ビットレートに差分はありません。
https://panasonic.net/cns/sdcard/industrial_sd_j/performance.html

今回の修正は、次回アップデート時に適用予定です。

以上です。
ご確認よろしくお願いします。

ファイル ファイルの説明
linux-3.14-x1-at20_no-support-ddr50.patch

安藤です。

補足します。
パッチを適用し、再ビルドした カーネルイメージ と DTB とを使用してください。
本不具合が再現しなくなるかと思います。

以上です。

matsuoka.yasufumi

2018年2月13日 16時24分

安藤様

松岡です。解析と対策の情報の提供どうもありがとうございます。
提供されたパッチを使用して、カーネルとDTBをビルドし、動作確認を行います。
後日、結果を報告させて頂きます。

ご質問「添付したログが他の種類のSDカードのログではないか?」について、
SanDisk_SDSDQ-008G-J35Uを使用時のログで合っております。
SanDisk_SDSDQ-008G-J35Uの仕様を見ると、
スピードクラスはClass 4ですが、BUSインターフェイスはUHS-I対応となっておりました。
 添付ファイル「SanDisk_SDSDQ-008G-J35U.png」を参照して下さい。
よって、提供して頂いたパッチで、動作OKになると考えております。

以上です。

ファイル ファイルの説明
SanDisk_SDSDQ-008G-J35U.png

安藤です。

>スピードクラスはClass 4ですが、BUSインターフェイスはUHS-I対応となっておりました。

Class 4であることと、UHS対応であることとは関係ありませんね...申し訳ありません。

>提供されたパッチを使用して、カーネルとDTBをビルドし、動作確認を行います。
>後日、結果を報告させて頂きます。

ご確認よろしくお願いします。

matsuoka.yasufumi

2018年3月9日 11時28分

安藤様

松岡です。
2/9に早急に対策パッチを提供して頂いたのに、動作確認が遅れており、大変申し訳ありません。

お願いが1件あります。
パッチについて、提供頂いたパッチは最新のLinuxカーネルのバージョン用のものですが、
弊社が開発で使用しているLinuxカーネルのバージョン「Linux-3.14.79-at18」用のパッチを
提供して頂く事は可能でしょうか?
対応は急ぎではありません。

Linuxカーネルのバージョン
 a)提供して頂いたパッチ用 :linux-3.14-x1-at20
 b)弊社が開発で使用    :Linux-3.14.79-at18 ★

安藤です。

linux-3.14-x1-at18 に適用可能な、本不具合の対策パッチを添付します。

なお、本不具合に対する修正は linux-3.14-x1-at21 にて適用されております。

Armadillo 製品アップデートのお知らせ (2018年3月/Armadillo-IoT G3L対象)
https://armadillo.atmark-techno.com/news/20180306/software-update-aiotg…

実際に開発中の製品で運用する際は、linux-3.14-x1-at21以降をご使用ください。

ファイル ファイルの説明
linux-3.14-x1-at18_no-support-ddr50.patch