Armadilloフォーラム

X1 python の spidev について

bashi18

2021年5月24日 18時25分

no_cs オプションを指定しようとするとInvalid argumentになります。

spi = spidev.SpiDev()
spi.open(1, 3)     # 仮でSS3
spi.no_cs = True   # CSは自前で制御

X1 Debian10の環境です。
pythonのspidevを使用してSPI通信を行っております。
ECSPI2でSS0~3までは問題なく通信できていたのですが、
CSが足りなくなったのでSS4にGPIOを割り当ててみたのですが、xfer2をコールすると
Invalid argumentになります。
そこでCSを自前で制御しようと思い、上記を試しております。
解決の方法はないでしょうか?

コメント

at_akihito.irie

2021年5月26日 13時33分

入江です。

一点確認させてください。

> CSが足りなくなったのでSS4にGPIOを割り当ててみたのですが、xfer2をコールすると
> Invalid argumentになります。

CSを追加する際にdtsを修正したと思いますが、修正したdtsを添付していただ
くことは可能でしょうか。

以上、よろしくお願いいたします。

入江様
回答ありがとうございます。

自己解決いたしました。
原因はbits_per_wordの指定でした。
通信サイズが24bitだったので、bits_per_word=24とし、xfer2([0x12, 0x34, 0x56])としていたのが悪かったようです。
bits_per_word=8とするか、bits_per_word=32でxfer2([0x12, 0x34, 0x56, 0x00])とすることでgpioを割り当てて制御できました。

また、no_cs = True の指定も自己流ですがいちおう実現できました。
http://nahitafu.cocolog-nifty.com/nahitafu/2018/12/zynqspilinux2-4.html
を参考に、ドライバの階層関係が分かりましたのでspi.cとspi-imx.cに少し手を加えることで可能になりました。

お騒がせしました。