メインコンテンツまでスキップ

低速 I/O

Modalix には、2 つの専用 SPI チャネルと 8 つの構成可能な SIO ブロックがあります。 各 SIO ブロックは GPIO、UART、I2C、SPI のいずれかを提供するように構成でき、出力ピン マルチプレクサーによって各ピンにどの機能を出力するかを選択します。

マッピングのガイドライン​

SIO ピンを割り当てる際は、次の点に従ってください。

  1. 使用するイーサネットチャネルと PCIe チャネルを最初に決めます。一部のピン機能はあらかじめ 定義されており、対応する PCIe インターフェースおよびイーサネットインターフェースと組み合わせて使用する必要があります。
  2. 各 SIO ブロック内では、上の行のピンが優先されるため、先に検討してください。
  3. 選択したインターフェースがピンで利用可能な機能と一致するように、機能列に記載された 機能を使用してください。

SIO ピンマッピング​

64 ピンの SIO インターフェースは、8 ビットのポート 8 つに分割されています。すべてのピンは 1.8 V の I/O です。

SIO ピン種類電圧インターフェース機能
SIO0_IO[0]I/O1.8VUARTUART_RX
SIO0_IO[1]I/O1.8V—UART_TX
SIO0_IO[2]I/O1.8VI2CI2C_SCL
SIO0_IO[3]I/O1.8V—I2C_SDA
SIO0_IO[4]I/O1.8VGPIOGPIO
SIO0_IO[5]I/O1.8V—GPIO
SIO0_IO[6]I/O1.8VGPIOGPIO
SIO0_IO[7]I/O1.8V—GPIO
SIO1_IO[0]I/O1.8VI2CETH0_PTP_PPS
SIO1_IO[1]I/O1.8VI2CN/A
SIO1_IO[2]I/O1.8VGPIOGPIO
SIO1_IO[3]I/O1.8VGPIOGPIO
SIO1_IO[4]I/O1.8VSPISPI_CLK
SIO1_IO[5]I/O1.8V—SPI_CS#
SIO1_IO[6]I/O1.8VSPISPI_MOSI
SIO1_IO[7]I/O1.8V—SPI_MISO
SIO2_IO[0]I/O1.8VI2CETH0_SMA_MDC
SIO2_IO[1]I/O1.8V—ETH0_SMA_MDIO
SIO2_IO[2]I/O1.8VSPIN/A
SIO2_IO[3]I/O1.8V—N/A
SIO2_IO[4]I/O1.8VUARTUART_RX
SIO2_IO[5]I/O1.8V—UART_TX
SIO2_IO[6]I/O1.8VUARTUART_RX
SIO2_IO[7]I/O1.8V—UART_TX
SIO3_IO[0]I/O1.8VSPIPCIE0_PERST#
SIO3_IO[1]I/O1.8VI2CPCIE0_WAKE#
SIO3_IO[2]I/O1.8VI2CPCIE0_CLKREQ#
SIO3_IO[3]I/O1.8VGPION/A
SIO3_IO[4]I/O1.8VI2CI2C_SCL
SIO3_IO[5]I/O1.8VGPIOI2C_SDA
SIO3_IO[6]I/O1.8VPCIE2PCIE0_PERST#
SIO3_IO[7]I/O1.8VPCIE2PCIE0_WAKE#
SIO4_IO[0]I/O1.8VPCIE2PCIE2_CLKREQ#
SIO4_IO[1]I/O1.8VPCIE3PCIE3_PERST#
SIO4_IO[2]I/O1.8VPCIE3PCIE3_WAKE#
SIO4_IO[3]I/O1.8VPCIE3PCIE3_CLKREQ#
SIO4_IO[4]I/O1.8VI2CI2C_SCL
SIO4_IO[5]I/O1.8V—I2C_SDA
SIO4_IO[6]I/O1.8VI2CI2C_SCL
SIO4_IO[7]I/O1.8V—I2C_SDA
SIO5_IO[0]I/O1.8VI2CI2C_SCL
SIO5_IO[1]I/O1.8V—I2C_SDA
SIO5_IO[2]I/O1.8VUARTUART_RX
SIO5_IO[3]I/O1.8V—UART_TX
SIO5_IO[4]I/O1.8VUARTUART_RX
SIO5_IO[5]I/O1.8V—UART_TX
SIO5_IO[6]I/O1.8VI2CI2C_SCL
SIO5_IO[7]I/O1.8V—I2C_SDA
SIO6_IO[0]I/O1.8VI2CI2C_SCL
SIO6_IO[1]I/O1.8V—I2C_SDA
SIO6_IO[2]I/O1.8VGPIOGPIO
SIO6_IO[3]I/O1.8V—GPIO
SIO6_IO[4]I/O1.8VSPISPI_CLK
SIO6_IO[5]I/O1.8V—SPI_CS#
SIO6_IO[6]I/O1.8VSPISPI_MOSI
SIO6_IO[7]I/O1.8V—SPI_MISO
SIO7_IO[0]I/O1.8VSPISPI_CLK
SIO7_IO[1]I/O1.8V—SPI_CS#
SIO7_IO[2]I/O1.8VI2CSPI_MOSI
SIO7_IO[3]I/O1.8V—SPI_MISO
SIO7_IO[4]I/O1.8VSPISPI_CLK
SIO7_IO[5]I/O1.8V—SPI_CS#
SIO7_IO[6]I/O1.8VSPISPI_MOSI
SIO7_IO[7]I/O1.8V—SPI_MISO

GPIO​

ドライバー: gpio-dwapb

ユーザー空間からは、libgpiod とそのコマンドラインツールを使用します。

ツール用途
gpiodetect利用可能な GPIO チップを一覧表示する
gpioinfoチップとラインを、状態および所有ドライバーとともに一覧表示する
gpiosetラインの値を設定する
gpiogetラインの値を読み取る

まずチップとラインを特定します。デバイスは /dev/gpiochip0 などとして表示されます。

root@modalix:~# gpiodetect
root@modalix:~# gpioset gpiochip0 17 1
root@modalix:~# gpioget gpiochip0 17

カスタムアプリケーションでは、コマンドラインツールを呼び出すのではなく、libgpiod C API を 使用してください。

バインディング:snps,dw-apb-gpio.yaml

UART​

ドライバー: snps-dw-apb-uart

UART ノードの名前は SIO ブロックとインデックスを表します。uart12 は SIO ブロック 1、インデックス 2 です。 各 SIO ブロックは最大 4 つの UART ポートを提供し、各ポートが 2 本のピンを使用するため、 インデックス 2 は出力ピン 4 と 5 に対応します。

uart12: uart@0x0401a000 {
compatible = "snps,dw-apb-uart";
reg = <0x0 0x0401a000 0x0 0x100>;
interrupts = <GIC_SPI 319 IRQ_TYPE_LEVEL_HIGH>;
reg-io-width = <4>;
reg-shift = <2>;
clocks = <&sio10_clk SIMAAI_SIO_DEV_UART2>;
resets = <&reset10 SIMAAI_SIO_DEV_UART2>;
pinctrl-0 = <&pins_uart12_deafult>;
pinctrl-names = "default";
dmas = <&dmac10 4>, <&dmac10 5>;
dma-names = "tx", "rx";
status = "disabled";
};

オーバーレイから有効にします。

&uart12 {
status = "okay";
};

クロック、リセット、その他の設定も同じオーバーレイで上書きできます。各 SIO ブロックは、 上記のノードから参照される独自のクロック、リセット、ピン、DMA コントローラーを実装しています。

バインディング:snps-dw-apb-uart.yaml

I2C​

40 ピンヘッダー(Waveshare キャリアカードでは J12)に 2 つの I2C インターフェースが 引き出されています。

バスを確認する​

root@modalix:~# ls /dev/i2c-*
/dev/i2c-0
/dev/i2c-1

40 ピンヘッダーのピン配置(J12)​

ピン信号ピン信号
13.3 V 電源25 V 電源
3I2C1_SDA45 V 電源
5I2C1_SCL6GND
7GPIO09_AUD_MCLK8UART1_TXD
9GND10UART1_RXD
11UART1_RTS12I2S0_SCLK
13SPI1_SCK14GND
15GPIO1216SPI1_CS1
19SPI0_MOSI20GND
21SPI0_MISO22SPI1_MISO
23SPI0_SCLK24SPI0_CS0
25GND26SPI0_CS1
27I2C0_SDA28I2C0_SCL
29GPIO0130GND
31GPIO1132GPIO07
33GPIO1334GND
35I2S0_FS36UART1_CTS
37SPI1_MOSI38I2S0_SDIN
39GND40I2S0_SDOUT

ドライバーとデバイスツリー​

I2C GPIO エキスパンダーは PCF857x ドライバーでサポートされており、 arch/arm64/configs/simaai_modalix_defconfig で有効になっています。

CONFIG_GPIO_PCF857X=y

このドライバーは NXP PCF8574 および PCF8575 I2C GPIO エキスパンダーに対応しています。 simaai_modalix_defconfig を参照してください。 PCF8574 を接続した状態でバス 0 を有効にする例:

/dts-v1/;
/plugin/;

&i2c00 {
status = "okay";
clock-frequency = <400000>;
#address-cells = <1>;
#size-cells = <0>;

pcf8574: gpio@27 {
compatible = "nxp,pcf8574";
reg = <0x27>;
gpio-controller;
#gpio-cells = <2>;
};
};

コマンドラインツール​

i2c-tools は標準ビルドに含まれています。見つからない場合はインストールしてください。

root@modalix:~# apt update
root@modalix:~# apt install i2c-tools

バインディング:snps,designware-i2c.yaml および nxp,pcf8575.yaml

i2cdetect は、バス上のすべてのアドレスをプローブし、応答したデバイスを報告します。 -r は SMBus の read-byte によるプローブを使用し、-y は確認プロンプトを省略します。最後の引数は バス番号です。

root@modalix:~# i2cdetect -r -y 0

SPI​

Modalix には、SPI 用に構成された SIO ブロックとは別に、2 つの専用 SPI チャネルがあります。 NVS SPI パスと SIO SPI パスの両方のデバイスオーバーレイ、および SPI デバイスドライバーと デバイスツリーバインディングは、上記の UART と同じオーバーレイのパターンに従います。

参考資料​

以下はすべて公開されています。

参考資料場所
カーネル、デバイスツリー、オーバーレイのビルドBSP をソースからビルドする
カーネルの構成simaai_modalix_defconfig
Modalix デバイスツリーarch/arm64/boot/dts/simaai
オーバーレイの例dts/simaai/overlays
GPIO バインディングsnps,dw-apb-gpio.yaml
UART バインディングsnps-dw-apb-uart.yaml
I2C コントローラーバインディングsnps,designware-i2c.yaml
PCF857x エキスパンダーバインディングnxp,pcf8575.yaml

次のステップ​