微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Mini2440 NRF24L01无线模块驱动

Mini2440 NRF24L01无线模块驱动

时间:11-19 来源:互联网 点击:
为了和jihuaLi 完成智能家居系统,我移植了这个驱动,不管写的如何,总结一下是很有必要的。

NRF24L01使用SPI总线与主机通信,没有SPI端口的设备可以使用IO口进行模拟。

关于SPI:
SPI是一种四线串行总线,
SCLK: 串行时钟线
MOSI: 总线主机输出/ 从机输入
MISO: 总线主机输入/ 从机输出;
SS: 从机使能数据传输方式
通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCLK时钟线存在的原因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过 SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。

NRF24L01寄存器说明:
还是看说明书吧,dbank驱动源码在下一页。驱动源码:

#include #include #include #include #include #include 

#include#include#include#include#include#include#include#include#include#include

typedef unsigned int uint16;
typedef unsigned char uint8;

/* 引脚相关定义 */
#define CSN S3C2410_GPF(4)
#define CSN_OUTP S3C2410_GPIO_OUTPUT
#define MOSI S3C2410_GPG(0)
#define MOSI_OUTP S3C2410_GPIO_OUTPUT
#define IRQ S3C2410_GPG(1)
#define IRQ_INP S3C2410_GPIO_INPUT
#define MISO S3C2410_GPG(6)
#define MISO_INP S3C2410_GPIO_INPUT
#define SCK S3C2410_GPG(7)
#define SCK_OUTP S3C2410_GPIO_OUTPUT
#define CE S3C2410_GPG(11)
#define CE_OUTP S3C2410_GPIO_OUTPUT

#define DEVICE_NAME “NRF24L01”

#define TxBufSize 32

uint8 TxBuf[TxBufSize] = {
0x01, 0x02, 0x03, 0x4, 0x05, 0x06, 0x07, 0x08,
0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
0x17, 0x18, 0x19, 0x20, 0x21, 0x22, 0x23, 0x24,
0x25, 0x26, 0x27, 0x28, 0x29, 0x30, 0x31, 0x32,
};

//NRF24L01端口定义

#define CE_OUT s3c2410_gpio_cfgpin(CE, CE_OUTP) //数据线设置为输出

#define CE_UP s3c2410_gpio_pullup(CE, 1) //打开上拉电阻

#define CE_L s3c2410_gpio_setpin(CE, 0) //拉低数据线电平

#define CE_H s3c2410_gpio_setpin(CE, 1) //拉高数据线电平

#define SCK_OUT s3c2410_gpio_cfgpin(SCK, SCK_OUTP) //数据线设置为输出

#define SCK_H s3c2410_gpio_setpin(SCK, 1) //拉高数据线电平

#define SCK_L s3c2410_gpio_setpin(SCK, 0) //拉高数据线电平

#define MISO_IN s3c2410_gpio_cfgpin(MISO, MISO_INP) //数据线设置为输出

#define MISO_UP s3c2410_gpio_pullup(MISO, 1) //打开上拉电阻

#define MISO_STU s3c2410_gpio_getpin(MISO) //数据状态

#define IRQ_IN s3c2410_gpio_cfgpin(IRQ, IRQ_INP) //数据线设置为输出

#define IRQ_UP s3c2410_gpio_pullup(IRQ, 1) //打开上拉电阻

#define IRQ_L s3c2410_gpio_setpin(IRQ, 0) //拉低数据线电平

#define IRQ_H s3c2410_gpio_setpin(IRQ, 1) //拉高数据线电平

#define MOSI_OUT s3c2410_gpio_cfgpin(MOSI, MOSI_OUTP) //数据线设置为输出

#define MOSI_UP s3c2410_gpio_pullup(MOSI, 1) //打开上拉电阻

#define MOSI_L s3c2410_gpio_setpin(MOSI, 0) //拉低数据线电平

#define MOSI_H s3c2410_gpio_setpin(MOSI, 1) //拉高数据线电平

#define CSN_OUT s3c2410_gpio_cfgpin(CSN, CSN_OUTP) //数据线设置为输出

#define CSN_UP s3c2410_gpio_pullup(CSN, 1) //打开上拉电阻

#define CSN_L s3c2410_gpio_setpin(CSN, 0) //拉低数据线电平

#define CSN_H s3c2410_gpio_setpin(CSN, 1) //拉高数据线电平

//NRF24L01

#define TX_ADR_WIDTH 5 // 5 uint8s TX address width

#define RX_ADR_WIDTH 5 // 5 uint8s RX address width

#define TX_PLOAD_WIDTH 32 // 20 uint8s TX payload

#define RX_PLOAD_WIDTH 32 // 20 uint8s TX payload

uint8 TX_ADDRESS[TX_ADR_WIDTH] = { 0x34, 0x43, 0x10, 0x10, 0x01 }; //本地地址

uint8 RX_ADDRESS[RX_ADR_WIDTH] = { 0x34, 0x43, 0x10, 0x10, 0x01 }; //接收地址

//NRF24L01寄存器指令

#define READ_REG 0x00 // 读寄存器指令

#define WRITE_REG 0x20 // 写寄存器指令

#define RD_RX_PLOAD 0x61 // 读取接收数据指令

#define WR_TX_PLOAD 0xA0 // 写待发数据指令

#define FLUSH_TX 0xE1 // 冲洗发送 FIFO指令

#define FLUSH_RX 0xE2 // 冲洗接收 FIFO指令

#define REUSE_TX_PL 0xE3 /

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top