学习完了usb,了解了部分元器件的功能以及用途后,打算在端午假期用一天的时间完成一个小目标,不过实际上是花了一天半才成功实现,现将驱动nRF24L01芯片的整个过程记录下来。
驱动nRF24L01芯片,实现nRF24L01芯片之间的通讯
这个过程一言难尽,一开始因为贪便宜,我买芯片的店铺不是官方店铺,属于私营的店铺,卖的东西也很杂。虽然便宜了几块钱,但是资料相对来说会不全,而且比较老旧(都是10年11年的代码),在商家描述里面,资料里面有上位机,我把整个压缩文件翻了一遍又一遍,我找了半天也找不到,后面去问客服,客服说稍等技术现在没有空,过了半个小时再问,客服说技术已经下班了,让我明天再问。当时就差点和客服吵起来了。
后面自己去别的淘宝店铺那里蹭到了上位机的下载链接,这样我的nRF24L01的一端可以用电脑来代替,而且确保没有错误。我只需要在mcu上实现nRF24L01的收或者发,另一端在上位机进行发和收就可以进行通讯了。
后面整理了一下客服的驱动代码,没有一个是我可以直接拿来用的,而且驱动代码的芯片都是10年11年的老芯片,我个人觉得为了学一个驱动去学习一款过时的芯片在时间成本和收益上都很不理想,所以我也没去看源码,只是大概的看了一眼。
最后我是在github上找到了我这个芯片的驱动代码,不过也是很久之前的代码,不过写的也是比较好的,虽然也是十多年前的代码,但是和淘宝客服给的资料完全不是一个档次的,这个代码就像之前技术总监给我的ST7789的驱动库一样,直接include进来,自己配置一些GPIO就可以直接拿来用了,而mcu和nRF24L01之间的通信完全不需要我操心和了解,直到现在目标完成了,里面的源码我也只是看了70%。
这里有个小插曲
/* ----------------------------------------------------------------------------
* “THE COFFEEWARE LICENSE” (Revision 1):
* <ihsan@kehribar.me> wrote this file. As long as you retain this notice you
* can do whatever you want with this stuff. If we meet some day, and you think
* this stuff is worth it, you can buy me a coffee in return.
* -----------------------------------------------------------------------------/
大概内容是,你可以拿这个文件来做你想做的任何事情,如果有一天我们相遇了,你觉得我对你有所帮助的话,你可以请我喝一杯咖啡作为回报。我屁颠屁颠在淘宝找商家,网上找资源,最后在github找,找了好久好久都没找到适合的。最后终于找到了,然后看到这个版权声明,当时真的感触很深,很感动,大概只有同样经历的人才能感同身受吧。
当配置好GPIO之后,我就直接上电运行,不出我的所料,第一次失败了(当时也没想着能成)。
然后开始看main函数,从初始化到配置到通讯,都看了然后发现地址码需要进行配置,我就开始配置RX_address和TX_address,配置完上位机的地址之后,在工程里面配置地址。配置完地址之后我就开始了第二次的上电测试,不过还是失败了。
这时候我发现了中文手册里面有很多东西都是不全的(仅仅只有26页),于是就开始打开了英文手册(有78页!),配合着中文手册和有道翻译来食用,读完英文手册之后,我发现有很多的配置是需要收发端一一对应的,并不是用一台nRF24L01设备发出信号另一台nRF24L01设备就可以直接读取到。
虽然他们都是基于2.4Ghz的频段,但是2.4Ghz频段里面有很多子频段,而且还有通讯速率什么的。于是我兴冲冲的配置完了,心里想着这一次,总算能成功了吧。但是现实还是给了我当头一棒,还是通讯失败了。这时候第一天已经接近尾声,不过我觉得已经离真相越来越近了。
这时候我想着用逻辑分析仪抓取nRF24L01插入电脑那一刻的初始化数据,看看他是怎么配置的,然后在我的工程项目里面使用一样的配置。在抓取数据的时候我发现,有一些参数的配置,居然在上位机里面已经写死了(比如RX payload上位机写死的是32个字节),而我的工程项目里面是2个字节。修改完之后进行上电运行,结果还是失败了。
后面我再抓取mcu的数据,发现我的RX地址和TX地址好像设置反了,于是进行修改,终于成功了。
以下是这两天踩坑的一些总结: