Untitled
unknown
plain_text
a year ago
2.5 kB
23
Indexable
import spidev
import time
# Initialize SPI
spi = spidev.SpiDev()
spi.open(0, 0) # Use SPI bus 0, device 0 (CE0)
spi.max_speed_hz = 1000000 # Set SPI clock speed (1 MHz)
spi.mode = 0b00 # SPI mode 0 (Clock Polarity 0, Clock Phase 0)
def send_data(data):
"""
Sends data to the SPI slave and receives a response.
Args:
data (list): List of bytes to send (e.g., [0x01, 0x02, 0x03]).
Returns:
list: Response received from the SPI slave.
"""
try:
response = spi.xfer2(data) # Send data and receive response
print(f"Sent: {data}, Received: {response}")
return response
except Exception as e:
print(f"SPI communication error: {e}")
return []
try:
while True:
# Data to send (3 bytes)
test_data = [0x01, 0x02, 0x03]
# Send data and get response
response = send_data(test_data)
# Add a delay for readability and pacing
time.sleep(1)
except KeyboardInterrupt:
# Cleanup SPI interface
spi.close()
print("SPI communication ended.")
=========================================
#include <SPI.h>
// SPI Pin Definitions
#define SCK_PIN 18 // SPI Clock pin
#define MISO_PIN 19 // Master In Slave Out pin
#define MOSI_PIN 23 // Master Out Slave In pin
#define SS_PIN 5 // Slave Select pin
void setup() {
// Initialize SPI as Slave
SPI.begin(SCK_PIN, MISO_PIN, MOSI_PIN, SS_PIN);
// Enable internal pull-up resistor on SS_PIN
pinMode(SS_PIN, INPUT_PULLUP);
// Start Serial for debugging
Serial.begin(115200);
Serial.println("SPI Slave Initialized");
}
void loop() {
// Buffer to store multiple received bytes
uint8_t receivedData[3]; // Buffer for 3 bytes
uint8_t dummyData = 0x00; // Dummy data to send back
// Check if Slave Select (SS_PIN) is LOW
if (digitalRead(SS_PIN) == LOW) {
// Read 3 bytes of data from the master
for (int i = 0; i < 3; i++) {
receivedData[i] = SPI.transfer(dummyData); // Receive bytes and send dummy data
}
// Print the received data for debugging
Serial.print("Received: ");
for (int i = 0; i < 3; i++) {
Serial.print("0x");
Serial.print(receivedData[i], HEX);
Serial.print(" ");
}
Serial.println();
} else {
Serial.println("Waiting for SS_PIN to go LOW...");
}
delay(100); // Small delay for readability
}
Editor is loading...
Leave a Comment