Bruce 固件 M5StickS3 接线指南:StickS3 模块引脚分配与 SPI/I2C/UART 外设连接全解
发布时间:2026/10/2 1:43:43来源:尧图网络
渗透测试网络安全嵌入式物联网【免费下载链接】firmwarePredatory ESP32 Firmware项目地址https://gitcode.com/GitHub_Trending/bru/firmware点击查看免费下载本文以 BrucePredatory ESP32 Firmware仓库中 M5StickS3 连接文档 为核心结合 PlatformIO 板级配置、板级初始化源码 与 引脚运行时配置模块系统讲解 M5StickS3 在 Bruce 固件中的引脚分配、SD 卡 / CC1101 / NRF24 / PN532 / W5500 / LoRa 等外设的接线方法以及 Grove 接口上的 I2C 设备与 UART 串口连接规则。读完本文你将能正确为 M5StickS3 连接各射频与存储外设理解 GPIO 冲突的根源并掌握通过brucePins.conf动态重映射 W5500 / LoRa 等引脚的方法。一、兼容性警告为何 StickS3 不能沿用 StickCPlus 的玩法在使用 M5StickS3 前首先需要明确一条重要限制M5StickS3 与 M5StickC Plus1.1 和 2 代互不兼容两者不能互换固件或接线方案。根本原因在于 GPIO 0 的复用冲突。在 StickS3 上作为 Boot 引脚的GPIO 0同时连接到了 PMIC电源管理 IC。由于 PMIC 的存在GPIO 0 无法正常驱动 SPI 的 SCK 时钟线会导致整个 SPI 通信失败。正是这一硬件限制使得 StickS3 与以下 M5Stack Hat 系列扩展板同样不兼容Hat Mini JoyCSKU: U156Hat Mini EncoderCSKU: U157Hat 18650CSKU: U080从板级配置 m5stack-sticks3.ini 可以印证StickS3 的 SPI 时钟线被固定在 GPIO 5-DSPI_SCK_PIN5完全绕开了 GPIO 0而引脚定义文件 pins_arduino.h 中也将G0单独声明为static const uint8_t G0 0;表明该引脚在板级代码中仅作为普通 IO 使用不承担 SPI 时钟职责。因此所有依赖 GPIO 0 驱动 SPI 的扩展板在 StickS3 上都无法正常工作接线时请务必避开。二、StickS3 模块连接总表SPI 总线StickS3 的 SPI 总线采用共享总线 独立片选的架构所有 SPI 外设共用同一条硬件 SPI 总线通过各自的 CS片选引脚区分设备。Bruce 文档给出的标准接线如下设备SCKMISOMOSICSGDO0/CESD Card5467---CC110154623NRF2454681PN53254643--W5500546****LoRa546****其中 W5500 与 LoRa 的 CS 及附加引脚标注为**表示默认不固定需要在 brucePins 配置中按需设定详见本文第四节。这一连接表并非孤立的文档声明它在板级代码中被完整落实。打开 boards/m5stack-sticks3/interface.cpp 的_setup_gpio()函数可以看到同样的表格以注释形式存在并且每个外设的 CS 引脚都被显式初始化为高电平以释放总线pinMode(7, OUTPUT); digitalWrite(7, HIGH); // SD Card CS pinMode(2, OUTPUT); digitalWrite(2, HIGH); // CC1101 CS pinMode(8, OUTPUT); digitalWrite(8, HIGH); // nRF24L01 CS pinMode(43, OUTPUT); digitalWrite(43, HIGH); // PN532 CS pinMode(9, OUTPUT); digitalWrite(9, LOW); // M5RF433 avoid Jamming pinMode(46, OUTPUT); digitalWrite(46, LOW); // Infrared LED Off此外_setup_gpio()还会主动将 M5RF433 模块所在的 GPIO 9 拉低以避免射频干扰并将红外发射 LEDGPIO 46初始化为关闭状态确保上电后不会出现意外发射。2.1 板级配置中的引脚宏对应关系在 m5stack-sticks3.ini 中上述接线被编码为一组编译期宏物理接线必须与这些宏保持一致否则外设无法工作宏定义值说明-DSPI_SCK_PIN55共享 SPI 时钟-DSPI_MOSI_PIN66共享 SPI 主出从入-DSPI_MISO_PIN44共享 SPI 主入从出-DSPI_SS_PIN4343默认 SPI 从机选择PN532 CS-DSDCARD_CS77SD 卡片选-DCC1101_SS_PIN2、-DCC1101_GDO0_PIN32 / 3CC1101 片选 / GDO0-DNRF24_SS_PIN8、-DNRF24_CE_PIN18 / 1NRF24 片选 / 使能-DW5500_SS_PIN-1-1W5500 默认未启用-DLORA_CS-1、-DLORA_RST-1、-DLORA_DIO0-1-1LoRa 默认未启用注意 CC1101、NRF24、W5500 的 MOSI/SCK/MISO 均直接引用SPI_MOSI_PIN/SPI_SCK_PIN/SPI_MISO_PIN宏见 ini 中-DCC1101_MOSI_PINSPI_MOSI_PIN等写法也就是说所有 SPI 外设共享同一物理总线CC1101 与 NRF24 之间的切换靠 CS 与 GDO0/CE 引脚区分。三、Grove 接口I2C 设备与 GPS 串口M5StickS3 的 Grove 连接器端口同时承载两类功能I2C 总线与 GPS 串口。Bruce 文档明确规定GPS、PN532 和 SI4713 均使用 Grove 连接器端口其引脚分配如下设备SCL/RXSDA/TXPN532910SI4713910GPS910对应到板级配置中Grove 口被定义为默认 I2C 总线GROVE_SDA9、GROVE_SCL10同时 GPS 的串口也复用同一对引脚GPS_SERIAL_TX9、GPS_SERIAL_RX10。这一点需要特别注意Grove 口的 GPIO 9 / GPIO 10 是一对多功能引脚既可作为 I2C 的 SDA/SCL也可作为 GPS 的 TX/RX实际用途取决于所接设备的工作模式。从 configPins.h 可以看到i2c_bus与gps_bus是相互独立的运行时配置项两者默认值恰好都落在 9/10 上接线时切勿同时接入两个争夺同一引脚的外设。此外StickS3 还拥有独立的系统 I2C 总线SYS_I2C_SDA47、SYS_I2C_SCL48在 interface.cpp 的_setup_gpio()中通过Wire1.begin(47, 48)初始化专门用于连接板载 PMIC、触摸、IMU 等系统外设用户外设不应占用这两个引脚。Bruce 的 I2C HAL见 src/core/bus_HAL.h会在用户 I2C 总线与系统总线引脚重叠时自动复用系统总线实例避免冲突但前提是遵循文档给出的 Grove 分配。四、W5500 与 LoRa需要动态配置的引脚与 SD 卡、CC1101、NRF24、PN532 拥有固定 CS 不同W5500 和 LoRa 在 StickS3 上默认不分配固定引脚。文档明确指出W5500 需要根据你的需求在 brucePins 配置中设置引脚。板级 ini 中的默认值也印证了这一点-DW5500_SS_PIN-1、-DLORA_CS-1、-DLORA_RST-1、-DLORA_DIO0-1。值为-1表示该引脚处于“未连接”状态固件不会对其实施任何驱动。在 Bruce 固件中这类可在运行时修改的引脚配置统一存储于brucePins.conf文件中。从 src/core/configPins.cpp 的fromJson()实现可以看到配置以设备 MAC 地址为键组织每个设备可保存CC1101_Pins、NRF24_Pins、PN532_Pins、SDCard_Pins、W5500_Pins、LoRa_Pins、ST25R_Pins等一组 SPI 总线配置对象每个对象包含sck、miso、mosi、cs、io0、io2六个字段见 configPins.h 中SPIPins结构体其中io0/io2用于承载 W5500 的 INT 与 RST、LoRa 的 RST/DIO0 这类附加信号{ AA:BB:CC:DD:EE:FF: { W5500_Pins: { sck: 5, miso: 4, mosi: 6, cs: 41, io0: 42, io2: 38 }, LoRa_Pins: { sck: 5, miso: 4, mosi: 6, cs: 1, io0: 2, io2: 3 } } }写入配置的方式有两种图形界面在 Bruce 的 Config 菜单中选择 “W5500 Pins” 或 “LoRa Pins” 菜单项见 src/core/menu_items/ConfigMenu.cpp 中的{W5500 Pins, ...}菜单项按屏幕提示依次设置 SCK/MISO/MOSI/CS 等引脚固件会调用setW5500Pins()/setLoRaPins()并自动saveFile()持久化手动编辑将brucePins.conf放到 SD 卡或 LittleFS 中按上述 JSON 结构修改后保存固件启动时会通过loadFile()/fromFile()读取并校验。配置在运行时还会经过严格校验validateSpiPins()会检查每个引脚是否落在合法 GPIO 范围内0 ~ GPIO_PIN_COUNT非法值会被重置为GPIO_NUM_NC从 configPins.cpp 的validateConfig()可以看到W5500、LoRa、ST25R 的 SPI 总线均在每次配置加载时接受校验。W5500 在固件侧通过 EthernetHelper.cpp 驱动其selectEthernetSPIBus()会调用acquireSPIBus()从W5500_bus中取出 SCK/MISO/MOSI 获取硬件 SPI 实例若三个引脚未设置即仍为 -1acquireSPIBus()返回nullptr代码会退回到默认 SPI 并打印 “No hardware SPI bus available for Ethernet” 提示——这正是“W5500 必须先配置引脚”这一约束在代码层的体现。五、UART 串口接口除 SPI 与 I2C 外StickS3 还提供了一组专用 UART 串口用于与其他设备进行串行通信设备RXTXUART4443对应板级配置为-DSERIAL_TX43、-DSERIAL_RX44。与 Grove 口复用的 GPS 串口9/10不同这组 43/44 是 StickS3 上独立专用的串口引脚不会与其他外设争用。在 configPins.h 中uart_bus默认即初始化为{(gpio_num_t)SERIAL_RX, (gpio_num_t)SERIAL_TX}即 RX44、TX43供连接各类 TTL 串口设备使用。六、SPI 总线仲裁多外设共存的底层机制StickS3 上同时存在 SD 卡、CC1101、NRF24、PN532、W5500、LoRa 最多六个 SPI 外设而 ESP32 系列在运行时可用的通用硬件 SPI 控制器只有两个。Bruce 固件通过 src/core/bus_HAL.h 中的acquireSPIBus()实现总线仲裁优先级为显示TFT总线常驻占用优先级别最高SD 卡总线与显示同生命周期常驻共享辅助总线在 CC1101 / NRF24 / LoRa / W5500 / ST25R3916 等外设之间按需轮换复用。当某个外设接在第三组完全不同的引脚上时固件已无硬件控制器可用acquireSPIBus()会返回nullptr驱动层需回退到软件模拟 SPI 或直接报错。因此在实际使用中应遵循文档的共享总线接线SCK5 / MISO4 / MOSI6让所有外设复用同一条硬件总线、仅通过 CS 区分才能获得完整的硬件 SPI 支持。七、小结一张表搞定 StickS3 接线最后将 StickS3 在 Bruce 固件下的全部关键引脚汇总如下接线时对照此表即可功能引脚说明SPI 共享总线SCK5 / MISO4 / MOSI6所有 SPI 外设共用SD 卡 CS7固定CC1101 CS / GDO02 / 3固定NRF24 CS / CE8 / 1固定PN532 CSSPI 模式43固定PN532 / SI4713 / GPSI2C/GroveSDA9 / SCL10按设备模式复用W5500 / LoRa需在 brucePins 配置默认 -1动态设置专用 UARTRX44 / TX43串口设备系统 I2CSDA47 / SCL48板载系统外设勿占用核心要点回顾M5StickS3 因 GPIO 0 被 PMIC 占用而与 StickCPlus 及特定 Hat 扩展板不兼容SPI 外设统一走 5/4/6 共享总线并按 CS 区分Grove 口的 9/10 是 I2C 与 GPS 串口的复用引脚W5500 与 LoRa 必须在 Bruce 的 Config 菜单或brucePins.conf中完成引脚配置后才能启用。按上述规则接线即可在 StickS3 上稳定运行 Bruce 固件的 SD 卡、CC1101、NRF24、PN532、以太网与 LoRa 功能。赞分享渗透测试网络安全嵌入式物联网【免费下载链接】firmwarePredatory ESP32 Firmware项目地址https://gitcode.com/GitHub_Trending/bru/firmware点击查看免费下载相关推荐SkillSpector v2.9.3 发布详解LLM 畸形结构化响应的不致命降级处理机制SkillSpector v2.9.3 发布详解LLM 畸形结构化响应的不致命降级处理机制 本文基于 SkillSpector 开源仓库中 docs/rele渗透测试网络安全嵌入式物联网YOLO ROS GPU vs CPU 性能对比500倍加速的深度学习检测YOLO ROS GPU vs CPU 性能对比500倍加速的深度学习检测 YOLO ROS是一个基于ROS机器人操作系统的实时目标检测项目它将YOLO计算机视觉人工智能深度学习机器人ArduPilot外设扩展指南UART、I2C与SPI接口实战ArduPilot外设扩展指南UART、I2C与SPI接口实战 引言为什么外设扩展很重要 在无人机开发中我们经常需要连接各种外部设备如GPS模块、气压嵌入式无人机自动驾驶机器人固件上一篇TanStack Solid Table 行选择Row Selection完整实战指南从状态管理到 Shift 区间选择下一篇Serverless Framework Dashboard 可观测性排障手册Metrics 与 Traces 缺失的完整诊断流程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网