Armadilloフォーラム

Armadill-460 SPIの16ビット転送での転送落ち

tic-hirano

2014年6月27日 15時29分

お世話になっております,平野と申します.

Armadillo-460のCSPI3をArmadillo実践開発ガイド(http://manual.atmark-techno.com/armadillo-guide/armadillo-guide-3_ja-2…)を参考に利用しています.

8ビット転送では問題無く動作できているのですが16ビット転送では下記の問題が発生しました.
 ・データをuint16_t*とし2ワード転送をすると2ワード目が指定した値になっていない(0x0000になっていた)
 ・4ワード転送すると2ワード目は指定した値になる
上記の問題はwrite関数でもioctl関数でも同じ結果でした.

16ビット転送ができるとバイトオーダー変更が必要なくなるので利用したいのですが上記問題を回避する方法はありますか?

利用機器:Armadillo-460
開発環境:ATDE3
Linuxカーネル:v2.6.26-at19
ユーザランド:v20140415

以上,よろしくお願いします.

コメント

at_makoto.harada

2014年6月27日 19時24分

原田です。

以前、8bit転送だと問題ないが、16bit, 32bit だと正常に転送できないという問題に遭遇したことがあります。
調査した結果、SPIドライバの問題による制限でした。
添付のパッチで解決しましたので、是非試してみてください。

ファイル ファイルの説明
0001-mxc_spi-fix-over-8-byte-transfer-error.patch

tic-hirano

2014年6月30日 10時16分

平野です.

原田さま,パッチありがとうございます.

パッチを充てることでioctl関数での転送は想定通りの動作になりました.
write関数では変化が無いようでした.

ioctl関数を利用する実装で対応していきます.ありがとうございました.