Documentation
Datenaufbau
Byte |
Richtung |
Abkürzung |
Beschreibung |
1 |
-> |
QQ |
Quelladresse |
2 |
-> |
ZZ |
Zieladresse |
3 |
-> |
PB |
Primärbefehl |
4 |
-> |
SB |
Sekundärbefehl |
5 |
-> |
NN |
Zahl der folgenden Bytes |
6 bis 5 + NN |
-> |
Data |
Datenbytes |
6 + NN |
-> |
CRC |
Prüfziffer |
7 + NN |
<- |
ACK |
Positive Bestätigung des Empfängers (ab hier nicht bei Broadcast-Nachrichten) |
8 + NN |
<- |
NN2 |
Datenlänge der Antwort |
9 + NN bis 8 + NN + NN2 |
<- |
Data |
Daten vom Slave an den Master |
9 + NN + NN2 |
<- |
CRC |
Prüfziffer |
10 + NN + NN2 |
-> |
ACK
|
|
11 + NN + NN2 |
-> |
SYN |
Kennung, dass Bus wieder bereit ist für andere Teilnehmer |
Service/Befehl => Kombination von Pimär und Sekundärbefehl => Darstellung als HEX-Wert
z.B. Primärbefehl 07 (Systemdatenbefehle) + Sekundärbefehl 00 (Datum/Zeit Meldung eines Masters) = Service 0700
Vaillant AddressesCRC
MasterMuss mit expandiertem Datenstring erfolgen (https://ebus-wiki.org/doku.php/ebus/ebuscrc)
//////////////////////////////////////////////////////////////////////////
//
Adress | // Description | CRC-Berechnung
aus http://www.mikrocontroller.net/topic/75698
10h | //
Main//////////////////////////////////////////////////////////////////////////
Control#ifdef Unit: USE_CRC_TAB
const UCHAR CRC_Tab8Value[256] ''/********************************************************************************************************/
/** VRS620Function for CRC-calculation with tab operations */
/********************************************************************************************************/
UCHAR crc8(UCHAR data, UCHAR crc_init)
{
UCHAR crc;
crc '' (auroMATIC 620) |
3F |
Burner |
Slave
Adress |
Description |
23h |
|
25h |
|
26h |
Outside temperature sensorUCHAR) (includingCRC_Tab8Value[crc_init] DCF77^ clock) | data);
return (crc);
50h | }
| #else
/********************************************************************************************************/
/** ECh | slower, | but
less memory
*/
/********************************************************************************************************/
unsigned char crc8(unsigned char data, unsigned char crc_init)
{
unsigned char crc;
unsigned char polynom;
int i;
crc '' crc_init;
for (i '' 0; i < 8; i++)
{
if (crc & 0x80)
{
polynom '' (unsigned char) 0x9B;
}
else
{
polynom '' (unsigned char) 0;
}
crc '' (unsigned char)((crc & ~0x80) << 1);
if (data & 0x80)
{
crc '' (unsigned char)(crc | 1) ;
}
crc '' (unsigned char)(crc ^ polynom);
data '' (unsigned char)(data << 1);
}
return (crc);
}
#endif
UCHAR CalculateCRC( UCHAR**Data, int DataLen )
{
UCHAR Crc '' 0;
for( int i '' 0 ; i < DataLen ; ++i, ++Data )
{
Crc '' crc8(**Data, Crc );
}
return Crc;
}