User Guide
Table Of Contents
- Contents
- Contents
- Introduction to the Mercury6e- Transcore Module
- Functionality of the Embedded Modules
- Overview of the Communication Protocol
- Command Set
- Boot Loader Commands
- Multi-Protocol Tag Commands
- Allegro/Title-21 Tag Commands
- eGo/SeGo Tag Command Set
- ATA Tag Command Set
- Gen2 Tag Commands
- Get Configuration Commands
- Get Hardware Version (10h)
- Get Antenna Configuration (61h)
- Get Read TX Power (62h)
- Get Current Tag Protocol (63h)
- Get Write TX Power (64h)
- Get Frequency Hop Table (65h)
- Get User GPIO Inputs (66h)
- Get Current Region (67h)
- Get Power Mode (68h)
- Get User Mode (69h)
- Get Reader Configuration(6Ah)
- Get Protocol Configuration (6Bh)
- Get Reader Statistics (6Ch)
- Get Available Protocols (70h)
- Get Available Regions (71h)
- Get Current Temperature (72h)
- Set Configuration Commands
- Regulatory Test Commands
- Appendix A: Hardware Details
- Appendix B: Using the ArbSer Application
- Appendix C: Error Messages
- Common Error Messages
- FAULT_MSG_WRONG_NUMBER_OF_DATA – (100h)
- FAULT_INVALID_OPCODE – (101h)
- FAULT_UNIMPLEMENTED_OPCODE – 102h
- FAULT_MSG_POWER_TOO_HIGH – 103h
- FAULT_MSG_INVALID_FREQ_RECEIVED (104h)
- FAULT_MSG_INVALID_PARAMETER_VALUE - (105h)
- FAULT_MSG_POWER_TOO_LOW - (106h)
- FAULT_UNIMPLEMENTED_FEATURE - (109h)
- FAULT_INVALID_BAUD_RATE - (10Ah)
- Bootloader Faults
- FPGA Faults
- Flash Faults
- Protocol Faults
- FAULT_NO_TAGS_FOUND – (400h)
- FAULT_NO_PROTOCOL_DEFINED – 401h
- FAULT_INVALID_PROTOCOL_SPECIFIED – 402h
- FAULT_WRITE_PASSED_LOCK_FAILED – 403h
- FAULT_PROTOCOL_NO_DATA_READ – 404h
- FAULT_AFE_NOT_ON – 405h
- FAULT_PROTOCOL_WRITE_FAILED – 406h
- FAULT_NOT_IMPLEMENTED_FOR_THIS_PROTOCOL – 407h
- FAULT_PROTOCOL_INVALID_WRITE_DATA – 408h
- FAULT_PROTOCOL_INVALID_ADDRESS – 409h
- FAULT_GENERAL_TAG_ERROR – 40Ah
- FAULT_DATA_TOO_LARGE – 40Bh
- FAULT_PROTOCOL_INVALID_KILL_PASSWORD – 40Ch
- FAULT_PROTOCOL_KILL_FAILED - 40Eh
- FAULT_PROTOCOL_BIT_DECODING_FAILED - 40Fh
- FAULT_PROTOCOL_INVALID_EPC – 410h
- FAULT_PROTOCOL_INVALID_NUM_DATA – 411h
- FAULT_GEN2 PROTOCOL_OTHER_ERROR - 420h
- FAULT_GEN2_PROTOCOL_MEMORY_OVERRUN_BAD_PC - 423h
- FAULT_GEN2 PROTOCOL_MEMORY_LOCKED - 424h
- FAULT_GEN2 PROTOCOL_INSUFFICIENT_POWER - 42Bh
- FAULT_GEN2 PROTOCOL_NON_SPECIFIC_ERROR - 42Fh
- FAULT_GEN2 PROTOCOL_UNKNOWN_ERROR - 430h
- Analog Hardware Abstraction Layer Faults
- Tag ID Buffer Faults
- System Errors
- Common Error Messages
- Appendix D: FPGA Support
Reader-to-Host Communication
Overview of the Communication Protocol 37
An example implementation of CRC calculation, taken from the Arbser source CrcUtils.c,
is shown here:
/** @fn void CRC_calcCrc8(u16 *crcReg, u16 poly, u16 u8Data)
* @ Standard CRC calculation on an 8-bit piece of data. To make it
* CCITT-16, use poly=0x1021 and an initial crcReg=0xFFFF.
*
* Note: This function allows one to call it repeatedly to continue
* calculating a CRC. Thus, the first time it's called, it
* should have an initial crcReg of 0xFFFF, after which it
* can be called with its own result.
*
* @param *crcRegPointer to current CRC register.
* @param poly Polynomial to apply.
* @param u8Datau8 data to perform CRC on.
* @return None.
*/
void CRC_calcCrc8(u16 *crcReg, u16 poly, u16 u8Data)
{
u16 i;
u16 xorFlag;
u16 bit;
u16 dcdBitMask = 0x80;
for(i=0; i<8; i++)
{
// Get the carry bit. This determines if the polynomial should be
// xor'd with the CRC register.
xorFlag = *crcReg & 0x8000;
// Shift the bits over by one.
*crcReg <<= 1;
// Shift in the next bit in the data byte
bit = ((u8Data & dcdBitMask) == dcdBitMask);
*crcReg |= bit;
// XOR the polynomial
if(xorFlag)
{
*crcReg = *crcReg ^ poly;
}
// Shift over the dcd mask
dcdBitMask >>= 1;
}
}