Difference between revisions of "OneWire GPIO bus Master"
From ArmadeusWiki
(→Supported boards and software versions) |
|||
(7 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
+ | [[Category:Domotic]] | ||
+ | [[Category:1-Wire]] | ||
+ | |||
Informations and HOWTOs for Armadeus OneWire support. | Informations and HOWTOs for Armadeus OneWire support. | ||
− | + | Authors: [[User:JanosA|JanosA]]/[[User:JulienB|JulienB]] | |
== Supported boards and software versions == | == Supported boards and software versions == | ||
* Use the latest Armadeus GIT/SF repository or the latest stable release. | * Use the latest Armadeus GIT/SF repository or the latest stable release. | ||
* Currently, with [[APF28]] modules, only the [[APF28Dev]] board is supported, but it's easy to add support to another boards. (Check linux-2.6.35.3/arch/arm/mach-mx28/apf28dev.c file) | * Currently, with [[APF28]] modules, only the [[APF28Dev]] board is supported, but it's easy to add support to another boards. (Check linux-2.6.35.3/arch/arm/mach-mx28/apf28dev.c file) | ||
− | * Following instructions were successfully | + | * Following instructions were also successfully tested on [[OPOS6ULDev]] with bitbanging OneWire Linux emulation (GPIO). Indeed i.MX6UL doesn't have hardware OneWire master. '''Please note that using GPIO bitbanging reduces a lot the maximum length of 1Wire cable that can be used !!''' |
== Software installation == | == Software installation == | ||
− | * If not done | + | * If not done by default, recompile your Linux kernel with OneWire GPIO bus master (and some slave device) support. |
<pre class="host"> | <pre class="host"> | ||
$ make linux-menuconfig | $ make linux-menuconfig | ||
Line 48: | Line 51: | ||
== How it works == | == How it works == | ||
− | {{Warning|GPIO bitbanging method used here is not compatible with frequency scaling, so, if activated, you have to switch to ''performance'' governor, otherwise your 1-wire bus might mis-function after system boot...}} | + | {{Warning|GPIO bitbanging method used here is not compatible with [[Linux_Dynamic_Frequency_Scaling|frequency scaling]], so, if activated, you have to switch to ''performance'' governor, otherwise your 1-wire bus might mis-function after system boot... Otherwise you may have problems to detect devices and see in dmesg: <pre class="apf"> w1_master_driver w1_bus_master1: w1_search: max_slave_count 64 reached, will continue next search.</pre>}} |
The OneWire bus master driver every 10 seconds scan the bus for new slave devices. | The OneWire bus master driver every 10 seconds scan the bus for new slave devices. | ||
Line 94: | Line 97: | ||
==Tested sensors== | ==Tested sensors== | ||
* [https://www.adafruit.com/product/381 Waterproof DS18B20] | * [https://www.adafruit.com/product/381 Waterproof DS18B20] | ||
+ | |||
+ | ==Links== | ||
+ | * [http://www.framboise314.fr/mesure-de-temperature-1-wire-ds18b20-avec-le-raspberry-pi/ Fr:Mesure de température avec DS18B20 sur RPi] |
Latest revision as of 14:49, 19 September 2017
Informations and HOWTOs for Armadeus OneWire support.
Contents
Supported boards and software versions
- Use the latest Armadeus GIT/SF repository or the latest stable release.
- Currently, with APF28 modules, only the APF28Dev board is supported, but it's easy to add support to another boards. (Check linux-2.6.35.3/arch/arm/mach-mx28/apf28dev.c file)
- Following instructions were also successfully tested on OPOS6ULDev with bitbanging OneWire Linux emulation (GPIO). Indeed i.MX6UL doesn't have hardware OneWire master. Please note that using GPIO bitbanging reduces a lot the maximum length of 1Wire cable that can be used !!
Software installation
- If not done by default, recompile your Linux kernel with OneWire GPIO bus master (and some slave device) support.
$ make linux-menuconfig
Device Drivers ---> <*> Dallas's 1-wire support ---> 1-wire Bus Masters ---> <*> GPIO 1-wire busmaster 1-wire Slaves ---> <*> Thermal family implementation
$ make
- Reflash your Linux kernel
Hardware Notes
APF28Dev | OPOS6ULDev |
---|---|
* Vcc 3.3V is pin 1 on J9 connector * DQ is pin 31 on J9 (LCD_D18 / GPIO 1_18) * GND is pin 39 on J9
|
|
How it works
Warning: GPIO bitbanging method used here is not compatible with frequency scaling, so, if activated, you have to switch to performance governor, otherwise your 1-wire bus might mis-function after system boot... Otherwise you may have problems to detect devices and see in dmesg: w1_master_driver w1_bus_master1: w1_search: max_slave_count 64 reached, will continue next search. |
The OneWire bus master driver every 10 seconds scan the bus for new slave devices.
Each detected OneWire slave device have a sub-directory with it's unique ID in "/sys/devices/w1 bus master".
The sub-directory format is <2 digit family ID>-<12 digit unique ID>.
# ls -la /sys/devices/w1\ bus\ master/ total 0 drwxr-xr-x 4 root root 0 Jan 1 01:06 . drwxr-xr-x 6 root root 0 Jan 1 01:05 .. drwxr-xr-x 3 root root 0 Jan 1 01:06 28-000001e68904 lrwxrwxrwx 1 root root 0 Jan 1 01:07 driver -> ../../bus/w1/drivers/w1_master_driver drwxr-xr-x 2 root root 0 Jan 1 01:07 power lrwxrwxrwx 1 root root 0 Jan 1 01:07 subsystem -> ../../bus/w1 -rw-r--r-- 1 root root 4096 Jan 1 01:07 uevent -rw-rw-rw- 1 root root 4096 Jan 1 01:07 w1_master_add -r--r--r-- 1 root root 4096 Jan 1 01:07 w1_master_attempts -r--r--r-- 1 root root 4096 Jan 1 01:07 w1_master_max_slave_count -r--r--r-- 1 root root 4096 Jan 1 01:07 w1_master_name -r--r--r-- 1 root root 4096 Jan 1 01:07 w1_master_pointer -rw-rw-rw- 1 root root 4096 Jan 1 01:07 w1_master_pullup -rw-rw-rw- 1 root root 4096 Jan 1 01:07 w1_master_remove -rw-rw-rw- 1 root root 4096 Jan 1 01:07 w1_master_search -r--r--r-- 1 root root 4096 Jan 1 01:07 w1_master_slave_count -r--r--r-- 1 root root 4096 Jan 1 01:07 w1_master_slaves -r--r--r-- 1 root root 4096 Jan 1 01:07 w1_master_timeout
You can list the detected slaves from this files:
# cat /sys/devices/w1\ bus\ master/w1_master_slave_count 1 # cat /sys/devices/w1\ bus\ master/w1_master_slaves 28-000001e68904
Let's read the temperature: (The 28-xxx family is a DS18B20 temperature sensor in this example.)
# cat /sys/devices/w1\ bus\ master/28-000001e68904/w1_slave dd 01 4b 46 7f ff 03 10 1e : crc=1e YES dd 01 4b 46 7f ff 03 10 1e t=29812
The t=29812 means, the temperature is: 29.812°C