Armadilloフォーラム

1-Wireの使用方法に関して

iwaya_yoke

2024年11月19日 15時04分

A6Eで1-Wireを用いてDS18B20により温度取得をしたいと思っていて、以下を参考にしています
https://manual.atmark-techno.com/armadillo-guide-std/armadillo-guide-st…

以下、教えていただけないでしょうか?
・上記は640の例ですが、A6Eでも使用可能でしょうか?
・1-Wireを使用するGPIOのピン制限はありますでしょうか?(DS18B20は4.7kohmでプルアップするようなので、プルダウンしていないピンであれば、どれでもよいのかなと思っています)
・設定に関して、at-dtwebでの設定方法しかわかっておらず、上述参考の「 arch/arm/boot/dts/armadillo-640-w1.dtsi」相当のA6Eファイルの作成方法や「arch/arm/boot/dts/armadillo-640.dts」相当のA6Eファイルがどれなのかわかりませんでした。

==========
製品型番:A6E
Debian/ABOSバージョン:3.20.2-at.2
カーネルバージョン:Linux armadillo 5.10.224-0-at
==========

コメント

at_shota.shimoyama

2024年11月20日 20時18分

下山です。

お待たせいたしました。

> ・上記は640の例ですが、A6Eでも使用可能でしょうか?
DQ端子から電源供給する接続方法については検証しておりませんが、
VDD端子に常時3.3Vを供給する接続方法については動作を確認できたため使用可能です。

> ・1-Wireを使用するGPIOのピン制限はありますでしょうか?(DS18B20は4.7kohmでプルアップするようなので、プルダウンしていないピンであれば、どれでもよいのかなと思っています)
制限はありません。ご指摘のとおり、プルダウンされていないピンの方が望ましいと思います。

> ・設定に関して、at-dtwebでの設定方法しかわかっておらず、上述参考の「 arch/arm/boot/dts/armadillo-640-w1.dtsi」相当のA6Eファイルの作成方法や「arch/arm/boot/dts/armadillo-640.dts」相当のA6Eファイルがどれなのかわかりませんでした。

A6Eの拡張インターフェース部分のデバイスツリーを変更する際は、DTS overlayを使用します。
また、1-Wireを利用するにはA640の手順同様、カーネルコンフィギュレーションの変更が必要です。

ですので、大まかに以下の手順を踏むことになります。
1.カーネルコンフィギュレーションを変更してLinuxカーネルをビルドし、A6Eに反映させる
2.1-WireのDTS overlayファイル(.dtbo)を作成・ビルドし、A6Eに反映させる

■ 1.カーネルコンフィギュレーションを変更してLinuxカーネルをビルドし、A6Eに反映させる
以下のA6Eマニュアルの内容に沿って手順を進めてください。
https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

at-dtwebでの設定方法についてはご存知とのことですので、
Linuxカーネルのソースについては既に解凍された状態でどこかのディレクトリに配置されていると思います。
そのディレクトリに入ってカーネルコンフィギュレーションの設定画面を表示してください。

カーネルコンフィギュレーションの設定内容についてはA640と同じですので、
https://manual.atmark-techno.com/armadillo-guide-std/armadillo-guide-st…
の図7.10のとおりに設定してください。

設定しましたら、その後の手順も行ってください。
・4.ビルド (初回のビルドの場合は完了までに1時間ほど要します)
・5.インストール (「SWU イメージのインストール」 の方が簡単かと思います)

ここまで問題なく完了できた場合、A6Eの方で「/sys/bus/w1」と「/sys/class/hwmon」のディレクトリが新たに生成されているはずですので、
ご確認ください。

■ 2.1-WireのDTS overlayファイル(.dtbo)を作成・ビルドし、A6Eに反映させる
以下のA6Eマニュアルの内容に沿って手順を進めてください。
https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

armadillo-600-customize.dts は次のように編集してください。
マニュアルではviを使用していますが、編集方法に指定はありませんのでVSCodeやテキストエディタなどご自身にとってやりやすい方法を採っていただいて構いません。(ファイルも添付しています)

// SPDX-License-Identifier: (GPL-2.0 OR MIT)
/*
 * Copyright (C) 2023 Atmark Techno, Inc. All Rights Reserved.
 */
 
/dts-v1/;
/plugin/;
 
#include <dt-bindings/clock/imx6ul-clock.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
 
#include "imx6ul-pinfunc.h"
#include "imx6ull-pinfunc.h"
#include "imx6ull-pinfunc-snvs.h"
 
// Replace this empty section by your configuration
 
&iomuxc {
    pinctrl_w1: w1grp {
        fsl,pins= <
            MX6UL_PAD_LCD_DATA06__GPIO3_IO11	0x40018808 // CON8_20
        >;
    };
};
 
&{/} {
	onewire0 {
		compatible = "w1-gpio";
		gpios = <&gpio3 11 GPIO_ACTIVE_HIGH>; // CON8_20
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_w1>;
        status="okay";
	};
};

この内容のうち、使用するピンの指定は
・MX6UL_PAD_LCD_DATA06__GPIO3_IO11 0x40018808 // CON8_20
・gpios = <&gpio3 11 GPIO_ACTIVE_HIGH>; // CON8_20
の2行で行っています。(この例では20番のピン)

ピンを変更される場合はマルチプレクス表
https://armadillo.atmark-techno.com/resources/documents/armadillo-iot-a…
を参考に、
・MX6UL_PAD_LCD_DATA[X]__GPIO[Y]_IO[Z] 0x40018808 // CON8_20
・gpios = <&gpio[Y] [Z] GPIO_ACTIVE_HIGH>; // CON8_20
と変更してください。

なお、「0x40018808」はi.MX 6ULLのレジスタIOMUXC_SW_PAD_CTL_PAD_LCD_DATA06に書き込む値ですが、
使用するピンを変更しても基本的にこの値を変える必要はありません。

armadillo-600-customize.dtsを編集しましたら、
「7.Armadillo を再起動し、動作確認をします。」まで行ってください。

ここまで問題なく完了できた場合、DS18B20の接続に関わらず「/sys/bus/w1/devices」に「w1_bus_master1」というディレクトリが新たに生成されているはずですのでご確認ください。

■DS18B20の接続
DS18B20の3端子をGND・20番ピン・3.3Vに接続して、20番ピン・3.3V間にプルアップ抵抗を接続すると、
A640のマニュアル同様、(接続してから最大10秒以内に)「/sys/bus/w1/devices」にDS18B20の個体に対応する
「28-000002217544」のようなディレクトリが新たに生成されるはずです。

A640の場合と1つ異なる点として、
DS18B20の接続に関わらず「/sys/class/hwmon/」に「hwmon0」というディレクトリが確認できるかと思いますが、
これはDS18B20に対応したHardware Monitoringデバイスではなく、i.MX 6ULLの温度センサに対応したデバイスです。
DS18B20に対応したデバイスのディレクトリは「hwmon1」になりますので、
図7.12 コマンド実行例(Hardware Monitoring)の「hwmon0」は「hwmon1」に置き換えてください。

よろしくお願いします。

ファイル ファイルの説明
armadillo-600-customize.dts

下山さん

詳細なご説明大変ありがとうございます。
教えていただいた流れに従って試してみます。

1点確認ですが、コンテナで使用する場合、app.confでadd_devicesの設定は不要で、
add_volumes /sys:/sysをしておけばよいという理解で正しいでしょうか?

at_shota.shimoyama

2024年11月21日 14時42分

下山です。

> 1点確認ですが、コンテナで使用する場合、app.confでadd_devicesの設定は不要で、
> add_volumes /sys:/sysをしておけばよいという理解で正しいでしょうか?
はい、そのとおりです。

昨日の回答について2点訂正があります。
・hwmon0 は i.MX 6ULLの温度センサ、hwmon1 はDS18B20に対応したデバイスであると申し上げましたが、
 逆になることもあるようです。
 ですので、初めに/sys/class/hwmon/hwmon[N]/nameの内容を確認してください。
 imx_thermal_zoneであれば i.MX 6ULLの温度センサ、w1_slave_tempであればDS18B20に対応したデバイスになります。

・現時点でのA6Eマニュアルの中の「5.配置した dtbo を永続化します。」についてですが、

[armadillo ~]# persist_file /boot/armadillo-600-customize.dtbo

 ではなく、

[armadillo ~]# persist_file -p /boot/armadillo-600-customize.dtbo

 のように-pオプションを付けてください。
 前者のコマンドですと、ABOS をアップデートした際にarmadillo-600-customize.dtboが消えてしまいます。
 (マニュアルの不備です。近日中に修正します。)

よろしくお願いします。