Включение и настройка SPI (SPI0 и SPI1) на Orange Pi на ядрах 3.4 (Ubuntu 16.04) и 4.14 (Ubuntu 18.04).

Интерфейс SPI (англ. Serial Peripheral Interface, SPI bus — последовательный периферийный интерфейс, шина SPI) — это последовательный четырёх-проводной интерфейс передачи данных, предназначенный для обеспечения простого и недорогого высокоскоростного сопряжения микроконтроллеров и периферии.

Сколько SPI портов на Orange Pi

Если брать классический Orange Pi с GPIO на 40 пин, то мы имеем полтора SPI порта. Смотрим распиновку Orange Pi PC:
Включение и настройка SPI на Orange Pi - GPIO SPI0 и SPI1
отсюда видно, что на гребёнке только один полноценный SPI порт — это SPI0.

Номер пина CPU SPI0
PC0 MOSI
PC1 MISO
PC2 CLK
PC3 CS

Порт SPI1 присутствует только в виде CLK и CS, что явно недостаточно. Если открыть документ-схему платы, то мы обнаружим следующее:
Включение и настройка SPI на Orange Pi - CPU SPI1

Номер пина CPU SPI1
PA13 CS
PA14 CLK
PA15 MOSI
PA16 MISO

MOSI идёт на индикатор состояния (STATUS-LED),
Включение и настройка SPI на Orange Pi - SPI1 MOSI (STATUS-LED)
а MISO идёт на комбинированный разъём Mini-Jack 3.5 мм и отключает звук при подключении провода.
Включение и настройка SPI на Orange Pi - SPI1 MISO Mini-Jack 3.5В таком случае, только если вы очень настойчив и вам «очень нужен» этот SPI1 порт, можете распаять светодиодный индикатор и разъём Mini-Jack 3.5 мм и припаять нужное вам устройство. Но это не рекомендуется делать.

Включение шины SPI на Orange Pi

По умолчанию шина SPI0 на Orange Pi отключена. Для включения выполните следующие действия.

Включение шины SPI на ядре 3.4 (Ubuntu 16.04)

Чтобы включить шину SPI на ядре 3.4, нужно редактировать script.bin файл. script.bin — главный конфигурационный файл ядра использующийся при загрузке ОС на платах Orange Pi (и остальных, базирующихся на sunxi). Это скомпилированный бинарный файл, внесение правок в который — невозможно.
Файл создается при помощи утилиты fex2bin из набора sunxi-tools из текстового файла имя_файла.fex.

  1. Не забывайте сделать резервную копию script.bin, чтобы смогли вернуть обратно все настройки, в случае не правильного редактирования файла:
    sudo cp /boot/script.bin /boot/script.bak
  2. Декомпилируйте бинарный файл script.bin в редактируемый файл fex:
    sudo bin2fex /boot/script.bin /boot/script.fex
  3. Теперь отредактируйте файл script.fex с помощью утилиты nano, но можете использовать и другой текстовый редактор, к примеру pluma:
    sudo nano /boot/script.fex
  4. Теперь вам нужно перейти в раздел [spi0] или [spi1] и включить интерфейс, изменив значение строки spi_used из «0» в «1»:
    spi_used = 1

    В результате вы должны поличить примерно такой результат:

    [spi0]
    spi_used = 1
    spi_cs_bitmap = 1
    spi_mosi = port:PC00<3><default><default><default>
    spi_miso = port:PC01<3><default><default><default>
    spi_sclk = port:PC02<3><default><default><default>
    spi_cs0 = port:PC03<3><1><default><default>
    
    [spi1]
    spi_used = 1
    spi_cs_bitmap = 1
    spi_cs0 = port:PA13<2><1><default><default>
    spi_sclk = port:PA14<2><default><default><default>
    spi_mosi = port:PA15<2><default><default><default>
    spi_miso = port:PA16<2><default><default><default>
    

    Если вы планируете использовать только одну шину 0 (spi0), тогда выключите шину [spi1], изменив значение строки spi_used из «1» в «0».

  5. В разделе [spi_devices] вам нужно будет указать количество SPI шин, если вы планируете использовать только одну шину, просто введите 1:
    [spi_devices]
    spi_dev_num = 1

    или 2, если нужны обе шины:

    [spi_devices]
    spi_dev_num = 2
  6. Теперь нужно задать параметры последовательного периферийного интерфейса в разделе [spi_board0]:
    [spi_board0]
    modalias = "spidev"
    max_speed_hz = 33000000
    bus_num = 0
    chip_select = 0
    mode = 0
    full_duplex = 1
    manual_cs = 0

    а если надумали настроить и spi1, тогда добавьте раздел [spi_board1].

    [spi_board1]
    modalias = "spidev"
    max_speed_hz = 33000000
    bus_num = 1
    chip_select = 0
    mode = 0
    full_duplex = 1
    manual_cs = 0

    главное, чтобы значения bus_num были разными: для [spi_board0] значение bus_num = 0, а для [spi_board1]bus_num = 1.

  7. Сохраните и закройте файл:
    Ctrl+X, Y (Yes), Enter
  8. Компилируйте измененный script.fex в script.bin:
    sudo fex2bin /boot/script.fex /boot/script.bin
  9. Перезагрузите систему:
    sudo reboot
  10. Список SPI портов:
    ls -l /dev/*spi*

    Включение шины SPI на ядре 3.4 (Ubuntu 16.04) - Список SPI портов

Настройка SPI на ядре 3.4 с armbian-config

Редактировать .fex файл можно и с помощью armbian-config.

  1. Запустите armbian-config:
    sudo armbian-config
  2. Выберите System — System and security settings:Настройка SPI с armbian-config - System (System and security settings)
  3. Выберите Fexedit — Board (fex) settings editor:Настройка SPI с armbian-config - Fexedit (Board (fex) settings editor)
  4. Редактируйте SPI, как показано выше:Настройка SPI с armbian-config - Редактирование .fex файла
  5. Нажмите на < Save >, чтобы сохранить изменения.
  6. Перезагрузите систему.
    sudo reboot

Включение шины SPI на ядре 4.14 (Ubuntu 18.04)

В ядре linux 4.14 Вам нужно редактировать не файл .fex, а файл /boot/armbianEnv.txt(на Armbian) или /boot/uEnv.txt. Данные файлы можно редактировать в ручную и с помощью armbian-config, последний вариант подойдёт только для тех, у кого установлено ОС от Armbian.

  1. Отредактируйте файл /boot/armbianEnv.txt с помощью nano или другого текстового редактора.
    nano /boot/armbianEnv.txt
  2. Добавьте spi-spidev через пробел в overlays.
    overlays=w1-gpio uart1 i2c0 spi-spidev
  3. Добавьте, если отсутствуют, следующие параметры:
    param_spidev_spi_bus=0
    param_spidev_spi_cs=0cs=0
    param_spidev_max_freq=1000000
  4. Вы должны получить примерно такой результат:
    verbosity=1
    console=serial
    overlay_prefix=sun8i-h3
    rootdev=UUID=bd0ded76-1188-4b52-a20a-64f326c1f193
    rootfstype=ext4
    overlays=w1-gpio uart1 i2c0 spi-spidev
    param_w1_pin=PA20
    param_w1_pin_int_pullup=1
    param_uart1_rtscts=1
    param_spidev_spi_bus=0
    param_spidev_spi_cs=0
    param_spidev_max_freq=1000000
  5. Сохраните файл:
    Ctrl+X, Y (Yes), Enter
  6. Перезагрузите систему:
    sudo reboot

Материалы

Редактирование script.bin файла
SPIdev
Fex Guide

Похожие записи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *