nRF24L01芯片驱动记录

​ 学习完了usb,了解了部分元器件的功能以及用途后,打算在端午假期用一天的时间完成一个小目标,不过实际上是花了一天半才成功实现,现将驱动nRF24L01芯片的整个过程记录下来。

小目标

驱动nRF24L01芯片,实现nRF24L01芯片之间的通讯

在淘宝问客服找驱动代码

​ 这个过程一言难尽,一开始因为贪便宜,我买芯片的店铺不是官方店铺,属于私营的店铺,卖的东西也很杂。虽然便宜了几块钱,但是资料相对来说会不全,而且比较老旧(都是10年11年的代码),在商家描述里面,资料里面有上位机,我把整个压缩文件翻了一遍又一遍,我找了半天也找不到,后面去问客服,客服说稍等技术现在没有空,过了半个小时再问,客服说技术已经下班了,让我明天再问。当时就差点和客服吵起来了。

​ 后面自己去别的淘宝店铺那里蹭到了上位机的下载链接,这样我的nRF24L01的一端可以用电脑来代替,而且确保没有错误。我只需要在mcu上实现nRF24L01的收或者发,另一端在上位机进行发和收就可以进行通讯了。

​ 后面整理了一下客服的驱动代码,没有一个是我可以直接拿来用的,而且驱动代码的芯片都是10年11年的老芯片,我个人觉得为了学一个驱动去学习一款过时的芯片在时间成本和收益上都很不理想,所以我也没去看源码,只是大概的看了一眼。

在github上找驱动代码

​ 最后我是在github上找到了我这个芯片的驱动代码,不过也是很久之前的代码,不过写的也是比较好的,虽然也是十多年前的代码,但是和淘宝客服给的资料完全不是一个档次的,这个代码就像之前技术总监给我的ST7789的驱动库一样,直接include进来,自己配置一些GPIO就可以直接拿来用了,而mcu和nRF24L01之间的通信完全不需要我操心和了解,直到现在目标完成了,里面的源码我也只是看了70%。

配置GPIO,初次失败

​ 当配置好GPIO之后,我就直接上电运行,不出我的所料,第一次失败了(当时也没想着能成)。

配置地址,第二次失败

​ 然后开始看main函数,从初始化到配置到通讯,都看了然后发现地址码需要进行配置,我就开始配置RX_address和TX_address,配置完上位机的地址之后,在工程里面配置地址。配置完地址之后我就开始了第二次的上电测试,不过还是失败了。

配置参数,第三次失败

​ 这时候我发现了中文手册里面有很多东西都是不全的(仅仅只有26页),于是就开始打开了英文手册(有78页!),配合着中文手册和有道翻译来食用,读完英文手册之后,我发现有很多的配置是需要收发端一一对应的,并不是用一台nRF24L01设备发出信号另一台nRF24L01设备就可以直接读取到。

​ 虽然他们都是基于2.4Ghz的频段,但是2.4Ghz频段里面有很多子频段,而且还有通讯速率什么的。于是我兴冲冲的配置完了,心里想着这一次,总算能成功了吧。但是现实还是给了我当头一棒,还是通讯失败了。这时候第一天已经接近尾声,不过我觉得已经离真相越来越近了。

抓取上位机数据,第四次失败

​ 这时候我想着用逻辑分析仪抓取nRF24L01插入电脑那一刻的初始化数据,看看他是怎么配置的,然后在我的工程项目里面使用一样的配置。在抓取数据的时候我发现,有一些参数的配置,居然在上位机里面已经写死了(比如RX payload上位机写死的是32个字节),而我的工程项目里面是2个字节。修改完之后进行上电运行,结果还是失败了。

抓取mcu数据,终于成功了!

​ 后面我再抓取mcu的数据,发现我的RX地址和TX地址好像设置反了,于是进行修改,终于成功了。

坑点总结

以下是这两天踩坑的一些总结:

  • 最好选芯片的官方店铺,这样售后的服务和样例代码能得到保障
  • github / CSDN上面也有不错的样例代码,有的时候可以花一点时间来找一下,如果找到了会达到事半功倍的效果。如果我自己写SPI驱动nRF24L01,我需要配置SPI,而且我也不知道他们通讯的具体过程是什么样的,这样我可能需要花大量时间来阅读整整78页的英文手册来寻找答案,而且直到了通讯过程,通讯过程的实现也不一定正确。而且时间开销也会很大。
  • 中文手册可能是最简单易懂的,但是大概率不是最准确详细的。有中文手册的话可以先看中文手册,看完之后再花2分钟时间大概过一下英文手册,知道英文手册中有哪些东西是中文手册没有的,这时候需要用的时候就可以针对性的去看英文手册了,而且在看过中文手册的情况下,读英文手册看过的部分也会轻松不少(对于我这种英语不太好的人来说)。
  • 当自我感觉配置已经好了的时候,用逻辑分析仪抓取发送端和接收端的配置,检查是否符合预期

nRF24L01芯片驱动记录的更多相关文章

  1. nRF24L01芯片控制——迈向无线的第一步

    nRF24L01芯片是一款专供单片机的射频收发芯片.工作于2.4GHz~2.5GHz ISM频段.融合了shockburst技术. 我先列出该芯片的硬件参数资料: 至于每个引脚的具体用途,可以参见技术 ...

  2. 基于335X平台的UBOOT中交换芯片驱动移植

    基于335X平台的UBOOT中交换芯片驱动移植 一.软硬件平台资料 1.开发板:创龙AM3359核心板,网口采用RMII形式. 2.UBOOT版本:U-Boot-2016.05,采用FDT和DM. 3 ...

  3. 绿联Type-C千兆网卡AX88179芯片驱动(苹果Mac OSX系统)CM141丨CM179

    绿联Type-C千兆网卡AX88179芯片驱动(苹果Mac OSX系统)CM141丨CM179 下载地址:https://www.lulian.cn/download/6-cn.html AX8817 ...

  4. 基于335X平台Linux交换芯片驱动开发

    基于335X平台Linux交换芯片驱动开发   一.软硬件平台资料 1.开发板:创龙AM3359核心板,网口采用RMII形式. 2.Kernel版本:4.4.12,采用FDT 3.交换芯片MARVEL ...

  5. STM32L431驱动带UC1698芯片调试记录

    1, 数据线连接方式,这次使用的是8080格式的接口,如下 2. 主要是信号和数据引脚 DATA0-DATA7  并口的数据 RST 复位信号 WR 写信号 RD 读信号 C/D 数据还是命令 CS片 ...

  6. Linux编译安装RTL8192CU芯片驱动,使用TP_LINK wn823n无线网卡

    前几天给自己的台式电脑安装了Window 7+CentOS 6.4 Linux双系统,发现在Windows 7下面可以正常使用TP_LINK wn823n无线网卡来连接无线网络,但是在Linux下面, ...

  7. RDA5820收音机芯片驱动

    RDA5820 是北京锐迪科推出的一款集成度非常高的立体声 FM收发芯片.该芯片具有以下 特点:   FM 发射和接收一体   支持 65Mhz~115Mhz的全球 FM接收频段,收发天线共用. ...

  8. Ubuntu16.04下安装显卡驱动记录

    安装环境及硬件信息 Ubuntu16.04 LTS 内核版本:4.4.0 显卡:Nvidia GeForce GTX 1060 安装过程 一.首先要下载好显卡驱动程序,官方网址:http://www. ...

  9. mcp2515 芯片驱动总线错误BUG的解决方法

    http://blog.renren.com/share/221002615/11483613167 来自张涛的日志 现象:CAN总线在线上设备热插拔或长时间运行后出现总线异常情况,有时不能发送和接收 ...

  10. Linux芯片驱动之SPI Controller

    针对一款新的芯片,芯片厂商如何基于Linux编写对应的 SPI controller 驱动? 我们先看看 Linux SPI 的整体框架: 可以看到,最底层是硬件层,对应芯片内部 SPI contro ...

随机推荐

  1. PHP+Redis 实例【一】点赞 + 热度

    前言 点赞其实是一个很有意思的功能.基本的设计思路有大致两种, 一种自然是用mysql(写了几百行的代码都还没写完,有毒)啦 数据库直接落地存储, 另外一种就是利用点赞的业务特征来扔到redis(或m ...

  2. Docker通信全视角:原理、实践与技术洞察

    本文全面深入地探讨了Docker容器通信技术,从基础概念.网络模型.核心组件到实战应用.详细介绍了不同网络模式及其实现,提供了容器通信的技术细节和实用案例,旨在为专业从业者提供深入的技术洞见和实际操作 ...

  3. [oeasy]python0007-Guido的简历

    ​ 执行 esc 退回到正常模式 ​ 编辑 esc退出插入模式 准备底行命令模式运行当前py文件 保存执行 ​:w|!python3 %​ 保存并用 python3 解释当前程序(%) ​ 编辑 可以 ...

  4. 【Kafka】03 Shell 操作

    查看Kafka主题列表 $KAFKA_HOME/bin/kafka-topics.sh \ --zookeeper centos7-02:2181,centos7-03:2181,centos7-04 ...

  5. 【C】Re05 指针

    一.变量 & 指针 变量 = 内存地址 + 存储值 指针变量 = 内存地址 + 存储值[变量的内存地址] 作用: 间接访问内存地址 内存地址 = 地址编号 地址编号:内存中的每个字节唯一的编号 ...

  6. 并行化强化学习 —— 最终版本 —— 并行reinforce算法的尝试

    本文代码地址: https://gitee.com/devilmaycry812839668/final_-version_-parallelism_-reinforce_-cart-pole 结合了 ...

  7. mindspore.ops.Pow()等算子不能处理float64类型的数据

    原文地址: https://gitee.com/mindspore/mindspore/issues/I3ZG99 Software Environment: -- MindSpore r1.2 GP ...

  8. TensorFlow中的int32_ref、float32_ref类型

    在用TensorFlow_1.14.0中发现数据类型的显示带有 _ref : x1=tf.Variable([1, 2, 3])x2=tf.Variable([1.0, 2.0, 3.0]) 也就是说 ...

  9. 关于Mongodb索引创建的一些体会

    mongodb索引分类以及创建我就不多说了,如果想了解可以直接在百度上搜索,这里我说一下关于索引创建的个人想法. 1.优先给一些Id类字段添加索引,查询时可以缩小扫描范围. 2.创建联合索引时,索引字 ...

  10. Telegram第三方登录步骤

    网上看到的不多,简单做个记录,本文主要对下面的文章做补充 Telegram(电报)授权登录(web)第三方 整体步骤为: 找 botFather 创建机器人 给机器人设置域名白名单,用于设置回调地址, ...