Skip to main content

外围引脚配置

本篇介绍如何在 hardware.lini 完成外围器件的引脚配置。读完本文后,你将学习到:

  • 如何确认引脚配置需求。
  • 在什么地方可以完成配置。
  • hardware.lini 有哪些引脚配置参数及其含义。

1.设计规则与需求确认#

1.1 Datasheet 与引脚列表#

为了避免硬件设计与芯片功能不匹配,软件工程师务必要与硬件工程师先明确清楚引脚的选用与对应支持的功能。芯片 Datasheet 是你们沟通需求的重要材料,可提前查阅:

引脚列表

PINMUX0MUX1MUX2MUX3MUX4
1VCC_RTC
2VOUT_11
3VDD_CORE
4USBDPI2C2_SCLTXD2PWM_CH0
5USBDMI2C2_SDARXD2PWM_CH1
6PA0I2S_DIN1PWM_CH2QSPI_CS
7PA1I2S_DOUT1PWM_CH3QSPI_IO1
8PA2I2S_DOUT2PWM_CH4QSPI_IO2
9XOUTTXD0PC0RXD0
10XINRXD0PC1
11PA3I2S_DOUT3PWM_CH5
12PA4PWM_CH0SPI2_CLKSDIO_CLK
13PA5PWM_CH1SPI2_CSSDIO_IO1
14PA6PWM_CH2SPI2_MISOSDIO_IO0
15PA7PWM_CH3SPI2_MOSISDIO_CMD
16VCC
17PA8SDIO_CLKI2S_DIN1SPI2_CLK
18PA9SDIO_CMDI2S_DOUT1SPI2_CS
19PA10SDIO_IO0RXD2SPI2_MISO
20PA11RXD1I2S_MCLKSPI2_MOSI
21VDD_CORE
22PA12QSPI_D0PWM_CH3SPI3_MOSI
23PA13QSPI_DCLKPWM_CH4SPI3_CLK
24PA14QSPI_D3PWM_CH5SPI3_CS
25PA15QSPI_D2SDIO_IO1SPI3_MISO
26PA16QSPI_D1SDIO_IO2I2C2_SDA
27PA17QSPI_CSSDIO_IO3I2C2_SCL
28VCC
29PA18PWM_CH0I2C2_SCLSDIO_IO3
30PA19PWM_CH1I2C2_SDASDIO_IO2
31PA20I2C1_SCLPWM_CH0I2S_DATAIN1
32PA21I2C1_SDAPWM_CH1I2S_DATAOUT1
33PA22I2S_FCLKPWM_CH2SPI3_CLK
34PA23I2S_BCLKPWM_CH3SPI3_CS
35PA24I2S_DOUT0PWM_CH4SPI3_MISO
36PA25I2S_DIN0PWM_CH5SPI3_MOSI
37PA26I2S_MCLKI2S_DIN1I2C2_SCL
38PA27TXD1PWM_CH5I2C2_SDA
39PA28RXD2PWM_CH4QSPI_IO0
40PA29SDIO_IO3PWM_CH3QSPI_CLK
41PA30SDIO_IO2PWM_CH2QSPI_IO3
42PA31SDIO_IO1RXD2SPI3_CS
43PB0SDIO_IO0I2S_DOUT2SPI3_MISO
44PB1SDIO_CLKI2S_DOUT1SPI3_CLK
45PB2SDIO_CMDI2S_DIN1SPI3_MOSI
46SWCLKPB3PWM_CH0CTS1
47SWDIOPB4PWM_CH1RXD2
48VDD_CORE
49PB5CLASSD0_PPWM_CH2CTS1
50PB6CLASSD0_MPWM_CH3RXD2
51VCC
52PB7CLASSD1_MPWM_CH4CTS1
53PB8CLASSD1_PPWM_CH5RXD2
54PB9DMIC_D3TXD2PWM_CH0TOUCH5
55PB10DMIC_D2TXD1PWM_CH1TOUCH4
56PB11DMIC_D1RXD1PWM_CH2TOUCH3
57PB12DMIC_D3RTS1PWM_CH3TOUCH2
58PB13DMIC_D1PWM_CH0I2C2_SCLTOUCH1
59PB14DMIC_D2PWM_CH1I2C2_SDATOUCH0
60PB15TXD2RXD2
61PB16RXD0DMIC_CLKDMIC_CLK
62PB17TXD0DMIC_DATA0DMIC_DATA0
63VDD_DDR
64VDD_FUSERESET(PB18)
65GND_PAD

1.2 设计规则#

  1. 通常 MUX0 列表示为 PA 或 PB 的 PIN 都可以给用户自由配置,但有若干例外:

    • PIN 49/50 (PB5/PB6) 用来接喇叭,且只有它能接喇叭,所以通常不会用来做别的用途
    • PIN 6/7/8/39/40/41 不可用
    • PIN 12 (PA4) 的 PWM 功能不可用
    • 约定使用 PIN 12 (PA4) 作为唤醒电平输出 (WAKEUP)、PIN 14 (PA6) 作为功放使能输出 (PA_EN),通常不会将这两个脚改成其它用途
  1. 对于上面所说的每一个可自由配置的 PIN,都可以将它配置为 MUX0 ~ MUX4 中的任一功能。但反过来,一个功能只能由一个 PIN 实现(互斥,比如不可以同时把两个 PIN 都配置为 TXD2)

  2. 上表中的 PA 和 PB(通常是 MUX0,有例外)表示作为普通 GPIO 使用;其余 TXD、I2C、PWM 等表示作为这些特定协议的引脚使用(下面详细解释)

  3. 对于作为普通 GPIO 使用时,有如下参数:

    • dir 表示方向,为 true 表示输出;为 false 表示输入
    • def 表示默认值,为 true 表示默认高电平;为 false 表示默认低电平
    • rev 表示电平和值的对应关系;为 false 表示低电平有效(即写入 1 输出低电平,或输入低电平时读出 1),为true表示高电平有效。
  4. 对于作为特定协议的引脚使用时,有如下规则:

    • 通常使用 PB17/PB10/PA27/PB9/PB15 中的任意一个作为调试日志输出的 TXD 使用
    • 对于模拟麦克风,通常需要分配一组 I2C 和 I2S 给 ADC 芯片使用
    • 如果需要使用一组串口 TXD/RXD 对接上位机在选择串口的PIN硬件资源时,不建议使用 PIN 4/5,因为只有 PIN 4/5支持 USBDP/USBDM,如果使用PIN 4/5作为串口功能,这样就无法使用 USB 录制调试用的音频
务必考虑 USB 录制调试音频的需求

使用 usb 进行音频调试是 CSK 项目常用的调试手段。uart 与 usb 的引脚需求冲突很容易被忽视并阻碍项目推进。

2.找到 hardware.lini#

在创建 CSK 项目后,你可以在项目中找到用于配置引脚的 hardware.lini,具体路径是:

./config/hardware.lini

3.lini 语法简介#

CSK项目中使用 hardware.lini 实现引脚配置,结合实际使用情况,下面提供一组简单示例对比 json 与 toml 关于表/数组表的语法。

json 示例

{ "d":{ "x": 1, "y": 2 }, "e":[ { }, { "x":"a", "y":"b" }, { "x":"c", "y":"d" } ]}

toml 示例

[d]x = 1y = 2 [[e]] [[e]]x = "a"y = "b" [[e]]x = "c"y = "d"

拓展阅读:TOML 完整规范

3.hardware.lini 字段说明#

hardware.lini 中需要用到以下字段:

键名键值说明
tagnamepin脚的名字,用户可指定
pin1~64CSK芯片的引脚
mux0~4pin 脚的复用功能
dirtrue/falseture:引脚设置为输出
false:引脚设置为输入
deftrue/falseture:当引脚设为输出时,输出的逻辑电平为高
false: 当pin脚设为输出时,输出的逻辑电平为低
revtrue/falseture:逻辑电平和物理电平一致
false:逻辑电平和物理电平相反

4.配置示例#

在明确需求与字段含义后,核对当前 hardware.lini 配置与需求的差异,并根据需求调整配置。

4.1 I2C 示例#

根据硬件需求,仅使用第二组 i2c,对应 2930 两个引脚(可参照 Datasheet 的引脚功能):

在 hardware.lini 配置 peripheral.i2c

  1. 第一组留空,使用第二组;
  2. peripheral.i2c.scl 中,pin设为 29mux 设为 2
  3. peripheral.i2c.sda 中,pin设为 39mux 设为 2
[[peripheral.i2c]] [[peripheral.i2c]] [peripheral.i2c.scl] pin = 29 mux = 2 [peripheral.i2c.sda] pin = 30 mux = 2

4.2 UART 示例#

根据硬件需求,模组仅使用第二第三组 uart,第二组uart可用55562个引脚,第三组uart可用452个引脚。

在 hardware.lini 配置 peripheral.uart

  1. 第一组留空,使用第二组,第三组uart;
  2. 第2组,peripheral.uart.txd 中,pin设为 55mux 设为 2
  3. 第2组,peripheral.uart.rxd 中,pin设为 56mux 设为 2
  4. 第3组,peripheral.uart.txd 中,pin设为 4mux 设为 2
  5. 第3组,peripheral.uart.rxd 中,pin设为 5mux 设为 2
[[peripheral.uart]] [[peripheral.uart]] [peripheral.uart.txd] pin = 55 mux = 2 [peripheral.uart.rxd] pin = 56 mux = 2 [[peripheral.uart]] [peripheral.uart.txd] pin = 4 mux = 2 [peripheral.uart.rxd] pin = 5 mux = 2

4.3 I2S 示例#

根据硬件需求,要用到使用两组 i2s,Datasheet对应引脚为 33~ 37 5个引脚。

在 hardware.lini 配置 peripheral.i2s

  1. peripheral.i2s.mclk中,pin设为 37mux 设为 1
  2. peripheral.i2s.bclk 中,pin设为 34mux 设为 1
  3. peripheral.i2s.lrck 中,pin设为 33mux 设为 1
  4. peripheral.i2s.dout 中,pin设为 35mux 设为 1
  5. peripheral.i2s.din0 中,pin设为 36mux 设为 1
[[peripheral.i2s]] [peripheral.i2s.mclk] pin = 37 mux = 1 [peripheral.i2s.bclk] pin = 34 mux = 1 [peripheral.i2s.lrck] pin = 33 mux = 1 [peripheral.i2s.dout] pin = 35 mux = 1 [peripheral.i2s.din0] pin = 36 mux = 1

4.5 GPIO 示例#

系统就绪的io输出引脚配置

[[peripheral.gpio]] tag = "rdy" pin = 13 mux = 0 dir = true def = false rev = true

PA的使能引脚配置

[[peripheral.gpio]] tag = "amp" pin = 14 mux = 0 dir = true def = true rev = true
  • 没帮助 0