Задержка между вызовами SPI.write () - PullRequest
0 голосов
/ 26 сентября 2018

Я использую 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 циклов .

Scope grab of SPI bus

Приведенный ниже код показывает, как я в настоящее время достигаю того, что видно из захвата области.

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, однако это не совсемподходящее решение из-за конечного приложения для этого устройства.

Что я здесь не так делаю, или то, что я пытаюсь сделать, просто невозможно с помощью этой комбинации аппаратного и микропрограммного обеспечения?

Спасибо, Адам

...