WeiKai SPI/I²C UART/IO 扩展器
WeiKai 微电子提供一系列 UART 和 GPIO 扩展芯片,通过 SPI 或 I²C 总线与微控制器接口。
ESPHome 的 WeiKai 组件支持以下 WeiKai 芯片:
它也可以用于配备这些芯片的评估板,例如:
不同 WeiKai 芯片提供的功能在下表中描述:
WeiKai 芯片功能
Section titled “WeiKai 芯片功能”| 芯片 | 总线 | UART | GPIO |
|---|---|---|---|
| WK2132-ISSG | S/I | 2 | |
| WK2212-IQNG | S/I | 2 | 8 |
| WK2124-ISSG | S | 4 | |
| WK2204-IQNG | S/I | 4 | |
| WK2168-IQPG | S/I | 4 | 8 |
如您所见,大多数组件可以通过 I²C 总线或 SPI 总线接口,它们提供 2 或 4 个串行通道,有些还提供 8 个输入/输出引脚。
每个 UART 通道都有两个独立的 256 字节 FIFO 硬件缓冲区用于发送和接收,并支持高达 1 Mbps 的数据传输速率。 每个 UART 通道的波特率和校验格式可以独立配置。 但是,数据位长度固定为 8。
利用 UART 通道,您可以连接 UART 设备,每个通道都作为连接组件的虚拟 UART 总线工作。
WeiKai 芯片的 I/O 引脚可以像其他 GPIO 引脚一样使用。 任何接受引脚方案的选项理论上都可以使用,但一些通过此 I/O 扩展器进行通信的较复杂组件可能无法工作。
通过 SPI 总线连接
Section titled “通过 SPI 总线连接”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。
-
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。
-
通过 I²C 总线连接
Section titled “通过 I²C 总线连接”wk2132_i2c、wk2212_i2c、wk2204_i2c、wk2168_i2c 组件允许您通过 I²C 总线将 WeiKai 芯片与 ESPHome 连接。
最多四个 WeiKai 芯片可以连接到一个 I²C 控制器板,有效扩展可用的硬件串口。这些板的基地址由板上的两个开关 A0 和 A1 的位置定义。
WeiKai 地址选择
Section titled “WeiKai 地址选择”| I²C 地址 | A1 | A0 |
|---|---|---|
| 0x10 - 0x17 | 0 | 0 |
| 0x30 - 0x37 | 0 | 1 |
| 0x50 - 0x57 | 1 | 0 |
| 0x70 - 0x77 | 1 | 1 |
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 的唯一通道编号。 选项:
0到1或0到3,取决于型号。 -
baud_rate (*必需):UART 通道的波特率。
-
parity (可选):UART 通道使用的校验方式。选项:
NONE、EVEN、ODD。默认值为NONE。 -
stop_bits (可选):发送的停止位数量。选项:
1、2。 默认值为1。
-
使用 GPIO 引脚
Section titled “使用 GPIO 引脚”对于 WK2212 和 WK2168,可以像其他 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引脚配置变量
Section titled “引脚配置变量”-
wkxxxx_xxx (*必需, ID):引脚对应的
wkxxxx_xxx组件的 ID。例如wk2212_i2c: wk2168_bridge_spi -
number (*必需):引脚编号(
0到7) -
inverted (可选):是否将所有读取和写入的值视为反转。默认值为
false。 -
mode (可选):为引脚设置的引脚模式。可选值为
INPUT或OUTPUT。默认值为INPUT
性能注意事项
Section titled “性能注意事项”请注意,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 Hz | 921,600 Bd |
| 11,059,200 Hz | 691,200 Bd |
| 7,372,800 Hz | 460,800 Bd |
| 3,686,400 Hz | 230,400 Bd |
| 1,843,200 Hz | 115,200 Bd |
如果您尝试使用超过最大波特率的波特率,日志文件中将显示错误,波特率将自动降低。