> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 40 针低速连接器

Dragonwing IQ8-EVK 包含一个低速连接器(JLS1),提供对各种 GPIO、CAN、QUP 和其他接口的访问。

## 引脚定义

下图显示了 IQ-8275 EVK 40 针 LS 连接器的默认功能。

<img src="https://mintcdn.com/qualcomm-prod/T1k4QQ7G3l_dE-rX/Linux/images/peripheral-interfaces/40-pin-LS-details.png?fit=max&auto=format&n=T1k4QQ7G3l_dE-rX&q=85&s=f805093457abc7799690fc98280a9173" width="1639" height="1050" data-path="Linux/images/peripheral-interfaces/40-pin-LS-details.png" />

<img src="https://mintcdn.com/qualcomm-prod/Bh7DlgudKfjY_3Wf/Linux/images/peripheral-interfaces/LS-connector-functional_details.png?fit=max&auto=format&n=Bh7DlgudKfjY_3Wf&q=85&s=ca86cb7a63e3f4428b2cef50c39e46a8" width="1449" height="834" data-path="Linux/images/peripheral-interfaces/LS-connector-functional_details.png" />

## GPIO

<Note>
  以下命令需要 root 权限。使用 `sudo su` 切换到 root 用户。
</Note>

### 识别 GPIO 子系统编号

运行以下命令并查找 `platform/f000000.pinctrl`(gpiochip4),以识别基础 GPIO 编号。

```text theme={null}
mount -t debugfs none /sys/kernel/debug/
cat /sys/kernel/debug/gpio
```

<table border="1">
  <thead>
    <tr>
      <th colspan="4">LS1 连接器 GPIO</th>
    </tr>

    <tr>
      <th>GPIO</th>
      <th>奇数</th>
      <th>偶数</th>
      <th>GPIO</th>
    </tr>
  </thead>

  <tbody>
    <tr><td>GND</td><td>1</td><td>2</td><td>GND</td></tr>
    <tr><td>52</td><td>3</td><td>4</td><td>CAN\_H</td></tr>
    <tr><td>54</td><td>5</td><td>6</td><td>CAN\_L</td></tr>
    <tr><td>55</td><td>7</td><td>8</td><td>32</td></tr>
    <tr><td>53</td><td>9</td><td>10</td><td>33</td></tr>
    <tr><td>44</td><td>11</td><td>12</td><td>34</td></tr>
    <tr><td>45</td><td>13</td><td>14</td><td>35</td></tr>
    <tr><td>96</td><td>15</td><td>16</td><td>107</td></tr>
    <tr><td>95</td><td>17</td><td>18</td><td>106</td></tr>
    <tr><td>100</td><td>19</td><td>20</td><td>109</td></tr>
    <tr><td>99</td><td>21</td><td>22</td><td>108</td></tr>
    <tr><td>40</td><td>23</td><td>24</td><td>105</td></tr>
    <tr><td>41</td><td>25</td><td>26</td><td>43</td></tr>
    <tr><td>42</td><td>27</td><td>28</td><td>SAIL59</td></tr>
    <tr><td>PME 11</td><td>29</td><td>30</td><td>SAIL42</td></tr>
    <tr><td>140</td><td>31</td><td>32</td><td>SAIL46</td></tr>
    <tr><td>IO EXP3 7</td><td>33</td><td>34</td><td>SAIL50</td></tr>
    <tr><td>3.3V</td><td>35</td><td>36</td><td>SYS PWR</td></tr>
    <tr><td>5V</td><td>37</td><td>38</td><td>SYS PWR</td></tr>
    <tr><td>GND</td><td>39</td><td>40</td><td>GND</td></tr>
  </tbody>
</table>

# 从用户空间配置 GPIO

为获得更好的性能,请在用户空间使用 `libgpiod` 库来控制 GPIO。

<Steps>
  <Step title="安装 Arm64 工具链">
    ```bash theme={null}
    sudo apt install gcc-aarch64-linux-gnu
    sudo apt install binutils-aarch64-linux-gnu
    ```
  </Step>

  <Step title="下载并解压 libgpiod">
    ```bash theme={null}
    wget https://www.kernel.org/pub/software/libs/libgpiod/libgpiod-1.6.4.tar.xz
    tar xvf libgpiod-1.6.4.tar.xz
    cd libgpiod-1.6.4
    ```
  </Step>

  <Step title="配置源码以进行静态链接">
    ```bash theme={null}
    ./configure --enable-tools=yes --build x86_64-pc-linux-gnu --host aarch64-linux-gnu CFLAGS="-static -static-libgcc -Wl,-static,--start-group,/usr/lib/gcc-cross/aarch64-linux-gnu/7.5.0/libgcc.a,/usr/lib/gcc-cross/aarch64-linux-gnu/7.5.0/libgcc_eh.a,/usr/aarch64-linux-gnu/lib/libc.a,--end-group"
    ```
  </Step>

  <Step title="编译库">
    ```bash theme={null}
    make
    ```

    <Note>
      编译会生成链接后的二进制文件。
    </Note>
  </Step>

  <Step title="构建静态链接的二进制文件">
    ```bash theme={null}
    aarch64-linux-gnu-gcc -static -o tools/gpiodetect tools/gpiodetect.o tools/tools-common.o -Wl,-L&lt;ABSOLUTE_PATH_TO_LIBGPIOD&gt;/libgpiod-1.6.4/lib/.libs,-lgpiod,-lpthread,-static
    aarch64-linux-gnu-gcc -static -o tools/gpioget tools/gpioget.o tools/tools-common.o -Wl,-L&lt;ABSOLUTE_PATH_TO_LIBGPIOD&gt;/libgpiod-1.6.4/lib/.libs,-lgpiod,-lpthread,-static
    aarch64-linux-gnu-gcc -static -o tools/gpioset tools/gpioset.o tools/tools-common.o -Wl,-L&lt;ABSOLUTE_PATH_TO_LIBGPIOD&gt;/libgpiod-1.6.4/lib/.libs,-lgpiod,-lpthread,-static
    aarch64-linux-gnu-gcc -static -o tools/gpiofind tools/gpiofind.o tools/tools-common.o -Wl,-L&lt;ABSOLUTE_PATH_TO_LIBGPIOD&gt;/libgpiod-1.6.4/lib/.libs,-lgpiod,-lpthread,-static
    aarch64-linux-gnu-gcc -static -o tools/gpioinfo tools/gpioinfo.o tools/tools-common.o -Wl,-L&lt;ABSOLUTE_PATH_TO_LIBGPIOD&gt;/libgpiod-1.6.4/lib/.libs,-lgpiod,-lpthread,-static
    aarch64-linux-gnu-gcc -static -o tools/gpiomon tools/gpiomon.o tools/tools-common.o -Wl,-L&lt;ABSOLUTE_PATH_TO_LIBGPIOD&gt;/libgpiod-1.6.4/lib/.libs,-lgpiod,-lpthread,-static
    ```
  </Step>

  <Step title="将二进制文件推送到设备">
    ```bash theme={null}
    scp gpiodetect gpioget gpioset gpiofind gpioinfo root@<IP_address>:/path/to/directory/on/device
    ```
  </Step>

  <Step title="列出设备上的 GPIO 芯片">
    运行 `gpiodetect` 列出 GPIO 芯片。

    ```bash theme={null}
    ./gpiodetect
    ```

    示例输出:

    ```text theme={null}
    gpiochip0 [c440000.spmi:pmic@8:pinctrl@c00] (12 lines)
    gpiochip1 [c440000.spmi:pmic@1:gpio@8800] (10 lines)
    gpiochip2 [c440000.spmi:pmic@2:gpio@8800] (9 lines)
    gpiochip3 [c440000.spmi:pmic@0:gpio@b000] (4 lines)
    gpiochip4 [f100000.pinctrl] (176 lines)
    gpiochip5 [33c0000.pinctrl] (15 lines)
    ```
  </Step>

  <Step title="显示 GPIO 线信息">
    运行 `gpioinfo` 查看特定芯片的 GPIO 线。

    ```text theme={null}
    ./gpioinfo gpiochip4
    ```

    示例输出:

    ```text theme={null}
    gpiochip4 - 151 lines:
        line   0:      unnamed          "?"   input  active-high [used]
        line   1:      unnamed       unused   input  active-high
        line   2:      unnamed      "perst"  output   active-low [used]
        line   3:      unnamed       unused   input  active-high
        line   4:      unnamed      "perst"  output   active-low [used]
        line   5:      unnamed          "?"   input  active-high [used]
        line   6:      unnamed       unused   input  active-high
        line   7:      unnamed       unused   input  active-high
        line   8:      unnamed       unused   input  active-high
        line   9:      unnamed       unused   input  active-high
        line  10:      unnamed       unused   input  active-high
        line  11:      unnamed       unused   input  active-high
        line  12:      unnamed       unused   input  active-high
        line  13:      unnamed       unused   input  active-high
        line  14:      unnamed       unused   input  active-high
        line  15:      unnamed       unused   input  active-high
    ......
    .....
    ```
  </Step>

  <Step title="设置 GPIO 值">
    要设置 `gpiochip4` 上的 GPIO 线 `54`,运行:

    ```text theme={null}
    ./gpioset gpiochip4 54=1
    ./gpioinfo gpiochip4 | grep 54
    ```

    示例输出:

    ```text theme={null}
    gpiochip4 - 176 lines:
       line    54:      unnamed       unused   output  active-high
    ```
  </Step>

  <Step title="读取 GPIO 值">
    要读取 `gpiochip4` 上的 GPIO 线 `0`,运行:

    ```text theme={null}
    ./gpioget gpiochip4 0
    ```

    示例输出:

    ```text theme={null}
    1
    ```

    读取值后,`gpioinfo` 显示该线恢复为输入模式。

    ```text theme={null}
    ./gpioinfo gpiochip4
    ```

    示例输出:

    ```text theme={null}
    gpiochip4 - 176 lines:
             line    0:      unnamed       unused   input   active-high
             line    1:      unnamed       unused   input   active-high
    ```
  </Step>
</Steps>

## UART

引脚 5 和 7 默认配置为 UART(GPIO 线 54 和 55,映射到 `uart12 = qup1_se5 (0xa98000)`)。

按照[修改串行引擎节点](./peripheral_interface_overview#modify-serial-engine-node)的步骤启用 UART 接口。启用后,设备节点出现在 `/dev/ttyHS3`。

<Tabs>
  <Tab title="Shell">
    <Steps>
      <Step title="连接引脚">
        使用杜邦线短接引脚 5 和引脚 7。
        <Warning>请勿短接电源和接地引脚。</Warning>
      </Step>

      <Step title="配置 UART">
        ```bash theme={null}
        stty -F /dev/ttyHS3 ispeed 115200 ospeed 115200
        stty -F /dev/ttyHS3 115200 -echo -icanon -isig -iexten -icrnl -ixon -opost
        ```
      </Step>

      <Step title="打开两个 SSH 终端">
        **终端 1(RX):**`cat /dev/ttyHS3`

        **终端 2(TX):**`echo "hello world!" > /dev/ttyHS3`
      </Step>
    </Steps>
  </Tab>
</Tabs>

## I2C

引脚 8 和 10 默认配置为 I2C(GPIO 线 32 和 33,映射到 `i2c4 = qup0_se4 (0x990000)`)。

按照[修改串行引擎节点](./peripheral_interface_overview#modify-serial-engine-node)的步骤启用 I2C 接口。

```bash theme={null}
ls /dev/i2c*
scp i2cdetect root@<IP address>:/usr
i2cdetect -l
i2cdetect -a -y -r 20
```

## SPI

引脚 11 和 13 默认配置为 SPI(GPIO 线 44 和 45,映射到 `spi10 = qup1_se3 (0xa8c000)`)。

按照[修改串行引擎节点](./peripheral_interface_overview#modify-serial-engine-node)的步骤启用 SPI 接口。
