Включение SPI • Драйвер spidev
- СКИФ / К1892ВМ21Я
- 1892ВМ14Я
Руководство иллюстрирует использование порта SPI0 микросхем СКИФ или К1892ВМ21Я с драйвером spidev. Пример применим к отладочным комплектам:
- ELV-SMARC-CB r2.10.3 с установленным ELV-MC03-SMARC r1.1.
- ELV-SMARC-CB r3.3.0 с установленным ELV-MC03-SMARC r3.0.
Руководство иллюстрирует использование порта SPI1 микросхемы 1892ВМ14Я с драйвером spidev. Пример применим только к отладочному модулю Салют-ЭЛ24ОМ1 с установленным Салют-ЭЛ24ПМ2.
Для конфигурации DTS для других модулей необходимо руководствоватся схемой электрической на выбранный модуль и учитывать схему подключения процессора к периферийным устройствам.
Добавить в файл DTS описание spidev
- К1892ВМ21Я
- СКИФ
- 1892ВМ14Я
На разъем XP14 отладочного модуля выведены два CS (CS0 и CS1), а также сигналы CLK, MOSI, MISO.
- CS0 - Используется для общения с микросхемой NOR-флеш W25Q128JW.
- CS1 - Свободен.
-
Скачать необходимую версию Buildroot с сайта (достаточно архива *defconfig-src.tar.gz).
-
Распаковать и перейти в папку mcom03r-defconfig-src.
-
Распаковать архив
./buildroot/dl/linux/linux-mcom03-6.6.y-br1.tar.gzв произвольную папку. Далее по тексту путь к папке обозначенCUSTOM_LINUX_PATH. -
В файле
CUSTOM_LINUX_PATH/linux-headers-mcom03-6.6.y/arch/arm64/boot/dts/elvees/mcom03r-elvmc03smarc-r3.0.0-elvsmarccb-r3.3.0.dts, в блок&spi0{ ... }добавить:spidev: spidev@1{
status = "okay";
compatible = "rohm,dh2228fv";
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <500000>;
};Эти строки добавляют поддержку драйвера spidev для указанного SPI контроллера.
-
Сохранить изменения.
-
Создать файл
./buildroot/local.mk. -
Прописать в него путь к исходникам ядра
LINUX_OVERRIDE_SRCDIR = <CUSTOM_LINUX_PATH>/linux-headers-mcom03-6.6.y.warningпуть CUSTOM_LINUX_PATH - должен быть абсолютным без пробелов.
-
Применить defconfig
./docker-build.sh make mcom03r_defconfig -
Войти в menuconfig
./docker-build.sh make menuconfig -
Добавить spidev_test: Target packages → Debugging, profiling and benchmark → [*] spidev_test.
-
Сохранить конфигурацию и выйти.
-
Запустить сборку
./docker-build.sh makeЛибо пересобрать только ядро
./docker-build.sh 'make linux-rebuild && make' -
Записать полученный образ
buildroot/output/images/rootfs.tar.gzна uSD. -
Запустить модуль и проверить наличие файла вида /dev/spidevX.Y
На разъем XP6 отладочного модуля выведены два CS (CS0 и CS1), а также сигналы CLK, MOSI, MISO.
- CS0 - Используется для общения с микросхемой NOR-флеш W25Q128JW.
- CS1 - Свободен.
-
Скачать необходимую версию Buildroot с сайта (достаточно архива *defconfig-src.tar.gz).
-
Распаковать и перейти в папку mcom03-defconfig-src.
-
Распаковать архив
./buildroot/dl/linux/linux-mcom03-5.10.y-br1.tar.gzв произвольную папку. Далее по тексту путь к папке обозначенCUSTOM_LINUX_PATH. -
В файле
CUSTOM_LINUX_PATH/linux-headers-mcom03-5.10.y/arch/arm64/boot/dts/elvees/mcom03-elvmc03smarc-r1.0-elvsmarccb-r2.10.dts, в блок&spi0{ ... }добавить:spidev: spidev@1{
status = "okay";
compatible = "linux,spidev";
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <500000>;
}; -
Сохранить изменения.
-
Создать файл
./buildroot/local.mk. -
Прописать в него путь к исходникам ядра
LINUX_OVERRIDE_SRCDIR = <CUSTOM_LINUX_PATH>/linux-headers-mcom03-5.10.y.warningпуть CUSTOM_LINUX_PATH - должен быть абсолютным без пробелов.
-
Применить defconfig
./docker-build.sh make mcom03_defconfig -
Войти в menuconfig
./docker-build.sh make menuconfig -
Добавить spidev_test: Target packages → Debugging, profiling and benchmark → [*] spidev_test.
-
Сохранить конфигурацию и выйти.
-
Запустить сборку
./docker-build.sh makeЛибо пересобрать только ядро
./docker-build.sh 'make linux-rebuild && make' -
Записать полученный образ
buildroot/output/images/rootfs.tar.gzна uSD. -
Запустить модуль и проверить наличие файла вида /dev/spidevX.Y
На разъем XP5 отладочного модуля выведены два CS (CS0 и CS1), а также сигналы CLK, MOSI, MISO.
В инструкции используется версия Buildroot 2025.06 и версия ядра 4.4. Для версии ядра 5.4 необходимо учитывать другое расположение файлов.
-
Скачать последнюю версию Buildroot с сайта (достаточно архива *defconfig-src.tar.gz).
-
Распаковать архив и перейти в папку mcom02-defconfig-src.
-
Распаковать архив
./buildroot/dl/linux/linux-mcom02-4.4.y.tar.gzв произвольную папку. Далее по тексту путь к папке обозначенCUSTOM_LINUX_PATH. -
В файле
CUSTOM_LINUX_PATH/linux-headers-mcom02-4.4.y/arch/arm/boot/dts/elvees/mcom02-salute-el24om1-r1.1-1.2.dtsiпосле блока&spi0{ ... }добавить:&spi1 {
num-cs = <2>;
cs-gpios = <&gpioa 25 0>,<&gpioa 26 0>; //nCS0 GPIO -> SPI
status = "okay";
spidev: spidev@0{
compatible = "linux,spidev";
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <6000000>;
status = "okay";
};
}; -
Дописать
spi1 = &spi1в блок aliases:aliases {
spi0 = &spi0;
spi1 = &spi1;
}; -
Сохранить изменения в файле.
-
Создать файл
./buildroot/local.mk. -
Прописать в него в него путь к исходникам ядра
LINUX_OVERRIDE_SRCDIR = <CUSTOM_LINUX_PATH>/linux-headers-mcom02-4.4.y.warningпуть CUSTOM_LINUX_PATH - должен быть абсолютным без пробелов.
-
Применить defconfig
./docker-build.sh make mcom02_defconfig -
Для добавления поддержки драйвера в ядре необходимо вызвать конфигуратор ядра Linux
./docker-build.sh make linux-menuconfig -
Выбрать пункт (клавиша
M)Device Drivers → SPI support → User mode SPI device driver support (перемещение по меню — стрелки, перейти в пункт — пробел).
-
Выйти из menuconfig, согласиться с сохранением конфига.
-
Войти в конфигуратор Buildroot
./docker-build.sh make menuconfig. -
Включить тесты
Target packages → Debugging, profiling and benchmark → [*] spidev_test.
-
Сохранить и выйти.
-
Запустить сборку Linux:
./docker-build.sh makeЛибо пересобрать только ядро./docker-build.sh 'make linux-rebuild && make' -
Записать полученный образ
buildroot/output/images/rootfs.tar.gzна uSD. -
Запустить модуль и проверить наличие файла вида /dev/spidevX.Y
Опционально можно включить Python-модуль:
-
./docker-build.sh make menuconfig -
Target packages → Interpreter languages and scripting → External python modules → [*] python-spidev
-
Пересобрать python:
./docker-build.sh 'make python-rebuild && make'
Тестирование интерфейса
spidev_test
-
Соединить контакты MISO и MOSI.
- СКИФ / К1892ВМ21Я
- 1892ВМ14Я

Распиновка разъема GPIO HEADER на отладочной плате 
Распиновка разъема GPIO HEADER на отладочной плате 
Фото GPIO HEADER -
Запуск приложения:
spidev_test -D /dev/spidevX.YВывод командыspi mode: 0x0
bits per word: 8
max speed: 500000 Hz (500 KHz)
RX | 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 -
Для проверки работоспособности создайте файл test.bin и внести в него любые данные:
echo "1234-hello-from-spi-000123" > test.bin -
Запуск теста:
spidev_test -D /dev/spidevX.Y -i test.bin -o result.bin -
Должен появиться файл result.bin содержимое которого идентично test.bin.
cat result.bin
1234-hello-from-spi-000123
Python-пример
-
На плате создать текстовый файл spi-test.py.
-
Скопировать в него код:
import argparse
import spidev
def freq_test(spi):
send = bytearray(b"hello world")
good_result = "hello world"
kHz = 1000
MHz = 1000000
speeds = [
10 * kHz,
30 * kHz,
100 * kHz,
300 * kHz,
1 * MHz,
3 * MHz,
10 * MHz,
30 * MHz,
40 * MHz,
50 * MHz,
]
print("{:<15} {:<30}".format("Speed, Hz", "error_cnt"))
for speed in speeds:
i = 0
error_cnt = 0
while i < 10:
ret = spi.xfer(send, speed, 0, 8)
ret = "".join(chr(e) for e in ret)
if ret != good_result:
error_cnt += 1
i += 1
print("{:<15} {:<30}".format(speed, error_cnt))
def main():
parser = argparse.ArgumentParser(
description="Script for SPI loopback test on different speeds. "
"Required to connect MISO and MOSI by one wire. "
)
parser.add_argument(
"-p",
"--port",
default="/dev/spidev2.0",
help="Spidev device (/dev/spidevX.Y)",
)
args = parser.parse_args()
spi_bus = int(args.port.replace("/dev/spidev", "")[0])
spi_device = int(args.port.replace("/dev/spidev", "")[-1])
spi = spidev.SpiDev()
spi.open(spi_bus, spi_device)
freq_test(spi)
if __name__ == "__main__":
main() -
Запуск примера:
python spi-test.py -p /dev/spidevX.YРезультат тестаSpeed, Hz error_cnt
10000 0
30000 0
100000 0
300000 0
1000000 0
3000000 0
10000000 0
30000000 0
40000000 0
50000000 0
Образ файловой системы с spidev
По ссылке доступны образы файловой системы (rootfs.tar.gz) для прошивки на uSD для следующих отладочных комплектов:
- ELV-SMARC-CB r2.10.3 с установленным ELV-MC03-SMARC r1.1.
- ELV-SMARC-CB r3.3.0 с установленным ELV-MC03-SMARC r3.0.
- Салют-ЭЛ24ОМ1 с установленным Салют-ЭЛ24ПМ2