Я использую RedBearLabs Blend V2 для связи с периферийным устройством SPI.На данный момент все работает правильно, и я получаю ожидаемые данные, используя SPI.write()
и получаю возвращаемое значение.Шина SPI работает на частоте 1 МГц в режиме 0.
На рисунке ниже показана шина SPI, подключенная к области.Трасса 1 - SCLK, 2 - MISO, 3 - MOSI и 4 - CS.Как вы можете видеть, у меня есть 4 пакета SCLK, в то время как уровень CS низкий, каждые 8 битов с задержкой приблизительно 20 мкс между каждым пакетом. В идеале , мне нужно полностью уменьшить эту задержку 20 мкс и иметь 1 SCLK-пакет из 32 циклов .
Приведенный ниже код показывает, как я в настоящее время достигаю того, что видно из захвата области.
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)
с намерением получить 2SCLK пакет из 16 циклов, однако шина SPI больше не работает, если я это сделаю.То же самое происходит, если я использую SPI.transfer()
с 32-битными буферами - без шины SPI.
Я могу увеличить частоту шины, таким образом уменьшая задержку между каждым пакетом SCLK, однако это не совсемподходящее решение из-за конечного приложения для этого устройства.
Что я здесь не так делаю, или то, что я пытаюсь сделать, просто невозможно с помощью этой комбинации аппаратного и микропрограммного обеспечения?
Спасибо, Адам