问题描述
平台介绍
Button-RF24项目:采用华大M0核MCU HC32L130 + 安信可RF模块NF-03(SI24R1国产方案 声称兼容NRF24L01)
使用Keil-MDK IDE开发环境,CMSIS-DAP 调试器
代码仓库地址git-button
测试板Button-RF24
Button-RF24 check函数波形,明显是MISO没有返回数据,IRQ也一直为低
代码分支号dcd7920
动作:Button-RF24 去掉NF-03模块
抓取到的波形没有变化,说明当前的MCU SPI配置或者NF-03模块坏掉
原因分析
MCU配置问题
当前是使用的SPI接口来配置:CPOL=0,CPHA=0,参照的SI24R1的SPI读写要求
当前配置代码为
static void App_SPIInit(void)
{
stc_spi_cfg_t SpiInitStruct;
Sysctrl_SetPeripheralGate(SysctrlPeripheralSpi0,TRUE);
//SPI0模块配置:主机
SpiInitStruct.enSpiMode = SpiMskMaster; //配置位主机模式
SpiInitStruct.enPclkDiv = SpiClkMskDiv2; //波特率:fsys/16
SpiInitStruct.enCPHA = SpiMskCphafirst;//第一边沿采样
SpiInitStruct.enCPOL = SpiMskcpollow; //极性为低
Spi_Init(M0P_SPI0, &SpiInitStruct);
}
NF-03模块自身问题
在排除物理连接性问题后,可能的是模块自身的问题,但是该可能性较低。
调试尝试:改为IO模拟SPI
原代码使用SPI控制器通信,改为IO模拟测试,排除MCU自身的bug(毕竟国产MCU)
改动后的代码分支c470a24
依旧是同样的现象
调试尝试:更换RF模块
原本设计是使用安信可的贴片式模块NF-03(用的国产RF芯片SI24R1),更换了2个模块同样的现象,然后换了插件式模块NF-01-S,
check函数波形如下,MISO已经有数据了,IRQ也正常,说明模块有问题
代码分支没变c470a24
上图是采用GPIO模拟SPI通信的结果,通过宏开关改回SPI控制器通信,结果也一致ok,再次说明了非MCU bug,而只是运气不好碰到坏的模块了。
总结
同样的安信可的国产SI24R1方案,NF-01-S(插件)和NF-03(贴片,尺寸要小),居然批次性坏的问题(换了3个都一样)。