达拉斯 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 来轻松读取温度。或者使用适合您首选语言的等效库。
一段时间以来,我一直在尝试构建自定义 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 来轻松读取温度。或者使用适合您首选语言的等效库。