乐鑫技术交流
直播中

王波

7年用户 1335经验值
私信 关注
[问答]

如何配置ESP32来做到在同一边上锁存MOSI和采样MISO呢?

几天来我一直在尝试与 ADS8330 ADC 通信,但我无法让它工作。问题出在 SPI 模式附近,因为似乎没有适合该设备的模式:无论使用何种模式,更改 CPHA 都会以相同的方式影响 MOSI 和 MISO,但该 ADC 使用下降沿对 MOSI 和锁存 MISO 的下降沿。
在屏幕中,从上到下显示了四个波形:
1:SCLK
2:CS
3:MISO
4:MOSI
可以看出:
MISO 在下降沿被锁存,因此应在上升沿进行采样。
MOSI 在上升沿被锁存,因此应在下降沿进行采样。
空闲时 SCLK 为低电平。
MISO 数据已准备好在第一个上升沿进行采样。
根据ESP32s3手册:
模式0:CPOL = 0,CPHA = 0;当 SPI 处于空闲状态时,SCK 为 0;数据在 SCK 的下降沿改变,在上升沿采样。第一个数据在 SCK 的第一个下降沿之前移出。
模式 1:CPOL = 0,CPHA = 1;当 SPI 处于空闲状态时,SCK 为 0;数据在 SCK 的上升沿改变,在下降沿采样。
模式 2:CPOL = 1,CPHA = 0;SPI处于空闲状态时SCK为1;数据在 SCK 的上升沿改变,在下降沿采样。第一个数据在 SCK 的第一个上升沿之前移出。
模式 3:CPOL = 1,CPHA = 1;SPI处于空闲状态时SCK为1;数据在 SCK 的下降沿改变,在上升沿采样。
因此,将 SPI 模式设置为 0 将导致 MISO 的通信正确但 MOSI 的通信错误,而将 SPI 模式设置为 1 将导致 MOSI 的通信正确但 MISO 的通信错误。这确实是真实的,并且与尝试与芯片通信的真实世界测试相匹配。
SPI 模式当前设置为 1,我可以看到 ADC 正在正确接收配置数据,但由于 MISO 是错误的,我读取数据的时间已经晚了半个时钟周期,数据已损坏。测试信号的值约为 0x7fff,而我正在读取的值约为 0xffff。
如果我将模式设置为 0,ADC 无法将我的配置命令解释为仅采样一个通道,因此即使配置错误,它也会吐出 ADC 数据。通过这种方式,我可以在软件中看到我在 0x7fff 附近收到了正确的采样值,但其他所有值都来自错误的通道。
我正在寻找的行为是:
* 在上升沿锁存 MOSI 上的
数据 * 在上升沿上 MISO 上的样本数据
我如何配置 ESP32 来做到这一点?我正在使用带有 ESP-IDF v 5.0、SPI2 单元的 ESP32s3 芯片。
                                                                 
                                                

回帖(1)

张国厚

2023-3-1 15:00:04
我不确定硬件是否能够做到这一点

举报

更多回帖

发帖
×
20
完善资料,
赚取积分