一段时间以来,我一直在尝试一个定制的Yocto建筑。目标是将DS18b20温度计连接到GPIO引脚,并测试其是否确实工作。我已经建立了基本的形象,并添加了所有的软件包,我需要它。当我试图用我的自定义固件映像连接和检测温度计时,问题就出现了。它启动良好,网络工程,wifi工程,还没有尝试英国电信,因为我不需要它,但GPIO引脚是那些没有证明是有帮助的。
我使用的是4.9.x Linux内核。建议我降级到4.4.x Linux内核吗?我现在已经没有什么想法了,只是需要一些帮助来弄清楚。f型

最佳答案

此设备受内核支持,无需搜索或编写您自己的w1驱动程序。您需要确保在内核配置中设置了CONFIG_w1_SLAVE_THERM、CONFIG_w1_MASTER_GPIO和CONFIG_w1(请参阅Yocto内核文档,以一次性设置或以在多个构建中持续的方式设置)。
这通常会留下唯一剩余的间隙,即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>;
    };

其中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
        }
};

谷歌搜索'w1gpiomappgpio'应该会返回更多更好的细节。如果你能使用设备树的方法,这就是他们的目的。只要知道内核代码不会循环通过GPIO管脚来查找连接的w1设备,就必须设置这个映射。
如果设备已连接并工作,则可以通过执行“cat/sys/bus/w1/devices/28*/w1-slave”来获取其值。如果使用python,可以使用https://github.com/timofurrer/w1thermsensor使读取温度变得容易。或者为您的首选语言使用等效的库。

关于linux - 带有Yocto/Raspberry Pi 3的Dallas 1 Wire协议(protocol),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46800302/

10-12 20:54