Ви не увійшли.
Сторінки 1
Для тих, хто працює з 1-wire під Linux, доступні два способи роботи з адаптером (майстром шини 1-wire): з простору користувача (найпопулярнішим ПЗ є OWFS) і через драйвер в ядрі. В OWFS реалізована робота майже з усіма існуючими адаптерами, а от в ядрі не густо, є драйвери GPIO-адаптера (w1-gpio), USB-адаптера (ds2490), I2C-адаптера (ds2482), але чомусь не було UART-адаптера (ds2480b).
Коли я вибирав, на якій мікросхемі зробити готовий пристрій, то, незважаючи на це, вибрав UART-інтерфейс, оскільки для моїх задач була необхідна гальванічна розв'язка і зробити її значно простіше на однонаправлених лініях, а з драйвером вирішив "розібратися" пізніше. Є ще й друга причина вибору саме послідовного інтерфейсу, але про це згодом.
Отже, Linux-драйвер для ось такого готового майстра шини 1-wire на мікросхемі ds2480b вже є і його можна взяти звідси. В цій темі намагатимусь допомагати з компіляцією драйвера.
Якщо адаптер підключено до комп'ютера з Linux через USB-UART або до пінів Raspberry Pi ось так:
Тоді "приєднати" драйвер до відповідного послідовного порта (/dev/ttyUSB0 або /dev/ttyAMA0) можна командою:
ser1wm_attach /dev/ttyUSB0
Виконувати цю команду можна доручити udevd, щоб він її виконував щоразу, коли до USB підключається USB-UART, до якого підключено майстер шини 1-wire. Наприклад так:
ACTION=="add", KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", SUBSYSTEMS=="usb",\
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A50285BI",\
RUN+="/usr/local/bin/ser1wm_attach /dev/%k"
В Linux є така утиліта socat, за допомогою якої послідовний порт по TCP можна "передати" на інший хост:
1) на боці реального послідовного порта піднімаєм сервер на TCP-порту:
socat tcp-l:4232,bind=10.0.0.4,reuseaddr /dev/ttyUSB0,raw,echo=0,b9600,cs8
2) на іншому боці підключаємось і утворюєм віртуальний послідовний порт:
socat tcp:10.0.0.4:4232 pty,raw,echo=0,link=/dev/ttyvirt0
До такого віртуального послідовного порта також можна приєднати даний драйвер:
ser1wm_attach /dev/ttyvirt0
Але в ser1wm_attach реалізована можливість робити це напряму без другої команди socat (її функціонал вбудовано), ось так:
ser1wm_attach 10.0.0.4:4232
Кмітливі вже здогадалися, що і першу команду socat також можна в щось вбудувати, наприклад реалізувати її на мікроконтролері з мережевим інтейфейсом, до якого підключено майстер шини 1-wire (або навіть і майстер шини реалізувати програмно). Це і є та друга причина, по якій вибрано послідовний інтерфейс, оскільки його без будь-яких алгоритмів і overhead можна передавати по TCP.
В якості proof-of-concept викладаю прошивку, яка перетворить ESP-01 на майстер шини 1-wire (на піні RX), а по TCP дозволяє приєднати даний драйвер за допомогою останньої наведеної команди ser1wm_attach.
Для переведення прошивки в режим конфігурування потрібно при подачі живлення закоротити між собою (але не на землю) піни IO0 та IO2. В режимі конфігурування (на це вказує блимання світлодіодом) підключитися до точки доступу ser1wm_setup, зайти браузером на http://192.168.1.1/ і виконати налаштування.
В планах є також реалізація "Ethernet to 1-wire", тому драйвер назвав не ds2480b а більш загально - ser1wm (скорочення від serial 1-wire master).
Добре, "приєднали" драйвер до послідовного порта чи ESP, а що далі?
В dmesg маємо побачити щось подібне:
serio: Serial port pts9
ser1wm serio3: attaching 1-wire bus master
w1_master_driver w1_bus_master1: Attaching one wire slave 28.0000023ccaeb crc 45
Ядро саме буде періодично (раз на 10 сек) опитувати шину 1-wire і писати в dmesg про знайдені слейви. Кожен слейв, поки він присутній на шині, буде мати свій каталог в /sys/bus/w1/devices в якому будуть файли для роботи з слейвом, які саме файли - залежить від сімейства слейва. Наприклад, для DS18B20:
cat /sys/bus/w1/devices/28-0000023ccaeb/w1_slave
78 01 1e 00 7f ff 08 10 e1 : crc=e1 YES
78 01 1e 00 7f ff 08 10 e1 t=23500
Неактивний
Оффтоп: може кому пригодиться така ідея конвертера логічних рівнів для ESP-01 на основі цієї платки, використовував її при розробці прошивки, також можна використати для отримання 5-вольтового 1-wire.
Неактивний
Сторінки 1