sisyphus
2024年3月28日 11時40分
現在 A6 で開発を開始したところですが、
1) GPIO4_IO08 の信号でスリープから起床する
2) 起床後USBカメラからデータ取得し、UART1を使って別のCPUボードにデータを送る
3) 別のCPUボードからUART1で受け取ったデータを加工してUART3のRS-232Cで外部PLCに送信する
ということをやりたいと考えております。
3) の後半のUART3のRS-232Cで外部に送信というところは https://armadillo.atmark-techno.com/blog/10899/9867 を参考に実現できましたが、GPIO4_IO08 の信号(立上り、立下り どちらにも反応が望ましい)でスリープ と UART1を使って通信 は現状できない状態です。
これを実現するためには、そのための dts ファイルを作って dtb をビルドする必要があるのだと思いますが、dts ファイルをどのように記述したらよいのかわかりません。どのように書けばよいのかをお教えいただきたく、よろしくお願いいたします。
コメント
at_koseki
古関です。
以下に回答いたします。
■ UART1の利用方法
at-dtwebを使ってWebブラウザ上のマウス操作でDTSおよびDTBを生成することができます。
https://manual.atmark-techno.com/armadillo-iot-a6/armadillo-iota6_produ…
作成したDTBを使用してArmadilloを起動すると/dev/ttymxc0からシリアル通信ができます。
■ GPIO4_IO08 からの起床
次を参考にDTSを編集するとできると思います。
https://github.com/atmark-techno/linux-4.14-at/blob/master/arch/arm/boo…
SW1を押すとsleepから起床することができますが、それと同様の設定をGPIO4_IO08で行います。
ただ、以下2つのキーコードは既に割り当てられているので
別のモノに変えてください。
linux,code = ;
linux,code = ;
at_koseki
sisyphus
ありがとうございます。
> SW1を押すとsleepから起床することができますが、それと同様の設定をGPIO4_IO08で行います。
dts の書き方が分かっていないので、具体的な記述について質問します。
gpio-keys { sw1 { label = "SW1"; gpios = <&gpio1 10 GPIO_ACTIVE_LOW>; linux,code = <KEY_ENTER>; gpio-key,wakeup = <1>; }; };
の部分を
gpio-keys { sw1 { label = "SW1"; gpios = <&gpio1 10 GPIO_ACTIVE_LOW>; linux,code = <KEY_ENTER>; gpio-key,wakeup = <1>; }; wup { label = "WUP"; gpios = <&gpio4 08 GPIO_ACTIVE_LOW>; linux,code = <KEY_WUP>; gpio-key,wakeup = <1>; }; };
のように書けば良いのでしょうか?
上記において wup とか "WUP" とか とかは適当に命名していますが、ルールがあるのでしょうか?
また、デバイスツリーだけ入れ替えれば Wake up は動作するようになりますか? (他にいじるところは無いですか?)
質問ばかりで申し訳ありませんが、よろしくお願いいたします。
> 古関です。
>
> > ただ、以下2つのキーコードは既に割り当てられているので
> > 別のモノに変えてください。
> ごめんなさい。キーコードの部分が表示が崩れてしまっていますね。
>
> 以下になります。
>
> linux,code = <KEY_ENTER>; > linux,code = <KEY_WAKEUP>; >
sisyphus
古賀 様
お世話になっております。引用文が見にくくなっているので整理して再投稿します。
> SW1を押すとsleepから起床することができますが、それと同様の設定をGPIO4_IO08で行います。
dts の書き方が分かっていないので、具体的な記述について質問します。
gpio-keys { sw1 { label = "SW1"; gpios = <&gpio1 10 GPIO_ACTIVE_LOW>; linux,code = <KEY_ENTER>; gpio-key,wakeup = <1>; }; };
の部分を
gpio-keys { sw1 { label = "SW1"; gpios = <&gpio1 10 GPIO_ACTIVE_LOW>; linux,code = <KEY_ENTER>; gpio-key,wakeup = <1>; }; wup { label = "WUP"; gpios = <&gpio4 08 GPIO_ACTIVE_LOW>; linux,code = <KEY_WUP>; gpio-key,wakeup = <1>; }; };
のように書けば良いのでしょうか?
上記において wup とか "WUP" とか<KEY_WUP> とかは適当に命名していますが、ルールがあるのでしょうか?
また、デバイスツリーだけ入れ替えれば Wake up は動作するようになりますか? (他にいじるところは無いですか?)
質問ばかりで申し訳ありませんが、よろしくお願いいたします。
at_mitsuhiro.yoshida
吉田です。
uart1 の設定に関しては、若干使用方法が違うかもしれませんが、
以下のブログが at-dtweb を用いて uart1 を有効にする手段に関しては参考になるかと思われます。
Armadillo-IoT(A6):コンソールを拡張インタフェースのUARTに変更する
https://armadillo.atmark-techno.com/blog/615/12692
gpio-keys の linux,code 部分に記載する KEY_~は、カーネルのソースコードの
include/dt-bindings/input/linux-event-codes.h
に定義されている KEY_~ を使用できます。
sisyphus
吉田様
> gpio-keys の linux,code 部分に記載する KEY_~は、カーネルのソースコードの
> include/dt-bindings/input/linux-event-codes.h
> に定義されている KEY_~ を使用できます。
https://armadillo.atmark-techno.com/resources/software/armadillo-iot-a6… にあるカーネルのソースファイルの
include/dt-bindings/input/linux-event-codes.h は空のファイルでした。(画像添付)
ここに自分で何か KEY_~ を記入しなければいけないということでしょうか ?
ここが空でも SW1 のスリープ解除は効いているので、違うような気もしますが...
基本的知識不足で申し訳ありませんが、もう少し詳しく教えていただけると幸いです。
よろしくお願いいたします。
ファイル | ファイルの説明 |
---|---|
input_directory.jpg |
sisyphus
吉田様
追記です。 ソースコードを見ていたら include/uapi/linux/input-event-codes.h に キーコードの一覧がありました。
この中から、例えば KEY_SPACE などを使用すれば良いということでしょうか。
dtsファイルの改造に際しては
gpio-keys { sw1 { label = "SW1"; gpios = <&gpio1 10 GPIO_ACTIVE_LOW>; linux,code = <KEY_ENTER>; gpio-key,wakeup = <1>; }; space { label = "SPACE"; gpios = <&gpio4 08 GPIO_ACTIVE_LOW>; linux,code = <KEY_SPACE>; gpio-key,wakeup = <1>; }; };
のように space { label = "SPACE"; という適当な名称を使用してもOKでしょうか?
(そもそも上記のコードの書き方で良いのでしょうか?)
連続投稿ですみませんが お教えいただきたく、よろしくお願いいたします。
at_mitsuhiro.yoshida
sisyphus
sisyphus
2024年3月28日 11時43分
「GPIO4_IO08 の信号(立上り、立下り どちらにも反応が望ましい)でスリープ と」→ 「...スリープ 解除と」の誤記でした。