xor.kruger 0 20 февраля, 2013 Опубликовано 20 февраля, 2013 · Жалоба Доброго времени суток. Интересует пример подключения (описания) любого устройства для однопроводной шине в файле DTS. К сожалению в каталоге Documentation/devicetree о подключении 1 ни сказано ни слова :( В моем случае используется Microblaze, одноразрядная ipcore gpio и подключенный к ней датчик температуры DS18B20. Саму кору ядра находит без проблем, регистрирует драйвера для 1wire, а вот устройство не находит. Вот как я пытался описать датчик: xps_gpio_0: gpio@81460000 { compatible = "xlnx,xps-gpio-2.00.a", "xlnx,xps-gpio-1.00.a"; interrupt-parent = <&xps_intc_0>; interrupts = < 10 2 >; reg = < 0x81460000 0x10000 >; xlnx,all-inputs = <0x0>; xlnx,all-inputs-2 = <0x0>; xlnx,dout-default = <0x0>; xlnx,dout-default-2 = <0x0>; xlnx,family = "spartan3adsp"; xlnx,gpio-width = <0x1>; xlnx,gpio2-width = <0x20>; xlnx,interrupt-present = <0x1>; xlnx,is-dual = <0x0>; xlnx,tri-default = <0xffffffff>; xlnx,tri-default-2 = <0xffffffff>; #gpio-cells = <2>; gpio-controller; w1_therm@0 { /*Смущает это мето*/ compatible = "dallas,ds18b20"; }; }; Заранее благодарен за любой совет. :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xor.kruger 0 21 февраля, 2013 Опубликовано 21 февраля, 2013 · Жалоба Сделав вывод о том, что 1-WIRE устройства не поддерживаются в DTS файлах решил пойти стандартным путём и добавить регистрацию в файл-платформ. Для архитектуры Microblaze он располагается в каталоге arch/microblaze/platform/platform.c Был добавлен следующий код: static struct w1_gpio_platform_data w1_gpio_platform_data = { .pin = 235, .is_open_drain = 0, }; struct platform_device kruger_w1_gpio_device = { .name = "w1-gpio", .id = 1, .dev.platform_data = &w1_gpio_platform_data, }; platform_device_register(&kruger_w1_gpio_device); Пример считывания данных с датчика: / # cat /sys/bus/w1/drivers/w1_slave_driver/28-0000020e3ae0/w1_slave 9e 01 4b 46 7f ff 02 10 56 : crc=56 YES 9e 01 4b 46 7f ff 02 10 56 t=25875 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xor.kruger 0 10 сентября, 2013 Опубликовано 10 сентября, 2013 · Жалоба Возращаясь к старой теме... Тогда вывод, сделанный мной, был не правильный. Изучив внимательно документацию к ядру было найдено следующее: w1-gpio devicetree bindings Required properties: - compatible: "w1-gpio" - gpios: one or two GPIO specs: - the first one is used as data I/O pin - the second one is optional. If specified, it is used as enable pin for an external pin pullup. Optional properties: - linux,open-drain: if specified, the data pin is considered in open-drain mode. Examples: onewire@0 { compatible = "w1-gpio"; gpios = <&gpio 126 0>, <&gpio 105 0>; }; что позволяет сделать все более красивее, лаконичней и по идеологии :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 4 10 сентября, 2013 Опубликовано 10 сентября, 2013 (изменено) · Жалоба struct platform_device kruger_w1_gpio_device = { .name = "w1-gpio", .id = 1, .dev.platform_data = &w1_gpio_platform_data, }; Откуда вы взяли значение для поля .name = "w1-gpio"? Если есть платформ драйвер с точно таким значением поля .name и он зарегистрирован в шине платформ, то единственной причиной почему драйвер не становится функция probe из драйвера вернула ошибку. printk добавленные probe в помогут найти проблему. Все места в кернеле 2.6.35, где упоминается 1-wire communication. Возможно найдете пример драйвера. Может какой и без изменений подойдет. ./Documentation/00-INDEX:352: - directory with documents regarding the 1-wire (w1) subsystem. ./Documentation/w1/masters/w1-gpio:10:GPIO 1-wire bus master driver. The driver uses the GPIO API to control the ./Documentation/w1/masters/omap-hdq:1:Kernel driver for omap HDQ/1-wire module. ./Documentation/w1/masters/omap-hdq:6: HDQ/1-wire controller on the TI OMAP 2430/3430 platforms. ./Documentation/w1/masters/omap-hdq:23:The controller supports operation in both HDQ and 1-wire mode. The essential ./Documentation/w1/masters/omap-hdq:24:difference between the HDQ and 1-wire mode is how the slave device responds to ./Documentation/w1/masters/00-INDEX:4: - The Maxim/Dallas Semiconductor DS2482 provides 1-wire busses. ./Documentation/w1/masters/00-INDEX:10: - GPIO 1-wire bus master driver. ./Documentation/w1/masters/ds2482:19:one (DS2482-100) or eight (DS2482-800) 1-wire busses. ./Documentation/w1/w1.generic:1:The 1-wire (w1) subsystem ./Documentation/w1/w1.generic:3:The 1-wire bus is a simple master-slave bus that communicates via a single ./Documentation/w1/w1.generic:70:Devices that support the 1-wire natively must provide the ability to write and ./Documentation/w1/00-INDEX:6: - Individual chips providing 1-wire busses. ./Documentation/w1/00-INDEX:8: - The 1-wire (w1) bus ./.config.old:1158:# 1-wire Bus Masters ./.config.old:1167:# 1-wire Slaves ./drivers/usb/serial/io_usbvend.h:162:// Watchport based on 3410 both 1-wire and binary products (16K I2C) ./drivers/usb/serial/io_usbvend.h:163:#define ION_DEVICE_ID_WP_UNSERIALIZED 0x300 // Watchport based on 3410 both 1-wire and binary products ./drivers/w1/w1.c:46:MODULE_DESCRIPTION("Driver for 1-wire Dallas network protocol."); ./drivers/w1/w1.c:853: * The 1-wire search is a simple binary tree search. ./drivers/w1/w1.c:860: * See "Application note 187 1-wire search algorithm" at www.maxim-ic.com ./drivers/w1/w1.c:885: * Reset bus and all 1-wire device state machines ./drivers/w1/w1.c:993: printk(KERN_INFO "Driver for 1-wire Dallas network protocol.\n"); ./drivers/w1/masters/mxc_w1.c:165: * Reset bus and all 1-wire device state machines ./drivers/w1/masters/ds1wm.c:2: * 1-wire busmaster driver for DS1WM and ASICs with embedded DS1WMs ./drivers/w1/masters/ds1wm.c:37:#define DS1WM_CMD_1W_RESET (1 << 0) /* force reset on 1-wire bus */ ./drivers/w1/masters/ds2482.c:6: * It is a I2C to 1-wire bridge. ./drivers/w1/masters/ds2482.c:7: * There are two variations: -100 and -800, which have 1 or 8 1-wire ports. ./drivers/w1/masters/ds2482.c:123: /* 1-wire interface(s) */ ./drivers/w1/masters/ds2482.c:200: * Waits until the 1-wire interface is idle (not busy) ./drivers/w1/masters/ds2482.c:226: * The 1-wire interface must be idle before calling this function. ./drivers/w1/masters/ds2482.c:373: * Sends a reset on the 1-wire interface ./drivers/w1/masters/ds2482.c:459: /* Register 1-wire interface(s) */ ./drivers/w1/masters/ds2482.c:497: /* Unregister the 1-wire bridge(s) */ ./drivers/w1/masters/Makefile:2:# Makefile for 1-wire bus master drivers. ./drivers/w1/masters/omap_hdq.c:248: * HDQ might not obey truly the 1-wire spec. ./drivers/w1/masters/omap_hdq.c:724:MODULE_PARM_DESC(w1_id, "1-wire id for the slave detection"); ./drivers/w1/masters/matrox_w1.c:43:MODULE_DESCRIPTION("Driver for transport(Dallas 1-wire prtocol) over VGA DDC(matrox gpio)."); ./drivers/w1/masters/matrox_w1.c:211: dev_info(&pdev->dev, "Matrox G400 GPIO transport layer for 1-wire.\n"); ./drivers/w1/masters/ds2490.c:251: printk(KERN_ERR "Failed to read 1-wire data from 0x%x: err=%d.\n", dev->ep[EP_STATUS], err); ./drivers/w1/masters/ds2490.c:277: ds_print_msg(buf, "1-wire speed", 1); ./drivers/w1/masters/ds2490.c:289: ds_print_msg(buf, "1-wire data output buffer status", 12); ./drivers/w1/masters/ds2490.c:290: ds_print_msg(buf, "1-wire data input buffer status", 13); ./drivers/w1/masters/ds2490.c:387: printk(KERN_ERR "Failed to write 1-wire data to ep0x%x: " ./drivers/w1/masters/Kconfig:2:# 1-wire bus master configuration ./drivers/w1/masters/Kconfig:5:menu "1-wire Bus Masters" ./drivers/w1/masters/Kconfig:8: tristate "Matrox G400 transport layer for 1-wire" ./drivers/w1/masters/Kconfig:11: Say Y here if you want to communicate with your 1-wire devices ./drivers/w1/masters/Kconfig:18: tristate "DS2490 USB <-> W1 transport layer for 1-wire" ./drivers/w1/masters/Kconfig:38: tristate "Freescale MXC 1-wire busmaster" ./drivers/w1/masters/Kconfig:41: Say Y here to enable MXC 1-wire host ./drivers/w1/masters/Kconfig:44: tristate "Maxim DS1WM 1-wire busmaster" ./drivers/w1/masters/Kconfig:47: Say Y here to enable the DS1WM 1-wire driver, such as that ./drivers/w1/masters/Kconfig:52: tristate "GPIO 1-wire busmaster" ./drivers/w1/masters/Kconfig:55: Say Y here if you want to communicate with your 1-wire devices using ./drivers/w1/masters/Kconfig:65: Say Y here if you want support for the 1-wire or HDQ Interface ./drivers/w1/w1.h:84: * be used with hardware that doesn't really support 1-wire operations, ./drivers/w1/w1.h:105: * support the 1-wire protocol. ./drivers/w1/Makefile:2:# Makefile for the Dallas's 1-wire bus. ./drivers/w1/slaves/w1_ds2760.c:240:MODULE_DESCRIPTION("1-wire Driver Dallas 2760 battery monitor chip"); ./drivers/w1/slaves/w1_ds2438.c:188: pr_info("1-wire driver for the DS2438 smart battery monitor\n"); ./drivers/w1/slaves/w1_ds2438.c:204:MODULE_DESCRIPTION("1-wire DS2438 family, smart battery monitor."); Binary file ./drivers/w1/slaves/w1_ds2438.ko matches ./drivers/w1/slaves/w1_smem.c:36:MODULE_DESCRIPTION("Driver for 1-wire Dallas network protocol, 64bit memory family."); ./drivers/w1/slaves/Makefile:2:# Makefile for the Dallas's 1-wire slaves. ./drivers/w1/slaves/w1_therm.c:38:MODULE_DESCRIPTION("Driver for 1-wire Dallas network protocol, temperature family."); Binary file ./drivers/w1/slaves/w1_ds2438.o matches ./drivers/w1/slaves/w1_bq27000.c:119:MODULE_PARM_DESC(F_ID, "1-wire slave FID for BQ device"); ./drivers/w1/slaves/w1_bq27000.c:123:MODULE_DESCRIPTION("HDQ/1-wire slave driver bq27000 battery monitor chip"); ./drivers/w1/slaves/Kconfig:2:# 1-wire slaves configuration ./drivers/w1/slaves/Kconfig:5:menu "1-wire Slaves" ./drivers/w1/slaves/Kconfig:10: Say Y here if you want to connect 1-wire thermal sensors to your ./drivers/w1/slaves/Kconfig:16: Say Y here if you want to connect 1-wire ./drivers/w1/slaves/Kconfig:22: Say Y here if you want to use a 1-wire ./drivers/w1/slaves/Kconfig:29: Say Y here if you want to use a 1-wire ./drivers/w1/slaves/Kconfig:44: Say Y here if you want to use a 1-wire ./drivers/w1/slaves/Kconfig:51: Say Y here if you want to use a 1-wire Binary file ./drivers/w1/w1.o matches ./drivers/w1/Kconfig:2: tristate "Dallas's 1-wire support" ./drivers/w1/Kconfig:5: Dallas' 1-wire bus is useful to connect slow 1-pin devices Binary file ./drivers/w1/wire.ko matches ./drivers/w1/w1_int.c:118: * controls 1-wire time frames are even expected to support a strong Binary file ./drivers/w1/wire.o matches ./arch/alpha/defconfig:686:# Dallas's 1-wire bus ./arch/frv/defconfig:431:# Dallas's 1-wire bus ./arch/xtensa/configs/common_defconfig:476:# Dallas's 1-wire bus ./arch/xtensa/configs/iss_defconfig:341:# Dallas's 1-wire bus ./arch/powerpc/configs/ppc6xx_defconfig:1843:# 1-wire Bus Masters ./arch/powerpc/configs/ppc6xx_defconfig:1851:# 1-wire Slaves ./arch/ia64/configs/zx1_defconfig:859:# Dallas's 1-wire bus ./arch/ia64/configs/sim_defconfig:464:# Dallas's 1-wire bus ./arch/ia64/configs/bigsur_defconfig:772:# Dallas's 1-wire bus ./arch/ia64/configs/gensparse_defconfig:807:# Dallas's 1-wire bus ./arch/arm/configs/imx5_defconfig:1124:# 1-wire Bus Masters ./arch/arm/configs/imx5_defconfig:1133:# 1-wire Slaves ./arch/arm/configs/calabria_defconfig:1131:# 1-wire Bus Masters ./arch/arm/configs/calabria_defconfig:1140:# 1-wire Slaves ./arch/arm/configs/mx3_updater_defconfig:728:# 1-wire Bus Masters ./arch/arm/configs/mx3_updater_defconfig:736:# 1-wire Slaves ./arch/arm/configs/mx3_defconfig:892:# 1-wire Bus Masters ./arch/arm/configs/mx3_defconfig:900:# 1-wire Slaves ./arch/arm/mach-pxa/include/mach/pxa3xx-regs.h:202:#define CKEN_1WIRE 40 /* < 1-wire clock enable */ ./arch/blackfin/configs/IP0X_defconfig:812:# Dallas's 1-wire bus ./arch/blackfin/configs/SRV1_defconfig:841:# Dallas's 1-wire bus ./arch/blackfin/configs/H8606_defconfig:765:# Dallas's 1-wire bus ./arch/mips/configs/rm200_defconfig:1138:# Dallas's 1-wire bus ./arch/mips/configs/rm200_defconfig:1144:# 1-wire Bus Masters ./arch/mips/configs/rm200_defconfig:1150:# 1-wire Slaves ./arch/mips/configs/jazz_defconfig:1018:# Dallas's 1-wire bus ./arch/mips/configs/jazz_defconfig:1024:# 1-wire Bus Masters ./arch/mips/configs/jazz_defconfig:1028:# 1-wire Slaves ./arch/mips/configs/markeins_defconfig:1014:# Dallas's 1-wire bus ./arch/mips/configs/pnx8550-stb810_defconfig:777:# Dallas's 1-wire bus ./arch/mips/configs/yosemite_defconfig:608:# Dallas's 1-wire bus ./arch/mips/configs/decstation_defconfig:607:# Dallas's 1-wire bus ./arch/mips/configs/msp71xx_defconfig:948:# Dallas's 1-wire bus ./arch/mips/configs/pnx8550-jbs_defconfig:787:# Dallas's 1-wire bus ./arch/mips/configs/wrppmc_defconfig:656:# Dallas's 1-wire bus ./arch/mips/configs/bcm47xx_defconfig:1313:# 1-wire Bus Masters ./arch/mips/configs/bcm47xx_defconfig:1320:# 1-wire Slaves ./.config:1154:# 1-wire Bus Masters ./.config:1163:# 1-wire Slaves Возращаясь к старой теме... Тогда вывод, сделанный мной, был не правильный. Изучив внимательно документацию к ядру было найдено следующее: w1-gpio devicetree bindings Required properties: - compatible: "w1-gpio" - gpios: one or two GPIO specs: - the first one is used as data I/O pin - the second one is optional. If specified, it is used as enable pin for an external pin pullup. Optional properties: - linux,open-drain: if specified, the data pin is considered in open-drain mode. Examples: onewire@0 { compatible = "w1-gpio"; gpios = <&gpio 126 0>, <&gpio 105 0>; }; что позволяет сделать все более красивее, лаконичней и по идеологии :) GPIO pin конечно надо активировать и настроить, но еще надо драйвер поставить. Имя пина никакого значения для устройства и драйвера не имеет. Изменено 10 сентября, 2013 пользователем Tarbal Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xor.kruger 0 11 сентября, 2013 Опубликовано 11 сентября, 2013 · Жалоба :cranky: Не вижу никакой логики в Ваших сообщениях. Если Вы не внимательно прочитали ветку, то повторю еще раз: когда-то давно была необходимость прикрутить 1wire на gpio через devicetree (архитектура Microblaze), тогда решение по каким-то причинам было не найдено, и я ее описал в файле платформа устройства - проверенный классический метод который успешно работает. Но недавно я все таки вернулся к этому вопросу и нашел решение для devicetree, пример которого и привел в предыдущем сообщении (на всякий случай если подобное кому-то пригодится). Откуда вы взяли значение для поля .name = "w1-gpio"? Это указание к какому драйверу будет "относится" описанная структура. А зачем Вы привили список драйверов использующие 1wire устройства мне не понятно. GPIO pin конечно надо активировать и настроить, но еще надо драйвер поставить. Имя пина никакого значения для устройства и драйвера не имеет. ??? Это к чему? Где Вы здесь видите именно ИМЯ пина ? Сформулируйте свои вопросы и замечания, пожалуйста, заново :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 4 11 сентября, 2013 Опубликовано 11 сентября, 2013 · Жалоба Я полагал вы ищете решение. Но если все заработало, то не будем больше тратить на это время. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vvk 0 21 января, 2015 Опубликовано 21 января, 2015 · Жалоба Всем здравствуйте и сразу прошу прощения за некропост, но идеи у меня уже практически закончились, как закончился и гугловский выхлоп по запросам, которые я смог придумать, чтобы найти решение. xor.kruger, надеюсь, что вы все еще на форуме и что у вас осталось если не само работающее устройство, то хотя бы какие-то смутные воспоминания, что именно вы с ним делали. Итак, судя по ветке делаю несколько предположений, отметьте, где я неправ. 1. Вы использовали стандартный IP xps_gpio версии 2.00.a 2. Вы использовали для GPIO драйвер, который находится в /drivers/gpio/gpio-xilinx.c, насколько можно судить из поля "compatible". В menuconfig это Device Drivers -> GPIO Support ->Xilinx GPIO support 3. В той же ветке menuconfig было включено "/sys/class/gpio/... (sysfs interface)" (впрочем, это не особо важно) 4. Для 1wire был включен драйвер /drivers/w1/masters/w1-gpio.c, то есть Device Drivers -> Dallas's 1-wire support -> 1-wire Bus Masters -> GPIO 1-wire busmaster. В пункте 1-wire Slaves включен драйвер "Thermal family implementation" Кроме этого, у меня еще включен "Userspace communication over connector", но это уже от отчаяния, этот драйвер явно вторичный и он пока что не при чем. 5. Вы никак не патчили ни gpio.xilinx, ни w1-gpio ни, тем более, core gpio или w1. 6. У вас в /sys/bus/w1/devices появился каталог для slave устройства. Теперь описываю свою конфигурацию. Платформа - Trenz TE0320. Термометр - DS18B20. Data пин термометра притянут к питанию 3.3 через резистор на 4К7. В dts у меня следующее: xps_gpio_1wire: gpio@814e0000 { #gpio-cells = <2>; compatible = "xlnx,xps-gpio-2.00.a", "xlnx,xps-gpio-1.00.a"; gpio-controller; interrupt-parent = <&xps_intc_0>; interrupts = < 0 2 >; reg = < 0x814e0000 0x10000 >; xlnx,all-inputs = <0x0>; xlnx,all-inputs-2 = <0x0>; xlnx,dout-default = <0x0>; xlnx,dout-default-2 = <0x0>; xlnx,family = "spartan3adsp"; xlnx,gpio-width = <0x1>; xlnx,gpio2-width = <0x20>; xlnx,interrupt-present = <0x1>; xlnx,is-dual = <0x0>; xlnx,tri-default = <0xffffffff>; xlnx,tri-default-2 = <0xffffffff>; }; onewire@0 { compatible = "w1-gpio"; gpios = <&xps_gpio_1wire 0 0>; linux,open-drain = <1>; }; }; В dmesg получаю: Driver for 1-wire Dallas network protocol. bus: 'w1': registered bus: 'w1': add driver w1_master_driver bus: 'w1': add driver w1_slave_driver bus: 'platform': add driver w1-gpio bus: 'platform': driver_probe_device: matched device onewire.4 with driver w1-gpio bus: 'platform': really_probe: probing driver w1-gpio with device onewire.4 Setting open-drain to 1 Pdata pin is 191 Second GPIO is -22 device: 'w1_bus_master1': device_add bus: 'w1': add device w1_bus_master1 driver: 'w1_bus_master1': driver_bound: bound to device 'w1_master_driver' driver: 'onewire.4': driver_bound: bound to device 'w1-gpio' bus: 'platform': really_probe: bound device onewire.4 to driver w1-gpio node: /plb@0/onewire@0 То есть мастер поднялся, слейва при этом нигде нет. Если включить debug для GPIO, то получаю вот такую последовательность: xgpio_set: /plb@0/gpio@814e0000 GPIO 0 val=0 xgpio_set: /plb@0/gpio@814e0000 GPIO 0 val=1 xgpio_get: /plb@0/gpio@814e0000 GPIO 0 val=0 xgpio_set: /plb@0/gpio@814e0000 GPIO 0 val=0 xgpio_set: /plb@0/gpio@814e0000 GPIO 0 val=1 xgpio_set: /plb@0/gpio@814e0000 GPIO 0 val=0 xgpio_set: /plb@0/gpio@814e0000 GPIO 0 val=1 xgpio_set: /plb@0/gpio@814e0000 GPIO 0 val=0 xgpio_set: /plb@0/gpio@814e0000 GPIO 0 val=1 xgpio_set: /plb@0/gpio@814e0000 GPIO 0 val=0 xgpio_set: /plb@0/gpio@814e0000 GPIO 0 val=1 xgpio_set: /plb@0/gpio@814e0000 GPIO 0 val=0 xgpio_set: /plb@0/gpio@814e0000 GPIO 0 val=1 xgpio_get: /plb@0/gpio@814e0000 GPIO 0 val=1 xgpio_set: /plb@0/gpio@814e0000 GPIO 0 val=0 xgpio_set: /plb@0/gpio@814e0000 GPIO 0 val=1 xgpio_get: /plb@0/gpio@814e0000 GPIO 0 val=1 xgpio_set: /plb@0/gpio@814e0000 GPIO 0 val=0 xgpio_set: /plb@0/gpio@814e0000 GPIO 0 val=1 xgpio_get: /plb@0/gpio@814e0000 GPIO 0 val=1 xgpio_set: /plb@0/gpio@814e0000 GPIO 0 val=0 xgpio_set: /plb@0/gpio@814e0000 GPIO 0 val=1 xgpio_get: /plb@0/gpio@814e0000 GPIO 0 val=1 xgpio_set: /plb@0/gpio@814e0000 GPIO 0 val=0 xgpio_set: /plb@0/gpio@814e0000 GPIO 0 val=1 xgpio_get: /plb@0/gpio@814e0000 GPIO 0 val=1 xgpio_set: /plb@0/gpio@814e0000 GPIO 0 val=0 xgpio_set: /plb@0/gpio@814e0000 GPIO 0 val=1 xgpio_get: /plb@0/gpio@814e0000 GPIO 0 val=1 И так - десять раз (строго в соответствии с кодом драйвера) Перевожу в более удобный вид: set -> 0 1 get <- 0 set -> 0 1 0 1 0 1 0 1 0 1 get <- 1 set -> 0 1 get <- 1 set -> 0 1 get <- 1 set -> 0 1 get <- 1 set -> 0 1 get <- 1 set -> 0 1 get <- 1 Комбинации "set -> 0 1", судя по комментам в коде, в первой строке означает резет шины, остальные, надо полагать, запрос состояния шины (до вдумчивого чтения документации я еще не доюбрался). Первое, что смущает - это строчка "set -> 0 1 0 1 0 1 0 1 0 1". Эта последовательность ни с какой стороны не похожа на 0x33, aka W1_READ_ROM, которая, судя по коду функции w1_search() в w1.c, должна отправляется в качестве запроса. Похожа она на 0x55, то есть на W1_MATCH_ROM, которая используется в единственном месте - в функции w1_reset_select_slave(), до вызова которой дело никак не должно доходить. Как такое может происходить - ни малейших идей. Второе, что смущает еще больше - это ваш конфиг с ".is_open_drain = 0" и мой конфиг с "linux,open-drain = <1>;". При выключении open-drain мастер драйвер ругается сообщением "set_pullup requires write_byte or touch_bit, disabling". Это понятно, ему нужен как минимум второй GPIO но у вас, как я вижу, заявлен только один GPIO пин. Теперь вопросы: 1. Вы не могли бы нарисовать, как на самом деле вы подключали термометр (что-то типа схемки)? 2. Какая у вас была версия ядра? У меня древняя 3.6.0, но и в самом новом ядре я не обнаружил никаких существенных отличий в GPIO и W1 драйверах (разве что в W1 поддержка OF появилась). 3. Сохранилась ли окончательная версия DTS файла и, если да, можно ли выложить сюда ту часть, которая относится к w1? 4. Что еще я мог пропустить? Ну и напоследок. На RaspberryPi термометр завелся без всяких дополнительных приседаний, так что о правильности подключения вопрос не стоит. Осциллографа у меня нет, поэтому не могу сказать, что реально происходит на пине DATA, но в том, что какой-то обмен данными там идет, я абсолютно уверен, на все той же Raspberry сделал детектор, который подмигивает светодиодом, если уровень на входном GPIO меняется, и он раз в десять секунд, когда идет поиск устройств, проявляет бурную активность. Нда, чует мое сердце, что придется-таки и осциллограф рисовать, хотя очень не хотелось бы еще и этим заниматься, тем более, что нет особой надежды, что это чем-то поможет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 21 января, 2015 Опубликовано 21 января, 2015 · Жалоба Ну и напоследок. На RaspberryPi термометр завелся без всяких дополнительных приседаний, так что о правильности подключения вопрос не стоит. Осциллографа у меня нет, поэтому не могу сказать, что реально происходит на пине DATA, но в том, что какой-то обмен данными там идет, я абсолютно уверен, на все той же Raspberry сделал детектор, который подмигивает светодиодом, если уровень на входном GPIO меняется, и он раз в десять секунд, когда идет поиск устройств, проявляет бурную активность. Нда, чует мое сердце, что придется-таки и осциллограф рисовать, хотя очень не хотелось бы еще и этим заниматься, тем более, что нет особой надежды, что это чем-то поможет. по поведению на паре архитектур могу сказать, что w1-gpio не самый удачный вариант реализации этого протокола чувствительного к времянкам.. http://www.starterkit.ru/html/index.php?na...id=15335.#15421 как варианты "напопробовать" - убрать внешний пуллап или покрутить его номинал в разумных пределах - попробовать режим с паразитным питанием (двупроводный) в теории, вы можете из Малины сделать анализатор и построить диаграмму обмена по w1-gpio, но надо писать свою аппликуху с дискретизацией по таймеру и запрещением остальных прерываний, на что линукс может неодобрительно рухнуть.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vvk 0 22 января, 2015 Опубликовано 22 января, 2015 · Жалоба по поведению на паре архитектур могу сказать, что w1-gpio не самый удачный вариант реализации этого протокола чувствительного к времянкам.. http://www.starterkit.ru/html/index.php?na...id=15335.#15421 Да, тайминги. Уже об этом мысль возникала, у меня всего 50 МГц тактовая, может и в самом деле в этом дело. Попробую еще поиграться с irq_save/irq_restore, как по вашей ссылке написано, хотя у меня есть подозрение, что именно это я уже делал (проблемой занимаюсь по паре часов за раз с большими перерывами, сейчас вот опять запретили даже прикасаться к "конструктору" :) ) как варианты "напопробовать" - убрать внешний пуллап или покрутить его номинал в разумных пределах - попробовать режим с паразитным питанием (двупроводный) Без пуллапа пробовал. Естественно, безуспешно. С пуллапом тыкался тестером в тот пин и отправлял на него единичку или нолик - все четко, получал 0 и 3 вольта соответственно. Двухпроводный не пробовал (попробую, когда окошко появится) но, повторюсь, на RPi с текущим подключением и с тем же w1-gpio драйвером слейв моментально нашелся. в теории, вы можете из Малины сделать анализатор и построить диаграмму обмена по w1-gpio, но надо писать свою аппликуху с дискретизацией по таймеру и запрещением остальных прерываний, на что линукс может неодобрительно рухнуть.. Ваша правда. Проще и дешевле взять под мышку коробочку с девайсом и съездить в гости к нашему железячнику. Заодно пива попить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться