TA的每日心情 | 怒 2023-7-25 22:49 |
---|
签到天数: 385 天 连续签到: 1 天 [LV.9]以坛为家II
|
玩NRF24L01时候,很多朋友反应调试模块有困难,调试不通的时候,不知道到底是芯片坏了还是收发芯片调试有BUG,现在把调试的方法一步步讲解一下,一劳永逸的解决这些问题。
分析步骤:
首先给芯片上电的时候,切记 VCC供电不要超过3.6V,否则芯片基本上报废了
(A)检查芯片是否被烧坏,烧录提供的发射(TX)代码,方法两种:
第一种,由于MISO脚的数据时读出来,所以用示波器看一下MISO脚是不是有波形,如果有,说明芯片没有被烧坏。
第二种,用SPI进行读写寄存器,如果写入的数据和读出来的数据一样,说明芯片没有问题。
(B)检查芯片发送端:
(1)从发送代码中找到
SPI_RW_Reg(WRITE_REG + EN_AA, xxxx);
SPI_RW_Reg(WRITE_REG + EN_RXADDR, xxxx);
SPI_RW_Reg(WRITE_REG + SETUP_RETR, xxxx);
把“xxxx”值改为如下值
SPI_RW_Reg(WRITE_REG + EN_AA, 0x00); // 关闭通道0自动应答
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x00); // 关闭接收通道0
SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x00); // 关闭自动重发
(2)读取STATUS和FIFO_STATUS的值,在loop函数加入
status=SPI_Read(STATUS);
fifostatus=SPI_Read(FIFO_STATUS);
如果status=0x2e,fifostatus=0x11,标志发送方成功,不成功检查硬件连接、时序等可能导致的问题,关于“status=0x2e,fifostatus=0x11”,请看芯片寄存器介绍,在此不一一解释。
(B)检查芯片接受端:
(1)发送方不要撤离,用另一块主板连上另一个NRF2401。从接收代码中找到
SPI_RW_Reg(WRITE_REG + EN_AA, xxxx);
SPI_RW_Reg(WRITE_REG + EN_RXADDR, xxxx);
把“xxxx”值改为如下值
SPI_RW_Reg(WRITE_REG + EN_AA, 0x00); // 关闭通道0自动应答
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // 接收要使能接收通道0
(2)读取STATUS和FIFO_STATUS的值,在loop函数加入
status=SPI_Read(STATUS);
fifostatus=SPI_Read(FIFO_STATUS);
如果接收方成功,STATUS和FIFO_STATUS值如下:
status=0x40,
如果NRF24L01最大支持32字节宽度,即RX_PLOAD_WIDTH=32
Fifostatus 0x12------>0x11
如果NRF24L01支持小于32字节宽度,即RX_PLOAD_WIDTH<32
Fifostatus 0x10------>0x11
(3)发送接收方都调试成功后,把之前调试“xxxx”的值恢复还原,重新编译烧录代码测试。
热门推荐:
手把手带你玩NRF24L01 |
|