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){
|
void Print(byte *data2, int lenght){
|
||||||
|
Serial.println("----");
|
||||||
for(int i = 0; i < lenght; i++) {
|
for(int i = 0; i < lenght; i++) {
|
||||||
Serial.print(data2[i]);
|
Serial.print(data2[i]);
|
||||||
Serial.print(" ");
|
Serial.print(" ");
|
||||||
@ -73,16 +74,27 @@ void setup()
|
|||||||
|
|
||||||
// Функция для вычисления контрольной суммы XOR
|
// Функция для вычисления контрольной суммы XOR
|
||||||
byte calculateXORChecksum(byte *data, int length) {
|
byte calculateXORChecksum(byte *data, int length) {
|
||||||
byte checksum = 0;
|
byte crc = 0x00;
|
||||||
for (int i = 0; i < length -1; i++) {
|
byte poly = 0x07; // полином для CRC8
|
||||||
checksum ^= data[i];
|
|
||||||
|
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()
|
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);
|
int length = sizeof(data);
|
||||||
|
|
||||||
@ -91,27 +103,30 @@ void loop()
|
|||||||
byte checking = calculateXORChecksum(data, length);
|
byte checking = calculateXORChecksum(data, length);
|
||||||
int size = sizeof(data) / sizeof(data[0]);
|
int size = sizeof(data) / sizeof(data[0]);
|
||||||
data[size - 1] = checking;
|
data[size - 1] = checking;
|
||||||
|
Print(data, size);
|
||||||
// Serial.println(last);
|
// Serial.println(last);
|
||||||
|
|
||||||
SPI_MasterTransmit(data, length);
|
SPI_MasterTransmit(data, length);
|
||||||
_delay_ms(1000);
|
_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);
|
int length2 = sizeof(data2);
|
||||||
const int last2 = data2 [ (sizeof(data2) / sizeof(data2[0]))-1];
|
const int last2 = data2 [ (sizeof(data2) / sizeof(data2[0]))-1];
|
||||||
byte checking2 = calculateXORChecksum(data2, length2);
|
byte checking2 = calculateXORChecksum(data2, length2);
|
||||||
int size2 = sizeof(data2) / sizeof(data2[0]);
|
int size2 = sizeof(data2) / sizeof(data2[0]);
|
||||||
data2[size2 - 1] = checking2;
|
data2[size2 - 1] = checking2;
|
||||||
|
Print(data2, size2);
|
||||||
SPI_MasterTransmit(data2, length2);
|
SPI_MasterTransmit(data2, length2);
|
||||||
|
|
||||||
_delay_ms(1000);
|
_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);
|
int length3 = sizeof(data3);
|
||||||
const int last3 = data3 [ (sizeof(data3) / sizeof(data3[0]))-1];
|
const int last3 = data3 [ (sizeof(data3) / sizeof(data3[0]))-1];
|
||||||
byte checking3 = calculateXORChecksum(data3, length3);
|
byte checking3 = calculateXORChecksum(data3, length3);
|
||||||
int size3 = sizeof(data3) / sizeof(data3[0]);
|
int size3 = sizeof(data3) / sizeof(data3[0]);
|
||||||
data3[size3 - 1] = checking3;
|
data3[size3 - 1] = checking3;
|
||||||
|
Print(data3, size3);
|
||||||
SPI_MasterTransmit(data3, length3);
|
SPI_MasterTransmit(data3, length3);
|
||||||
|
|
||||||
_delay_ms(1000);
|
_delay_ms(1000);
|
||||||
|
Loading…
Reference in New Issue
Block a user