1-wire в Cubieboard

Cubieboard хорошо взаимодействует с 1-wire устройствами. Но перед этим его нужно подготовить к этому. В этой статье мы рассмотрим, как это сделать.

Автор . Дата: 23.02.2015

Cubieboard хорошо взаимодействует с 1-wire устройствами. Но перед этим его нужно подготовить к этому. В этой статье мы рассмотрим, как это сделать.

Итак, для начала вам нужно узнать, включен ли модуль для работы с 1-wire в вашем дистрибутиве. Пробуем перейти в папку /sys/bus/w1/. Если система скажет вам, что такой папки нет, то тогда вам нужно будет пересобрать ядро системы. Если же вы перейдете в эту папку, то процесс пересборки ядра системы пропускайте и идите в конец статьи.

Итак, у вас не оказалось этой папки. Не беда, вам нужно всего-лишь пересобрать ядро. Как пересобрать ядро подробно описано в этой статье: Сборка ядра для Cubieboard (Cubietruck)

Единственный момент, который я опишу сдесь, это процесс конфигурирования ядра. Вам нужно включить поддержку 1-wire. Для этого вам нужно зайти в секцию Device Drivers, в ней в Dallas's 1-wire support. Сначала заходим в секцию 1-wire Bus Masters и включаем модуль GPIO 1-wire busmaster. Для этого перейдите на него и нажмите кнопку Y. Он отметится звездочкой и будет выглядеть примерно вот так: [*] GPIO 1-wire busmaster. Таким же образом включаем все остальные модули. Затем выходим из этой секции и заходим в секцию 1-wire Slaves. В ней включаем Thermal family implementation. И по окончанию подымаемся на уровень выше и включаем 1-wire sunxi support. Если вам необходимо подключить какие-то устройства кроме датчиков температуры, то включаете нужные вам модули.

После чего сохраняете конфигурацию, собираете ядро и устанавливаете его. Чтобы по 10 раз не перезагружать кубик, сразу откройте script.fex и внесите в него некоторые изменения. Вам нужно будет добавить секцию:

[w1_para]
gpio = 28

Здесь gpio указывает номер пина, на котором будет ваша 1-wire шина. Естественно перед этим его нужно проинициализировать:

[gpio_para]
gpio_used = 1
gpio_num = 31
...
gpio_pin_28 = port:PB10<0><default><default><0> 
...

Про инициализацию GPIO подробно рассказано в этой статье: Моргаем светодиодом в Cubietruck

После этого конвертируем script.fex в scipt.bin и перезапускаем кубик. После перезапуска смотрим, появилась ли у нас папка 1w в /sys/bus/. Если она появилась, то все замечательно. Если же нет, то внимательно смотрим что мы до этого делали и ищем ошибки.

Итак, папка у нас есть, теперь дело осталось за малым, нужно подключить датчик. Пин DATA подключаем на наш пин GPIO, который мы выбрали для шины, пин питания подключаем к любому пину на котором есть +3.3 вольта, пин GND подключаем к массе кубика. Ставим подтягивающий резистор на 5 кОм между ногами DATA и плюсом питания.

Если все сделано верно, то в папке /sys/bus/w1/devices появится наш датчик:

root@cubietruck:/sys/bus/w1/devices# ls
28-000005332603  w1_bus_master1

28-000005332603 это папка нашего датчика. Если датчиков будет несколько, то и соотвественно будет несколько папок. Снять показания с датчика можно следующим способом. Для этого перейдите в папку соотвествующего датчика и выполните команду:

cat w1_slave

Вы увидите что-то в духе этого:

root@cubietruck:/sys/bus/w1/devices/28-000005332603# cat w1_slave
9f 01 4b 46 7f ff 01 10 40 : crc=40 YES
9f 01 4b 46 7f ff 01 10 40 t=25937

Нас интересует вторая строка вывода. t=25937 это и есть наша температура умноженная на 1000. Соотвественно делим на 1000 и получаем реальную температуру.


comments powered by HyperComments