# 04-拓展引脚

此文档用于用户快速使用或测试主板扩展引脚功能。

## 符号说明

* `SDK$`：指代源码路径
* `console$`：泛指主板的命令行控制台。[主板命令行控制台](/kickpi-book/rk3576/zh/02-ru-men-bi-du/02-kuai-su-shi-yong.md#console_readme)
* `ADB$`：Android Debug Bridge 命令行工具，泛指可运行 ADB 的环境

## 扩展引脚 <a href="#expansionpin-k7" id="expansionpin-k7"></a>

开发板板载扩展引脚功能

* 可用于连接外部设备（温度传感器、湿度传感器等）
* 与其他电路板或模块通信（I2C、SPI、UART等）
* 自定义GPIO功能

具体功能拓展详情查看引脚列表。

引脚列表标注了每个引脚的默认配置（带\*号），同时给出该引脚所对应的可选择配置。

**K7引脚列表**

![K7\_PIN](http://tanzhtanzh.oss-cn-shenzhen.aliyuncs.com/img/K7_PIN.png)

**K7引脚电压**

![K7\_PIN\_DOMAIN](http://tanzhtanzh.oss-cn-shenzhen.aliyuncs.com/img/K7_PIN_DOMAIN.png)

**K7C引脚列表**

![image-20251014174351589](http://tanzhtanzh.oss-cn-shenzhen.aliyuncs.com/img/image-20251014174351589.png)

**K7C引脚电压**

![image-20251014174424133](http://tanzhtanzh.oss-cn-shenzhen.aliyuncs.com/img/image-20251014174424133.png)

## GPIO

K7主板扩展引脚可配置 GPIO 引脚，通过[扩展引脚章节](#ExpansionPin-K7)查看对应的 GPIO 引脚位置及编号。

扩展引脚默认GPIO引脚（带\*号）已配置为输出口，可以控制GPIO输出高电平或低电平。

**列举已经注册的GPIO控制节点**

```
console$ ls /sys/class/leds/
GPIO0_A5  GPIO3_B0  GPIO3_D4  GPIO3_D5  PCIE_PWREN  SDMMC0_PWREN  fan  mmc2::  work
```

> 下面控制GPIO的电平状态，$GPIO 需要对应列举出的GPIO名称

**控制GPIO输出电平状态**

控制 GPIO 输出高电平

```
console$ echo 1 >  /sys/class/leds/$GPIO/brightness
```

控制 GPIO 输出低电平

```
console$ echo 0 >  /sys/class/leds/$GPIO/brightness
```

示例：

控制 GPIO3\_D4 输出高电平

```
console$ echo 1 >  /sys/class/leds/GPIO3_D4/brightness
```

控制 GPIO3\_D4 输出低电平

```
console$ echo 0 >  /sys/class/leds/GPIO3_D4/brightness
```

## CAN

K7主板扩展引脚可配置 CAN 接口，通过[扩展引脚章节](#ExpansionPin-K7)查看对应的 CAN 接口位置及编号。

**查询当前CAN设备**

下面以 CAN0 进行示例说明。

```
console$ ifconfig -a
...
can0      Link encap:UNSPEC    Driver rk3576_canfd
          NOARP  MTU:16  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:10 
          RX bytes:0 TX bytes:0 
          Interrupt:63 
...
```

> 可知设备名称为 can0

**配置CAN**

关闭CAN

```
console$ ip link set can0 down
```

设置仲裁段1M波特率，数据段3M波特率

```
console$ ip link set can0 type can bitrate 1000000 dbitrate 3000000 fd on
```

查看can0配置信息

```
console$ ip -details link show can0
```

启动CAN

```
console$ ip link set can0 up
```

**CAN发送**

发送（标准帧,数据帧,ID:123,date:DEADBEEF）

```
console$ cansend can0 123#DEADBEEF
```

发送（扩展帧,数据帧,ID:00000123,date:DEADBEEF）

```
console$ cansend can0 00000123##1DEADBEEF
```

**CAN接收**

开启打印，等待接收

```
console$ candump can0
```

**回环模式测试**

```
console$ ip link set can0 down
console$ ip link set can0 type can bitrate 500000 sample-point 0.8 dbitrate 2000000 sample-point 0.8 fd on loopback on
console$ ip -details -statistics link show can0
console$ ip link set can0 up
console$ echo 4096 > /sys/class/net/can0/tx_queue_len
console$ candump can0 &
console$ cansend can0 00000123##1DEADBEEF
  can0  00000123  [04]  DE AD BE EF
```

> 回环模式下，cansend 的数据可以通过 candump 接收。

## PWM

K7主板扩展引脚可配置 PWM 接口，通过[扩展引脚章节](#ExpansionPin-K7)查看对应的 PWM 位置及通道号。

**列举pwm节点**

```
console$ ls /sys/class/pwm/
pwmchip0  pwmchip1  pwmchip2
```

**列举对应pwm dts节点**

```
console$ cat /sys/class/pwm/pwmchip*/device/uevent | grep FULLNAME
OF_FULLNAME=/pwm@27331000
OF_FULLNAME=/pwm@2ade6000
OF_FULLNAME=/pwm@2ade7000
```

> 对应关系如下，从上往下，对应 pwmchip0 到 pwmchip2
>
> **PWM0\_CH1\_M0** - pwm0\_2ch\_1 - pwm\@27331000 - **pwmchip0**
>
> **PWM2\_CH6\_M2** - pwm2\_8ch\_6 - pwm\@2ade6000 - **pwmchip1**
>
> **PWM2\_CH7\_M2** - pwm2\_8ch\_7 - pwm\@2ade7000 - **pwmchip2**

**配置PWM**

示例：

软件默认已配置 PWM0\_CH1\_M0（带\*号），下面以 PWM0\_CH1\_M0 进行说明。

设置 PWM0\_CH1\_M0 通道，对应 pwmchip0，周期10000ns，占空比5000ns，极性为normal

```
console$ echo 0 > /sys/class/pwm/pwmchip0/export
console$ echo 10000 > /sys/class/pwm/pwmchip0/pwm0/period
console$ echo 5000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
console$ echo normal > /sys/class/pwm/pwmchip0/pwm0/polarity
console$ echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable
```

> 配置成功后，可用万用表测量 PWM0\_CH1\_M0 引脚，电压应为1.6V左右

## UART

K7主板扩展引脚可配置 UART 接口，通过[扩展引脚章节](#ExpansionPin-K7)查看对应的 UART 位置及通道号。

**注意：** K7的UART默认配置的都是1.8V的电平，不能与3.3V电平的UART通讯，请确定好后使用。

[不同电平有什么区别，为什么不能通讯？](#uart_ttl)

**回环测试**

软件默认已配置 UART8，下面以 UART8 进行示例说明。

RX、TX 进行硬件短接。

microcom 指定 UART8 进行通讯

```
console$ microcom -s 115200 /dev/ttyS8
```

示例：

```
root@linaro-alip:/# microcom -s 115200  -p /dev/ttyS8
[ 4218.137343] of_dma_request_slave_channel: dma-names property of node '/serial@2adb0000' missing or empty
connected to /dev/ttyS8
[ 4218.137431] dw-apb-uart 2adb0000.serial: failed to request DMA, use interrupt mode
Escape character: Ctrl-\
Type the escape character to get to the prompt.
hello uart word!
```

> 回环测试下，microcom 能够同时接收输出的字符

## SPI

K7主板扩展引脚可配置SPI接口，通过[扩展引脚章节](#ExpansionPin-K7)查看对应的 SPI 位置及通道号。

**回环测试**

软件默认已配置 SPI4，下面以 SPI4 进行示例说明。

MISO、MOSI 进行硬件短接。

![image-20250421165900688](http://tanzhtanzh.oss-cn-shenzhen.aliyuncs.com/img/image-20250421165900688.png)

列出spi设备节点

```
console$ ls /dev/spi*
/dev/spidev4.0
```

指定设备进行测试

```
console$ spidev_test -D /dev/spidev4.0 -v -l -p "hello"
```

示例：

```
root@linaro-alip:/# ./spidev_test -D /dev/spidev4.0 -v -l -p "hello"
spi mode: 0x20
bits per word: 8
max speed: 500000 Hz (500 kHz)
TX | 68 65 6C 6C 6F __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  |hello|
RX | 68 65 6C 6C 6F __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  |hello|
```

> 工具网盘路径
>
> 3-SoftwareData\Linux\_Spi\_Tool\spidev\_test

## ADC

K7主板扩展引脚配备三路ADC，通过[扩展引脚章节](#ExpansionPin-K7)查看对应的 ADC 位置及通道号。

**读取ADC值**

```
console$ cat /sys/bus/iio/devices/iio\:device0/in_voltage*_raw
```

示例：

读取通道 4 的电压值

```
console$  cat /sys/bus/iio/devices/iio\:device0/in_voltage4_raw
3528
```

**实时读取ADC值**

```
console$ watch -n 1 'cat /sys/bus/iio/devices/iio\:device0/in_voltage*_raw'
```

## 常见问题

**不同电平有什么区别，为什么不能通讯？**

电平标准不匹配

* 1.8V UART的逻辑电平：
  * **高电平（逻辑1）**：通常需要输出≥1.35V（根据LVCMOS/LVTTL标准）。
  * **低电平（逻辑0）**：通常需要输出≤0.45V。
* 3.3V UART的逻辑电平：
  * **高电平（逻辑1）**：需要输入≥2.0V才能被识别为有效高电平。
  * **低电平（逻辑0）**：需要输入≤0.8V才能被识别为有效低电平。

要实现1.8V和3.3V UART的通信，必须通过**电平转换电路**进行适配。以下是常见方案：

使用双向电平转换器（推荐）

* **芯片示例**：TXB0108、TXS0108E、74LVC1T45等。
* 原理：
  * 1.8V侧与3.3V侧分别供电（如1.8V和3.3V）。
  * 芯片根据电源电压自动调整输出电平，确保信号兼容性。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://tanzhs-private-organization.gitbook.io/kickpi-book/rk3576/zh/02-ru-men-bi-du/04-kuo-zhan-yin-jiao.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
