16 авг. 2023 г.

Orange Pi Zero3 (Allwinner H618) и w1-gpio device tree overlay

ВАРНУНГ!

Нижеописанное относится к модели Orange Pi Zero с 1 гигабайтом памяти и установленным Debian Bookworm arm64. YMMV significantly.

 

На момент написания этого поста в комплекте поставки Debian не было оверлея, разрешающего работу модуля w1-gpio с GPIO.

Методом проб и ошибок оверлей написан самостоятельно:

/dts-v1/;
/plugin/;

/ {
      fragment@0 {
          target-path = "/";
          __overlay__ {
              w1: onewire {
                  compatible = "w1-gpio";
                  gpios = <&pio 0 79 0>;
                  status = "okay";
                  pins = "PC15";
              };
           };
       };
   };

 

Минус — не позволяет менять используемую ногу и значение pullup через /boot/orangepiEnv.txt. Работаю над этим.

 

Установка:

  1. Скопировать этот кусок кода в /boot/dtb/allwinner/overlay/sun50i-h616-w1-gpio.dts
  2. Установить dtc: apt-get install device-tree-compiler
  3. Скомпилировать оверлей, будучи в /boot/dtb/allwinner/overlay/: dtc -O dtb -o sun50i-h616-w1-gpio.dtbo sun50i-h616-w1-gpio.dts
  4. Занести полученный оверлей в /boot/orangepiEnv.txt вручную или с помощью orangepi-config: overlays=w1-gpio
  5. Перезагрузиться, проверить, что модули ядра wire, w1-gpio и w1-therm загрузились: dmesg |grep -i wire
  6. Навесить на шину термометр 18B20, убедиться, что он работает.
  7. Строки "param_w1_pin" и "param_w1_pin_int_pullup" хотя и пытаются обрабатываться скриптом на загрузке, но безуспешно из-за кривизны оверлея. Поэтому ногу и внутреннюю подтяжку нельзя изменить путём конфигурации через /boot/orangepiEnv.txt. Нога меняется путём изменения оверлея и его перекомпиляции, а подтяжка — вообще не знаю как.

 

Update: after asking Andre Przywara, a kernel maintainer of some ARM-based boards, I got a simplified but still working version of the overlay (sorry, Andre, your version didn't work without modifications on my board and kernel):

/dts-v1/;
/plugin/;
/ {
        fragment@0 {
          target-path = "/";
          __overlay__ {
            w1:onewire {
              compatible = "w1-gpio";
              gpios = <&pio 2 15 0>;
            };
          };
        };
};

Комментариев нет:

Отправить комментарий