功能说明连接说明:其中一个S3C2440作为与上位机(PC)的连接工具,另外一个S3C2440作为网关模块与R7F0C809连接,无线模块也连接在mini2440的网关模块上。
功能:实现两个S3C2440开发板之间进行数据通讯,采用半双工通讯方式,最后要求下位机的签到、新指纹录入、删除原有指纹信息等功能能够传递给上位机,而上位机也可以直接操作下位机删除或者添加新用户。
性能:发送误码率小于5%,传输时延小于1秒。
设计说明
当数据发送后,PC机回显要发送的数据,同时接收方也通过串口将接受到的数据打印到PC机上显示。
实现此程序功能的算法为使用SIP协议配置下的NRF24L01发射模式
void TX_Mode(INT8U *BUF)以及接收模式void RX_Mode(void)。
5原代码清单
void TX_Mode(INT8U *BUF)
{
unsigned char temp;
CE_L;
SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);//设置发送地址
SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);//接收地址与接收端的发送地址一样
SPI_Write_Buf(WR_TX_PLOAD,BUF,5);
do{
SPI_RW_Reg(WRITE_REG+EN_AA,0x01);//使能自动应答功能
temp=SPI_Read(READ_REG+EN_AA);
}
while(temp!=0x01);
temp=0;
do{
SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);//接收地址允许
temp=SPI_Read(READ_REG+EN_RXADDR);
}while(temp!=0x01);
temp=0;
do{
SPI_RW_Reg(WRITE_REG+SETUP_AW,0x03);//设置地址宽度为5字节宽度
temp=SPI_Read(READ_REG+SETUP_AW);
}while(temp!=0x03);
temp=0;
do{
SPI_RW_Reg(WRITE_REG+SETUP_RETR,0x0a); //建立自动重发:等待500us,自动重发十次
temp=SPI_Read(READ_REG+SETUP_RETR);
}while(temp!=0x0a);
temp=0;
do{
SPI_RW_Reg(WRITE_REG+RF_CH,0x40); //射频通道设置
temp=SPI_Read(READ_REG+RF_CH);
}while(temp!=0x40);
temp=0;
do{
SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07);//数据传输率1Mbps,发射功率0dBm,低噪声放大增益
temp=SPI_Read(READ_REG+RF_SETUP);
}while(temp!=0x07);
temp=0;
do{
SPI_RW_Reg(WRITE_REG+CONFIG,0x0e);
temp=SPI_Read(READ_REG+CONFIG);
}while(temp!=0x0e);
CE_H;
Delay(100);
}
/**************************************************
函数:RX_Mode()
描述:
这个函数设置nRF24L01为接收模式,等待接收发送设备的数据包
/**************************************************/
void RX_Mode(void)
{
unsigned char temp;
CE_L;
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);
temp=0;
do{
SPI_RW_Reg(WRITE_REG+EN_AA,0x01);//数据通道0允许自动应答
temp=SPI_Read(READ_REG+EN_AA);
}while(temp!=0x01);
SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);
temp=0;
do{
SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);//使能接收地址:接收通道0允许
temp=SPI_Read(READ_REG+EN_RXADDR);
}while(temp!=0x01);
temp=0;
do{
SPI_RW_Reg(WRITE_REG+SETUP_AW,0x03);//设置地址宽度为5字节宽度
temp=SPI_Read(READ_REG+SETUP_AW);
}while(temp!=0x03);
temp=0;
do{
SPI_RW_Reg(WRITE_REG+RF_CH, 0x40);//选择频道为40
temp=SPI_Read(READ_REG+RF_CH);
}while(temp!= 0x40);
temp=0;
do{
SPI_RW_Reg(WRITE_REG+RX_PW_P0,TX_PLOAD_WIDTH);//有效数据宽度设置
temp=SPI_Read(READ_REG+RX_PW_P0);
}while(temp!=5);
temp=0;
do{
SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07);
temp=SPI_Read(READ_REG+RF_SETUP);
}while(temp!=0x07);
temp=0;
do{
SPI_RW_Reg(WRITE_REG+CONFIG,0x0f);
temp=SPI_Read(READ_REG+CONFIG);
}while(temp!=0x0f);
CE_H;
Delay(100); // 拉高CE启动接收设备
}
测试说明