我有一个 CERES PCB,我需要使用 SPI 总线作为从属设备与该 PCB 进行通信。问题是我对任何类型的沟通的了解都非常少。以下是我需要执行的命令列表。我已经练习了 SPI 代码,仅将 1 个数据传输到从机。但是,当我尝试在实际项目中执行此操作时,我对地址、MOSI cmd+add 感到困惑。我不知道需要发送哪些数据以及如何发送。
我尝试玩玩,但我不断收到垃圾数据
下面是我的代码
#include <SPI.h>
// SPI pins
#define SCK 18
#define MISO 19
#define MOSI 23
#define SS 5
// SPI settings
const int responseSize = 4;
void setup() {
Serial.begin(115200);
pinMode(SS, OUTPUT);
SPI.begin(SCK, MISO, MOSI, SS);
SPI.beginTransaction(SPISettings(20000000, MSBFIRST, SPI_MODE0));
byte commandSelAdc2Vdd[] = {0x21, 0x40, 0x84, 0x00, 0x00, 0x02, 0x00};
byte commandEnAcd2[] = {0x09, 0x40, 0x24, 0x00, 0x20, 0x00, 0x00};
byte commandReadAcd2[] = {0x05, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00};
byte* commands[] = {commandSelAdc2Vdd, commandEnAcd2, commandReadAcd2};
for (int i = 0; i < 3; i++) {
digitalWrite(SS, LOW);
SPI.transfer(commands[i], sizeof(commandSelAdc2Vdd));
digitalWrite(SS, HIGH);
delay(100);
digitalWrite(SS, LOW);
byte response[4];
SPI.transfer(response, sizeof(response));
digitalWrite(SS, HIGH);
Serial.print("Response for ");
if (i == 0)
{
Serial.print("commandSelAdc2Vdd: ");
} else if (i == 1)
{
Serial.print("commandEnAcd2: ");
}else{
Serial.print ("commandReadAcd2: ");
}
for (int j = 0; j < 4; j++) {
Serial.print(response[j],HEX);
Serial.print(" ");
}
Serial.println();
delay(500);
}
}
void loop() {
}
根据数据表的附加部分,它提供了重要信息来展示 SPI 应如何与器件配合使用。
ReadSerialNo
命令,您只需发送 6 个字节作为 uint8_t readSerCmd[] = {0x00, 0x08, 0x00, 0x00, 0x00, 0x00}
。这里是一个示例,说明如何根据提供的有限信息读取设备的序列号。
#include <SPI.h>
void setup() {
Serial.begin(115200);
digitalWrite(SS, HIGH);
pinMode(SS, OUTPUT);
SPI.begin();
uint8_t readSerCmd[] = {0x00, 0x08, 0x00, 0x00, 0x00, 0x00};
uint8_t reBuff[6]{0};
SPI.beginTransaction(SPISettings(20000000, MSBFIRST, SPI_MODE0));
digitalWrite(SS, LOW);
for (int i=0; i<sizeof(readSerCmd); i++) {
rxBuff++ = SPI.transfer(commands[i]);
}
digitalWrite(SS, HIGH);
SPI.endTransaction();
// first two bytes as status, followed by 4-byte serial no
for (i=0; i<sizeof(rebuff); i++) {
Serial.print(rebuff[i], HEX);
Serial.print(" ");
}
}
void loop() {
}