master with CRC8
доработать
This commit is contained in:
parent
6c18113b38
commit
f40daf62d4
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user