Armadilloフォーラム

X1への640用LCD接続について

bashi18

2021年8月31日 10時47分

X1で製品開発を行っております。
表示機能を持たせたく、640用オプションのLCDを接続しようと試行錯誤しています。
どうにかサンプルのQTプログラムが表示されるところまでこぎつけたのですが、
タッチパネルが反応してくれません。

おそらく /dev/input/event* とタッチパネル(CON8のI2C3+GPIO3_23)が
紐づいていないためだと考えております。

root@armalo01:~# ll /dev/input/*
crw-rw---- 1 root input 13, 64 Aug 31 09:48 /dev/input/event0
crw-rw---- 1 root input 13, 65 Aug 31 09:48 /dev/input/event1
crw-rw---- 1 root input 13, 63 Aug 31 09:48 /dev/input/mice
 
/dev/input/by-path:
total 0
lrwxrwxrwx 1 root root 9 Aug 31 09:48 platform-30370000.snvs:snvs-powerkey-event -> ../event0
lrwxrwxrwx 1 root root 9 Aug 31 09:48 platform-gpio-keys-event -> ../event1

拡張ボードのLCDを使用する場合はブートイメージを書き換えるようですが
この辺りが関係するのでしょうか?
現在は標準のイメージを使っております。
https://armadillo.atmark-techno.com/files/downloads/armadillo-x1/image/…
拡張ボード用はソースがないので比較もできず手掛かりがなく途方にくれています。

ちなみにマニュアルの269ページの記載(添付JPEG)が、話が結びつかず若干混乱しております。
単なる誤記でしょうか?

また、使用しているdtsファイルを添付します。
(実際はdtsiファイルで、armadillo_x1.dtsでインクルードする形ですが、
dtsiがアップできないのでdtsにしています)

コメント

at_akihito.irie

2021年8月31日 15時16分

入江です。

> どうにかサンプルのQTプログラムが表示されるところまでこぎつけたのですが、
> タッチパネルが反応してくれません。

確認のため、起動後のArmadillo-X1上で以下のコマンドを実行し、その出力を
教えていただけますでしょうか。

[armadillo]# zcat /proc/config.gz | grep I2C_HID

> 拡張ボードのLCDを使用する場合はブートイメージを書き換えるようですが
> この辺りが関係するのでしょうか?

いいえ、関係ありません。
拡張ボード用のu-bootは通常のArmadillo-X1用u-bootと比べて、拡張ボード上
のEthernet PHYの初期化をu-boot上で行うためのコンフィグレーションが追加
されている以外に違いはありません。

> ちなみにマニュアルの269ページの記載(添付JPEG)が、話が結びつかず若干混乱しております。
> 単なる誤記でしょうか?

申し訳ございません。こちらはおそらく誤記です。
正確には改めて社内で確認してからマニュアル修正を行いますが、

Armadillo-X1 評価用拡張ボードに対応したソフトウェアで起動すると、
Armadillo-X1 本体のユーザースイッチ SW1 のデバイスファイルは/dev/
input/event1 から/dev/input/event2 に変更されます。

が正しいと思います。

お手数おかけしますがよろしくお願いいたします。

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

# CONFIG_I2C_HID is not set
でしたので、menuconfigを実行し

[armadillo]# zcat /proc/config.gz | grep I2C_HID
CONFIG_I2C_HID=y

の状態にしましたが結果は変わらずでした。

fingerpaint 実行時、以下のメッセージが表示されます。
evdevtouch: /dev/input/event1: Invalid ABS limits, behavior unspecified

最初の質問の
> おそらく /dev/input/event* とタッチパネル(CON8のI2C3+GPIO3_23)が
> 紐づいていないためだと考えております。

root@armalo01:~# ll /dev/input/*
crw-rw---- 1 root input 13, 64 Aug 31 09:48 /dev/input/event0
crw-rw---- 1 root input 13, 65 Aug 31 09:48 /dev/input/event1
crw-rw---- 1 root input 13, 63 Aug 31 09:48 /dev/input/mice
 
/dev/input/by-path:
total 0
lrwxrwxrwx 1 root root 9 Aug 31 09:48 platform-30370000.snvs:snvs-powerkey-event -> ../event0
lrwxrwxrwx 1 root root 9 Aug 31 09:48 platform-gpio-keys-event -> ../event1

についてはいかがでしょうか?
マニュアルの誤記は番号だけの問題のようですので、
・event2 が存在しない
・event1 もi2cに紐づいていないように見える
ことから、おそらく何か手順を飛ばしてしまっているせいだと考えております。

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

at_akihito.irie

2021年9月2日 14時21分

入江です。

>

> root@armalo01:~# ll /dev/input/*
> crw-rw---- 1 root input 13, 64 Aug 31 09:48 /dev/input/event0
> crw-rw---- 1 root input 13, 65 Aug 31 09:48 /dev/input/event1
> crw-rw---- 1 root input 13, 63 Aug 31 09:48 /dev/input/mice
>  
> /dev/input/by-path:
> total 0
> lrwxrwxrwx 1 root root 9 Aug 31 09:48 platform-30370000.snvs:snvs-powerkey-event -> ../event0
> lrwxrwxrwx 1 root root 9 Aug 31 09:48 platform-gpio-keys-event -> ../event1
> 

> についてはいかがでしょうか?

I2C3はCON7で既に使用されており、CON8と同時にI2C3にアサインして使用した
ことが原因で、I2Cデバイスであるタッチパネルが正しく認識されず、結果
/dev/input/以下にeventファイルが生成されないことに繋がっているものかと
思われます。

解決策としまして、タッチパネル用のI2Cをi2c-gpioにすることが挙げられます。

Armadillo-640では当該のLCD使用時のDTSではi2c-gpioを用いていますので、
そちらが参考になるかと思います。
https://github.com/atmark-techno/linux-4.14-at/blob/master/arch/arm/boo…

i2c-gpioに使用するピンのmuxはGPIOにしてください。

MX7D_PAD_LCD_DATA20__GPIO3_IO25  0x4000007f	/* SCL */
MX7D_PAD_LCD_DATA21__GPIO3_IO26  0x4000007f	/* SDA */

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

入江様、ありがとうございます。
> 解決策としまして、タッチパネル用のI2Cをi2c-gpioにすることが挙げられます。

最初はi2c-gpioで試しておりまして結果変わらずでした。
ただ、その際はDTSだけ編集したのですが、以下
https://armadillo.atmark-techno.com/blog/615/1312
https://armadillo.atmark-techno.com/blog/615/1530
によるとソース変更も必要そうでしたのでX1でのやり方がわからず
I2C3を使う方法を試していた次第です。

X1で i2c-gpio を使用する場合の変更箇所を教えていただくことは可能でしょうか?
また、dts の書き方が悪かった可能性もあるので添付しますので確認いただけないでしょうか。

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

ファイル ファイルの説明
armadillo_x1-lcd70ext-l00_i2c_gpio.dts

at_akihito.irie

2021年9月3日 11時52分

入江です。

> X1で i2c-gpio を使用する場合の変更箇所を教えていただくことは可能でしょうか?
> また、dts の書き方が悪かった可能性もあるので添付しますので確認いただけないでしょうか。

全体を見て原因の調査を行いますので、
- I2C_HIDが有効
- dtbでi2c-gpioに設定している
ときの、以下の2点を送っていただけますでしょうか。

1. dmesgの出力
2. Armadillo-X1に書き込み、使用しているarmadillo_x1.dtb

[armadillo]# mount /dev/mmcblk2p1 /mnt
[armadillo]# ls /mnt/armadillo_x1.dtb
/mnt/armadillo_x1.dtb <- これを送ってください

お手数おかけしますが、よろしくお願いいたします。

入江様
> 1. dmesgの出力
> 2. Armadillo-X1に書き込み、使用しているarmadillo_x1.dtb
2点添付いたします。
お手数おかけしますが、よろしくお願いいたします。

ファイル ファイルの説明
dmesg_dtb.zip

at_akihito.irie

2021年9月8日 17時27分

入江です。

お返事が遅くなってしまい申し訳ございません。

今一度確認ですが、ご使用のLCDは以下のもので間違いありませんでしょうか。
https://armadillo.atmark-techno.com/option-products/OP-LCD70EXT-L00

また、I2Cとしている2ピン(LCD_DATA20、LCD_DATA21)はそれぞれ、LCDの何番
ピンに接続されているかご確認いただけますでしょうか。

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

入江様
確認ありがとうございます。

> 今一度確認ですが、ご使用のLCDは以下のもので間違いありませんでしょうか。
> https://armadillo.atmark-techno.com/option-products/OP-LCD70EXT-L00

はい。間違いありません。

> また、I2Cとしている2ピン(LCD_DATA20、LCD_DATA21)はそれぞれ、LCDの何番
> ピンに接続されているかご確認いただけますでしょうか。

再度確認しまして

[X1]LCD_DATA20(CON8_97) <-> [LCD]41番ピン
[X1]LCD_DATA21(CON8_98) <-> [LCD]40番ピン

でした。導通も問題ありませんでした。

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

at_akihito.irie

2021年9月10日 16時44分

入江です。

カーネルコンフィギュレーションにて、以下も有効にしてみていただけますで
しょうか。

Device Drivers --->
  HID support --->
    Special HID drivers --->
      <*> HID MUltitouch panels <- これを有効化

また、起動時にU-bootにて以下のコマンドを実行して起動し、その際のブート
ログをいただけますでしょうか。

=> setenv optargs hid.debug=1
=> boot

お手数おかけしますがよろしくお願いいたします。

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

      <*> HID MUltitouch panels <- これを有効化

こちらを試したところ、サンプルが動作してくれました。
(指でなぞったところに黄色のラインが引かれる)
ただ、動作が不安定で以下のメッセージが表示されてサンプルが死んでしまうことがあります。
(表示されるけど動き続ける、表示されずに固まるといった場合もあり)

i2c_hid 4-0051: i2c_hid_get_input: incomplete report (20/4116)
i2c_hid 4-0051: i2c_hid_get_input: incomplete report (20/8212)

> また、起動時にU-bootにて以下のコマンドを実行して起動し、その際のブート
> ログをいただけますでしょうか。

添付いたしました。
ご確認いただけますでしょうか。

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

ファイル ファイルの説明
hid.debug=1起動ログ.log

at_akihito.irie

2021年9月13日 15時15分

入江です。

> ただ、動作が不安定で以下のメッセージが表示されてサンプルが死んでしまうことがあります。

波形が正しく出ていない可能性があります。
i2c-gpioのクロックを20kHz程度まで遅くした状態で動作するか確認していた
だけますでしょうか。

dts上のdelay-usの値によって動作クロックが決まります。

現状delay-us=2なので、250kHzで動作しているはずです。
delay-us=25にすれば、20kHzの動作になります。

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

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

> delay-us=25にすれば、20kHzの動作になります。

試してみたところ、エラーメッセージは変わらずですが
死ぬことはなくなったように思います。
ただ、負荷がだいぶ重いみたいで、今まで走っていた処理が
頻繁にタイムアウトになってしまいます。
Qtでの開発は費用も結構掛かるようですし、
半分以上あきらめの境地です。

長々とサポートいただきありがとうございました。
表示については別の方法を考えてみます。