79592660

Date: 2025-04-25 13:56:22
Score: 1
Natty:
Report link

After time spent on this, I want to share my findings. Maybe those will be useful.

Enabling w1-gpio on STM32MP1 board

I was able to run w1-gpio kernel module on STM32MP135F-DK board, by using this simple patch to device tree:

######################################################################### 
# Enable w1-gpio kernel module on PF10 GPIO
#########################################################################
diff --git a/stm32mp135f-dk.dts.original b/stm32mp135f-dk.dts
index 0ff8a08..d1ee9ba 100644
--- a/arch/arm/boot/dts/st/stm32mp135f-dk.dts
+++ b/arch/arm/boot/dts/st/stm32mp135f-dk.dts
@@ -152,6 +152,12 @@
        compatible = "mmc-pwrseq-simple";
        reset-gpios = <&mcp23017 11 GPIO_ACTIVE_LOW>;
    };
+   
+   onewire: onewire@0 {
+           compatible = "w1-gpio";
+       gpios = <&gpiof 10 GPIO_OPEN_DRAIN>; // PF10
+       status = "okay";
+       };
 };
 
 &adc_1 {

When using Yocto and meta-st-stm32 layer, to apply the patch, simply add it to SRC_URI in linux-stm32mp_%.bbappend file.

Enabling certain kernel modules is also required, I have done that by creating w1.config file:

CONFIG_W1=m                         # 1-Wire core
CONFIG_W1_MASTER_GPIO=m            # GPIO-based master
CONFIG_W1_SLAVE_THERM=m            # Support for DS18B20
CONFIG_W1_SLAVE_DS28E17=m

In linux-stm32mp_%.bbappend this w1.config should be add as: KERNEL_CONFIG_FRAGMENTS:append = "${WORKDIR}/w1.config"

This should be enough to run w1-gpio, and read temp. from DS18B20 sensor.

Later on I was able to modify w1-gpio module to support my custom slaves. I add those slaves manually (via sysfs), all under non-standard family code. When w1 core has some slave with family code that is not supported with any dedicated library, then one can use sysfs file called rw to read/write to that slave. It works with my slaves, although there are lot of problems with stability. I use a C program to read/write to that rw file, but nearly half of read operations fail, because master looses timing for some microseconds. I think it's due to some CPU interrupts coming in. I am thinking about using kernel connector instead of rw sysfs file, like described here

Reasons:
  • RegEx Blacklisted phrase (1): I want
  • Long answer (-1):
  • Has code block (-0.5):
  • Self-answer (0.5):
  • Low reputation (1):
Posted by: Mateusz Michala