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