LINUX.ORG.RU

Общение через SPI TurboX D845 SOM и контроллера stm32

 ,


0

1

Всем здравствуйте!

На работе хотят сделать плату и в качестве вычислителя поставить туда TurboX™ D845 SOM, а обмен сделать через SPI. Для теста сделали демо-версию софта и запустили ее на их же development kit’е RB3 platform, с ним разобрались и все работает как надо. А дальше возник вопрос, как подружить с одной стороны контроллер и этот D845. Собственно, в user space я как раз с ним и ковырялся, но внезапно­­™ вопрос обмена тоже упал на меня, а тут у меня уже знаний linux вообще и специфики мягко говоря не хватает. Подскажите пожалуйста, как быть?

На этом kit’е использовали готовый образ linux (есть по ссылке). Как меня уверяют, на stm сделают slave если надо.

Я, естественно, поковырялся и вылез ряд вариантов/вопросов:

    1. Использовать spidev. Но никаких файлов /dev/spidev*.* нет. Если я правильно понял, то в сборке ядра в конфиге он есть. Но при этом spi должен был быть правильно указан в device tree? Значит ли это, что его не указали и через spidev не достучаться? Можно ли тут что-то сделать с этой стороны?
    1. Написать свой драйвер. В принципе, я могу попробовать. Но тут вылезла еще засада: собрал хелло ворлдный драйвер, попробовал сделать ему insmod и получил что-то вроде Required key not available. Это свидетельство secure boot? Это как-то вообще обходится? Я, конечно, погуглил как отключить, но mokutil нет, можно попробовать собрать. Но мне что-то кажется, что это только для desktop и стандартных загрузчиков, я не прав?
    1. Надо делать свой образ linux + любой из п.1 и п.2. Ну тут я вообще пока не очень представляю что к чему. Насколько это вообще будет реально сделать под эту конкретную железку (не знаю, какие-то засады с драйверами, может что-то нужно от производителя)? Понятно, что вопрос расплывчатый, извиняюсь, но буду признателен за комментарии.

Заранее спасибо!

Для начала использовать spidev

никаких файлов /dev/spidev*.* нет … значит ли это, что его не указали и через spidev не достучаться?

как минимум надо смотреть исходники DTS и схему соединений чтобы знать куда прописывать, а прописывается элементарно

https://www.emcraft.com/som/stm32f7-240/accessing-spi-devices-in-linux

anonymous ()

Но никаких файлов /dev/spidev*.* нет

Я не так силен в таких вопросах, но может быть у тебя модули драйверов не подключены или просто файлы в самих /dev никто не создал.

Может стоит посмотреть в /sys/bus/spi что там ОС видит по части драйверов и устройств?

pathfinder ★★★ ()
Ответ на: комментарий от anonymous

Я немного криво выразился - с stm32 и без меня разберутся. Мне нужна сторона этого сома.

как минимум надо смотреть исходники DTS

Да, похожее я читал (правда бегло пока). Но я ведь правильно понял, что эти файлы используются при сборке ядра? А тут у меня уже готовый образ.

tarvitz ()
Ответ на: комментарий от tarvitz

с stm32 и без меня разберутся

это я понял, пример для Linux, просто так совпало что там тоже stm32

А тут у меня уже готовый образ

исходники всё равно есть в открытом доступе, зачем он вообще без них нужен, это же не смартфон - как к плате что-то подключить своё без исходников ?

anonymous ()
Ответ на: комментарий от pathfinder

Я не так силен в таких вопросах, но может быть у тебя модули драйверов не подключены или просто файлы в самих /dev никто не создал.

Я извиняюсь, можно подробнее - для чайников) То есть я могу попробовать создать файл, но тут же нужен mknod? А откуда мне параметры взять? Опять же я могу lsmod посмотреть, но там ничего нет.

Может стоит посмотреть в /sys/bus/spi что там ОС видит по части драйверов и устройств?

Вообще, есть директории типа /sys/bus/spi/devices/spi0.0 и /sys/module/spidev, но какую полезную информацию мне можно оттуда извлечь и что с этим делать?

ls -l /sys/bus/spi/devices/
total 0
lrwxrwxrwx 1 root root 0 Feb 22 10:56 spi0.0 -> ../../../devices/platform/soc/894000.spi/spi_master/spi0/spi0.0
lrwxrwxrwx 1 root root 0 Feb 22 10:56 spi32765.0 -> ../../../devices/platform/soc/888000.spi/spi_master/spi32765/spi32765.0
lrwxrwxrwx 1 root root 0 Feb 22 10:56 spi32766.0 -> ../../../devices/platform/soc/880000.spi/spi_master/spi32766/spi32766.0

/sys/devices/platform/soc/894000.spi/spi_master/spi0/spi0.0 # ls
driver	modalias  of_node  power  statistics  subsystem  uevent

tarvitz ()
Ответ на: комментарий от anonymous

исходники всё равно есть в открытом доступе, зачем он вообще без них нужен

Хз, чет я ковырялся - не нашел, но еще поищу повнимательнее, может саппорт потрясу. Спасибо!

tarvitz ()
Ответ на: комментарий от tarvitz

То есть я могу попробовать создать файл, но тут же нужен mknod

Насколько я знаю, в /dev файлы устройств сами по себе не появляются. Либо ты руками их создашь через mknod, либо это сделает за тебя udev, если будет правильно сконфигурирован на такие устройства.

Судя по выводу ls, я предполагаю, что ОС видит три порта для master SPI - spi0,spi32765,spi32766.

Но я могу где-то ошибаться. Будет лучше, если тебе разъяснит кто-то более знакомый с темой.

pathfinder ★★★ ()

Документация про Device Tree

Для решение твоей задачи нужно сделать следующее:

  1. Разобраться с Device Tree в TurboX™ D845 SOM. Для понимания почитай мои публикации https://devdotnet.org/post/rabota-s-gpio-na-primere-banana-pi-bpi-m64-chast-2-device-tree-overlays/ и https://devdotnet.org/post/rabota-s-gpio-na-primere-banana-pi-bpi-m64-chast-1-interfejs-sysfs-led-i-ds18b20/
  2. Оценить ТЗ какая нужна скорость обмена данными. Потому что выбор SPI или I2C. Если требуется высокая скорость, то лучше SPI.
  3. Возможно образ для TurboX™ D845 SOM пересобирать не потребуется, если сделан на последних ядрах Linux, и нормальные опции компиляции.
  4. Исходя из ТЗ определиться какие функции необходимо реализовать название входные выходные данные формат.
  5. Определить адреса регистров для функций(пункт 4)
  6. Под пункт 4 и 5 сделать драйвер для Linux.
  7. Сделать тестовую программу обмена данными на Linux использующую свой драйвер

PROFIT!

antondeveloper ()
Ответ на: Документация про Device Tree от antondeveloper

Re: Документация про Device Tree

Оценить ТЗ какая нужна скорость обмена данными. Потому что выбор SPI или I2C. Если требуется высокая скорость, то лучше SPI.

Почему не рассматривается UART? По моему самое простое. А I2C предназначается для того чтобы вешать на одну линию кучу устройств, из-за чего появляется куча лишних заморочек.

anonymous ()
Ответ на: Re: Документация про Device Tree от anonymous

Согласен, UART самый простой. Автор темы не уточнил сколько микроконтроллеров необходимо подключить к SOM. Может быть ему требуется 20 штук подключать. Поэтому выбор интерфейса общения будет зависеть от ТЗ.

antondeveloper ()
Ответ на: Документация про Device Tree от antondeveloper

О, спасибо большое, почитаю (сорри за затуп с ответом). Если кому будет интересно, выяснилось, что существует ряд исходников под эту плату, например на 96boards (но там возможны ограничения, не проверял). Но что более интересно, непосредственно от производителя, которые они продают отдельно, но нигде об этом не сказано. SPI для скорости закладывали.

tarvitz ()
Ответ на: комментарий от tarvitz

/dev/spidev*.* - это драйвер для работы из user space. В публикации Работа с GPIO в Linux на примере Banana Pi BPI-M64. Часть 4. Device Tree overlays. Подключение дисплея SPI LCD ILI9341 я пробовал одновременно запустить SPI дисплей и spidev. В итоге у меня получилось запустить spidev и SPI дисплей,только порознь, либо spidev, либо SPI дисплей, что для меня не подходило. Далее, если говорить о софте на железке, то как вариант рассмотреть написание на .NET 5 C#. Для Linux есть библиотека libgpiod, через нее .NET код может использовать любую периферию GPIO (SPI,I2C). Работает отлично, скорость по сравнению с sysfs гораздо выше. Сейчас готовлю публикацию на эту тему.

antondeveloper ()