Armadilloフォーラム

ユーザーアプリケーションからMMCコマンドを送信することはできますか?

maskedw

2016年7月21日 15時27分

Armadillo-IoT ゲートウェイ G3を使用して開発を行っています。

FAT等でフォーマットしたSDカードに対して、アプリケーションプログラムから通常のファイルアクセスもしつつ、直接MMCのコマンドを送信してブロックリード等を行いたい(ファイルシステムの整合性を破壊するようなコマンドは送信しないことが前提)のですが、そういったことは可能でしょうか?

ioctlでSDカードに対してコマンドを送信できればと思っているのですが、そういった事例やサンプルを見つけることができずにいます。

ファイルアクセスと競合しないのかという心配もありますし、ioctlが提供されていなければドライバを改造するしかないと思うのですが、何か作業の取っ掛かりを掴みたいです。
何かサンプル等情報はありませんでしょうか?よろしくお願いします。

コメント

y.nakamura

2016年7月21日 16時24分

中村です。

Linuxの一般的な話になりますが、
SDカードから生でデータを読み出すだけなら、
ddコマンドではダメですか?

dd if=/dev/mmcblk0 of=hoge.img

seekとかbsとかcountとかを指定すれば、
任意の場所から任意のバイト数を読み出せると思います。

C言語でやるなら、/dev/mmcblk0をopen()して
lseek()してread()すればいいような・・・
(やったことないですけど)

--
なかむら

maskedw

2016年7月21日 16時50分

> 中村です。
>
> Linuxの一般的な話になりますが、
> SDカードから生でデータを読み出すだけなら、
> ddコマンドではダメですか?
>
> dd if=/dev/mmcblk0 of=hoge.img
>
> seekとかbsとかcountとかを指定すれば、
> 任意の場所から任意のバイト数を読み出せると思います。
>
> C言語でやるなら、/dev/mmcblk0をopen()して
> lseek()してread()すればいいような・・・
> (やったことないですけど)
>
> --
> なかむら
>

すいません。実際にはデータを読み出したいというか、コマンドを送りたいのです。具体的にはFlashAirのiSDIOコマンドです。
FlashAirの開発者サイトによるとCMD48(READ_EXTR_SINGLE)およびCMD49 (WRITE_EXTR_SINGLE)で無線LAN機能の細かい制御ができるとありました。

Luaスクリプト機能だと、アプリケーションプログラムと細かい連携ができそうになかったので、iSDIOを使うしかないのかなと。

y.nakamura

2016年7月21日 20時31分

中村です。

> すいません。実際にはデータを読み出したいというか、コマンドを送りたいのです。具体的にはFlashAirのiSDIOコマンドです。

FATフォーマットに影響を与えずに、とか、ブロックリードとかに
気を取られて、早とちりで投稿してしまいました。
そういう簡単な話ではなかったようで、
失礼をしました。

--
なかむら

maskedw

2016年7月21日 18時13分

> > ioctlでSDカードに対してコマンドを送信できればと思っているのですが、そういった事例やサンプルを見つけることができずにいます。
>
> http://stackoverflow.com/questions/23312933/any-way-to-send-commands-to…
>
> こういう話でしょうか?

そうです。そのURLの情報が今の所一番参考になりそうでした。(英語が苦手なんで雰囲気しか掴めていませんが・・・)
カーネルのソースを見ていると`/include/linux/mmc/mmc.h`にMMC_READ_SINGLE_BLOCK等の直接コマンドに使えそうな定義が見当たりますね。

残念ながら、CMD48,49の定義は見たらず、内部でコマンドコードに応じて処理を振り分けてそうなので、任意コマンドの実行というわけにはいかなそうですね。