address = 0xe7 0xe7 0xe7(3bytes),
dataLength=0x01(8bit),
S1>>PID=0x01(2bit);NO_ACK=0x00(1bit);
How to calculate CRC, I need software calculation, not hardware processing.
Thanks!
address = 0xe7 0xe7 0xe7(3bytes),
dataLength=0x01(8bit),
S1>>PID=0x01(2bit);NO_ACK=0x00(1bit);
How to calculate CRC, I need software calculation, not hardware processing.
Thanks!
CRC format
if (m_config_local.crc == RADIO_CRCCNF_LEN_Two)
{
NRF_RADIO->CRCINIT = 0xFFFFUL; // Initial value
NRF_RADIO->CRCPOLY = 0x11021UL; // CRC poly: x^16+x^12^x^5+1
}
uint16_t crc16_compute(uint8_t const * p_data, uint32_t size, uint16_t const * p_crc)
{
uint16_t crc = (p_crc == NULL) ? 0xFFFF : *p_crc;
for (uint32_t i = 0; i < size; i++)
{
crc = (uint8_t)(crc >> 8) | (crc << 8);
crc ^= p_data[i];
crc ^= (uint8_t)(crc & 0xFF) >> 4;
crc ^= (crc << 8) << 4;
crc ^= ((crc & 0xFF) << 4) << 1;
}
return crc;
}
What should para p_data enter?
Hi
The p_data parameter is a pointer to the data that you want to calculate the CRC over.
In ESB the full address, S0, length, S1 and payload should be used as a part of the CRC calculation.
It is also important to use the right CRC polynomial and initial value, to be compatible with the CRC feature of the radio.
Best regards
Torbjørn