Отсутствие 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;
}
@daniel, 👍1
Обсуждение1 ответ
Лучший ответ:
Проблема решена! Оказалось, что два провода, а также макетная плата были в плохом состоянии. В остальном связи были в порядке.
Надо отдать должное Майенко за то, что он предложил "моргнуть" штифтами, которые не подавали сигнала, чтобы проверить проводку и отображение штифтов.
- Множественный 3-проводной датчик SPI, взаимодействующий с Arduino
- Взаимодействие с датчиком SSI?
- Использование Broadcom AFBR-S50 с Arduino
- ESP32-CAM не читает BME680
- Датчик перепада давления DLHR SPI
- Обновление SPI transfer16 для создания Transfer24
- Водонепроницаемый датчик температуры SPI.
- Почему существует ограничение на эти значения измерения акселерометра? - ADXL375
В такие моменты я нахожу полезным "моргнуть" штифтом, от которого вы не получаете сигнала, просто чтобы проверить проводку и отображение штифта., @Majenko