2.4G、NRF24L01、89C52、手搓


前言

2.4G无人机遥控发射板买了很久,没有时间研究,一直在吃灰。由于没有接收模块,并且主控芯片已经打磨得无法辨识,只剩拆件价值。

拆下来的2.4G模块是牛屎芯片,生产日期是2014年。猜测是NRF24L01或XN297。

关于2.4G,看了一些视频,有大概了解。并且网上关于NRF24L01的例程很多,我百度到是2010年,具体不说了,搜索并不难。

本文记录相关过程。

一、如何确认NRF24L01是NRF24L01?

猜打磨芯片是一个很有意思的过程。可以从VCC、GND的引脚入手,查找有哪些芯片是相符的。当然要猜中,运气是不可或缺的。但是有时候猜出来也会使人一筹莫展,尤其是MCU。总不能为了0.19元的pan2416 soc mcu(见某宝1.9元10个2.4g模块),再花400元买个烧写器配合吧。

这次是牛屎芯片,VCC、GND都糊住了。但好在模块上有引脚定义,并且2.4G模块主流的无非就是NRF24L01或是XN297。

下面是一段读写NRF24L01寄存器的测试程序,通过串口收到了check_out_buf的值,与check_in_buf相同,可以确认NRF24L01无疑。(另外,XN297寄存器测试程序也跑了一下,没有返回,后来发现跑的三线spi程序,但已经不重要了)

unsigned char NRF_24L01_Check(void)
{unsigned char check_in_buf[5]={0x51,0xa1,0x54,0xaB,0x75};unsigned char check_out_buf[5]={0x00};unsigned char i;//CE_HIGH;NRFWriteTxDate(W_REGISTER+TX_ADDR,check_in_buf,5);NRFReadRxDate(R_REGISTER+TX_ADDR,check_out_buf,5);for(i=0;i<5;i++){Max232SendChar(check_out_buf[i]);}return 1;
}

二、2.4G例程返回结果是0x0e

调试2.4G程序最好有usb转NRF24L01无线模块,这个模块可以扮演2.4g接收或发送的角色,帮助调试发送或接收程序。没有这个模块怎么办,看状态寄存器的数值呀。

用标准的例程收发程序按理说应该没有问题,但就是接收端就是收不到任何信息。

unchar CheckACK()
{  //用于发射sta=NRFReadReg(R_REGISTER+STATUS);                    // 返回状态寄存器Max232SendChar(sta);if(TX_DS||MAX_RT) //发送完毕中断{NRFWriteReg(W_REGISTER+STATUS,0xff);  // 清除TX_DS或MAX_RT中断标志CSN=0;NRFSPI(FLUSH_TX);//用于清空FIFO !!关键!!不然会出现意想不到的后果!!!大家记住!!  CSN=1; return(0);}elsereturn(1);
}

查看状态寄存器返回值sta始终是0x0e,0x0e是接收方没有收到。为什么呢,百度了一下,需要把延时调长。

void NRFSetRXMode()
{CE=0;NRFWriteTxDate(W_REGISTER+RX_ADDR_P0,TxAddr,TX_ADDR_WITDH);  // 接收设备接收通道0使用和发送设备相同的发送地址NRFWriteReg(W_REGISTER+EN_AA,0x01);               // 使能接收通道0自动应答NRFWriteReg(W_REGISTER+EN_RXADDR,0x01);           // 使能接收通道0NRFWriteReg(W_REGISTER+RF_CH,0x40);                 // 选择射频通道0x40NRFWriteReg(W_REGISTER+RX_PW_P0,TX_DATA_WITDH);  // 接收通道0选择和发送通道相同有效数据宽度NRFWriteReg(W_REGISTER+RF_SETUP,0x07);            // 数据传输率1Mbps,发射功率0dBm,低噪声放大器增益NRFWriteReg(W_REGISTER+CONFIG,0x0f);             // CRC使能,16位CRC校验,上电,接收模式     CE = 1; NRFDelay(1000);
}
/

于是野蛮地将Delay调到了1000,可以接收了。

标准的例程肯定是不会错的。错的原因就是编写程序的人用的MCU比89c52要好,硬件条件好,自然程序也要跑的快。为了适应89c52,只有降速了。

总结

源程序不贴了,网上实在太多。关于2.4G的调试收获总结如下:

1、鉴别2.4g牛屎芯片。因为2.4G模块基本都是SPI驱动的,引脚接法相同,跑个寄存器的测试程序,基本可以确认是哪种芯片。

2、没有usb转NRF24L01无线模块一样也可以调试2.4G,通过串口将状态寄存器的内容打出来,可以定位问题。

3、“0x0e等于要增加延时”,大家都是用的一样的例程,想必也遇到同样的问题。

4、NRF24L01是3.3v供电,拆NRF24L01的时候,顺便拆个ams1117,3.3v就有了。ams1117是个贴片元件,焊上几条脚就变成分立元件,方便操作。对了那个蜂鸣器也是拆的。

5、板上的RXEN不是NRF24L01引脚,是控制后面的2402e为接收使能的。接收模式下需要设置为1,发送模式可以不用管。2402e是个起放大作用的芯片,想必这个发送距离是杠杠滴。好东西可惜只有拆机价值了。

记录第一次调2.4G模块

手搓NRF24L01 2.4G收发实验相关推荐

  1. flinksql获取系统当前时间搓_DNF:从剑魂角度看工作服,不仅不是地摊货,更是超越了手搓套...

    工作服一直以来都得不到认可,被很多玩家调侃为"地摊货",主要原因还是在于,可以直接升级获取,好像牌面是有那么一点低,但从另一方面来说,工作服也只能从升级获取,就算欧皇也拿它没办法, ...

  2. 搞笑视频分析---2、爱做饭的芋头:手搓冰粉

    搞笑视频分析---2.爱做饭的芋头:手搓冰粉 一.总结 一句话总结: 哪些搞笑视频和搞笑音频片段就可以起到很好的效果 1.搞怪语句? 冰粉粉就是粉粉,然后煮到咕噜咕噜咕噜咕噜沸腾 但是你可能会怀疑,这 ...

  3. 还在做手搓党和模拟器党?手机投屏电脑玩吃鸡你值得拥有

    有没有什么模拟器电脑上玩刺激战场可以匹配手机玩家?我告诉你,已经没有了,基本所有的可以叫得出名字的安卓模拟器玩刺激战场都是匹配的模拟器家.不想做手搓党也不想被系统检测模拟器,你只需要一款神奇:手机投屏 ...

  4. 狂肝10个月手搓GPU,他们在《我的世界》里面玩《我的世界》

    梦晨 衡宇 萧箫 发自 凹非寺 量子位 | 公众号 QbitAI 自从有人在<我的世界>里用红石电路造出CPU,就流传着一个梗: 总有一天,这帮红石佬能在我的世界里玩上我的世界. 这一天, ...

  5. 【正点原子Linux连载】第七十一章 Linux 4G通信实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  6. ​“从0到1手搓GPT”教程来了!李飞飞高徒出品,马斯克点赞!

    来源:量子位 "从0到1手搓GPT"教程来了! 视频1个多小时,从原理到代码都一一呈现,训练微调也涵盖在内,手把手带着你搞定. 该内容刚发出来,在Twitter已吸引400万关注量 ...

  7. 用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(1)- 目标和前言

    用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(1)- 目标和前言 用c语言手搓一个600行的类c语言解释器: 给编程初学者的解释器教程(1)- 目标和前言 用c语言手搓一个60 ...

  8. Arduino ESP8266通过 RF433数据收发实验

    Arduino ESP8266通过 RF433射频模块实现数据收发实验 写这篇文章,折腾了2天,在没有成功之前,一直在摸索和采坑当中,不要问我黑暗和黎明之间有多长.开发很多时候只问结果,不问过程的,在 ...

  9. 闲鱼已售商品信息查询系统。手搓市场定价/行情查询利器

    前段时间自己手搓出来一个闲鱼已售商品查询接口,最近有时间,就把接口搞成了软件. 软件作用: 可以方便地查询闲鱼已经成交的商品信息,包括成交价格.成交时间.挂单后多少天成交(成交效率).以及商品信息,包 ...

最新文章

  1. c语言动态链表creat函数,用create建立动态链表
  2. Scala Implicit
  3. ADO.NET知识要点
  4. leetcode404. 左叶子之和
  5. 位运算java_Java中的位运算
  6. Eclipse中SVN过滤指定文件夹或文件下内容
  7. 生成5个不同的随机数
  8. 矩阵交换行(信息学奥赛一本通-T1119)
  9. 14个jQuery图片放大编辑插件汇总
  10. 项目以任务还是以功能为中心?
  11. 《恋上数据结构第1季》动态数组实现栈
  12. 利用swoole coroutine协程实现redis异步操作
  13. matlab2c使用c++实现matlab函数系列教程-sort函数
  14. 『信息安全技术』 标准系列合集(467个)
  15. 升级opengl和显卡驱动_到底用不用更新显卡驱动
  16. bilibili弹幕获取api
  17. 苹果手机语音备忘录在哪_真没想到!苹果手机还自带语音记录,按下这个按钮,语音秒变文字...
  18. Maven resources compiler: Maven project configuration required for module ‘XXX‘ isn‘t available.
  19. 前端程序调试方法总结--高级版
  20. 数据对接利用hutool工具类进行xml解析,xml转换成map,然后进行数据入库

热门文章

  1. 如何将Excel单元格内逗号分隔的内容放到多个列
  2. VMware vSphere vCenter 安装部署(VCSA 6.7)
  3. linux如何查看kafka消息队列,kafka以及消息队列详解
  4. newff函数的使用——BP神经网络
  5. 动态规划+深度优先搜索+记忆化搜索(干货满满)
  6. 怎么从ST官网下载资料
  7. 【译】Delta Lake 0.5.0介绍
  8. c语言中怎么表示多次方?
  9. 2009上半年全国计算机技术与软件,关于2009年上半年全国计算机软件专业技术资格和水平考试有关问题的通知...
  10. JavaScript中的赋值运算符 =