Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

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

User Info


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

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

Ник:
Пароль:

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

ОбновитьПодробнееВсегоВсего:5
Форум » starterkit.ru » Процессорные модули » SK-A40i-NANO(-2E)(-V)
Настройка spi
Kamil_ufa
Добавлено 01.04.2024 12:04
0
Сообщение: 1
Kamil_ufa
0

Пункты: 272
Регистрация: 01.04.2024
Добрый день!

Подскажите как сконфигурировать дерево устройств или menuconfig, чтобы модуль видел шину spi и устройства на нем. Что сделал:
1) в файле sun8i-r40.dtsi описано:
spi0: spi@1c05000 {
compatible = "allwinner,sun8i-r40-spi",
"allwinner,sun8i-h3-spi";
reg = <0x01c05000 0x1000>;
interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ccu CLK_BUS_SPI0>, <&ccu CLK_SPI0>;
clock-names = "ahb", "mod";
resets = <&ccu RST_BUS_SPI0>;
status = "disabled";
#address-cells = <1>;
#size-cells = <0>;
};
.............
spi0_pc_pins: spi0-pc-pins {
pins = "PI11", "PI12", "PI13";
function = "spi0";
};

/omit-if-no-ref/
spi0_cs0_pc_pin: spi0-cs0-pc-pin {
pins = "PI10";
function = "spi0";
};

2) в файле sun8i-a40i-nano2e-nano-sk.dts:
&spi0 {
status = "okay";
};

3) в linux-menuconfig, раздел Device drivers, SPI support включено:
AllWinner A10 socs SPI controller
AllWinner A31 SPI controller
Usermode SPI device driver support
Utilites for Bitbanging SPI masters
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 01.04.2024 14:36 Сообщение: 2
sasamy
4.71

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

Подскажите как сконфигурировать дерево устройств или menuconfig, чтобы модуль видел шину spi и устройства на нем.


штатно нужно в дереве устройств прописать драйвер устройства которое вы подключаете к spi.

Есть альтернативный вариант - без драйвера обращаться к шине spi из юзерспейс через /dev/spidevX.X

http://www.starterkit.ru/html/index.php?name=forum&op=view&id=29807#31319
Спуститься к концу Подняться к началу
Персональная информация
Kamil_ufa
Добавлено 01.04.2024 15:32 Сообщение: 3
Kamil_ufa
0

Пункты: 272
Регистрация: 01.04.2024
Пытаюсь так делать, как советуете. Возникают следующие ошибки:

# dmesg | grep spi
[ 12.111990] sun4i-pinctrl 1c20800.pinctrl: pin-273 (1c05000.spi) status -517
[ 12.129778] sun6i-spi 1c05000.spi: Error applying setting, reverse things back
[ 14.564547] sun6i-spi 1c05000.spi: Failed to request TX DMA channel
[ 14.576211] sun6i-spi 1c05000.spi: Failed to request RX DMA channel

ЧТО БЫЛО ИЗМЕНЕНО:
1) файл sun8i-a40.dtsi:
spi0: spi@1c05000 {
compatible = "allwinner,sun8i-r40-spi",
"allwinner,sun8i-h3-spi";
reg = <0x01c05000 0x1000>;
interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ccu CLK_BUS_SPI0>, <&ccu CLK_SPI0>;
clock-names = "ahb", "mod";
resets = <&ccu RST_BUS_SPI0>;
status = "disabled";
#address-cells = <1>;
#size-cells = <0>;
};
.....
/omit-if-no-ref/
spi0_pi_pins: spi0-pi-pins {
pins = "PI11", "PI12", "PI13";
function = "spi0";
};

/omit-if-no-ref/
spi0_cs0_pi_pin: spi0-cs0-pi-pin {
pins = "PI10";
function = "spi0";
};


2) файл sun8i-a40i-nano2e-none-sk.dts:
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pi_pins>,
<&spi0_cs0_pi_pin>;
status = "okay";
spidev@0 {
compatible = "menlo,m53cpld";
reg = <0>; /* Адрес устройства на шине SPI */
spi-max-frequency = <10000000>; /* Максимальная частота SPI в герцах */
};
};
Спуститься к концу Подняться к началу
Персональная информация
Kamil_ufa
Добавлено 01.04.2024 15:35 Сообщение: 4
Kamil_ufa
0

Пункты: 272
Регистрация: 01.04.2024
Цитата
Пытаюсь так делать, как советуете. Возникают следующие ошибки:

# dmesg | grep spi
[ 12.111990] sun4i-pinctrl 1c20800.pinctrl: pin-273 (1c05000.spi) status -517
[ 12.129778] sun6i-spi 1c05000.spi: Error applying setting, reverse things back
[ 14.564547] sun6i-spi 1c05000.spi: Failed to request TX DMA channel
[ 14.576211] sun6i-spi 1c05000.spi: Failed to request RX DMA channel

ЧТО БЫЛО ИЗМЕНЕНО:
1) файл sun8i-a40.dtsi:
spi0: spi@1c05000 {
compatible = "allwinner,sun8i-r40-spi",
"allwinner,sun8i-h3-spi";
reg = <0x01c05000 0x1000>;
interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ccu CLK_BUS_SPI0>, <&ccu CLK_SPI0>;
clock-names = "ahb", "mod";
resets = <&ccu RST_BUS_SPI0>;
status = "disabled";
#address-cells = <1>;
#size-cells = <0>;
};
.....
/omit-if-no-ref/
spi0_pi_pins: spi0-pi-pins {
pins = "PI11", "PI12", "PI13";
function = "spi0";
};

/omit-if-no-ref/
spi0_cs0_pi_pin: spi0-cs0-pi-pin {
pins = "PI10";
function = "spi0";
};


2) файл sun8i-a40i-nano2e-none-sk.dts:
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pi_pins>,
<&spi0_cs0_pi_pin>;
status = "okay";
spidev@0 {
compatible = "menlo,m53cpld";
reg = <0>; /* Адрес устройства на шине SPI */
spi-max-frequency = <10000000>; /* Максимальная частота SPI в герцах */
};
};

Поправка, сообщение об ошибках было таким:
# dmesg | grep spi
[ 12.114580] sun4i-pinctrl 1c20800.pinctrl: pin-267 (1c05000.spi) status -517
[ 12.132451] sun6i-spi 1c05000.spi: Error applying setting, reverse things back
[ 14.574267] sun6i-spi 1c05000.spi: Failed to request TX DMA channel
[ 14.580753] sun6i-spi 1c05000.spi: Failed to request RX DMA channel
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 01.04.2024 16:26 Сообщение: 5
sasamy
4.71

Пункты: 83552
Регистрация: 14.08.2009
Цитата
[quote]Пытаюсь так делать, как советуете. Возникают следующие ошибки:

# dmesg | grep spi
[ 12.111990] sun4i-pinctrl 1c20800.pinctrl: pin-273 (1c05000.spi) status -517
[ 12.129778] sun6i-spi 1c05000.spi: Error applying setting, reverse things back


эти ошибки не влияют на работу - должны появиться устройства /dev/spidevXX если драйвер включен в ядре

http://starterkit.ru/html/index.php?name=forum&op=view&id=31486&last#31488

Цитата

[ 14.574267] sun6i-spi 1c05000.spi: Failed to request TX DMA channel
[ 14.580753] sun6i-spi 1c05000.spi: Failed to request RX DMA channel


если нужен DMA - надо дописать каналы в DT

http://starterkit.ru/html/index.php?name=forum&op=view&id=31486&last#31493

в примере порт 25 для spi1, для spi0 порт 24
Спуститься к концу Подняться к началу
Персональная информация
Kamil_ufa
Добавлено 01.04.2024 19:56 Сообщение: 6
Kamil_ufa
0

Пункты: 272
Регистрация: 01.04.2024
Дело в том, что устройство не откликается.

# spidev_test -v -D /dev/spidev0.0
spi mode: 0x0
bits per word: 8
max speed: 500000 Hz (500 KHz)
TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D | ......@....&#9618;..................&#9618;.
RX | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 01.04.2024 20:48 Сообщение: 7
sasamy
4.71

Пункты: 83552
Регистрация: 14.08.2009
Цитата
Дело в том, что устройство не откликается.


не заметил сразу - у вас пины не переключены на spi, добавьте в файле sun8i-a40i-nano2e-nano-sk.dts

&spi0 {

pinctrl-names = "default";
pinctrl-0 = <&spi0_pc_pins>,
<&spi0_cs0_pc_pin>;

status = "okay";
};

и лучше было дописать пины порта PI а не подправлять порт PC

/omit-if-no-ref/
spi0_pi_pins: spi0-pi-pins {
pins = "PI11", "PI12", "PI13";
function = "spi0";
};

/omit-if-no-ref/
spi0_cs0_pi_pin: spi0-cs0-pi-pin {
pins = "PI10";
function = "spi0";
};

и указать их соответственно в описании spi

&spi0 {

pinctrl-names = "default";
pinctrl-0 = <&spi0_pi_pins>,
<&spi0_cs0_pi_pin>;

status = "okay";
};
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 01.04.2024 20:51 Сообщение: 8
sasamy
4.71

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

лучше было дописать пины порта PI а не подправлять порт PC


должно работать и так и так но как у вас сейчас путаница получается - порт как будто PC а на самом деле пины PI
Спуститься к концу Подняться к началу
Персональная информация
Kamil_ufa
Добавлено 02.04.2024 16:14 Сообщение: 9
Kamil_ufa
0

Пункты: 272
Регистрация: 01.04.2024
Благодарю за помощь!

В итоге я понял что шина SPI работает, потому что осциллограф показывает всплески сигналов SCK, MOSI. Не работал MISO. У меня подключена микросхема FRAM FM25W256-G, как оказалось, у неё есть свой протокол работы и теперь надо разобраться с ним. (Кстати, никто не подскажет готовую библиотеку на с/с++ для работы с ней?)

так что теперь буду разбираться как работать с этой микросхемой. Какие команды/утилиты посоветуете чтобы отправлять/принимать пакеты с неё?

На всякий случай прикладываю свои dts и dtsi файлы
Спуститься к концу Подняться к началу
Персональная информация
Kamil_ufa
Добавлено 02.04.2024 16:21 Сообщение: 10
Kamil_ufa
0

Пункты: 272
Регистрация: 01.04.2024
Ссылка на dts в файлообменнике
https://www.sendspace.com/file/022c8p
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Процессорные модули » SK-A40i-NANO(-2E)(-V)