Zephyr 在 Kincony KC868-A8 上的开发实践:ESP32 八路继电器智能家居控制板
【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr
Kincony KC868-A8 是一款基于 Espressif ESP32(ESP-WROOM-32 模组)的家居自动化继电器模块,在 Zephyr 中作为独立 board 得到完整支持(定义见 board.yml)。本文以 KC868-A8 板卡文档 为主线,结合仓库内的设备树、引脚复用与构建脚本,讲解该板卡在 Zephyr 下的硬件资源、固件烧录、双核 AMP 与以太网使能等完整开发流程,帮助你快速搭建基于 KC868-A8 的继电器控制与联网应用。
Kincony KC868-A8 板卡外观
板卡概览
KC868-A8 是 Kincony 推出的家用自动化继电器模块,核心为 Espressif ESP32 的 ESP-WROOM-32 模组,因此天然继承了 ESP32 的全部能力——Wi-Fi、经典蓝牙与 BLE 等,可直接接入 Zephyr 的网络协议栈与蓝牙子系统。
该板卡在仓库中以kincony_kc868_a8为 board 名注册(见 board.yml),soc 为esp32。与大多数 ESP32 板卡一致,它支持 PROCPU / APPCPU 双镜像(AMP)方案,并默认采用 4MB SPI Flash、禁用 PSRAM 的配置(见 kincony_kc868_a8_procpu.dts)。
硬件资源
板载特性如下:
- 8 路数字光耦隔离输入("干接点" dry contact)
- 2 路 0–5 V 模拟输入
- 8 路 220 V / 10 A 继电器(COM、NO、NC 触点)
- I2C 连接器
- 模拟输入
- 以太网 LAN8720A PHY
- USB-C 接口(用于编程与固件烧录)
- RESET 与 DOWNLOAD 按键
- 12 V DC 供电
从设备树看硬件拓扑
硬件资源的具体接线可以在板卡设备树 kincony_kc868_a8_procpu.dts 中确认:
- 输入与继电器均通过 I2C 扩展:板卡在 I2C1 总线上挂接了两颗 NXP PCF857x 型 I/O 扩展器(
compatible = "nxp,pcf857x"):- 地址
0x22:pcf8574_inputs,8 个 GPIO,行名依次为IN1–IN8,对应 8 路光耦隔离输入; - 地址
0x24:pcf8574_relays,8 个 GPIO,行名依次为RLY1–RLY8,对应 8 路继电器。
- 地址
- I2C 引脚:
sda-gpios = <&gpio0 4 GPIO_OPEN_DRAIN>、scl-gpios = <&gpio0 5 GPIO_OPEN_DRAIN>,标准速率(I2C_BITRATE_STANDARD)。 - 以太网:MDIO 总线(
SMI_MDC_GPIO23/SMI_MDIO_GPIO18)上挂载ethernet-phy@0(LAN8720A,reg = 0),eth节点通过phy-handle = <&phy>关联 PHY,并以ref-clk-output-gpios = <&gpio0 17 0>在 GPIO17 输出参考时钟。 - 控制台串口:UART0,
current-speed = <115200>,TX/RX 分别为 GPIO1 / GPIO3(带内部上拉),同时作为zephyr,console与zephyr,shell-uart。 - 预留引脚:
gpio0上gpio-reserved-ranges = <6 6>, <20 1>, <24 1>, <28 4>,gpio1上<5 2>,这些引脚被板载功能占用,Zephyr 驱动不会将其暴露给应用。
引脚复用定义集中在 kincony_kc868_a8-pinctrl.dtsi,包含uart0_default、i2c1_default(开漏、上拉)与mdio_default三组 pinctrl 状态。
ESP32 SoC 特性
KC868-A8 所在的 ESP32 SoC 具备以下能力(完整描述见 soc-esp32-features.rst):
- 双核 Xtensa LX6 微处理器,主频 160 MHz 或 240 MHz
- 520 KB SRAM
- 802.11b/g/n/e/i Wi-Fi
- 蓝牙 v4.2 BR/EDR 与 BLE
- 丰富外设:12-bit ADC(最多 18 通道)、2×8-bit DAC、10 路触摸传感器、4×SPI、2×I2S、2×I2C、3×UART、SD/SDIO/MMC 主机、SDIO/SPI 从机、以太网 MAC、CAN 2.0、IR 收发、电机 PWM、最多 16 通道 LED PWM、霍尔传感器、温度传感器
- 硬件密码学加速(RNG、ECC、RSA、SHA-2、AES)
- 深睡电流约 5 µA
双核 AMP 支持
ESP32 与 ESP32-S3 板卡支持双核非对称多处理(AMP):两个核心可分别运行不同的应用程序,并通过 OpenAMP 框架交换数据,代码参考见 Zephyr 的ipc示例类别。KC868-A8 也为此提供了 APPCPU 镜像定义 kincony_kc868_a8_appcpu.dts,其中通过zephyr,ipc_shm = &shm0与zephyr,ipc = &ipm0指定与 PROCPU 通信的共享内存和 IPC 通道。
注意(AMP 与串口输出):在当前的 Zephyr ESP32 实现中,APPCPU 上运行的应用尚不能使用 Zephyr 管理的串口驱动(如
printk()、日志或控制台 UART),串口输出 API 仅在 PROCPU 可用。作为替代,APPCPU 应用可使用 ESP32 ROM 函数(如ets_printf())输出诊断或调试信息。
系统要求
Espressif HAL 需要 RF 二进制固件(binary blobs)才能正常工作。执行以下命令获取:
west blobs fetch hal_espressif建议在每次west update之后运行上述命令,以保证 blob 与当前 HAL 版本匹配。
编程与调试
KC868-A8 支持 Zephyr 标准的构建与烧录流程,烧录依赖由 board.cmake 提供,其会定位 ESP32 工具链路径下的 OpenOCD 并引入esp32.board.cmake与openocd.board.cmake。
Simple Boot:默认的单镜像启动
默认构建不包含二级引导程序,直接加载单一二进制镜像,这是未附加额外配置时的默认选项。
注意:Simple Boot 不提供任何安全特性,也不支持 OTA 升级。
MCUboot Bootloader
如需使用 MCUboot 引导程序,引导程序本身至少需要构建并烧录一次。有两种构建方式:
- Sysbuild(推荐)
- 手动构建(Manual build)
可以通过在板卡默认配置文件中加入以下行来选择 MCUboot:
CONFIG_BOOTLOADER_MCUBOOT=ySysbuild
Sysbuild 可以一次性构建并烧录 ESP32 启动所需的全部镜像。使用 sysbuild 构建示例应用:
west build -b kincony_kc868_a8 samples/hello_world --sysbuild默认情况下,ESP32 的 sysbuild 会创建引导程序(MCUboot)与应用两个镜像,也可配置生成其他类型的镜像。其构建目录结构与传统 Zephyr 构建不同,输出按 domain 子目录组织:
build/ ├── hello_world │ └── zephyr │ ├── zephyr.elf │ └── zephyr.bin ├── mcuboot │ └── zephyr │ ├── zephyr.elf │ └── zephyr.bin └── domains.yaml注意:使用
--sysbuild时,每次执行 pristine 构建都会重新构建并重新烧录引导程序。更多信息参见 Zephyr 的 sysbuild 文档。
手动构建
开发迭代期追求最快构建与烧录速度时,可以一次只构建一个镜像(传统构建方式)。以下指令同时适用于手动构建与 sysbuild,二者仅构建目录结构不同。
注意:引导程序(MCUboot)至少需要烧录一次。
按常规方式构建应用:
west build -b kincony_kc868_a8 samples/hello_world常规的flash目标会与板卡配置配合工作,以hello_world为例:
west flash -b kincony_kc868_a8 samples/hello_world注意:对于暴露内置 USB Serial/JTAG 控制器的目标,
west flash后芯片可能停留在下载模式,不会自动启动新镜像,需要断电重启。若出现该情况,可带看门狗复位烧录,让芯片自行重启:west flash --reset-type watchdog-reset
加速烧录技巧
为加快开发循环,Zephyr 的 ESP32 烧录器提供了三个实用选项:
--esp-skip-flashed:当 flash 中的二进制与待烧录镜像一致时跳过写入(设备端通过 MD5 校验确认):west flash --esp-skip-flashed--esp-diff:仅写入与上次镜像不同的区域。它对比的是本地缓存的副本而非读取设备,因此仅当 flash 自上次west flash以来未被其他工具、板卡或手动写入修改时使用:west flash --esp-diff--esp-no-progress:抑制进度输出,便于 CI 场景下获得更干净的日志:west flash --esp-no-progress
打开串口监视器
使用以下命令打开串口监视器:
west espressif monitor板卡自动复位并启动后,监视器中应看到如下输出:
***** Booting Zephyr OS vx.x.x-xxx-gxxxxxxxxxxxx ***** Hello World! <board>通过 Snippets 选择板卡变体
ESP32 板卡可组合不同的 SPI Flash 容量、PSRAM 容量与 PSRAM 模式组装成多种模组。snippets/espressif下的 snippets 提供模块化方式在构建时应用这些变体,而无需复制板卡定义。支持的 snippet 变体如下:
| Snippet 名称 | 说明 |
|---|---|
| Flash 容量 | |
espressif-flash-4M | 4 MB Flash 板卡 |
espressif-flash-8M | 8 MB Flash 板卡 |
espressif-flash-16M | 16 MB Flash 板卡 |
espressif-flash-32M | 32 MB Flash 板卡 |
espressif-flash-64M | 64 MB Flash 板卡 |
espressif-flash-128M | 128 MB Flash 板卡 |
| PSRAM 容量 | |
espressif-psram-2M | 2 MB PSRAM 板卡 |
espressif-psram-4M | 4 MB PSRAM 板卡 |
espressif-psram-8M | 8 MB PSRAM 板卡 |
| PSRAM 利用方式 | |
espressif-psram-reloc | 将 Flash 重定位到 PSRAM |
espressif-psram-wifi | Wi-Fi 缓冲区置于 PSRAM |
应用板卡变体时使用west build的-S标志:
west build -b kincony_kc868_a8 samples/hello_world -S espressif-flash-32M,espressif-psram-4M注意:这些 snippets 仅适用于所选 Flash/PSRAM 配置有对应硬件支持的板卡。
- 若未使用 Flash snippet,则采用板卡默认 Flash 容量(KC868-A8 默认 4MB);
- 若未使用 PSRAM snippet,则采用板卡默认 PSRAM 容量(KC868-A8 默认禁用 PSRAM,见 kincony_kc868_a8_procpu.dts 中
&psram0 { status = "disabled"; })。
使能以太网
KC868-A8 板载 LAN8720A 以太网 PHY,设备树中eth与mdio节点均已在 kincony_kc868_a8_procpu.dts 中使能。应用侧还需在 Kconfig 中开启网络支持:
CONFIG_NETWORKING=y CONFIG_NET_L2_ETHERNET=y CONFIG_MDIO=yCONFIG_NETWORKING开启 Zephyr 网络协议栈;CONFIG_NET_L2_ETHERNET使能以太网 L2 层(对应设备树中的eth节点,关联 PHY 句柄&phy);CONFIG_MDIO使能 MDIO 管理接口驱动,用于读写 PHY 寄存器并完成链路协商。
配置完成后即可在应用中通过标准 BSD Socket 或 Zephyr 网络 API 使用有线网络。
参考资料
- 本文核心依据:Kincony KC868-A8 板卡文档
- 板卡设备树:kincony_kc868_a8_procpu.dts、kincony_kc868_a8_appcpu.dts
- 引脚复用:kincony_kc868_a8-pinctrl.dtsi
- 烧录支持:board.cmake、support/openocd.cfg
- ESP32 SoC 特性与 AMP 说明:soc-esp32-features.rst
- 系统要求(RF blobs):system-requirements.rst
- 构建与烧录通用说明:building-flashing.rst
- 板卡变体 snippets 说明:board-variants.rst
【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考