toweroff 1 31 марта Опубликовано 31 марта · Жалоба Доброго времени! Есть на борту процессора аппаратный SPI1, у которого на ножки смаппирован только CS1 Как выяснилось после сборки прототипов, необходим ещё один CSx. Пусть он даже будет не аппаратным, а простым GPIO, самый главный вопрос -- как правильно сказать это драйверу? Софт работает с целевым устройством через spidev и, соответственно, через устройство /dev/spidev1.1 В результате нужно ещё одно устройство -- /dev/spidev1.2 (или любой другой номер). Возможно это сделать штатными средствами через дерево или придётся пилить драйверы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 31 марта Опубликовано 31 марта · Жалоба 36 minutes ago, toweroff said: Возможно это сделать штатными средствами через дерево или придётся пилить драйверы? Да, возможно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 31 марта Опубликовано 31 марта · Жалоба 12 минут назад, aaarrr сказал: Да, возможно. Ёмко) Можно подробнее? находил на просторах подобное, но там ядро вообще древнее, 3 версия. У меня 6.1 (( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 31 марта Опубликовано 31 марта · Жалоба 21 минуту назад, toweroff сказал: Можно подробнее? А что тут подробного-то? SPI используете мастер? У вас CS для чего используется, выбор устройства перед передачей\приемом посылки? Так в чем проблема сначала выставить нужный CS как GPIO, передать данные выбранному устройству, затем выставить другой и передать другому? 1 час назад, toweroff сказал: В результате нужно ещё одно устройство -- /dev/spidev1.2 Ну а тут уже чисто линуксовые заморочки, возможно через какой-то alias это и можно.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 31 марта Опубликовано 31 марта · Жалоба 3 минуты назад, mantech сказал: А что тут подробного-то? SPI используете мастер? У вас CS для чего используется, выбор устройства перед передачей\приемом посылки? Так в чем проблема сначала выставить нужный CS как GPIO, передать данные выбранному устройству, затем выставить другой и передать другому? да, мастер. Но нет любимого Вами бареметала) так-то я и сам бы смог у линуха есть только драйверы, которым нужно правильно это сказать, а как -- не знаю(( тут получается же вот какая штука -- есть аппаратный CS (CS1) и (ибо другого нет на ножках МК) программный. И вот нет понимания, как срестить ужа и ежа Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 31 марта Опубликовано 31 марта · Жалоба 27 minutes ago, toweroff said: Можно подробнее? Можно. Решается штатными средствами: &spi0 { status = "okay"; cs-gpios = <0>, <&pio 5 5 GPIO_ACTIVE_HIGH>; /* PF5 */ ... }; Тут CS0 где положено, CS1 на PF5. Точно работает на 6.1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 31 марта Опубликовано 31 марта (изменено) · Жалоба 9 минут назад, toweroff сказал: у линуха есть только драйверы, которым нужно правильно это сказать, а как -- не знаю(( А нельзя там в дереве создать еще spi2, а адрес указать, как у первого, ну и конечно при использовании сделать так, чтобу одновременно 2х вызовов 1го и второго не было))) А иначе там будет, как 2 потока в один уарт одновременно пишут))))))))))))) Изменено 31 марта пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 31 марта Опубликовано 31 марта · Жалоба 3 минуты назад, aaarrr сказал: Можно. Решается штатными средствами: &spi0 { status = "okay"; cs-gpios = <0>, <&pio 5 5 GPIO_ACTIVE_HIGH>; /* PF5 */ ... }; Тут CS0 где положено, CS1 на PF5. Точно работает на 6.1 можно пояснить, моя нипанимай) параметром cs-gpios задаются CSx по порядку? <0> -- это аппаратный CS0, <gpio...> -- это ногодрыг условного CS1? если так, продолжу: таким же образом можно описывать другие GPIO как CSx? и ещё момент... на ножку вынесен только аппаратный CS1 у T113-S3. Если использовать ногодрыг, то получится так? cs-gpios = <&pio x y GPIO_ACTIVE_LOW>, <1>; правильно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 31 марта Опубликовано 31 марта · Жалоба 7 minutes ago, mantech said: А нельзя там в дереве создать еще spi2, а адрес указать, как у первого Нельзя. 2 minutes ago, toweroff said: cs-gpios = <&pio x y GPIO_ACTIVE_LOW>, <1>; Позиция меняется, но все равно <0> должен быть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 31 марта Опубликовано 31 марта · Жалоба 6 минут назад, mantech сказал: А нельзя там в дереве создать еще spi2, а адрес указать, как у первого, ну и конечно при использовании сделать так, чтобу одновременно 2х вызовов 1го и второго не было))) А иначе там будет, как 2 потока в один уарт одновременно пишут))))))))))))) а зачем? к spidev могут обращаться разные процессы. Пусть в порядке очереди и лезут, зачем ещё и лишние сущности мониторить? 3 минуты назад, aaarrr сказал: Нельзя. Позиция меняется, но все равно <0> должен быть. ух.. тогда точно не понял. Объясните, пожалуйста Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 31 марта Опубликовано 31 марта · Жалоба 31 minutes ago, mantech said: А что тут подробного-то? SPI используете мастер? У вас CS для чего используется, выбор устройства перед передачей\приемом посылки? Так в чем проблема сначала выставить нужный CS как GPIO, передать данные выбранному устройству, затем выставить другой и передать другому? После записи в GPIO - установка или сброс, не забыть сделать DSB или прочитать регистр в никуда. Иначе, будут неприятности, особенно если скорости обмена высокие. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 31 марта Опубликовано 31 марта · Жалоба 39 minutes ago, toweroff said: ух.. тогда точно не понял. Объясните, пожалуйста cs-gpios = <&pio x y GPIO_ACTIVE_LOW>, <0>; Т.е. 0 - признак отсутствия GPIO дескриптора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 31 марта Опубликовано 31 марта · Жалоба 33 минуты назад, aaarrr сказал: cs-gpios = <&pio x y GPIO_ACTIVE_LOW>, <0>; Т.е. 0 - признак отсутствия GPIO дескриптора. с параметрами пытаюсь копаться, но пока всё равно нет понимания, как cs-gpios описывает виртуальные CSx посмотрю-попробую завтра с анализатором, но пока логики описания чип селектов не вижу, хоть тресни( гпио дескриптор -- это аппаратный SPI_CS, который мультиплексирован на GPIO? ну вот не увидел, хоть тресни, описание того, что это именно CS1. Или это просто выбор пина, а на пине мультиплексор привязан к именно CS1? тогда "софтовый" CSx как описать и какой он там по счёту будет? по факту описания? а если по ходу есть действительный аппаратный селект на конкретном пине? а аппаратный CS0 ещё вдобавок забыли убрать из контроллера и он просто не подключен никуда? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 31 марта Опубликовано 31 марта · Жалоба cs-gpios содержит список. В тех позициях, где есть описание GPIO, в качестве CS используется GPIO; где нет - аппаратный CS. В документации ядра есть описание. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 31 марта Опубликовано 31 марта · Жалоба 43 минуты назад, aaarrr сказал: cs-gpios содержит список. В тех позициях, где есть описание GPIO, в качестве CS используется GPIO; где нет - аппаратный CS. В документации ядра есть описание. 2 часа назад, aaarrr сказал: Можно. Решается штатными средствами: &spi0 { status = "okay"; cs-gpios = <0>, <&pio 5 5 GPIO_ACTIVE_HIGH>; /* PF5 */ ... }; Тут CS0 где положено, CS1 на PF5. Точно работает на 6.1 ну вот навскидку не понимаю. Тогда уж CS0 переписывается ногодрыгом но полез искать-читать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться