1-Wire

Материал из virt2real wiki
Перейти к: навигация, поиск

Для поддержки шины 1-Wire необходимо включить в ядре следующие пункты. Не важно, будет ли драйвер собран модулем или частью ядра.

Device Drivers --->
        Dallas's 1-wire support (W1 [=m])
            -> 1-wire Bus Masters
                    <M> GPIO 1-wire busmaster 
Device Drivers --->
        Dallas's 1-wire support (W1 [=m])
            -> 1-wire Slaves
                    <M> Thermal family implementation
                    <M> Simple 64bit memory family implementation 

Так же, как и в случае с любой другой периферией, необходимо добавить описание девайса в главном файле инициализации устройства (kernel/arch/arm/mach-davinci/board-dm365evm.c). В Virt2real SDK по-умолчанию это уже сделано. Выбор конкретного пина GPIO, через который драйвер общается с 1-Wire устройствами производится в файле uEnv.txt. За это отвечают параметры 1wire и 1wirepullup.


1wire=<номер_gpio> задаёт номер GPIO, к которому подключён датчик (или датчики). Например, параметр 1wire=26 означает что датчик подключён к GPIO26, который, соответственно, доступен на контакте CON37 в гребёнке (см. схему платы).


1wirepullup=<номер_gpio> задаёт номер GPIO, который служит источником питания для 1-Wire датчика. Датчик (например, всем известный градусник Dallas DS18B20) можно запитать от обычного напряжения 3.3В, тогда он будет работать постоянно, когда плата включена. А можно подключить питание датчика к пину GPIO, тогда питание на него будет подаваться автоматически при загрузке модуля 1-wire и выключаться при выгрузке модуля. К тому же питанием можно будет управлять обычными средствами - установили GPIO=1 - датчик включён, установили GPIO=0 - датчик выключен. По-умолчанию 1wirepullup=27 (CON36).

Само собой, питание на датчик 1-Wire можно и не подавать, на то оно и 1-Wire, чтоб питаться паразитным питанием (т.е. питание берётся от сигнального контакта). Но иногда питание всё-таки лучше подавать явное.


Схема подключения

На примере градусника Dallas DS18B20

Схема подключения датчика DS18B20

Контакты датчика DS18B20:

1 - Gnd (Земля)

2 - D (Сигнал)

3 - Vdd (Питание)


Чтение данных

После подключения датчика надо включить питание платы Virt2real, после чего надо запустить модули ядра (конечно, если драйвер 1-Wire собран как модуль ядра). Делается это командами

[root@virt2real ~]# modprobe wire.ko
Driver for 1-wire Dallas network protocol.
[root@virt2real ~]# modprobe w1-gpio.ko
w1_master_driver w1_bus_master1: Family 28 for 28.000003e7c1d6.ac is not registered.
[root@virt2real ~]# modprobe w1_therm.ko

Всё, модули загружены. Теперь можно посмотреть список обнаруженных 1-Wire устройств

[root@virt2real ~]# cd /sys/bus/w1/devices/
[root@virt2real devices]# ls
28-000003e7c1d6@ w1_bus_master1@

28-000003e7c1d6@ это и есть наш подключенный градусник. Теперь надо зайти в этот каталог и посмотреть содержимое.

[root@virt2real devices]# cd 28-000003e7c1d6
[root@virt2real 28-000003e7c1d6]# ls
driver@    id         name       power/     subsystem@ uevent     w1_slave

Вся интересная информация (т.е., измеренная градусником температура) содержится в файле w1_slave.

[root@virt2real 28-000003e7c1d6]# cat w1_slave
8c 01 4b 46 7f ff 04 10 2e : crc=2e YES
8c 01 4b 46 7f ff 04 10 2e t=24750

t=24750 - это и есть текущее значение температуры. 24.750 градусов Цельсия.