/* Returns the number of retransmissions occured for the last message */ uint8_t nrf24_retransmissionCount() { uint8_t rv; nrf24_readRegister(OBSERVE_TX,&rv,1); rv = rv & 0x0F; return rv; }
/* Checks if receive FIFO is empty or not */ uint8_t nrf24_rxFifoEmpty() { uint8_t fifoStatus; nrf24_readRegister(FIFO_STATUS,&fifoStatus,1); return (fifoStatus & (1 << RX_EMPTY)); }
/* Checks if receive FIFO is empty or not */ uint8_t nrf24_rxFifoEmpty() { uint8_t fifoStatus; nrf24_readRegister(NRF24L01P_REG_FIFO_STATUS, &fifoStatus, 1); return (fifoStatus & (1 << NRF24L01P_SHIFT_RX_EMPTY)); }
/* init the hardware pins */ void nrf24_init() { nrf24_setupPins(); nrf24_ce_digitalWrite(LOW); nrf24_csn_digitalWrite(HIGH); nrf24_ce_digitalWrite(HIGH); nrf24_config(2,32); //nrf24_readRegister(CONFIG,&tx1,1); //tx1=0; //nrf24_configRegister(RF_CH,2); //nrf24_readRegister(EN_AA,&tx1,1); //tx1=0; nrf24_configRegister(RF_CH,2); nrf24_readRegister(RF_CH,&tx1,1); tx1=0; nrf24_readRegister(CONFIG,&tx1,1); tx1=0; nrf24_readRegister(RX_ADDR_P0,&readData,5); tx1=0; nrf24_readRegister(RF_SETUP,&tx1,1); tx1=0; nrf24_readRegister(TX_ADDR,&readData,5); tx1=0; nrf24_configRegister(SETUP_AW,2); //nrf24_readRegister(SETUP_AW,&tx1,1); //nrf24_configRegister(DYNPD,0x00); //nrf24_configRegister(FEATURE,0x00); //nrf24_tx_address(&tx_address11); //copy_paste(); // nrf_cmd(0x20, 0x12); //on, no crc, int on RX/TX done // nrf_cmd(0x21, 0x00); //no auto-acknowledge // nrf_cmd(0x22, 0x00); //no RX // nrf_cmd(0x23, 0x02); //5-byte address // nrf_cmd(0x24, 0x00); //no auto-retransmit // nrf_cmd(0x26, 0x06); //1MBps at 0dBm // nrf_cmd(0x27, 0x3E); //clear various flags // nrf_cmd(0x3C, 0x00); //no dynamic payloads // nrf_cmd(0x3D, 0x00); //no features // nrf_cmd(0x31, 32); //always RX 32 bytes // nrf_cmd(0x22, 0x01); //RX on pipe 0 }
// -------------------------------------------------------------------------- static void nrf24_debugDumpRegister(const char* name, UINT8 reg, UINT8 size, UINT8 count) { BYTE buffer[NRF24_REG_SIZE_MAX]; UINT8 i; printf("%s\t =", name); while (count--) { printf(" 0x"); nrf24_readRegister(reg, buffer, size); for(i = 0; i < size; ++i) printf("%02X", *(buffer + i)); ++reg; } printf("\n"); }
// -------------------------------------------------------------------------- static void nrf24_readByteRegister(UINT8 reg, BYTE *data) { nrf24_readRegister(reg, data, 1); }
static void nrf24_test(void) { uint8_t rx_address[5] = {0xA7,0x95,0xF1,0x36,0x07}; uint8_t tx_address[5] = {0xA7,0x95,0xF1,0x36,0x06}; //uint8_t tx_address[5] = {0x17,0x97,0xA7,0xA7,0xD7}; uint8_t addr[10] = {0x1}; uint8_t val = 0x17; uint8_t reg; uint8_t data_array[6]; uint32_t counter = 0; spi_delay(1000000); /* init hardware pins */ nrf24_init(); if (spi_init() < 0) { printf("ERRRRROR SPI!\n"); } /* Returned value is not correct on the first read, who knows why... */ nrf24_readRegister(CONFIG, ®, 1); nrf24_readRegister(CONFIG, ®, 1); printf("CONFIG (before configured) = %x\n", reg); nrf24_readRegister(EN_AA, ®, 1); printf("EN_AA = %x\n", reg); nrf24_readRegister(RF_SETUP, ®, 1); printf("RF_SETUP = %x\n", reg); nrf24_readRegister(SETUP_AW, ®, 1); printf("SETUP_AW = %x\n", reg); nrf24_readRegister(SETUP_RETR, ®, 1); printf("SETUP_RETR = %x\n", reg); nrf24_readRegister(FIFO_STATUS, ®, 1); printf("FIFO_STATUS = %x\n", reg); nrf24_readRegister(RF_CH, ®, 1); printf("RF_CH = %x\n", reg); nrf24_writeRegister(RF_CH, &val, 1); nrf24_readRegister(RF_CH, ®, 1); printf("RF_CH = %x\n", reg); val = 2; nrf24_writeRegister(RF_CH, &val, 1); nrf24_readRegister(RF_CH, ®, 1); printf("RF_CH = %x\n", reg); #if 1 nrf24_readRegister(RX_ADDR_P0, addr, 5); printf("RX_ADDR_P0: %x %x %x %x %x\n", addr[0], addr[1], addr[2], addr[3], addr[4]); nrf24_writeRegister(RX_ADDR_P0, tx_address,5); spi_delay(1000000); nrf24_readRegister(RX_ADDR_P0, addr, 5); printf("RX_ADDR_P0: %x %x %x %x %x\n", addr[0], addr[1], addr[2], addr[3], addr[4]); spi_delay(1000000); nrf24_readRegister(RF_CH, ®, 1); nrf24_readRegister(TX_ADDR, addr, 5); printf("TX_ADDR: %x %x %x %x %x\n", addr[0], addr[1], addr[2], addr[3], addr[4]); nrf24_writeRegister(TX_ADDR, tx_address,5); nrf24_readRegister(TX_ADDR, addr, 5); printf("TX_ADDR: %x %x %x %x %x\n", addr[0], addr[1], addr[2], addr[3], addr[4]); spi_delay(1000000); nrf24_readRegister(RX_ADDR_P1, addr, 5); printf("RX_ADDR_P1: %x %x %x %x %x\n", addr[0], addr[1], addr[2], addr[3], addr[4]); nrf24_writeRegister(RX_ADDR_P1, rx_address,5); nrf24_readRegister(RX_ADDR_P1, addr, 5); printf("RX_ADDR_P1: %x %x %x %x %x\n", addr[0], addr[1], addr[2], addr[3], addr[4]); #endif /* Channel #2 , payload length: 4 */ nrf24_config(16,6); nrf24_readRegister(FIFO_STATUS,®,1); printf("!> 1 FIFO_STATUS = %2X\n", reg); spi_delay(1000000); nrf24_readRegister(CONFIG, ®, 1); nrf24_readRegister(CONFIG, ®, 1); printf("CONFIG (after configured) = %x\n", reg); nrf24_readRegister(EN_AA, ®, 1); printf("EN_AA = %x\n", reg); nrf24_readRegister(RF_SETUP, ®, 1); printf("RF_SETUP = %x\n", reg); nrf24_readRegister(TX_ADDR, addr, 5); printf("TX addr is: %x %x %x %x %x\n", addr[0], addr[1], addr[2], addr[3], addr[4]); //spi_delay(1000000); nrf24_readRegister(RX_ADDR_P0, addr, 5); printf("RX addr is: %x %x %x %x %x\n", addr[0], addr[1], addr[2], addr[3], addr[4]); //spi_delay(1000000); nrf24_readRegister(RX_ADDR_P1, addr, 5); printf("RX_ADDR_P1 addr is: %x %x %x %x %x\n", addr[0], addr[1], addr[2], addr[3], addr[4]); nrf24_readRegister(FIFO_STATUS,®,1); printf("!!!!!!> 2 FIFO_STATUS = %2X\n", reg); /* Set the device addresses */ //nrf24_tx_address(rx_address); //nrf24_rx_address(rx_address); //nrf24_ce_digitalWrite(HIGH); //reg = nrf24_getStatus(); //printf("STATUS = %2X\n", reg); nrf24_readRegister(FIFO_STATUS,®,1); printf("!!!!!!> 3 FIFO_STATUS = %2X\n", reg); while(1) { if(nrf24_dataReady()) { counter = 0; //reg = nrf24_getStatus(); //printf("STATUS = %x\n", reg); nrf24_getData(data_array); printf("> "); printf("%2X ",data_array[0]); printf("%2X ",data_array[1]); printf("%2X ",data_array[2]); printf("%2X ",data_array[3]); printf("%2X ",data_array[4]); printf("%2X\r\n",data_array[5]); //spi_delay(1000); } else if (counter > 100000) { reg = nrf24_getStatus(); printf("(counter > 100000) STATUS = %2X\n", reg); nrf24_readRegister(FIFO_STATUS,®,1); printf("(counter > 100000) FIFO_STATUS = %2X\n", reg); } counter++; } }