kdhiro
2021年5月13日 10時03分
お世話になります。
Armadillo-640内蔵のSPIを使えるようにするため、下記の手順で進めて参りました。
・at-dtwebでECSPI3とUART1を追加し、ビルド
・boot起動画面にspiの項目が表示されるのを確認
[ 0.998815] spi_imx 2010000.ecspi: dma setup error -19, use pio
[ 1.005859] spi_imx 2010000.ecspi: probed
過去のフォーラム「Armadillo-640へのSPIおよびCANの追加方法」が参考になると
思いますが、なかなか理解が及びません。次の手順として、menuconfigの編集と
いうことになるのでしょうか(デバイスドライバの有効)?
ファイル | ファイルの説明 |
---|---|
bootログ.txt |
コメント
kdhiro
> 入江です。
>
> お使いのSPIスレーブデバイス(対向機)について教えて頂くことは可能でしょうか。
>
> SPIスレーブデバイスのデバイスドライバがLinuxカーネルのソースコード内に
> 含まれているかどうかでこの後の動きは変わります。
>
> 以上、よろしくお願いいたします。
>
ありがとうございます。
SPIスレーブデバイス ですが、7セグメントLED表示器になります。
確認お願い致します!
ファイル | ファイルの説明 |
---|---|
OSL10564-74HC595 -X.PDF |
at_akihito.irie
入江です。
Linuxカーネルソースコード内にお使いのデバイスのドライバは無いようです。
この場合、専用のドライバを新規に作成しても良いのですが、spidevという汎
用のspiドライバを使うのが手軽ですのでそちらをおすすめします。
spidevドライバーを使用すると、デバイスファイルインターフェースを経由し
て、ユーザーランドで動作するアプリケーションプログラムからデバイスの制
御をおこなうことができます。
具体的な手順としましては、at-dtwebでSPI(とUART1)を有効にしてSaveした後、
以下のコマンドを実行してカーネルコンフィグレーションを変更します。
[ATDE]$ make ARCH=arm armadillo-640_defconfig [ATDE]$ make ARCH=arm menuconfig
有効にするコンフィグレーションは以下のとおりです。
Device Drivers ---> [*] SPI support ---> [*] User mode SPI device driver support <- これを有効化
また、お客様の方で有効にしているコンフィグレーションがあればここで有効にしてください。
その後、以下のコマンドを実行してカーネルをビルドし、カーネルイメージと
dtbが生成されていることを確認してください。
[ATDE]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x82000000 uImage [ATDE]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- [ATDE]$ ls arch/arm/boot/uImage arch/arm/boot/uImage [ATDE]$ ls arch/arm/boot/dts/armadillo-640-at-dtweb.dtb arch/arm/boot/dts/armadillo-640-at-dtweb.dtb
書き込んだ後にArmadilloを起動すると、/dev/spidevN.M(N, Mは0以上の数値
文字)デバイスファイルが生成されます。
そのデバイスファイルに対して、open/close/read/write/ioctlシステムコー
ルを発行することで、SPIデバイスの制御を行うことができます。
詳細は調べて頂くか、ドキュメントが以下にありますのでご参照ください。
https://github.com/atmark-techno/linux-4.14-at/blob/master/Documentatio…
kdhiro
> 入江です。
>
> Linuxカーネルソースコード内にお使いのデバイスのドライバは無いようです。
>
> この場合、専用のドライバを新規に作成しても良いのですが、spidevという汎
> 用のspiドライバを使うのが手軽ですのでそちらをおすすめします。
>
> spidevドライバーを使用すると、デバイスファイルインターフェースを経由し
> て、ユーザーランドで動作するアプリケーションプログラムからデバイスの制
> 御をおこなうことができます。
>
> 具体的な手順としましては、at-dtwebでSPI(とUART1)を有効にしてSaveした後、
> 以下のコマンドを実行してカーネルコンフィグレーションを変更します。
>
>
> [ATDE]$ make ARCH=arm armadillo-640_defconfig > [ATDE]$ make ARCH=arm menuconfig >
>
> 有効にするコンフィグレーションは以下のとおりです。
>
>
> Device Drivers ---> > [*] SPI support ---> > [*] User mode SPI device driver support <- これを有効化 >
>
> また、お客様の方で有効にしているコンフィグレーションがあればここで有効にしてください。
>
> その後、以下のコマンドを実行してカーネルをビルドし、カーネルイメージと
> dtbが生成されていることを確認してください。
>
>
> [ATDE]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x82000000 uImage > [ATDE]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- > > [ATDE]$ ls arch/arm/boot/uImage > arch/arm/boot/uImage > [ATDE]$ ls arch/arm/boot/dts/armadillo-640-at-dtweb.dtb > arch/arm/boot/dts/armadillo-640-at-dtweb.dtb >
>
> 書き込んだ後にArmadilloを起動すると、/dev/spidevN.M(N, Mは0以上の数値
> 文字)デバイスファイルが生成されます。
> そのデバイスファイルに対して、open/close/read/write/ioctlシステムコー
> ルを発行することで、SPIデバイスの制御を行うことができます。
>
> 詳細は調べて頂くか、ドキュメントが以下にありますのでご参照ください。
> https://github.com/atmark-techno/linux-4.14-at/blob/master/Documentatio…
>
丁寧な解説、ありがとうございます!
spidevにて進めて参ります!
kdhiro
すみません。準備が整い、カーネルコンフィグレーションを実施したのですが、
下記エラーが出てしまいました。root権限でも実施しましたが、同様なエラーでした。
atmark@atde7:~/linux-v4.14-at32$ make ARCH=arm armadillo-640_deconfig
make[1]: *** ターゲット 'armadillo-640_deconfig' を make するルールがありません. 中止.
Makefile:522: ターゲット 'armadillo-640_deconfig' のレシピで失敗しました
make: *** [armadillo-640_deconfig] エラー 2
kdhiro
kdhiro
at_akihito.irie
kdhiro
kdhiro
> > 大丈夫です。
> >
> > 先に説明したSPIのコンフィギュレーションが全て有効になっていることは確認してください。
>
> 有効を確認し、カーネルビルド→Armadillo-640のDTBの書き換え後、rebootを行いました。
> devフォルダを確認しましたが、デバイスファイルが生成されていないようです・・・。
ファイル | ファイルの説明 |
---|---|
rebootログ.txt | rebootログを添付します。 |
at_akihito.irie
kdhiro
kdhiro
kdhiro
at_akihito.irie
kdhiro
kdhiro
at_akihito.irie
入江です。
https://github.com/doceme/py-spidev/blob/master/README.md
上記はpy-spidevのREADMEです。
README内に、
open(bus, device)
とあります。これは
/dev/spidevN.M
のNとMを指します。
よって/dev/spidev3.0ならば、
spi.open(3, 0)
とすると良いと思います。
kdhiro
kdhiro
at_akihito.irie
2021年5月13日 18時29分
入江です。
お使いのSPIスレーブデバイス(対向機)について教えて頂くことは可能でしょうか。
SPIスレーブデバイスのデバイスドライバがLinuxカーネルのソースコード内に
含まれているかどうかでこの後の動きは変わります。
以上、よろしくお願いいたします。