达拉斯 1 线协议与 Yocto/Raspberry Pi 3

Dallas 1 Wire Protocol with Yocto/Raspberry Pi 3

一段时间以来,我一直在尝试构建自定义 Yocto。目标是将 DS18b20 温度计连接到 GPIO 引脚并测试它是否正常工作。我已经构建了基本映像并添加了我需要的所有软件包。当我尝试使用我的自定义固件映像连接并检测温度计时,问题就出现了。它启动正常,网络工作,wifi 工作,还没有尝试过 BT,因为我不需要它,但 GPIO 引脚是那些没有被证明有帮助的引脚。

我正在使用 4.9.x Linux 内核。是否建议我降级到 4.4.x Linux 内核?在这一点上,我几乎 运行 没有想法,只需要一些帮助来解决这个问题。 f

这个设备是内核支持的,不需要自己去搜索或者写自己的w1driver.You需要保证CONFIG_W1_SLAVE_THERM,CONFIG_W1_MASTER_GPIO和CONFIG_W1 在您的内核配置中设置(请参阅 Yocto 内核文档以设置此 one-time 或以在多个构建中持续存在的方式)。

这通常会留下唯一剩余的空白,即哪个 GPIO 引脚用于 w1。在不知道您使用的是哪种设备的情况下,我只能提供一些指示。连接是通过平台数据定义的。这可以在设备树中定义,例如使用 c.h.i.p.

    onewire {
            compatible = "w1-gpio";
            gpios = <&pio 3 2 GPIO_ACTIVE_HIGH>; /* PD2 */
            pinctrl-names = "default";
            pinctrl-0 = <&chip_w1_pin>;
    };

header 上的 PD2 == LCD-D2。

也可以在内核的mach-*中定义,例如

static struct w1_gpio_platform_data w1_gpio_platform_data = {
        .pin                    = GPIO_ONE_WIRE,
        .is_open_drain          = 0,
};

static struct platform_device raumfeld_w1_gpio_device = {
        .name   = "w1-gpio",
        .dev    = {
                .platform_data = &w1_gpio_platform_data
        }
};

google 搜索 'w1-gpio map gpio' 应该 return 更多更好的细节。如果您可以使用设备树方法,那就是它们的用途。只知道内核代码不会通过 GPIO 引脚循环寻找连接的 w1 设备,必须设置此映射。

如果设备已连接并正常工作,您将能够通过 'cat /sys/bus/w1/devices/28*/w1_slave' 获取其值。如果您使用 python,您可以使用 https://github.com/timofurrer/w1thermsensor 来轻松读取温度。或者使用适合您首选语言的等效库。