Multiple one-wire busses - need help with Device Tree - Raspberry Pi Forums


summary - examples below run on raspberry pi b ver 2:

standard kernel:
one-wire temp sensors work expected stock 3.18.10-v7+ kernel on single bus provided long add dtoverlay line in /boot/config.txt. if dtoverlay line not there, bus not detected, if on default pin.

custom kernel:
built custom kernel using instructions setting cross-compile environment @ https://learn.adafruit.com/raspberry-pi ... c/overview , manually patching bcm2709.c described in http://holyhead.de/raspberrypi/bcm2708- ... .12.21.txt.

have studied device tree stuff find on-line several hours , took swag @ adding w1_device1, w1_device2, , w1_device3 devices /kernel_repos/raspberrypi/linux/v2/arch/arm/boot/dts/w1-gpio-overlay.dts. overlay file gets compiled , distributed kernel , throws no errors on loading, not work correctly. w1-gpio-overlay.dts needs help.

please see attempt @ w1-gpio-overlay.dts below.

observations:
1. custom kernel runs 4 one-wire busses correctly on default pins without overlay lines enabled in /boot/config.txt
2. if overlay lines added config.txt, error shows in dmesg.
3. if of busses not have sensors on them, continue throw errors in dmesg, no lines in config.txt.

desired outcome:
craft w1-gpio-overlay.dts acts follows:
1. supports kernel 4 available busses
2. busses remain off , pins available other uses unless bus enabled in config.txt
3. default pins can changed each bus independently in config.txt
4. disabled , unpopulated busses throw no errors in dmesg.

can offer!

details:

stock kernel:

root@mypi11:~# uname -a
linux mypi11 3.18.10-v7+ #775 smp preempt thu apr 2 19:01:29 bst 2015 armv7l gnu/linux

without overlay on /boot/config.txt, bus , sensor not seen. no mention of w1 in dmesg.

/boot/config.txt - dtoverlay commented out
# use custom gpio pin temp sensors
#dtoverlay=w1-gpio,gpiopin=4

device not exist
root@mypi11:~# ls -l /sys/bus/w1/devices/
total 0

nothing in dmesg aboyt w1
root@mypi11:~# dmesg | grep ' w1'
root@mypi11:~#

overlay enabled, works single one-wire bus in kernel. whether one-wire temp sensor on default gpio pin 4, or pin. defining different pin works.

/boot/config.txt - dtoverlay commented active
# use default/custom gpio pin temp sensors
dtoverlay=w1-gpio,gpiopin=4

device exists
root@mypi11:~# ls -l /sys/bus/w1/devices/
total 0
lrwxrwxrwx 1 root root 0 apr 19 12:57 28-000005a9f201 -> ../../../devices/w1_bus_master1/28-000005a9f201/
lrwxrwxrwx 1 root root 0 apr 19 12:57 w1_bus_master1 -> ../../../devices/w1_bus_master1/

device works properly
root@mypi11:~# cat /sys/bus/w1/devices/28-000005a9f201/w1_slave
c9 01 4b 46 7f ff 07 10 64 : crc=64 yes
c9 01 4b 46 7f ff 07 10 64 t=28562

dmesg has init line , no further lines system runs
root@mypi11:~# dmesg | grep ' w1'
[ 4.268511] w1-gpio onewire@0: gpio pin 4, external pullup pin -1, parasitic power 0
[ 4.286432] w1_add_master_device: set_pullup requires write_byte or touch_bit, disabling

---

custom kernel 4 one-wire buses defined, there @ least 1 sensor connected each bus, 1 sensor on buses 1 , 3, , 2 sensors on buses 2 , 4.

root@mypi11:~# uname -a
linux mypi11 3.18.11-v7+ #2 smp preempt mon apr 13 21:57:59 utc 2015 armv7l gnu/linux

attempt @ patching .dts file:

code: select all

// definitions w1-gpio module (without external pullup) /dts-v1/; /plugin/;  / {         compatible = "brcm,bcm2708";          fragment@0 {                 target-path = "/";                 __overlay__ {                          w1: onewire@0 {                                 compatible = "w1-gpio";                                 pinctrl-names = "default";                                 pinctrl-0 = <&w1_pins>;                                 gpios = <&gpio 4 0>, <&gpio 22 0>, <&gpio 23 0>, <&gpio 24 0>;                                 rpi,parasitic-power = <0>;                                 status = "okay";                         };                 };         };          fragment@1 {                 target = <&gpio>;                 __overlay__ {                         w1_pins: w1_pins {                                 brcm,pins = <4 22 23 24>;                                 brcm,function = <0>; // in (initially)                                 brcm,pull = <0>; // off                         };                 };         };          __overrides__ {                 gpiopin =       <&w1>,"gpios:4",                                 <&w1_pins>,"brcm,pins:0";                 pullup =        <&w1>,"rpi,parasitic-power:0";                 gpiopin1 =      <&w1>,"gpios:22",                                 <&w1_pins>,"brcm,pins:0";                 pullup1 =       <&w1>,"rpi,parasitic-power:0";                 gpiopin2 =      <&w1>,"gpios:23",                                 <&w1_pins>,"brcm,pins:0";                 pullup2 =       <&w1>,"rpi,parasitic-power:0";                 gpiopin3 =      <&w1>,"gpios:24",                                 <&w1_pins>,"brcm,pins:0";                 pullup3 =       <&w1>,"rpi,parasitic-power:0";         }; }; 
without overlays enabled in /boot/config.txt, 4 busses seen , work properly. dmesg w1 lines clean , there no additional w1 lines added dmesg system runs.

# use default/custom gpio pin temp sensors - dtoverlays commented out
#dtoverlay=w1-gpio,gpiopin=4
#dtoverlay=w1-gpio1,gpiopin=22
#dtoverlay=w1-gpio2,gpiopin=23
#dtoverlay=w1-gpio3,gpiopin=24

devices exist
root@mypi11:~# ls -l /sys/bus/w1/devices/
total 0
lrwxrwxrwx 1 root root 0 apr 19 13:15 28-000005a9f201 -> ../../../devices/w1_bus_master1/28-000005a9f201/
lrwxrwxrwx 1 root root 0 apr 19 13:15 28-000005aa1545 -> ../../../devices/w1_bus_master2/28-000005aa1545/
lrwxrwxrwx 1 root root 0 apr 19 13:15 28-000005aa38d7 -> ../../../devices/w1_bus_master3/28-000005aa38d7/
lrwxrwxrwx 1 root root 0 apr 19 13:15 28-000005c7b2ba -> ../../../devices/w1_bus_master2/28-000005c7b2ba/
lrwxrwxrwx 1 root root 0 apr 19 13:15 28-000005c7e3b3 -> ../../../devices/w1_bus_master4/28-000005c7e3b3/
lrwxrwxrwx 1 root root 0 apr 19 13:15 28-000005c7f6ba -> ../../../devices/w1_bus_master4/28-000005c7f6ba/
lrwxrwxrwx 1 root root 0 apr 19 13:15 w1_bus_master1 -> ../../../devices/w1_bus_master1/
lrwxrwxrwx 1 root root 0 apr 19 13:15 w1_bus_master2 -> ../../../devices/w1_bus_master2/
lrwxrwxrwx 1 root root 0 apr 19 13:15 w1_bus_master3 -> ../../../devices/w1_bus_master3/
lrwxrwxrwx 1 root root 0 apr 19 13:15 w1_bus_master4 -> ../../../devices/w1_bus_master4/

, work correctly
root@mypi11:~# cat /sys/bus/w1/devices/28-000005a9f201/w1_slave
ce 01 4b 46 7f ff 02 10 4b : crc=4b yes
ce 01 4b 46 7f ff 02 10 4b t=28875
root@mypi11:~# cat /sys/bus/w1/devices/28-000005c7f6ba/w1_slave
ca 01 4b 46 7f ff 06 10 65 : crc=65 yes
ca 01 4b 46 7f ff 06 10 65 t=28625

dmesg has init line , logs no further errors
root@mypi11:~# dmesg | grep ' w1'
[ 7.245871] w1-gpio w1-gpio.0: gpio pin 4, external pullup pin -1, parasitic power 0
[ 7.260419] w1_add_master_device: set_pullup requires write_byte or touch_bit, disabling
[ 7.273263] w1-gpio w1-gpio.1: gpio pin 22, external pullup pin -1, parasitic power 0
[ 7.285997] w1_add_master_device: set_pullup requires write_byte or touch_bit, disabling
[ 7.298624] w1-gpio w1-gpio.2: gpio pin 23, external pullup pin -1, parasitic power 0
[ 7.310415] w1_add_master_device: set_pullup requires write_byte or touch_bit, disabling
[ 7.333259] w1-gpio w1-gpio.3: gpio pin 24, external pullup pin -1, parasitic power 0
[ 7.345870] w1_add_master_device: set_pullup requires write_byte or touch_bit, disabling

(no additional w1 lines system continues run.)

----

there still sensors on each bus. when dtoverlay lines activated in /boot/config/txt, still works, channel 0 throws error @ 4.421050 in example below.

# use default/custom gpio pin temp sensors - dtoverlays active
dtoverlay=w1-gpio,gpiopin=4
dtoverlay=w1-gpio1,gpiopin=22
dtoverlay=w1-gpio2,gpiopin=23
dtoverlay=w1-gpio3,gpiopin=24

devices there
root@mypi11:~# ls -l /sys/bus/w1/devices/
total 0
lrwxrwxrwx 1 root root 0 apr 19 13:08 28-000005a9f201 -> ../../../devices/w1_bus_master1/28-000005a9f201/
lrwxrwxrwx 1 root root 0 apr 19 13:08 28-000005aa1545 -> ../../../devices/w1_bus_master2/28-000005aa1545/
lrwxrwxrwx 1 root root 0 apr 19 13:08 28-000005aa38d7 -> ../../../devices/w1_bus_master3/28-000005aa38d7/
lrwxrwxrwx 1 root root 0 apr 19 13:08 28-000005c7b2ba -> ../../../devices/w1_bus_master2/28-000005c7b2ba/
lrwxrwxrwx 1 root root 0 apr 19 13:08 28-000005c7e3b3 -> ../../../devices/w1_bus_master4/28-000005c7e3b3/
lrwxrwxrwx 1 root root 0 apr 19 13:08 28-000005c7f6ba -> ../../../devices/w1_bus_master4/28-000005c7f6ba/
lrwxrwxrwx 1 root root 0 apr 19 13:08 w1_bus_master1 -> ../../../devices/w1_bus_master1/
lrwxrwxrwx 1 root root 0 apr 19 13:08 w1_bus_master2 -> ../../../devices/w1_bus_master2/
lrwxrwxrwx 1 root root 0 apr 19 13:08 w1_bus_master3 -> ../../../devices/w1_bus_master3/
lrwxrwxrwx 1 root root 0 apr 19 13:08 w1_bus_master4 -> ../../../devices/w1_bus_master4/

, work
root@mypi11:~# cat /sys/bus/w1/devices/28-000005a9f201/w1_slave
cc 01 4b 46 7f ff 04 10 67 : crc=67 yes
cc 01 4b 46 7f ff 04 10 67 t=28750

root@mypi11:~# cat /sys/bus/w1/devices/28-000005c7f6ba/w1_slave
c8 01 4b 46 7f ff 08 10 3f : crc=3f yes
c8 01 4b 46 7f ff 08 10 3f t=28500

dmesg has error w1-gpio.0, no additional errors logged
root@mypi11:~# dmesg | grep ' w1'
[ 4.303561] w1-gpio onewire@0: gpio pin 4, external pullup pin -1, parasitic power 0
[ 4.326029] w1_add_master_device: set_pullup requires write_byte or touch_bit, disabling
[ 4.391493] w1-gpio w1-gpio.0: gpio pin 4, external pullup pin -1, parasitic power 0
[ 4.421050] w1-gpio w1-gpio.0: gpio_request (pin) failed
[ 4.432096] w1-gpio: probe of w1-gpio.0 failed error -16
[ 4.443253] w1-gpio w1-gpio.1: gpio pin 22, external pullup pin -1, parasitic power 0
[ 4.457835] w1_add_master_device: set_pullup requires write_byte or touch_bit, disabling
[ 4.472046] w1-gpio w1-gpio.2: gpio pin 23, external pullup pin -1, parasitic power 0
[ 4.485774] w1_add_master_device: set_pullup requires write_byte or touch_bit, disabling
[ 4.538178] w1-gpio w1-gpio.3: gpio pin 24, external pullup pin -1, parasitic power 0
[ 4.561102] w1_add_master_device: set_pullup requires write_byte or touch_bit, disabling

(no additional w1 lines system continues run.)

---

disconnecting one-wire busses , leaving dtoverlays commented out.

one-wire busses still initialized , dmesg continues log errors every minute or so. similar errors logged each minute one-wire bus has no sensor on it, when connected , others not.

root@mypi11:~# dmesg | grep ' w1'
[ 7.324293] w1-gpio w1-gpio.0: gpio pin 4, external pullup pin -1, parasitic power 0
[ 7.336105] w1_add_master_device: set_pullup requires write_byte or touch_bit, disabling
[ 7.348663] w1-gpio w1-gpio.1: gpio pin 22, external pullup pin -1, parasitic power 0
[ 7.360372] w1_add_master_device: set_pullup requires write_byte or touch_bit, disabling
[ 7.372658] w1-gpio w1-gpio.2: gpio pin 23, external pullup pin -1, parasitic power 0
[ 7.384193] w1_add_master_device: set_pullup requires write_byte or touch_bit, disabling
[ 7.396361] w1-gpio w1-gpio.3: gpio pin 24, external pullup pin -1, parasitic power 0
[ 7.407822] w1_add_master_device: set_pullup requires write_byte or touch_bit, disabling
[ 9.302545] w1_master_driver w1_bus_master2: w1_search: max_slave_count 64 reached, continue next search.
[ 9.322572] w1_master_driver w1_bus_master3: w1_search: max_slave_count 64 reached, continue next search.
[ 9.352490] w1_master_driver w1_bus_master4: w1_search: max_slave_count 64 reached, continue next search.

[ 56.708409] w1_master_driver w1_bus_master2: family 0 00.800000000000.8c not registered.
[ 56.718352] w1_master_driver w1_bus_master3: family 0 00.800000000000.8c not registered.
[ 56.718498] modules linked in: i2c_bcm2708 i2c_dev w1_therm w1_gpio wire cn snd_bcm2835 snd_pcm snd_seq snd_timer snd_seq_device snd uio_pdrv_genirq uio evdev
[ 56.718566] cpu: 0 pid: 672 comm: w1_bus_master3 not tainted 3.18.11-v7+ #2
[ 56.719098] w1_slave_driver 00-800000000000: device registration [00-800000000000] failed. err=-17
[ 56.719112] w1_master_driver w1_bus_master3: w1_attach_slave_device: attaching 00-800000000000 failed.
[ 56.748280] w1_master_driver w1_bus_master4: family 0 00.800000000000.8c not registered.
[ 56.748425] modules linked in: i2c_bcm2708 i2c_dev w1_therm w1_gpio wire cn snd_bcm2835 snd_pcm snd_seq snd_timer snd_seq_device snd uio_pdrv_genirq uio evdev
[ 56.748491] cpu: 3 pid: 673 comm: w1_bus_master4 tainted: g w 3.18.11-v7+ #2
[ 56.748979] w1_slave_driver 00-800000000000: device registration [00-800000000000] failed. err=-17
[ 56.748991] w1_master_driver w1_bus_master4: w1_attach_slave_device: attaching 00-800000000000 failed.

[ 116.023292] w1_master_driver w1_bus_master2: family 0 00.400000000000.46 not registered.
[ 116.038491] w1_master_driver w1_bus_master3: family 0 00.400000000000.46 not registered.
[ 116.038637] modules linked in: i2c_bcm2708 i2c_dev w1_therm w1_gpio wire cn snd_bcm2835 snd_pcm snd_seq snd_timer snd_seq_device snd uio_pdrv_genirq uio evdev
[ 116.038704] cpu: 0 pid: 672 comm: w1_bus_master3 tainted: g w 3.18.11-v7+ #2
[ 116.039256] w1_slave_driver 00-400000000000: device registration [00-400000000000] failed. err=-17
[ 116.039270] w1_master_driver w1_bus_master3: w1_attach_slave_device: attaching 00-400000000000 failed.
[ 116.067949] w1_master_driver w1_bus_master4: family 0 00.400000000000.46 not registered.
[ 116.068092] modules linked in: i2c_bcm2708 i2c_dev w1_therm w1_gpio wire cn snd_bcm2835 snd_pcm snd_seq snd_timer snd_seq_device snd uio_pdrv_genirq uio evdev
[ 116.068159] cpu: 3 pid: 673 comm: w1_bus_master4 tainted: g w 3.18.11-v7+ #2
[ 116.068647] w1_slave_driver 00-400000000000: device registration [00-400000000000] failed. err=-17
[ 116.068660] w1_master_driver w1_bus_master4: w1_attach_slave_device: attaching 00-400000000000 failed.

[ 163.388501] w1_master_driver w1_bus_master2: family 0 00.c00000000000.ca not registered.
[ 163.398561] w1_master_driver w1_bus_master3: family 0 00.c00000000000.ca not registered.
[ 163.398707] modules linked in: i2c_bcm2708 i2c_dev w1_therm w1_gpio wire cn snd_bcm2835 snd_pcm snd_seq snd_timer snd_seq_device snd uio_pdrv_genirq uio evdev
[ 163.398776] cpu: 0 pid: 672 comm: w1_bus_master3 tainted: g w 3.18.11-v7+ #2
[ 163.399272] w1_slave_driver 00-c00000000000: device registration [00-c00000000000] failed. err=-17
[ 163.399285] w1_master_driver w1_bus_master3: w1_attach_slave_device: attaching 00-c00000000000 failed.
[ 163.430118] w1_master_driver w1_bus_master4: family 0 00.c00000000000.ca not registered.
[ 163.430260] modules linked in: i2c_bcm2708 i2c_dev w1_therm w1_gpio wire cn snd_bcm2835 snd_pcm snd_seq snd_timer snd_seq_device snd uio_pdrv_genirq uio evdev
[ 163.430327] cpu: 2 pid: 673 comm: w1_bus_master4 tainted: g w 3.18.11-v7+ #2
[ 163.430816] w1_slave_driver 00-c00000000000: device registration [00-c00000000000] failed. err=-17
[ 163.430828] w1_master_driver w1_bus_master4: w1_attach_slave_device: attaching 00-c00000000000 failed.

hi, having same problem. used older raspbian kernel patch in first link. using device trees unable more 1 1-wire bus working @ time. seems close though.

post year old, did find solution?


raspberrypi



Comments

Popular posts from this blog

VIDIOC_S_FMT error 16, Device or resource busy - Raspberry Pi Forums

using a laptop skeleton to build a pi laptop - Raspberry Pi Forums

Forum for Joomla? - Joomla! Forum - community, help and support