B.3 Implementation
27.0103GPPTerminal Equipment to User Equipment (TE-UE) multiplexer protocolTS
Implementation is very simple because the FCS will be as wide as the lookup table (8 bits). To avoid having to reverse all bits in the octets all the octets in the crc table is reversed instead.
The termcorresponds to initialising the FCS with 0xFF.
B.3.1 Calculate FCS for the example given earlier
|
First initiliaze the crc: |
FCS=0xFF |
|
Add first byte: |
FCS=table[0xFF^0x07]=table[0xF8]=0xBA |
|
Add second byte: |
FCS=table[0xBA^0x3F]=table[0x85]=0x76 |
|
Ones complement the FCS: |
FCS=0xFF-FCS=0xFF-0x76=0x89 (10001001) |
|
Transmit this FCS, this will be the same as the one calculated previous after the uart has reversed the bits. |
|
B.3.2 Check FCS for the example given earlier
|
First initiliaze the crc: |
FCS=0xFF |
|
Add first byte: |
FCS=table[0xFF^0x07]=table[0xF8]=0xBA |
|
Add second byte: |
FCS=table[0xBA^0x3F]=table[0x85]=0x76 |
|
Add FCS: |
FCS=table[0x76^0x89]=table[0xFF]=0xCF |
|
0xCF is the reversed order of 11110011, the checksum is valid |
|
B.3.3 The transmitter code
/*Init*/
unsigned char FCS=0xFF;
unsigned char len;
unsigned char p;
/*len is the number of bytes in the message, p points to message*/
while (len–) {
FCS=crctable[FCS^*p++];
}
/*Ones complement*/
FCS=0xFF-FCS;
B.3.4 The receiver code
/*Init*/
unsigned char FCS=0xFF;
unsigned char len;
unsigned char p;
/*len is the number of bytes in the message, p points to message*/
while (len–) {
FCS=crctable[FCS^*p++];
}
/*Ones complement*/
FCS=crctable[FCS^"received FCS"];
/*0xCF is the reversed order of 11110011.*/
if (FCS==0xCF) {
/*FCS is OK*/
}
else {
/*FCS is not OK*/
}
B.3.5 Reversed CRC table
const unsigned char crctable[256] = { //reversed, 8-bit, poly=0x07
0x00, 0x91, 0xE3, 0x72, 0x07, 0x96, 0xE4, 0x75, 0x0E, 0x9F, 0xED, 0x7C, 0x09, 0x98, 0xEA, 0x7B,
0x1C, 0x8D, 0xFF, 0x6E, 0x1B, 0x8A, 0xF8, 0x69, 0x12, 0x83, 0xF1, 0x60, 0x15, 0x84, 0xF6, 0x67,
0x38, 0xA9, 0xDB, 0x4A, 0x3F, 0xAE, 0xDC, 0x4D, 0x36, 0xA7, 0xD5, 0x44, 0x31, 0xA0, 0xD2, 0x43,
0x24, 0xB5, 0xC7, 0x56, 0x23, 0xB2, 0xC0, 0x51, 0x2A, 0xBB, 0xC9, 0x58, 0x2D, 0xBC, 0xCE, 0x5F,
0x70, 0xE1, 0x93, 0x02, 0x77, 0xE6, 0x94, 0x05, 0x7E, 0xEF, 0x9D, 0x0C, 0x79, 0xE8, 0x9A, 0x0B,
0x6C, 0xFD, 0x8F, 0x1E, 0x6B, 0xFA, 0x88, 0x19, 0x62, 0xF3, 0x81, 0x10, 0x65, 0xF4, 0x86, 0x17,
0x48, 0xD9, 0xAB, 0x3A, 0x4F, 0xDE, 0xAC, 0x3D, 0x46, 0xD7, 0xA5, 0x34, 0x41, 0xD0, 0xA2, 0x33,
0x54, 0xC5, 0xB7, 0x26, 0x53, 0xC2, 0xB0, 0x21, 0x5A, 0xCB, 0xB9, 0x28, 0x5D, 0xCC, 0xBE, 0x2F,
0xE0, 0x71, 0x03, 0x92, 0xE7, 0x76, 0x04, 0x95, 0xEE, 0x7F, 0x0D, 0x9C, 0xE9, 0x78, 0x0A, 0x9B,
0xFC, 0x6D, 0x1F, 0x8E, 0xFB, 0x6A, 0x18, 0x89, 0xF2, 0x63, 0x11, 0x80, 0xF5, 0x64, 0x16, 0x87,
0xD8, 0x49, 0x3B, 0xAA, 0xDF, 0x4E, 0x3C, 0xAD, 0xD6, 0x47, 0x35, 0xA4, 0xD1, 0x40, 0x32, 0xA3,
0xC4, 0x55, 0x27, 0xB6, 0xC3, 0x52, 0x20, 0xB1, 0xCA, 0x5B, 0x29, 0xB8, 0xCD, 0x5C, 0x2E, 0xBF,
0x90, 0x01, 0x73, 0xE2, 0x97, 0x06, 0x74, 0xE5, 0x9E, 0x0F, 0x7D, 0xEC, 0x99, 0x08, 0x7A, 0xEB,
0x8C, 0x1D, 0x6F, 0xFE, 0x8B, 0x1A, 0x68, 0xF9, 0x82, 0x13, 0x61, 0xF0, 0x85, 0x14, 0x66, 0xF7,
0xA8, 0x39, 0x4B, 0xDA, 0xAF, 0x3E, 0x4C, 0xDD, 0xA6, 0x37, 0x45, 0xD4, 0xA1, 0x30, 0x42, 0xD3,
0xB4, 0x25, 0x57, 0xC6, 0xB3, 0x22, 0x50, 0xC1, 0xBA, 0x2B, 0x59, 0xC8, 0xBD, 0x2C, 0x5E, 0xCF
};
Annex C (informative):
Change History
|
TSG |
TDoc |
VERS |
NEW_VERS |
CR |
REV |
REL |
CAT |
WORKITEM |
SUBJECT |
|||
|
T#4 |
TP-99119 |
2.0.0 |
3.0.0 |
New |
R99 |
Creation of 3GPP 27.010 v3.0.0 out of GSM 07.10 v6.3.0 |
||||||
|
T#4 |
TP-99124 |
3.0.0 |
3.1.0 |
001 |
R99 |
A |
MUX MS-TE |
Clarification of how to handle the length field in basic mode |
||||
|
T#4 |
TP-99146 |
3.0.0 |
3.1.0 |
002 |
R99 |
A |
MUX MS-TE |
Editorial corrections |
||||
|
T#5 |
TP-99177 |
3.1.0 |
3.2.0 |
003 |
R99 |
A |
TEI |
Clarification of CR bit |
||||
|
T#5 |
TP-99177 |
3.1.0 |
3.2.0 |
004 |
R99 |
A |
TEI |
Correction of the bits in the start and close flags of the frame in the example on Annex B |
||||
|
T#7 |
TP-000024 |
3.2.0 |
3.3.0 |
005 |
R99 |
F |
TEI |
Adaptations for UMTS |
||||
|
T#11 |
– |
3.3.0 |
4.0.0 |
Rel4 |
Upgrade to Rel-4 |
|||||||
|
T#13 |
TP-010212 |
4.0.0 |
4.1.0 |
006 |
Rel4 |
F |
TEI4 |
Conversion of GSM to 3GPP references |
||||
|
T#15 |
TP-020014 |
4.1.0 |
4.2.0 |
008 |
Rel4 |
A |
TEI |
Incorrect explanation of length indicator bit |
||||
|
T#16 |
– |
4.2.0 |
5.0.0 |
– |
Rel5 |
Upgrade to Rel-5 |
||||||
|
T#26 |
– |
5.0.0 |
6.0.0 |
– |
Rel6 |
Upgrade to Rel-6 |
||||||
|
CT#36 |
– |
6.0.0 |
7.0.0 |
– |
Rel7 |
Upgrade to Rel-7 |
||||||
|
CT#42 |
7.0.0 |
8.0.0 |
Rel8 |
Upgraded to v8.0.0 due to simple upgrade without no technical change |
||||||||
|
CT#46 |
8.0.0 |
9.0.0 |
Rel9 |
Automatic upgrade from previous Release |
||||||||
|
CT#50 |
CP-100779 |
9.0.0 |
9.1.0 |
010 |
Rel9 |
A |
TEI8 |
Correcting non-specific external references |
||||
|
CT#51 |
9.1.0 |
10.0.0 |
Automatic upgrade from previous Release version 9.1.0 |
|||||||||
|
CT#57 |
10.0.0 |
11.0.0 |
Automatic upgrade from previous Release version 10.0.0 |
|||||||||
|
11.0.0 |
12.0.0 |
Automatic upgrade from previous Release |
||||||||||
|
12.0.0 |
13.0.0 |
Automatic upgrade from previous Release |
||||||||||
|
Change history |
||||||||||||
|
Date |
TSG # |
TSG Doc. |
CR |
Rev |
Cat |
Subject/Comment |
New |
|||||
|
2017-03 |
CT#75 |
Automatic upgrade from previous Release |
14.0.0 |
|||||||||
|
2018-06 |
CT#80 |
Automatic upgrade from previous Release |
15.0.0 |
|||||||||
|
2020-06 |
CT#88e |
– |
– |
– |
Update to Rel-16 version (MCC) |
16.0.0 |
||||||
|
2022-03 |
– |
– |
– |
– |
Update to Rel-17 version (MCC) |
17.0.0 |
||||||