본문으로 건너뛰기

저속 I/O

Modalix에는 전용 SPI 채널 2개와 구성 가능한 SIO 블록 8개가 있습니다. 각 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)에는 I2C 인터페이스 2개가 노출되어 있습니다.

버스 확인​

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 익스팬더는 arch/arm64/configs/simaai_modalix_defconfig에서 활성화된 PCF857x 드라이버로 지원됩니다.

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 바이트 읽기 방식으로 탐색하고, -y는 확인 프롬프트를 건너뛰며, 마지막 인수는 버스 번호입니다.

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

SPI​

Modalix에는 SPI로 구성한 SIO 블록 외에도 전용 SPI 채널 2개가 있습니다. 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

다음 단계​