完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我一直在尝试让 ESP32 在我设计的 SPI 总线上充当从设备。总线目前也被串行闪存设备占用(当然是单独的片选信号)。我倾注了所有文档、勘误表和示例代码来实现此功能。我相信我已经正确配置了 SPI3 外围设备,包括将所有缓冲区放置在支持 DMA 的内存中并利用默认外围引脚位置来确保可靠的吞吐量,但我看到了一些奇怪的行为。
如果我在没有尝试访问其他串行闪存设备的情况下操作 SPI 总线,ESP32 似乎会按预期做出响应。但是,如果我完全访问串行闪存设备,则无法实现 ESP32 SPI 外设的正常运行。 我注意到的第一件事是,当 ESP32 的芯片选择未激活时,它似乎正在驱动 MISO 引脚(总线访问旨在用于串行闪存)。这是硬件的根本故障……搜索论坛没有发现任何其他关于此的投诉,所以我想知道是否其他用户正在使用专用总线进行 SPI 通信? 其次,我注意到当总线流量为 100% 串行闪存事务(ESP32 的芯片选择未激活)时,我的传输后回调在 8192 个时钟(1024 字节)后被触发。如果我简单地执行串行闪存内容的读取(串行闪存的内容非零),我可以复制这种现象。传输后回调正在接收 spi_slave_transaction_t 结构信息,指示总数据长度为 8192 位,交易数据长度为 8192 位,但 rx_buffer 指针指向的数据大部分为零,不代表 SPI 总线数据串行闪存。后来我确定数据中包含一些反映尝试访问的闪存地址的内容。 在实验中,我从串行闪存中读取 128 字节的数据块,从地址 0x00000000 开始。如果我执行其中的八个操作(从闪存中读取总共 1024 个字节),我将在事务后回调中获得一致的数据内容。来自我的代码的此数据的诊断转储揭示了似乎是数据中出现的增量地址的证据。触发的事件似乎总是以 0x03000000 开头,后跟值 0x03000080、0x03000100、0x03000180、0x03000200、0x03000280、0x03000300 和 0x03000380。这些地址值与主机在每次读取 128 字节时尝试访问的基地址相关联。从我的诊断代码中捕获的第一块数据如下所示。 这可能是硬件内部正在做什么的线索吗? 在多从总线配置上运行时,任何人都可以证实这种行为吗? 有什么解决方法吗? 代码:
|
|
相关推荐
2个回答
|
|
|
|
|
|
首先,您确定 ESP32 的 CS 引脚确实保持高电平吗?如果有疑问,你能把它硬连线到高水平吗?其次,您是否能够发布您的代码,或者最好是将版本削减到显示问题的最低限度?
|
|
|
|
只有小组成员才能发言,加入小组>>
321 浏览 0 评论
1178 浏览 1 评论
586浏览 6评论
483浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
468浏览 5评论
467浏览 4评论
442浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 05:28 , Processed in 0.947501 second(s), Total 79, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号