master with CRC8

доработать
This commit is contained in:
Павел Вершинин 2023-04-25 10:12:54 +03:00
parent 6c18113b38
commit f40daf62d4

View File

@ -17,6 +17,7 @@ void SPI_MasterInit(void)
}
void Print(byte *data2, int lenght){
Serial.println("----");
for(int i = 0; i < lenght; i++) {
Serial.print(data2[i]);
Serial.print(" ");
@ -73,16 +74,27 @@ void setup()
// Функция для вычисления контрольной суммы XOR
byte calculateXORChecksum(byte *data, int length) {
byte checksum = 0;
for (int i = 0; i < length -1; i++) {
checksum ^= data[i];
byte crc = 0x00;
byte poly = 0x07; // полином для CRC8
for (int i = 0; i < length; i++) {
crc ^= data[i]; // XOR текущего байта с crc
for (int j = 0; j < length; j++) {
if (crc & 0x80) { // если старший бит crc равен 1
crc = (crc << 1) ^ poly; // сдвигаем crc на 1 бит влево и XOR с полиномом
} else {
crc <<= 1; // иначе просто сдвигаем на 1 бит влево
}
return checksum;
}
}
return crc;
}
void loop()
{
char data[5] = {6, 1, 3, 8, 0};
char data[8] = {6, 1, 3, 8, 8, 8, 8, 0};
int length = sizeof(data);
@ -91,27 +103,30 @@ void loop()
byte checking = calculateXORChecksum(data, length);
int size = sizeof(data) / sizeof(data[0]);
data[size - 1] = checking;
Print(data, size);
// Serial.println(last);
SPI_MasterTransmit(data, length);
_delay_ms(1000);
char data2[5] = {6, 9, 7, 10, 0};
char data2[8] = {6, 9, 7, 10, 8, 8, 8, 0};
int length2 = sizeof(data2);
const int last2 = data2 [ (sizeof(data2) / sizeof(data2[0]))-1];
byte checking2 = calculateXORChecksum(data2, length2);
int size2 = sizeof(data2) / sizeof(data2[0]);
data2[size2 - 1] = checking2;
Print(data2, size2);
SPI_MasterTransmit(data2, length2);
_delay_ms(1000);
char data3[5] = {6, 11, 12, 13, 0};
char data3[8] = {6, 11, 12, 13, 8, 8, 8, 0};
int length3 = sizeof(data3);
const int last3 = data3 [ (sizeof(data3) / sizeof(data3[0]))-1];
byte checking3 = calculateXORChecksum(data3, length3);
int size3 = sizeof(data3) / sizeof(data3[0]);
data3[size3 - 1] = checking3;
Print(data3, size3);
SPI_MasterTransmit(data3, length3);
_delay_ms(1000);