miya_okazumi
2022年5月25日 11時48分
お世話になります。
armadillo-420
Linux 3.14.36-at13
で開発を進めていますが、SPIの設定についてご教示頂けないでしょうか。
SPI通信でSS0(CON9_16)とSS1(CON9_18)を使用するための設定を行ています。
armadillo-guide-3_ja-3.0.0を基に行っていますが、
31ページの「図2.38.CSPI3、SS0をspidevで使用する修正」で
/dev/spidev2.0は認識されましたが、/dev/spidev2.1が認識されていません。
SS1を使用するにはどうすれば良いでしょうか?
SS0についてはオシロで出力確認できました。
スレーブ接続時にHi、切断時にLowになっているのですが、
逆(接続時にLow、切断時にHi)にするにはどうすれば良いでしょうか?
よろしくお願い致します。
コメント
miya_okazumi
溝渕様 回答有難う御座います。
Enable SPI3_SS1 at CON9_18
にチェックは入っています。
「図 2.38 CSPI3、SS0 を spidev で使用する修正」で、
.chip_select = 1,
とした場合、
/dev/spidev2.1が認識され、/dev/spidev2.0は認識されなくなりました。
SS0とSS1の両方を使用したいです。
> 溝渕です。
>
> > armadillo-guide-3_ja-3.0.0を基に行っていますが、
> > 31ページの「図2.38.CSPI3、SS0をspidevで使用する修正」で
> > /dev/spidev2.0は認識されましたが、/dev/spidev2.1が認識されていません。
> > SS1を使用するにはどうすれば良いでしょうか?
>
> 以下2点確認してください。
>
> 「図 2.37 SPI に使用するピンを指定する」で、
> [ ] Enable SPI3_SS1 at CON9_18
> にチェックは入れましたか?
>
> 「図 2.38 CSPI3、SS0 を spidev で使用する修正」で、
> .chip_select = 1,
> と、chip_selectの数を1にしましたか?
>
> 以上です。
>
at_mizo
溝渕です。
> SS0とSS1の両方を使用したいです。
次のようにしてみてもらえますか。
static struct spi_board_info armadillo4x0_spi2_board_info[] __initdata = { { .modalias = "spidev", .max_speed_hz = 1000000, .bus_num = 2, .chip_select = 0, }, { .modalias = "spidev", .max_speed_hz = 1000000, .bus_num = 2, .chip_select = 1, }, };
miya_okazumi
溝渕様 回答有難う御座います。
/dev/spidev2.0、/dev/spidev2.1共に認識されている事確認できました。
スレーブ接続時にHi、切断時にLowになっているのですが、
逆(接続時にLow、切断時にHi)にする方法をご教示下さい。
> 溝渕です。
>
> > SS0とSS1の両方を使用したいです。
>
> 次のようにしてみてもらえますか。
>
>
> static struct spi_board_info armadillo4x0_spi2_board_info[] __initdata = { > { > .modalias = "spidev", > .max_speed_hz = 1000000, > .bus_num = 2, > .chip_select = 0, > }, > { > .modalias = "spidev", > .max_speed_hz = 1000000, > .bus_num = 2, > .chip_select = 1, > }, > }; >
>
at_mizo
溝渕です。
> スレーブ接続時にHi、切断時にLowになっているのですが、
> 逆(接続時にLow、切断時にHi)にする方法をご教示下さい。
実機で試したわけではありませんが、次のようにするとどうなるか確認してみていただけますか。
static struct spi_board_info armadillo4x0_spi2_board_info[] __initdata = { { .modalias = "spidev", .max_speed_hz = 1000000, .bus_num = 2, .chip_select = 0, .mode = SPI_CS_HIGH, }, { .modalias = "spidev", .max_speed_hz = 1000000, .bus_num = 2, .chip_select = 1, .mode = SPI_CS_HIGH, }, };
miya_okazumi
溝渕様 回答有難う御座います。
確認しましたが、接続時にHi、切断時にLowのままでした。
> 溝渕です。
>
> > スレーブ接続時にHi、切断時にLowになっているのですが、
> > 逆(接続時にLow、切断時にHi)にする方法をご教示下さい。
>
> 実機で試したわけではありませんが、次のようにするとどうなるか確認してみていただけますか。
>
>
> static struct spi_board_info armadillo4x0_spi2_board_info[] __initdata = { > { > .modalias = "spidev", > .max_speed_hz = 1000000, > .bus_num = 2, > .chip_select = 0, > .mode = SPI_CS_HIGH, > }, > { > .modalias = "spidev", > .max_speed_hz = 1000000, > .bus_num = 2, > .chip_select = 1, > .mode = SPI_CS_HIGH, > }, > }; >
>
at_mizo
miya_okazumi
溝渕様 回答有難う御座います。
アプリのプログラムを確認していたところ、
mode |= SPI_CS_HIGH;
を設定してしいました。
この部分を削除すると希望通りの仕様になりました。
お手数お掛けして申し訳ありません。
> 溝渕です。
>
> > 確認しましたが、接続時にHi、切断時にLowのままでした。
>
>
> .mode = SPI_CS_HIGH, >
>
> を入れると論理が逆になるかと思いましたが、なりませんでしたか...。
>
> いちおうですが、アプリケーションから(ioctl( SPI_IOC_WR_MODE)やioctl(SPI_IOC_RD_MODE)などで)chip selectの極性を指定していませんか。
>
> 逆に、指定していない場合は指定するとどうなりますか?
>
at_mizo
2022年5月25日 13時28分
溝渕です。
> armadillo-guide-3_ja-3.0.0を基に行っていますが、
> 31ページの「図2.38.CSPI3、SS0をspidevで使用する修正」で
> /dev/spidev2.0は認識されましたが、/dev/spidev2.1が認識されていません。
> SS1を使用するにはどうすれば良いでしょうか?
以下2点確認してください。
「図 2.37 SPI に使用するピンを指定する」で、
[ ] Enable SPI3_SS1 at CON9_18
にチェックは入れましたか?
「図 2.38 CSPI3、SS0 を spidev で使用する修正」で、
.chip_select = 1,
と、chip_selectの数を1にしましたか?
以上です。