User Info
Добро пожаловать, Guest Пользователей: 1 Поисковых ботов: 3 Гостей: 1
Google Bot forum oBot account Richardlam about Yandex Bot account
Kamil_ufa
Пункты: 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
Пункты: 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
Пункты: 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
Пункты: 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
Пункты: 83552
Регистрация: 14.08.2009
Kamil_ufa
Пункты: 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 | ......@....▒..................▒.
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
Пункты: 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
Пункты: 83552
Регистрация: 14.08.2009
Цитата
лучше было дописать пины порта PI а не подправлять порт PC
должно работать и так и так но как у вас сейчас путаница получается - порт как будто PC а на самом деле пины PI
Kamil_ufa
Пункты: 272
Регистрация: 01.04.2024
Благодарю за помощь!
В итоге я понял что шина SPI работает, потому что осциллограф показывает всплески сигналов SCK, MOSI. Не работал MISO. У меня подключена микросхема FRAM FM25W256-G, как оказалось, у неё есть свой протокол работы и теперь надо разобраться с ним. (Кстати, никто не подскажет готовую библиотеку на с/с++ для работы с ней?)
так что теперь буду разбираться как работать с этой микросхемой. Какие команды/утилиты посоветуете чтобы отправлять/принимать пакеты с неё?
На всякий случай прикладываю свои dts и dtsi файлы
Kamil_ufa
Пункты: 272
Регистрация: 01.04.2024