Отсутствие Clock и MISO трафика на линиях SPI для ADXL375 с использованием teensy 3.2

Я пытаюсь заставить эту плату ADXL375 eval взаимодействовать с моим teensy 3.2 с помощью SPI, считывая регистр идентификатора устройства из ADXL. Логический анализатор sigrok pulseview показывает, что вывод CS успешно опускается, когда это необходимо, и что данные MOSI правильно отправляются в ADXL.

Однако тактовый сигнал не обнаруживается, и данные МИСО не записываются. Особенно странно то, что загорается встроенный светодиодный контакт на teensy плате. Этот светодиод имеет то же значение, что и вывод 13 (тактовая линия).

Я протестировал аналогичную (но немного другую) настройку SPI на ADXL355, и там она работала нормально, с той же Teensy платой.

Кто-нибудь сможет сказать, что происходит не так?

#include <SPI.h>  // include the SPI library:


#define SPI_DUMMY_VALUE       0b10101010  // value is irrelevant 
#define ADXL375_CS_PIN        9
#define DEBUG_SERIAL              Serial    // using Teensy USB serial port. 

#define DEBUG 



void setup() {

  pinMode (ADXL375_CS_PIN, OUTPUT); 
  digitalWrite(ADXL375_CS_PIN, HIGH); 

  Serial.begin(9600); 
  
  SPI.begin(); 
}

void loop() {

  delay(100);  
  
  uint8_t outVal = singleByteReadSPI(0x00); // should return the device ID (0xE5) 

  Serial.println(outVal, HEX); 


}

uint8_t singleByteReadSPI(uint8_t address) {    

     SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE3)); 

     digitalWrite(ADXL375_CS_PIN,LOW);

    //  send in the first byte. This must contain: R/W bit, MB (multi byte) bit, and address of register to read from
     uint8_t readMBaddr = 0b10000000 | address; //  From left to right: read (1), not multibyte (0), and then a bunch of zeros

    // send the first byte. Output is irrelevant so not recorded. 
    SPI.transfer(readMBaddr);  
    
    //  send the second byte. Dummy byte because a dummy is necessary to shift bits. Input is irrelevant. 
    uint8_t out = SPI.transfer(SPI_DUMMY_VALUE);

    // take the SS pin high to de-select the chip:
     digitalWrite(ADXL375_CS_PIN,HIGH); 

    // end transaction 
    SPI.endTransaction(); 

    return out; 
}

pulseview recordings

setup

, 👍1

Обсуждение

В такие моменты я нахожу полезным "моргнуть" штифтом, от которого вы не получаете сигнала, просто чтобы проверить проводку и отображение штифта., @Majenko


1 ответ


Лучший ответ:

2

Проблема решена! Оказалось, что два провода, а также макетная плата были в плохом состоянии. В остальном связи были в порядке.

Надо отдать должное Майенко за то, что он предложил "моргнуть" штифтами, которые не подавали сигнала, чтобы проверить проводку и отображение штифтов.

,