Перейти к содержанию
    

T113-S1 аппаратный SPI1 CS1 + GPIO CS2

Доброго времени!
Есть на борту процессора аппаратный SPI1, у которого на ножки смаппирован только CS1
Как выяснилось после сборки прототипов, необходим ещё один CSx. Пусть он даже будет не аппаратным, а простым GPIO, самый главный вопрос -- как правильно сказать это драйверу?
Софт работает с целевым устройством через spidev и, соответственно, через устройство /dev/spidev1.1
В результате нужно ещё одно устройство -- /dev/spidev1.2 (или любой другой номер).
Возможно это сделать штатными средствами через дерево или придётся пилить драйверы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

36 minutes ago, toweroff said:

Возможно это сделать штатными средствами через дерево или придётся пилить драйверы?

Да, возможно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 минут назад, aaarrr сказал:

Да, возможно.

Ёмко)
Можно подробнее? находил на просторах подобное, но там ядро вообще древнее, 3 версия. У меня 6.1 ((
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 минуту назад, toweroff сказал:

Можно подробнее?

А что тут подробного-то? SPI  используете мастер? У вас CS для чего используется, выбор устройства перед передачей\приемом посылки? Так в чем проблема сначала выставить нужный CS как GPIO, передать данные выбранному устройству, затем выставить другой и передать другому? 

1 час назад, toweroff сказал:

В результате нужно ещё одно устройство -- /dev/spidev1.2

Ну а тут уже чисто линуксовые заморочки, возможно через какой-то alias это и можно..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, mantech сказал:

А что тут подробного-то? SPI  используете мастер? У вас CS для чего используется, выбор устройства перед передачей\приемом посылки? Так в чем проблема сначала выставить нужный CS как GPIO, передать данные выбранному устройству, затем выставить другой и передать другому? 

да, мастер. Но нет любимого Вами бареметала) так-то я и сам бы смог
у линуха есть только драйверы, которым нужно правильно это сказать, а как -- не знаю((
тут получается же вот какая штука -- есть аппаратный CS (CS1) и (ибо другого нет на ножках МК) программный. И вот нет понимания, как срестить ужа и ежа

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

27 minutes ago, toweroff said:

Можно подробнее?

Можно. Решается штатными средствами:

&spi0 {
	status = "okay";
	cs-gpios = <0>, <&pio 5 5 GPIO_ACTIVE_HIGH>;	/* PF5 */

    ...
};

Тут CS0 где положено, CS1 на PF5. Точно работает на 6.1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 минут назад, toweroff сказал:

у линуха есть только драйверы, которым нужно правильно это сказать, а как -- не знаю((

А нельзя там в дереве создать еще spi2, а адрес указать, как у первого, ну и конечно при использовании сделать так, чтобу одновременно 2х вызовов 1го и второго не было))) А иначе там будет, как 2 потока в один уарт одновременно пишут)))))))))))))

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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>;
правильно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 minutes ago, mantech said:

А нельзя там в дереве создать еще spi2, а адрес указать, как у первого

Нельзя.

 

2 minutes ago, toweroff said:

cs-gpios = <&pio x y GPIO_ACTIVE_LOW>, <1>;

Позиция меняется, но все равно <0> должен быть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 минут назад, mantech сказал:

А нельзя там в дереве создать еще spi2, а адрес указать, как у первого, ну и конечно при использовании сделать так, чтобу одновременно 2х вызовов 1го и второго не было))) А иначе там будет, как 2 потока в один уарт одновременно пишут)))))))))))))

 

а зачем? к spidev могут обращаться разные процессы. Пусть в порядке очереди и лезут, зачем ещё и лишние сущности мониторить?

3 минуты назад, aaarrr сказал:

Нельзя.

 

Позиция меняется, но все равно <0> должен быть.

ух.. тогда точно не понял. Объясните, пожалуйста

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

31 minutes ago, mantech said:

А что тут подробного-то? SPI  используете мастер? У вас CS для чего используется, выбор устройства перед передачей\приемом посылки? Так в чем проблема сначала выставить нужный CS как GPIO, передать данные выбранному устройству, затем выставить другой и передать другому?

После записи в GPIO - установка или сброс, не забыть сделать DSB или прочитать регистр в никуда.  Иначе, будут неприятности, особенно если скорости обмена высокие.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

39 minutes ago, toweroff said:

ух.. тогда точно не понял. Объясните, пожалуйста

cs-gpios = <&pio x y GPIO_ACTIVE_LOW>, <0>;

 

Т.е. 0 - признак отсутствия GPIO дескриптора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

33 минуты назад, aaarrr сказал:

cs-gpios = <&pio x y GPIO_ACTIVE_LOW>, <0>;

 

Т.е. 0 - признак отсутствия GPIO дескриптора.

с параметрами пытаюсь копаться, но пока всё равно нет понимания, как cs-gpios описывает виртуальные CSx
посмотрю-попробую завтра с анализатором, но пока логики описания чип селектов не вижу, хоть тресни(
гпио дескриптор -- это аппаратный SPI_CS, который мультиплексирован на GPIO?
ну вот не увидел, хоть тресни, описание того, что это именно CS1. Или это просто выбор пина, а на пине мультиплексор привязан к именно CS1?
тогда "софтовый" CSx как описать и какой он там по счёту будет? по факту описания? а если по ходу есть действительный аппаратный селект на конкретном пине?
а аппаратный CS0 ещё вдобавок забыли убрать из контроллера и он просто не подключен никуда?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

cs-gpios содержит список. В тех позициях, где есть описание GPIO, в качестве CS используется GPIO; где нет - аппаратный CS.

В документации ядра есть описание.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 переписывается ногодрыгом
но полез искать-читать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...