Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:2
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:6
Форум » starterkit.ru » Отладочные платы » SK-NUC976
SPI - один мастер и три слайв
prtk
Добавлено 15.03.2023 13:30
0
Сообщение: 1
prtk
0

Пункты: 1412
Регистрация: 22.03.2021
Подскажите пожалуста, как реализовать на одном SPI порту три устройства праллельно?
Одно устройство - только чтение
втрое - только запись
третье - чтение/запись

Все устройства в юзер моде.
Спасибо!
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 15.03.2023 14:24 Сообщение: 2
sasamy
4.70

Пункты: 76501
Регистрация: 14.08.2009
Цитата
Подскажите пожалуста, как реализовать на одном SPI порту три устройства праллельно?


в драйвере реализован только один CS, судя по даташиту через SSR рулить можно двумя CS. Если вместо SSR рулить вручную - можно сколько угодно сделать CS из свободных GPIO но надо драйвер править на управление не через SSR а через GPIO.
Спуститься к концу Подняться к началу
Персональная информация
prtk
Добавлено 15.03.2023 14:42 Сообщение: 3
prtk
0

Пункты: 1412
Регистрация: 22.03.2021
в драйвере реализован только один CS, судя по даташиту через SSR рулить можно двумя CS. Если вместо SSR рулить вручную - можно сколько угодно сделать CS из свободных GPIO но надо драйвер править на управление не через SSR а через GPIO.[/quote]

Да. Именно так и надо нам!
Как это сделать через GPIO? Как подправить драйвер?
Спасибо!
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 15.03.2023 16:11 Редактировалось 15.03.2023 16:14 Сообщение: 4
sasamy
4.70

Пункты: 76501
Регистрация: 14.08.2009
Цитата
Как это сделать через GPIO? Как подправить драйвер?


дописать еще несколько девайсов по аналогии

https://github.com/OpenNuvoton/NUC970_Linux_Kernel/blob/master/arch/arm/mach-nuc970/dev.c#L902

.chip_select = 2,3,4

указать сколько нужно чипселектов

https://github.com/OpenNuvoton/NUC970_Linux_Kernel/blob/master/arch/arm/mach-nuc970/dev.c#L913

в драйвеере в зависимости от номера чипселекта устанавливать соответствующий gpio

https://github.com/OpenNuvoton/NUC970_Linux_Kernel/blob/master/drivers/spi/spi-nuc970-p0.c#L91

используя ф-ции работы с gpio вместо чтения/записи регистров spi контроллера

https://elixir.bootlin.com/linux/v3.10.108/source/drivers/i2c/busses/i2c-gpio.c#L47

при инициализации запросить нужные gpio по примеру

https://elixir.bootlin.com/linux/v3.10.108/source/drivers/i2c/busses/i2c-gpio.c#L147

и установить их на выход

https://elixir.bootlin.com/linux/v3.10.108/source/drivers/i2c/busses/i2c-gpio.c#L58
Спуститься к концу Подняться к началу
Персональная информация
prtk
Добавлено 15.03.2023 17:09 Сообщение: 5
prtk
0

Пункты: 1412
Регистрация: 22.03.2021
Цитата
Цитата
Как это сделать через GPIO? Как подправить драйвер?


используя ф-ции работы с gpio вместо чтения/записи регистров spi контроллера


Это получается программный SPI!
А нельзя заменить только SSR-CS на GPIO-CS?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 15.03.2023 17:41 Сообщение: 6
sasamy
4.70

Пункты: 76501
Регистрация: 14.08.2009
Цитата

Это получается программный SPI!


нет = это получается вы даже не удосужились сходить по ссылкам, про замену написано в контексте переключения CS.
Спуститься к концу Подняться к началу
Персональная информация
prtk
Добавлено 23.03.2023 10:42 Сообщение: 7
prtk
0

Пункты: 1412
Регистрация: 22.03.2021
про замену написано в контексте переключения CS.[/quote]

Работает, но очень странно.
Все сделал для SPI1.

В загрузке ядра пишет:
nuc970-spi1 nuc970-spi1: master is unqueued, this is deprecated
Что бы это значило?

Номер устройства ловится. GPIO CS работает.

1. Получилась длительность CS неприлично большая.
Передача одного байта при CLK 400 кГц
Длительность посылки - 20 микросекунд
Длительность CS получилась - 2.8 миллисекунд.

2. Если передавать несколько байт за одну команду, то CS формируется на каждый байт.

Чего то то еще не хватает...
Подскажите пожалуйста, куда копать!
Спасибо!
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Отладочные платы » SK-NUC976