多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

HoloCubic_AIO双SPI引脚冲突解析:为什么MISO引脚12必须改为26

HoloCubic_AIO双SPI引脚冲突解析:为什么MISO引脚12必须改为26 HoloCubic_AIO双SPI引脚冲突解析为什么MISO引脚12必须改为26【免费下载链接】HoloCubic_AIOHoloCubic超多功能AIO固件 基于esp32-arduino的天气时钟、相册、视频播放、桌面投屏、web服务、bilibili粉丝等项目地址: https://gitcode.com/GitHub_Trending/ho/HoloCubic_AIOHoloCubic_AIO 是一款基于 ESP32 的超多功能小电视固件AIO All In One集成了天气时钟、照片相册、视频播放、桌面投屏、Web 服务和 Bilibili 粉丝动态等功能。在编译部署时新手常会踩到一个坑内存卡读取失败根因是双 SPI 总线的 MISO 引脚冲突。这篇文章带你彻底搞懂为什么 HSPI 默认的 MISO 引脚 12 必须改为 26。一、冲突的根源一块板子上跑了两套 SPIESP32 内部有两套独立的硬件 SPI 控制器VSPI和HSPI它们各自有固定的“默认引脚”。HoloCubic_AIO 的硬件设计是外设占用的 SPI引脚分配工程定义240×240 TFT 屏幕VSPIMOSI23、SCLK18、MISO19、DC2、RST4SD 内存卡HSPISCK14、MISO26、MOSI13、CS15屏幕引脚定义Setup24_ST7789.hSD 卡引脚定义common.h看起来各司其职互不干扰。问题出在SD 卡这条 HSPI 总线上。二、为什么引脚 12 在 ESP32 上是个“雷区”老版本的 SPI 库在初始化 HSPI 时如果不显式指定引脚会使用一套默认引脚其中_miso (_spi_num VSPI) ? MISO : 12; // 需要改为26也就是说HSPI 的默认 MISO 是 GPIO12。而 ESP32 的 GPIO12 是一个特殊引脚Strapping Pin上拉/下拉引脚GPIO12 在芯片上电瞬间被硬件采样用于设置外部 Flash 的工作电平QIO/QOUT 模式SD 卡电路或 SPI 初始化过程若让 GPIO12 被上拉上电采样的电平就会出错后果非常隐蔽芯片直接无法启动、设备变砖需刷回才能恢复或者开机后 SD 卡读取失败。所以官方推荐的做法是不要碰 GPIO12把 HSPI 的 MISO 从 12 换成空闲的 GPIO26。ESP32开发板GPIO引脚分布与SPI引脚位置三、两种解决方式改库 vs 显式指定引脚方式 1修改 SPI 库旧版本固件的做法在 ESP32 Arduino 固件包的libraries/SPI/src/SPI.cpp中把 HSPI 默认 MISO 从12改成26。这种改法侵入系统库升级固件包时容易被覆盖后来被工程废弃README 中该段说明已加删除线见 README.md。方式 2不依赖默认引脚直接显式指定现行做法 ✅新版固件完全不需要再改库而是在 SD 卡初始化时显式传入四个引脚绕开 HSPI 的默认值SPIClass *sd_spi new SPIClass(HSPI); // 使用独立的 HSPI 总线 sd_spi-begin(SD_SCK, SD_MISO, SD_MOSI, SD_SS); // 显式指定 MISO26 SD.begin(SD_SS, *sd_spi, 80000000);对应代码位置sd_card.cpp其中SD_MISO宏定义为26见 common.h。 一句话总结引脚 12 是上电采样引脚被 SPI 拉高会阻止芯片启动改用引脚 26 并显式传入从源头消除了冲突。四、项目结构与相关文件索引HoloCubic_AIO 的固件采用「Controller 调度 驱动层 App 层」的模块化架构SD 卡驱动被挂在驱动层中统一管理与本话题直接相关的文件全局引脚与常量定义common.hSD 卡驱动SPI 初始化所在处sd_card.cpp屏幕引脚配置TFT_eSPISetup24_ST7789.hSPI 库修改历史说明README.md五、新手常见疑问 FAQQ1现在编译还需要手动改 SPI 库吗不需要。工程在lib目录下已内置处理好的依赖SD 卡初始化也显式指定了引脚直接编译即可。Q2为什么偏偏是 26换成别的行不行理论上换成其他空闲引脚均可但要避开 Strapping 引脚GPIO0/2/5/12/15和已被屏幕、WiFi、I2C 占用的引脚。26 在该硬件上是完全空闲且安全的故被选为默认值。Q3如果 SD 卡读不出来怎么排查先确认供电与卡槽接触再看串口是否打印Card Mount Failedsd_card.cpp若出现开机卡死、无法进入串口优先怀疑 GPIO12 电平异常——这正是本文章解析的冲突点。Q4屏幕和 SD 卡共用引脚会怎样两套 SPI 控制器独立但同一物理引脚不能同时被两个总线驱动会互相串扰。本工程通过 VSPI屏幕 HSPISD 卡且引脚零重叠的分配方案实现了真正的“双 SPI 并行”。掌握这个细节后你就能理解 ESP32 双 SPI 应用中的一类经典硬件坑。祝你的 HoloCubic 小电视部署顺利 【免费下载链接】HoloCubic_AIOHoloCubic超多功能AIO固件 基于esp32-arduino的天气时钟、相册、视频播放、桌面投屏、web服务、bilibili粉丝等项目地址: https://gitcode.com/GitHub_Trending/ho/HoloCubic_AIO创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表