Armadilloフォーラム

UART1を使いたい & GPIO4_IO08 変化でスリープから起床したい

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 ファイルをどのように記述したらよいのかわかりません。どのように書けばよいのかをお教えいただきたく、よろしくお願いいたします。

コメント

sisyphus

2024年3月28日 11時43分

「GPIO4_IO08 の信号(立上り、立下り どちらにも反応が望ましい)でスリープ と」→ 「...スリープ 解除と」の誤記でした。

at_koseki

2024年3月29日 17時23分

古関です。

以下に回答いたします。

■ 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

2024年3月29日 17時33分

古関です。

> ただ、以下2つのキーコードは既に割り当てられているので
> 別のモノに変えてください。
ごめんなさい。キーコードの部分が表示が崩れてしまっていますね。

以下になります。

linux,code = <KEY_ENTER>;
linux,code = <KEY_WAKEUP>;

sisyphus

2024年3月29日 19時21分

ありがとうございます。

> 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

2024年4月5日 5時50分

古賀 様
お世話になっております。引用文が見にくくなっているので整理して再投稿します。

> 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

2024年4月5日 15時06分

吉田です。

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

2024年4月5日 18時26分

吉田様

> 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

2024年4月5日 18時49分

吉田様

追記です。 ソースコードを見ていたら 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

2024年4月8日 17時18分

吉田です。

> 追記です。 ソースコードを見ていたら include/uapi/linux/input-event-codes.h に キーコードの一覧がありました。
> この中から、例えば KEY_SPACE などを使用すれば良いということでしょうか。

ビルドして動作確認を行い想定通りの動作であれば OK と思われます。
名称、使用するキー、 GPIO_ACTIVE_LOW or GPIO_ACTIVE_HIGH に関しては、
開発しているシステムとして妥当なものをご指定ください。

sisyphus

2024年4月26日 15時15分

吉田様、古関様

報告が遅れて申し訳ありませんが、無事GPIO4_IO08経由で Sleepから復帰できるようになりました。いろいろアドバイスありがとうございました。

なお、2つ前の投稿のdtsの内容でビルドすると1か所Errorが出ました。
gpios = <&gpio4 08 GPIO_ACTIVE_LOW>; の 部分で「08」は整数でないというエラーで、「8」に修正してビルドできました。
一応、ご報告まで。