跳转到内容

WeiKai SPI/I²C UART/IO 扩展器

WeiKai Microelectronics 提供一系列 UART 和 GPIO 扩展芯片, 通过 SPI 或 I²C 总线与微控制器接口。

ESPHome 的 WeiKai 组件支持以下 WeiKai 芯片:

它也可以与配备这些芯片的开发板一起使用,例如:

不同 WeiKai 芯片提供的功能如下表所述:

芯片总线UARTGPIO
WK2132-ISSGS/I2
WK2212-IQNGS/I28
WK2124-ISSGS4
WK2204-IQNGS/I4
WK2168-IQPGS/I48

如你所见,大多数组件既可以通过 I²C 总线也可以通过 SPI 总线进行接口, 它们提供 2 个或 4 个串行通道,其中一些还提供 8 个输入/输出引脚。

每个 UART 通道都有两个独立的 256 字节 FIFO 硬件缓冲区用于发送和 接收,支持高达 1 Mbps 的数据传输速率。 每个 UART 通道的波特率和校验格式都可以独立配置。 然而,数据位长度固定为 8。

利用 UART 通道,你可以连接 UART 设备,每个通道作为连接组件的 虚拟 UART 总线。

WeiKai 芯片的 I/O 引脚可以用作任何其他 GPIO 引脚。 任何接受 引脚模式 的选项理论上都可以使用, 但通过 此 I/O 扩展器进行通信的一些更复杂组件可能无法工作。

wk2132_spi、wk2212_spi、wk2204_spi、wk2168_spi 组件允许 你通过 SPI 总线将 WeiKai 芯片与 ESPHome 连接。

你可以将多个此类模块连接到一个 SPI 控制器电路,从而有效地扩展 可用的硬件串行端口数量。每个 WeiKai 芯片需要用单独的 CS 来选择。

以下是 wk2168_spi 组件的配置条目示例。对于列表中的其他组件, 只需替换组件名称并确保不要使用超出芯片支持的通道数量(否则会产生错误信息)。注意对于 WK2124-ISSG 芯片 你需要使用 wk2204_spi,因为这两个芯片相似。

wk2168_spi:
- id: wk2168_bridge_spi
cs_pin: 5
uart:
- id: spi_uart_0
channel: 0
baud_rate: 128200
parity: even
- id: spi_uart_1
channel: 1
baud_rate: 19200
- id: spi_uart_2
channel: 2
baud_rate: 9600
- id: spi_uart_3
channel: 3
baud_rate: 19200
  • id (必选, ID): 用于此 WeiKai 组件的 id。

  • spi_id (可选, ID): 如果你想 使用多个 SPI 总线,请手动指定 SPI 组件 的 ID。

  • cs_pin (必选, 引脚模式): 芯片选择线 连接的 ESP 上的引脚。

  • data_rate (可选): 设置控制器的数据速率。可选 80MHz、40MHz、20MHz、10MHz、 5MHz、4MHz、2MHz、1MHz(默认)、200kHz、75kHz 或 1kHz。也可以指定 以 Hz 为单位的数值。

  • crystal (可选): 连接到芯片的晶振频率(Hz)。 默认值为 14745600 Hz。

  • uart (必选): UART 通道。

    • id (必选, ID): 用于此 UART 通道的 id。

    • channel (必选): 此虚拟 UART 的唯一通道号。 可选:0 到 1 或 0 到 3,取决于型号。

    • baud_rate (必选): UART 通道的波特率。

    • parity (可选): UART 通道使用的校验。可选:NONE、EVEN、 ODD。默认为 NONE。

    • stop_bits (可选): 要发送的停止位数。可选:1、2。 默认为 1。

wk2132_i2c、wk2212_i2c、wk2204_i2c、wk2168_i2c 组件允许你 通过 I²C 总线将 WeiKai 芯片与 ESPHome 连接。 最多四个 WeiKai 芯片可以连接到一个 I²C 控制器板,从而有效地扩展可用的 硬件串行端口数量。这些板的基本地址由 板上两个开关 A0 和 A1 的位置定义。

I²C 地址A1A0
0x10 - 0x1700
0x30 - 0x3701
0x50 - 0x5710
0x70 - 0x7711

IMPORTANT

请注意,地址以范围形式给出,而不是像其他 I²C 组件中通常找到的数字。 由于寻址不同内部寄存器的特殊方式,每个组件实际上占用 8 个连续地址。例如,如果组件基本地址为 0x10,它将占用从 0x10 到 0x17 的地址范围。

如果你想连接其他设备到同一个 I²C 总线上,了解这一点很重要。

以下是 wk2168_i2c 组件的配置条目示例。对于其他组件, 只需替换组件名称,不要使用超出芯片支持的通道数量(在这种情况下将产生错误信息)。

wk2168_i2c:
- address: 0x70
id: wk2168_bridge_i2c
uart:
- id: i2c_uart_0
channel: 0
baud_rate: 9600
parity: even
- id: i2c_uart_1
channel: 1
baud_rate: 19200
- id: i2c_uart_2
channel: 2
baud_rate: 9600
- id: i2c_uart_3
channel: 3
baud_rate: 19200
  • id (必选, ID): 用于此 WeiKai 组件的 id。

  • address (可选): 此组件的 I²C 地址。默认为 0x10。

  • i2c_id (可选): I²C 总线 ID。默认为默认 I²C 总线。

  • crystal (可选): 连接到芯片的晶振频率(Hz)。 默认值为 14745600 Hz。

  • uart (必选): UART 通道。

    • id (必选, ID): 用于此 UART 通道的 id。

    • channel (必选): 此虚拟 UART 的唯一通道号。 可选:0 到 1 或 0 到 3,取决于型号。

    • baud_rate (必选): UART 通道的波特率。

    • parity (可选): UART 通道使用的校验。可选:NONE、EVEN、 ODD。默认为 NONE。

    • stop_bits (可选): 要发送的停止位数。可选:1、2。 默认为 1。

对于 WK2212 和 WK2168,可以使用芯片 I/O 引脚作为任何其他 GPIO 引脚。 例如对于 wk2168_spi 芯片:

# 单独的 binary_sensor 输入
binary_sensor:
- platform: gpio
name: "pin_0"
pin:
wk2168_spi: wk2168_bridge_spi
number: 0
mode:
input: true
- platform: gpio
name: "pin_1"
pin:
wk2168_spi: wk2168_bridge_spi
number: 1
mode:
input: true
inverted: true
# 单独的二级输出
switch:
- platform: gpio
name: "pin_2"
pin:
wk2168_spi: wk2168_bridge_spi
number: 2
mode:
output: true
- platform: gpio
name: "pin_3"
pin:
wk2168_spi: wk2168_bridge_spi
number: 3
mode:
output: true
inverted: true
  • wkxxxx_xxx (必选, ID): 引脚的 wkxxxx_xxx 组件的 id。例如 wk2212_i2c: wk2168_bridge_spi

  • number (必选): 引脚号(0 到 7)

  • inverted (可选): 是否将所有读取和写入的值视为反转。默认为 false。

  • mode (可选): 为此引脚设置的引脚模式。可选 INPUT 或 OUTPUT。默认为 INPUT

请注意,WeiKai 芯片与处理器之间的通信通过外部总线进行, 运行频率相对较低。因此,检查芯片寄存器状态或从内部 FIFO 传输字节到处理器等操作可能需要时间。

为了改善这种情况,强烈建议提高默认总线频率。

  • 使用 SPI 总线时,可以通过在 WeiKai 组件上指定 data_rate 来实现。例如:
wk2168_spi:
- id: wk2168_bridge_spi
spi_id: spi_bus_id
cs_pin: 5
data_rate: 4MHz
  • 使用 I²C 总线时,需要在 i2c 声明上进行,因此此频率将 应用于连接到该总线的所有组件。
i2c:
sda: 21
scl: 22
scan: true
id: bus_i2c
frequency: 800kHz

最大 baud_rate 与晶振频率成正比。下表 给出了常用系统时钟下的最大 baud_rate:

时钟最大 Bd
14,745,600 Hz921,600 Bd
11,059,200 Hz691,200 Bd
7,372,800 Hz460,800 Bd
3,686,400 Hz230,400 Bd
1,843,200 Hz115,200 Bd

如果你尝试使用高于最大 baud_rate 的波特率,日志文件中将显示错误, 并且波特率将自动降低。