#include <reg51

Similar documents
芯片主要特性:

JLX

芯片主要特性:

内置协议及链路层、具有六路接收通道

bingdian001.com

ATMEL AT90S8515 AVR CPU AVR AVR AVR ATMEL RISC 32 8 r0 r X Y Z R0 R1 R2 R13 R14 R15 R16 R17 R26 R27 R28 R29 R30 R31 0x00 0x

<4D F736F F D20CBABC1FA DA3A8BAACB6C1D0B44D31A3A9C4A3BFE9D7CAC1CF B0E62E646F63>

untitled

目录

untitled

Bus Hound 5

Tel:

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor

untitled

Arduino 1-1 Arduino 1-2 Arduino 1-3 Arduino IDE

ICD ICD ICD ICD ICD

Microsoft Word - MSP430 Launchpad 指导书.docx

51 C 51 isp 10 C PCB C C C C KEIL

中文手册

untitled

untitled

+00DE _01EN.book

HD ( ) 18 HD ( ) 18 PC 19 PC 19 PC 20 Leica MC170 HD Leica MC190 HD 22 Leica MC170 HD Leica MC190 HD Leica MC170 HD

FM1935X智能非接触读写器芯片

P4i45GL_GV-R50-CN.p65

CC213

untitled

P4VM800_BIOS_CN.p65

2 12

第 卷 第 期 年 月 半 导 体 学 报! " # $%&'%' $!&' #% #$1 /#1 $'! / ?/ ?/ / 3 0,?/ ) * +!!! '!,!! -. & ' $! '! 4% %&1)/1(7%&)03 (% )

P4V88+_BIOS_CN.p65

<4D F736F F D20C9EEDBDACAD0B6ABB3CFD0C5B5E7D7D3BFC6BCBCD3D0CFDEB9ABCBBEBDE9C9DCBCB0BFE2B4E6>

<4D F736F F D D342D3231D2C7B1EDCCD6C2DBB8E5B1E0D6C6CBB5C3F72E646F63>

MICROCHIP EVM Board : APP APP001 PICmicro Microchip APP001 40pin PDIP PICmicro Design Tips Character LCM Temperature Sensor Application I/O Pi

版本说明书

<4D F736F F D20B9F9B0EABBCDBBAFAB48DEB3B4C1A5BDB3F8A7692E646F63>

1 TPIS TPIS 2 2

行业

下 图 是 连 接 的 方 法 在 这 篇 文 章 里 还 会 介 绍 如 何 建 立 大 量 的 进 程 无 线 节 点, 如 何 将 这 些 传 感 器 集 成 到 一 个 开 源 家 庨 自 劢 化 服 务 器 除 了 在 手 机 App 上 看 到 家 里 的 情 形 外, 你 还 可 以

Microsoft Word - IRFWX-A124_A_SM59D03G2_SM59D04G2_PCA_ APN_SC_.doc

PCI Express

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

T

Microsoft Word - ~ doc

行业


INCF SEC1,F ; 將 SEC1+1 作查表取回對應數字 MOVF SEC1,W banksel STRING1 banksel PORTB RETFIE run_sec2: MOVF SEC2,W SUBLW.5 GOTO run_min ; 將秒個位數歸 0 CLRF SEC1 MOVL

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

行业

第4章 系统设置

电子缝纫机 了解缝纫机 缝制基础知识 产品型号 : 885-V60/V61/V62/V63/V64/V65 实用针迹 附录 欢迎访问 常见问题解答 (FAQs) 在这里可以得到产品的支持和

50-FB23-24_BES_V_ z1_ b

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco

AN INTRODUCTION TO PHYSICAL COMPUTING USING ARDUINO, GRASSHOPPER, AND FIREFLY (CHINESE EDITION ) INTERACTIVE PROTOTYPING

Microsoft Word - ha0359t

Microsoft Word - SC16C550应用实例.doc

XNS104 产品说明书 AD 型 2.4G 高速无线收发单片机概述 2.4GHz 高速无线收发单片机 XNS104 是一个带 12 位 ADC, 以 OTP 为程序存储基础, 带 2.4G 高速无线收发芯片的单片机 无线收发单元工作在 GHz 世界通用 ISM 频段, 它集

an153f

C/C++ - 文件IO

Serial ATA ( Nvidia nforce430)...2 (1) SATA... 2 (2) B I O S S A T A... 3 (3) RAID BIOS RAID... 6 (4) S A T A... 9 (5) S A T A (6) Microsoft Win

stm32_mini_v2

Agilent N5700 N5741A-49A, N5750A-52A, N5761A-69A, N5770A-72A W 1500 W 600 V 180 A 1 U Vac AC LAN,USB GPIB Agilent N5700 1U 750W 1500W 24

图 片 展 示 : 资 源 简 介 : FPGA Altera CycloneII EP2C5T144C8 (4608 个 LE) 2 路 有 源 晶 振 (50M,25M) AS & JTAG 标 准 接 口 VGA 接 口 UART 接 口 蜂 鸣 器 8bit 并 行 DAC 8 路 按 键

目 录 Leica ICC50 HD 引 言 9 基 本 特 点 10 基 本 特 点 ( 续 ) 11 Leica ICC50 HD: 概 述 12 拆 箱 14 准 备 开 始! 使 用 之 前 的 准 备 工 作 16 开 始 设 置! 使 用 计 算 机 进 行 连 接 和 成 像 操 作

TH2512/TH2512A Tonghui Electronics reserves the right to make changes at any time without notice in order to improve design and supply the best possib

P4Dual-915GL_BIOS_CN.p65

《计算机应用基础》学习材料(讲义)

untitled

2 Keil µ vision 2.1 1) Keil µ vision2 V2.34 µ vision3 2) Sino_Keil.exe Keil c:\keil\ 3) JET51 USB PC C:\Keil\ USB PC 4) S-L

Hz 10MHz 0.5V 5V 0.01% 10s 2 0.5V 5V 1Hz 1kHz 10% 90% 1% 3 1Hz 1MHz 1% EPM7128SLC84-15 LM361 LM361 Zlg

mdt1030

untitled

GW2A 系列 FPGA 产品 GW2A-18 器件 Pinout Version History 日期 版本 2016/8/ /9/ /11/ /2/ /6/ /6/ /8

68369 (ppp quickstart guide)

Transcription:

RF24L01 无线通讯模块 开发指南 作者 刘春伟胡文明 一 模块介绍 RF24L01 模块有两个型号 :RF24L01B 和 RF24L01SE RF24L01B(PCB 板载天线 ) ( 尺寸 :37mm*18mm*1.6mm) RF24L01SE ( 外置天线 )( 尺寸 :30mm*18mm*1.6mm)

RF24L01 特点 : (1) 2.4Ghz 全球开放 ISM 频段免许可证使用 (2) 最高工作速率 2Mbps, 高效 GFSK 调制, 抗干扰能力强, 特别适合工业控制场合 (3) 126 频道, 满足多点通信和跳频通信需要 (4) 内置硬件 CRC 检错和点对多点通信地址控制 (5) 低功耗 1.9-3.6V 工作, 待机模式下状态为 22uA; 掉电模式下为 900nA (6) 内置 2.4Ghz 天线, 体积小巧 34mm X 17mm (7) 模块可软件设地址, 只有收到本机地址时才会输出数据 ( 提供中断指示 ), 可直接接各种单片机使用, 软件编程非常方便 (8) 内置专门稳压电路, 使用各种电源包括 DC/DC 开关电源均有很好的通信效果 (9) 标准 DIP 间距接口, 便于嵌入式应用 (10) 工作于 Enhanced ShockBurst 具有 Automatic packet handling, Auto packet transaction handling, 具有可选的内置包应答机制, 极大的降低丢包率 (11) 与 51 系列单片机 P0 口连接时候, 需要加 10K 的上拉电阻, 与其余口连接不需要 (12) 其他系列的单片机, 如果是 5V 的, 请参考该系列单片机 IO 口输出电流大小, 如果超过 10mA, 需要串联电阻分压, 否则容易烧毁模块! 如果是 3.3V 的, 可以直接和 RF2401 模块的 IO 口线连接 比如 AVR 系列单片机如果是 5V 的, 一般串接 2K 的电阻

二 接口电路 说明 : (1) VCC 脚接电压范围为 1.9V~3.6V 之间, 不能在这个区间之外, 超过 3.6V 将会烧毁模块 推荐电压 3.3V 左右 (2) 除电源 VCC 和接地端, 其余脚都可以直接和普通的 5V 单片机 IO 口直接相连, 无需电平转换 当然对 3V 左右的单片机更加适用了 (3) 硬件上面没有 SPI 的单片机也可以控制本模块, 用普通单片机 IO 口模拟 SPI 不需要单片机真正的串口介入, 只需要普通的单片机 IO 口就可以了, 当然用串口也可以了 (4) 9 脚接地脚, 需要和母板的逻辑地连接起来 ;2 脚和 9 脚悬空 (5) 排针间距为 100mil, 标准 DIP 插针, 如果需要其他封装接口, 比如密脚插针, 或者其他形式的接口, 可以联系我们定做

三 模块结构和引脚说明 RF24L01 模块使用 Nordic 公司的 nrf24l01 芯片开发而成

四 工作方式 RF24L01 有工作模式有四种 : 收发模式配置模式空闲模式关机模式工作模式由 PWR_UP register PRIM_RX register 和 CE 决定, 详见下表 4.1 收发模式收发模式有 Enhanced ShockBurstTM 收发模式 ShockBurstTM 收发模式和直接收发模式三种, 收发模式由器件配置字决定, 具体配置将在器件配置部分详细介绍

4.1.1 Enhanced ShockBurstTM 收发模式 Enhanced ShockBurstTM 收发模式下, 使用片内的先入先出堆栈区, 数据低速从微控制器送入, 但高速 (1Mbps) 发射, 这样可以尽量节能, 因此, 使用低速的微控制器也能得到很高的射频数据发射速率 与射频协议相关的所有高速信号处理都在片内进行, 这种做法有三大好处 : 尽量节能 ; 低的系统费用 ( 低速微处理器也能进行高速射频发射 ); 数据在空中停留时间短, 抗干扰性高 Enhanced ShockBurstTM 技术同时也减小了整个系统的平均工作电流 在 Enhanced ShockBurstTM 收发模式下, RF24L01 自动处理字头和 CRC 校验码 在接收数据时, 自动把字头和 CRC 校验码移去 在发送数据时, 自动加上字头和 CRC 校验码, 在发送模式下, 置 CE 为高, 至少 10us, 将时发送过程完成后 4.1.1.1 Enhanced ShockBurstTM 发射流程 A. 把接收机的地址和要发送的数据按时序送入 RF24L01; B. 配置 CONFIG 寄存器, 使之进入发送模式 C. 微控制器把 CE 置高 ( 至少 10us), 激发 RF24L01 进行 Enhanced ShockBurstTM 发射 ; D. RF24L01 的 Enhanced ShockBurstTM 发射 (1) 给射频前端供电 ; (2) 射频数据打包 ( 加字头 CRC 校验码 ); (3) 高速发射数据包 ; (4) 发射完成,RF24L01 进入空闲状态 4.1.1.2 Enhanced ShockBurstTM 接收流程 A. 配置本机地址和要接收的数据包大小 ; B. 配置 CONFIG 寄存器, 使之进入接收模式, 把 CE 置高 C. 130us 后,RF24L01 进入监视状态, 等待数据包的到来 ; D. 当接收到正确的数据包 ( 正确的地址和 CRC 校验码 ),RF2401 自动把字头 地址和 CRC 校验位移去 ; E. RF24L01 通过把 STATUS 寄存器的 RX_DR 置位 (STATUS 一般引起微控制器中断 ) 通知微控制器 ; F. 微控制器把数据从 RF2401 读出 ; G. 所有数据读取完毕后, 可以清除 STATUS 寄存器 RF2401 可以进入四种主要的模式之一 4.1.2 ShockBurstTM 收发模式 ShockBurstTM 收发模式可以与 Nrf2401a,02,E1 及 E2 兼容, 具体表

述前看本公司的 -RF2401 文档 4.2 空闲模式 RF24L01 的空闲模式是为了减小平均工作电流而设计, 其最大的优点是, 实现节能的同时, 缩短芯片的起动时间 在空闲模式下, 部分片内晶振仍在工作, 此时的工作电流跟外部晶振的频率有关 4.4 关机模式 在关机模式下, 为了得到最小的工作电流, 一般此时的工作电流为 900nA 左右 关机模式下, 配置字的内容也会被保持在 RF2401 片内, 这是该模式与断电状态最大的区别 五 配置 RF24L01 模块 RF2401 的所有配置工作都是通过 SPI 完成, 共有 30 字节的配置字 我们推荐 RF24L01 工作于 Enhanced ShockBurstTM 收发模式, 这种工作模式下, 系统的程序编制会更加简单, 并且稳定性也会更高, 因此, 下文着重介绍把 RF24L01 配置为 Enhanced ShockBurstTM 收发模式的器件配置方法 ShockBurstTM 的配置字使 RF24L01 能够处理射频协议, 在配置完成后, 在 RF24L01 工作的过程中, 只需改变其最低一个字节中的内容, 以实现接收模式和发送模式之间切换 ShockBurstTM 的配置字可以分为以下四个部分 : 数据宽度 : 声明射频数据包中数据占用的位数 这使得 RF24L01 能够区分接收数据包中的数据和 CRC 校验码 ;

地址宽度 : 声明射频数据包中地址占用的位数 这使得 RF24L01 能够区分地址和数据 ; 地址 : 接收数据的地址, 有通道 0 到通道 5 的地址 ; CRC: 使 RF24L01 能够生成 CRC 校验码和解码 当使用 RF24L01 片内的 CRC 技术时, 要确保在配置字 (CONFIG 的 EN_CRC) 中 CRC 校验被使能, 并且发送和接收使用相同的协议 RF24L01 配置字的 CONFIG 寄存器的位描述如下表所示 RF24L01 CONFIG 配置字描述

六 参考源代码 #include <reg51.h> //<nrf2401_pins 对应引脚 > sbit MISO =P1^3; sbit MOSI =P1^4; sbit SCK =P1^5; sbit CE =P1^6; sbit CSN =P3^7; sbit IRQ =P1^2; sbit LED2 =P3^5; sbit LED1 =P3^4; sbit KEY1 =P3^0; sbit KEY2 =P3^1; // SPI(nRF24L01) commands #define READ_REG 0x00 // Define read command to register #define WRITE_REG 0x20 // Define write command to register #define RD_RX_PLOAD 0x61 // Define RX payload register address #define WR_TX_PLOAD 0xA0 // Define TX payload register address #define FLUSH_TX 0xE1 // Define flush TX register command #define FLUSH_RX 0xE2 // Define flush RX register command #define REUSE_TX_PL 0xE3 // Define reuse TX payload register command #define NOP 0xFF // Define No Operation, might be used to read status register //***************************************************// // SPI(nRF24L01) registers(addresses) #define CONFIG 0x00 // 'Config' register address #define EN_AA 0x01 //'Enable Auto Acknowledgment' register address #define EN_RXADDR 0x02 // 'Enabled RX addresses' register address #define SETUP_AW 0x03 //'Setup address width' register address #define SETUP_RETR 0x04 //'Setup Auto. Retrans' register address #define RF_CH 0x05 // 'RF channel' register address #define RF_SETUP 0x06 // 'RF setup' register address #define STATUS 0x07 // 'Status' register address #define OBSERVE_TX 0x08 // 'Observe TX' register address #define CD 0x09 // 'Carrier Detect' register address #define RX_ADDR_P0 0x0A // 'RX address pipe0' register address #define RX_ADDR_P1 0x0B // 'RX address pipe1' register address #define RX_ADDR_P2 0x0C // 'RX address pipe2' register address #define RX_ADDR_P3 0x0D // 'RX address pipe3' register address #define RX_ADDR_P4 0x0E // 'RX address pipe4' register address #define RX_ADDR_P5 0x0F // 'RX address pipe5' register address #define TX_ADDR 0x10 // 'TX address' register address #define RX_PW_P0 0x11 //'RX payload width, pipe0' register address #define RX_PW_P1 0x12 //'RX payload width, pipe1' register address #define RX_PW_P2 0x13 //'RX payload width, pipe2' register address #define RX_PW_P3 0x14 //'RX payload width, pipe3' register address #define RX_PW_P4 0x15 //'RX payload width, pipe4' register address

#define RX_PW_P5 0x16 // 'RX payload width, pipe5' register address #define FIFO_STATUS 0x17 // 'FIFO Status Register' register address //------------------------------------------------------------ // 写一个字节到 24L01, 同时读出一个字节 uchar SPI_RW(uchar byte) uchar bit_ctr; for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit MOSI = (byte & 0x80); // output 'byte', MSB to MOSI byte = (byte << 1); // shift next bit into MSB.. SCK = 1; // Set SCK high.. byte = MISO; // capture current MISO bit SCK = 0; //..then set SCK low again return(byte); // return read byte // 向寄存器 reg 写一个字节, 同时返回状态字节 uchar SPI_RW_Reg(BYTE reg, BYTE value) uchar status; CSN = 0; status = SPI_RW(reg); SPI_RW(value); CSN = 1; return(status); // CSN low, init SPI transaction // select register //..and write value to it.. // CSN high again // return nrf24l01 status byte // 读出 bytes 字节的数据 uchar SPI_Read_Buf(BYTE reg, BYTE *pbuf, BYTE bytes) uchar status,byte_ctr; CSN = 0; status = SPI_RW(reg); // Set CSN low, init SPI tranaction // Select register to write to and read status byte for(byte_ctr=0;byte_ctr<bytes;byte_ctr++) pbuf[byte_ctr] = SPI_RW(0); // CSN = 1; return(status); // return nrf24l01 status byte // 写入 bytes 字节的数据 uchar SPI_Write_Buf(BYTE reg, BYTE *pbuf, BYTE bytes) uchar status,byte_ctr; CSN = 0; status = SPI_RW(reg); for(byte_ctr=0; byte_ctr<bytes; byte_ctr++) // SPI_RW(*pBuf++);

CSN = 1; return(status); // // Set CSN high again // 接收函数, 返回 1 表示有数据收到, 否则没有数据接受到 unsigned char nrf24l01_rxpacket(unsigned char* rx_buf) unsigned char revale=0; // set in RX mode SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); // Set PWR_UP bit, enable CRC(2 bytes) & Prim:RX. RX_DR enabled.. CE = 1; // Set CE pin high to enable RX device dalay130us(); sta=spi_read(status); // read register STATUS's value if(rx_dr) // if receive data ready (RX_DR) interrupt CE = 0; // stand by mode SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer revale =1; SPI_RW_Reg(WRITE_REG+STATUS,sta);// clear RX_DR or TX_DS or MAX_RT interrupt flag return revale; // 发送函数 void nrf24l01_txpacket(unsigned char * tx_buf) CE=0; //SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // Writes TX_Address to nrf24l01 //SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // RX_Addr0 same as TX_Adr for Auto.Ack SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); // Writes data to TX payload SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); // Set PWR_UP bit, enable CRC(2 bytes) & Prim:TX. MAX_RT & TX_DS enabled.. CE=1; dalay10us(); CE=0; // 配置函数 void nrf24l01_config(void) //initial io CE=0; // chip enable CSN=1; // Spi disable SCK=0; // Spi clock line init high CE=0; SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); bytes) & Prim:RX. RX_DR enabled.. SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // Set PWR_UP bit, enable CRC(2

SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // Enable Pipe0 SPI_RW_Reg(WRITE_REG + SETUP_AW, 0x02); // Setup address width=5 bytes SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); // 500us + 86us, 10 retrans... SPI_RW_Reg(WRITE_REG + RF_CH, 0); SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); // TX_PWR:0dBm, Datarate:1Mbps, LNA:HCURR SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); 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); CE=1; // 七 公司介绍 杭州飞拓电子科技有限公司组建于 2003 年 3 月, 位于杭州高新技术开发区东部软件园, 拥有一支以博士 硕士为主的软硬件开发团队, 并与杭州电子科技大学 浙江大学的相关电子院系 省部级重点实验室建立了紧密合作关系, 技术开发能力强大, 开发经验丰富 公司专注于无线通信 单片机开发应用 RFID 产品及系统 集成电路设计等领域 主要产品有 : 微功率 中大功率 USB 系列无线通信 / 数传模块 ; M1 卡读写模块 非接触式感应锁识别模块 ; 高频 RFID 读写器 有源电子标签 ; 远距离 RFID 射频识别系统 ; 自主开发消费类 IC 产品 ( 遥控系列 IC 音响系列 IC 电源管理 IC 等 ) 工业 IC 委托设计 ; 单片机开发应用设计公司坚持技术自主创新, 并依托省内外著名大学的国家级科研机构, 紧跟本领域的高新技术发展潮流, 以长久合作, 持续共赢为宗旨, 为客户提供成熟 可靠的无线通信 单片机应用 IC 设计等解决方案 欢迎无线通讯 集成电路等相关领域同仁前来访问和洽谈项目合作, 欢迎提出新产品需求

八 联系方式公司名称 : 杭州飞拓电子科技有限公司公司网址 :http://www.fytoo.com 电话 :0571-87207271 传真 :0571-87207271 Email:jimmy.zh@tom.com MSN: fred.zh@163.com QQ: 1009531258 地址 : 浙江省杭州市西湖区华星路 99 号创业大厦 A402 室邮编 :310012