项目记录&【Pro 1】2.4GHz车载感应控制盒-(2)2.4Ghz收发芯片XN297
XN297 / XN297L 是上海磐启微电子有限公司的一款2.4G无线收发芯片。
本项目收发都用该芯片,该芯片通讯方式为Spi。
原理图:

关键代码:
初始化
1 uint8_t XN297_Init(void) 2 { 3 #if(DATA_RATE == DR_1M) 4 uint8_t xdata BB_cal_data[] = {0x0A,0x6D,0x67,0x9C,0x46}; 5 uint8_t xdata RF_cal_data[] = {0xF6,0x37,0x5D}; 6 uint8_t xdata RF_cal2_data[] = {0xD5,0x21,0xef,0x2C,0x5A,0x40}; 7 uint8_t xdata Dem_cal_data[] = {0x01}; 8 uint8_t xdata Dem_cal2_data[] = {0x0b,0xDF,0x02}; 9 #elif(DATA_RATE == DR_250K) 10 uint8_t xdata BB_cal_data[] = {0x12,0xec,0x6f,0xa1,0x46}; 11 uint8_t xdata RF_cal_data[] = {0xf6,0x97,0x5d}; 12 uint8_t xdata RF_cal2_data[] = {0xd5,0x21,0xeb,0x2c,0x5a,0x40}; 13 uint8_t xdata Dem_cal_data[] = {0x1F}; 14 uint8_t xdata Dem_cal2_data[] = {0x0b,0xdf,0x02}; 15 #endif 16 //uint8_t xdata feature = 0x00; 17 uint8_t xdata feature = 0x20; 18 delay_ms(200); 19 XN297_SPIInit(); //SPI初始化 20 delay_ms(2); ; 21 RF_WriteReg(RST_FSPI, 0x5A); //Software Reset 22 RF_WriteReg(RST_FSPI, 0XA5); 23 24 RF_WriteReg(FLUSH_TX, 0); // CLEAR TXFIFO 25 RF_WriteReg(FLUSH_RX, 0); // CLEAR RXFIFO 26 RF_WriteReg(W_REGISTER + STATUS, 0x70); // CLEAR STATUS 27 RF_WriteReg(W_REGISTER + EN_RXADDR, 0x01); // Enable Pipe0 28 RF_WriteReg(W_REGISTER + SETUP_AW, 0x03); // address witdth is 5 bytes 29 RF_WriteReg(W_REGISTER + RF_CH, DEFAULT_CHANNEL); // 2478M HZ 30 RF_WriteReg(W_REGISTER + RX_PW_P0, PAYLOAD_WIDTH); // 8 bytes 31 RF_WriteBuf(W_REGISTER + TX_ADDR, ( uint8_t*)TX_ADDRESS_DEF, sizeof(TX_ADDRESS_DEF)); // Writes TX_Address to PN006 32 RF_WriteBuf(W_REGISTER + RX_ADDR_P0,( uint8_t*)TX_ADDRESS_DEF, sizeof(TX_ADDRESS_DEF)); // RX_Addr0 same as TX_Adr for Auto.Ack 33 RF_WriteBuf(W_REGISTER + BB_CAL, BB_cal_data, sizeof(BB_cal_data)); 34 RF_WriteBuf(W_REGISTER + RF_CAL2, RF_cal2_data, sizeof(RF_cal2_data)); 35 RF_WriteBuf(W_REGISTER + DEM_CAL, Dem_cal_data, sizeof(Dem_cal_data)); 36 RF_WriteBuf(W_REGISTER + RF_CAL, RF_cal_data, sizeof(RF_cal_data)); 37 RF_WriteBuf(W_REGISTER + DEM_CAL2, Dem_cal2_data,sizeof(Dem_cal2_data)); 38 RF_WriteReg(W_REGISTER + DYNPD, 0x00); 39 RF_WriteReg(W_REGISTER + RF_SETUP, RF_POWER); // 13DBM 40 RF_WriteReg(ACTIVATE, 0x73); 41 RF_WriteReg(W_REGISTER + SETUP_RETR,0x00); // Disable retrans... 42 RF_WriteReg(W_REGISTER + EN_AA, 0x00); // Disable AutoAck 43 44 if(PAYLOAD_WIDTH >32) 45 feature |= 0x18; 46 RF_WriteReg(W_REGISTER + FEATURE, feature); 47 48 if(RF_ReadReg(RF_CH)!=DEFAULT_CHANNEL){ 49 //printf("error \n"); 50 return 0; 51 } 52 //printf("ok \n"); 53 return 1; 54 }
接收模式配置
1 /* 2 * @name RF_DumpRxData 3 * @brief RF接收数据 4 * @param ucPayload:接收数据存放的起始地址 5 length:接收数据长度 6 * @retval None 7 */ 8 uint8_t RF_DumpRxData( uint8_t *ucPayload, uint8_t length) 9 { 10 11 if(!(RF_GetStatus()& RX_DR_FLAG)) 12 { 13 return 0; 14 } 15 16 RF_ReadBuf(R_RX_PAYLOAD, ucPayload, length); //将接收到的数据读出到ucPayload 17 RF_WriteReg(FLUSH_RX, 0); //清除RF的RX FIFO 18 RF_ClearStatus(); 19 return 1; 20 }
接收数据功能代码
1 /* 2 * @name RF_DumpRxData 3 * @brief RF接收数据 4 * @param ucPayload:接收数据存放的起始地址 5 length:接收数据长度 6 * @retval None 7 */ 8 uint8_t RF_DumpRxData( uint8_t *ucPayload, uint8_t length) 9 { 10 11 if(!(RF_GetStatus()& RX_DR_FLAG)) 12 { 13 return 0; 14 } 15 16 RF_ReadBuf(R_RX_PAYLOAD, ucPayload, length); //将接收到的数据读出到ucPayload 17 RF_WriteReg(FLUSH_RX, 0); //清除RF的RX FIFO 18 RF_ClearStatus(); 19 return 1; 20 }

浙公网安备 33010602011771号