跳转到内容

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

WeiKai 微电子提供一系列 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_spiwk2212_spiwk2204_spiwk2168_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 (可选):设置控制器的数据速率。可选值为 80MHz40MHz20MHz10MHz5MHz4MHz2MHz1MHz(默认)、200kHz75kHz1kHz。也可以指定以 Hz 为单位的数值。

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

  • uart (*必需):UART 通道。

    • id (*必需, ID):此 UART 通道使用的 ID。

    • channel (*必需):此虚拟 UART 的唯一通道编号。 选项:0103,取决于型号。

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

    • parity (可选):UART 通道使用的校验方式。选项:NONEEVENODD。默认值为 NONE

    • stop_bits (可选):发送的停止位数量。选项:12。 默认值为 1

wk2132_i2cwk2212_i2cwk2204_i2cwk2168_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,它将占用 I²C 总线上从 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 的唯一通道编号。 选项:0103,取决于型号。

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

    • parity (可选):UART 通道使用的校验方式。选项:NONEEVENODD。默认值为 NONE

    • stop_bits (可选):发送的停止位数量。选项:12。 默认值为 1

对于 WK2212WK2168,可以像其他 GPIO 引脚一样使用芯片的 I/O 引脚。 例如,对于 wk2168_spi 芯片:

# 单独的二进制传感器输入
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 (*必需):引脚编号(07

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

  • mode (可选):为引脚设置的引脚模式。可选值为 INPUTOUTPUT。默认值为 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

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

时钟最大波特率
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

如果您尝试使用超过最大波特率的波特率,日志文件中将显示错误,波特率将自动降低。