Armadilloフォーラム

armadillo-420 SPI通信SS1の設定について

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)にするにはどうすれば良いでしょうか?

よろしくお願い致します。

コメント

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にしましたか?

以上です。

miya_okazumi

2022年5月25日 14時40分

溝渕様 回答有難う御座います。

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

2022年5月25日 14時57分

溝渕です。

> 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

2022年5月25日 15時22分

溝渕様 回答有難う御座います。

/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

2022年5月25日 15時35分

溝渕です。

> スレーブ接続時に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

2022年5月25日 16時05分

溝渕様 回答有難う御座います。

確認しましたが、接続時に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

2022年5月25日 16時30分

溝渕です。

> 確認しましたが、接続時にHi、切断時にLowのままでした。

	.mode = SPI_CS_HIGH,

を入れると論理が逆になるかと思いましたが、なりませんでしたか...。

いちおうですが、アプリケーションから(ioctl( SPI_IOC_WR_MODE)やioctl(SPI_IOC_RD_MODE)などで)chip selectの極性を指定していませんか。

逆に、指定していない場合は指定するとどうなりますか?

miya_okazumi

2022年5月25日 17時09分

溝渕様 回答有難う御座います。

アプリのプログラムを確認していたところ、
mode |= SPI_CS_HIGH;
を設定してしいました。

この部分を削除すると希望通りの仕様になりました。
お手数お掛けして申し訳ありません。

> 溝渕です。
>
> > 確認しましたが、接続時にHi、切断時にLowのままでした。
>
>

> 	.mode = SPI_CS_HIGH,
> 

>
> を入れると論理が逆になるかと思いましたが、なりませんでしたか...。
>
> いちおうですが、アプリケーションから(ioctl( SPI_IOC_WR_MODE)やioctl(SPI_IOC_RD_MODE)などで)chip selectの極性を指定していませんか。
>
> 逆に、指定していない場合は指定するとどうなりますか?
>