Armadilloフォーラム

Armadillo-460 カーネル バージョンによるSPIの動作についての質問

tic-hirano

2015年11月2日 14時33分

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

以前「Armadill-460 SPIの16ビット転送での転送落ち」( https://armadillo.atmark-techno.com/forum/armadillo/793 )で問題無く動作するようになったアプリケーションの環境でQtを使おうとATDE4+Qt(「Armadillo-460でQt」( https://users.atmark-techno.com/blog/615/1317 ))で構築したところSPI機器の応答が無くなりました.
Linuxカーネルおよびユーザランドのバージョン更新でSPI関連の変更点はありますか?

応答が無い時の違いとしてCSPI3_SS0の論理が逆になっているようでした.

以下は確認したカーネルおよびユーザランドの組み合わせです.

利用機器:Armadillo-460
-------------------------------------------
開発環境:ATDE3
Linuxカーネル:v2.6.26-at20
ユーザランド:v20140602
SPIの動作:問題無し
-------------------------------------------
開発環境:ATDE4+Qt
Linuxカーネル:v2.6.26-at25
ユーザランド:v20150424
SPIの動作:CSの論理が反転している?
-------------------------------------------
開発環境:ATDE3
Linuxカーネル:v2.6.26-at25
ユーザランド:v20150424
SPIの動作:CSの論理が反転している?
-------------------------------------------
開発環境:ATDE4+Qt
Linuxカーネル:v2.6.26-at20
ユーザランド:v20140602
SPIの動作:問題無し
-------------------------------------------

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

ファイル ファイルの説明
0005.PNG 正常なときの波形(CH1:SCLK,CH2:RDY,CH3:SS0)
0004.PNG 問題があるときの波形(CH1:SCLK,CH2:RDY,CH3:SS0)
コメント

中村です。

> Linuxカーネルおよびユーザランドのバージョン更新でSPI関連の変更点はありますか?

v2.6.26-at24で、spiのCSのバグが修正されました。
https://armadillo.atmark-techno.com/forum/armadillo/1285#comment-1649

元ネタはML時代の私の投稿
[Armadillo:09056] Re: A-4x0 にSPIでSDカードスロットを増設
http://lists.atmark-techno.com/pipermail/armadillo/2013-July/009059.html
の最後に書いた

--- arch/arm/mach-mx25/armadillo400_gpio.c-orig 2012-07-26 21:30:37.000000000 +0900
+++ arch/arm/mach-mx25/armadillo400_gpio.c      2013-07-20 22:25:30.000000000 +0900
@@ -1480,7 +1480,7 @@
 
 void gpio_spi1_cs_active(int cspi_mode, int chipselect)
 {
-       int __maybe_unused val = !(cspi_mode & SPI_CPOL);
+       int __maybe_unused val = !!(cspi_mode & SPI_CS_HIGH);
 
        switch (chipselect) {
        case 0:
@@ -1504,7 +1504,7 @@
 
 void gpio_spi1_cs_inactive(int cspi_mode, int chipselect)
 {
-       int __maybe_unused val = !!(cspi_mode & SPI_CPOL);
+       int __maybe_unused val = !(cspi_mode & SPI_CS_HIGH);
 
        switch (chipselect) {
        case 0:
@@ -1528,7 +1528,7 @@
 
 void gpio_spi3_cs_active(int cspi_mode, int chipselect)
 {
-       int __maybe_unused val = !(cspi_mode & SPI_CPOL);
+       int __maybe_unused val = !!(cspi_mode & SPI_CS_HIGH);
 
        switch (chipselect) {
        case 0:
@@ -1558,7 +1558,7 @@
 
 void gpio_spi3_cs_inactive(int cspi_mode, int chipselect)
 {
-       int __maybe_unused val = !!(cspi_mode & SPI_CPOL);
+       int __maybe_unused val = !(cspi_mode & SPI_CS_HIGH);
 
        switch (chipselect) {
        case 0:

です。

v2.6.26-at23からat24での修正を確認したましたが、
このMLの投稿と同じように修正されていました。

arch/arm/mach-mx25/armadillo400.cで
struct spi_board_info をセットしていると思います。
その部分でmodeにSPI_CS_HIGHをつけてみてください。
(modeデフォルトはSPI_CS_HIGH=0だったと思います)

--
なかむら

平野です.

コメントありがとうございます.

> > Linuxカーネルおよびユーザランドのバージョン更新でSPI関連の変更点はありますか?
>
> v2.6.26-at24で、spiのCSのバグが修正されました。
> https://armadillo.atmark-techno.com/forum/armadillo/1285#comment-1649

投稿された当時に目にしていましたの思い出しましたが,今回探すときに見落としていました.

> arch/arm/mach-mx25/armadillo400.cで
> struct spi_board_info をセットしていると思います。
> その部分でmodeにSPI_CS_HIGHをつけてみてください。
> (modeデフォルトはSPI_CS_HIGH=0だったと思います)

「.mode = SPI_CS_HIGH,」を追加するだけでは動かなかったのでもう少し調べてみます.

> 平野です.
>
> コメントありがとうございます.
>
> > > Linuxカーネルおよびユーザランドのバージョン更新でSPI関連の変更点はありますか?
> >
> > v2.6.26-at24で、spiのCSのバグが修正されました。
> > https://armadillo.atmark-techno.com/forum/armadillo/1285#comment-1649
>
> 投稿された当時に目にしていましたの思い出しましたが,今回探すときに見落としていました.
>
> > arch/arm/mach-mx25/armadillo400.cで
> > struct spi_board_info をセットしていると思います。
> > その部分でmodeにSPI_CS_HIGHをつけてみてください。
> > (modeデフォルトはSPI_CS_HIGH=0だったと思います)
>
> 「.mode = SPI_CS_HIGH,」を追加するだけでは動かなかったのでもう少し調べてみます.

加嶋と申します。
SPI通信について
armadiro460で以下の環境で開発しています。
開発環境:ATDE4+Qt
Linuxカーネル:v2.6.26-at25
ユーザランド:v20150424

で行いたいと思っていますが
上記の環境では使用不可でしょうか?
また、その後何か情報はありますか?
よろしくお願いいたします。

> 平野です.
>
> コメントありがとうございます.
>
> > > Linuxカーネルおよびユーザランドのバージョン更新でSPI関連の変更点はありますか?
> >
> > v2.6.26-at24で、spiのCSのバグが修正されました。
> > https://armadillo.atmark-techno.com/forum/armadillo/1285#comment-1649
>
> 投稿された当時に目にしていましたの思い出しましたが,今回探すときに見落としていました.
>
> > arch/arm/mach-mx25/armadillo400.cで
> > struct spi_board_info をセットしていると思います。
> > その部分でmodeにSPI_CS_HIGHをつけてみてください。
> > (modeデフォルトはSPI_CS_HIGH=0だったと思います)
>
> 「.mode = SPI_CS_HIGH,」を追加するだけでは動かなかったのでもう少し調べてみます.

アルマジロ460用のダウンロードできるカーネルについてみてみました。

linux-2.6.26-at27.tar.gzというのが最新のようですがこのカーネルは以下の環境下で使用できるでしょうか?そしてSPIの不具合も直っているのでしょうか?
何卒よろしくお願いいたします。

開発環境:ATDE4+Qt
Linuxカーネル:v2.6.26-at25
ユーザランド:v20150424

> 加嶋と申します。
> SPI通信について
> armadiro460で以下の環境で開発しています。
> 開発環境:ATDE4+Qt
> Linuxカーネル:v2.6.26-at25
> ユーザランド:v20150424
>
> で行いたいと思っていますが
> 上記の環境では使用不可でしょうか?
> また、その後何か情報はありますか?
> よろしくお願いいたします。
>
> > 平野です.
> >
> > コメントありがとうございます.
> >
> > > > Linuxカーネルおよびユーザランドのバージョン更新でSPI関連の変更点はありますか?
> > >
> > > v2.6.26-at24で、spiのCSのバグが修正されました。
> > > https://armadillo.atmark-techno.com/forum/armadillo/1285#comment-1649
> >
> > 投稿された当時に目にしていましたの思い出しましたが,今回探すときに見落としていました.
> >
> > > arch/arm/mach-mx25/armadillo400.cで
> > > struct spi_board_info をセットしていると思います。
> > > その部分でmodeにSPI_CS_HIGHをつけてみてください。
> > > (modeデフォルトはSPI_CS_HIGH=0だったと思います)
> >
> > 「.mode = SPI_CS_HIGH,」を追加するだけでは動かなかったのでもう少し調べてみます.