我正在使用RedBearLabs Blend V2与SPI外设通信。此时一切正常,我正在使用SPI.write()
接收预期的数据并捕获返回值。 SPI总线在模式0下以1 MHz运行。
下图显示了连接到示波器的SPI总线。迹线1是SCLK,迹线2是MISO,迹线3是MOSI,迹线4是CS。如您所见,我有4个SCLK脉冲,而CS为低电平,每个脉冲的长度为8位,每个脉冲之间的延迟约为20 µs。 理想情况下,我需要完全缓解20 µs的延迟,并具有32个周期的 1个SCLK突发脉冲。
下面的代码是我目前如何实现在示波器抓斗中看到的内容。
int16_t MAX1300::sampleChannel(uint8_t channel, uint8_t inputMode, uint8_t adcMode)
{
int16_t sample;
int8_t hi = 0;
int8_t lo = 0;
MAX1300::InputWord_u word;
word.bits.start = 0b1;
if (inputMode == MAX1300::SINGLE_ENDED) {
word.bits.select = (Channels_se_e)channel;
} else {
word.bits.select = (Channels_dif_e)channel;
}
word.bits.payload = 0b0000;
if (adcMode == MAX1300::EXT_CLK) {
m_cs = 0;
m_spiBus.write(word.all);
m_spiBus.write(7);
hi = m_spiBus.write(0);
lo = m_spiBus.write(0);
m_cs = 1;
}
sample = ((int16_t)hi << 8) | lo;
return sample;
}
到目前为止,我尝试设置SPI.format(16, 0)
的目的是使2个SCLK突发达到16个周期,但是如果这样做,SPI总线将不再起作用。如果我将SPI.transfer()
与32位缓冲区一起使用-没有SPI总线,也会发生同样的情况。
我能够提高总线频率,从而减少每个SCLK突发之间的延迟,但是由于该设备的最终应用,这并不是真正合适的解决方案。
在这里我在做什么错,或者我试图用这种硬件/固件组合做不到的事情?
谢谢,亚当