Я тут попробовал подключить к процессору термодатчик по шине 1-wire. В конфигурации ядра включил:
Dallas 1-wire
Slaves/Thermo sensors
Masters/GPIO master
В DTS добавил содержимое (образцом послужил at91-ariag25.dts):
В гугле к сожалению не нашел ни одного примера на at91, только на beaglebone (у меня sk-sam9g45-xc6slx).
В примерах для beaglebone другая структура дерева, но принцип аналогичный - секция pinctrl, секция onewire
На beaglebone судя по описанию, датчики сразу обнаруживаются и выдают темпрературу, а у меня - нет.
В результате получается:
При загрузке ядра в лог попадает только одна строка:
После загрузки смотрю sysfs:
Беглый анализ результатов показывает, что обнаружен Bus Master (по-видимому, тот самый, который использует GPIO), но ни одного slave, то есть, подключенный датчик не найден.
При этом на линии PD21 раз в 10 секунд проходит одиночный импульс низким уровнем длиной 500 мкс. Похоже на какой-то таймер, но никак не обмен данными.
Подскажите ваше мнение, что можно попробовать?
Мои предварительные соображения:
Может быть, нужно в DTS статически прописывать всех слейвов с указанием их идентификаиоров, но ни одного примера явного указания я не смог найти
Не могу понять, сконфигурировано ли вообще что-то, поскольку импульс может формировать и датчик, а пин может находиться в режиме входа по умолчаниюю Для проверки можно было бы оторвать ногу данных датчика от шины
насколько я помню, датчик сам ничего не говорит, а отвечает на поллинг хоста по w1. по идее, в момент загрузки должна пройти пачка импульсов на предмет поиска слейвов..
О, спасибо большое, очень полезная темка.
Просмотрел отличия с моей ситуацией:
1. В той теме БСП программируется непосредственно
2. Там дополнительно включается опция ядра simple 64 bit memory - не понимаю, зачем, но попробую включить
3. В параметрах пина указана опция Multidrive, я ее не включал, вместо этого включал Pull-Up. Завтра попробую с этими изменениями.
И самое главное - все-таки, мастер должен сам обнаруживать слейвов, завтра псмотрю на импульсы при запуске.