跳至主要内容

低速 I/O

Modalix 具備兩個專用 SPI 通道以及八個可設定的 SIO 區塊。每個 SIO 區塊都可設定為提供 GPIO、UART、I2C 或 SPI 功能,並由輸出腳位多工器選擇要將哪個功能送到各個腳位。

腳位對應準則​

指派 SIO 腳位時:

  1. 請先選定您要使用的乙太網路與 PCIe 通道:部分腳位功能是預先定義的,必須搭配對應的 PCIe 與乙太網路介面使用。
  2. 在每個 SIO 區塊中,上方列的腳位具有優先權,應優先考慮。
  3. 請使用 Function 欄中所列的功能,讓所選介面與該腳位可用的功能相符。

SIO 腳位對應​

64 腳位的 SIO 介面分為八個 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,而不是呼叫命令列工具。

Binding: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";
};

從 overlay 啟用它:

&uart12 {
status = "okay";
};

時脈、重設及其他設定也可以在同一個 overlay 中覆寫。每個 SIO 區塊都有各自的時脈、重設、腳位與 DMA 控制器,並由上方的節點參照。

Binding:snps-dw-apb-uart.yaml

I2C​

40 針排針(Waveshare 載板上的 J12)上引出了兩個 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

驅動程式與 Device Tree​

I2C GPIO 擴充器由 PCF857x 驅動程式支援,並已在 arch/arm64/configs/simaai_modalix_defconfig 中啟用:

CONFIG_GPIO_PCF857X=y

此驅動程式涵蓋 NXP PCF8574 與 PCF8575 I2C GPIO 擴充器,請參閱 simaai_modalix_defconfig。以下範例啟用匯流排 0 並連接一顆 PCF8574:

/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

Binding:snps,designware-i2c.yaml 與 nxp,pcf8575.yaml

i2cdetect 會探測匯流排上的每個位址,並回報哪些裝置有回應。-r 使用 SMBus read-byte 方式探測,-y 會略過確認提示,最後一個引數則是匯流排編號:

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

SPI​

除了設定為 SPI 的 SIO 區塊之外,Modalix 還具備兩個專用 SPI 通道。NVS SPI 與 SIO SPI 路徑的裝置 overlay,以及 SPI 裝置驅動程式與 device tree binding,都遵循上方 UART 所示的相同 overlay 模式。

參考資料​

以下資源皆為公開:

參考資料位置
建置核心、device tree 與 overlay從原始碼建置 BSP
核心設定simaai_modalix_defconfig
Modalix device treearch/arm64/boot/dts/simaai
範例 overlaydts/simaai/overlays
GPIO bindingsnps,dw-apb-gpio.yaml
UART bindingsnps-dw-apb-uart.yaml
I2C 控制器 bindingsnps,designware-i2c.yaml
PCF857x 擴充器 bindingnxp,pcf8575.yaml

後續步驟​