带有 nRF24L01+ SPI 的 Tiva C 系列始终返回 STATUS 寄存器
Posted
技术标签:
【中文标题】带有 nRF24L01+ SPI 的 Tiva C 系列始终返回 STATUS 寄存器【英文标题】:Tiva C series with nRF24L01+ SPI always returns the STATUS register 【发布时间】:2015-07-15 15:47:33 【问题描述】:我遇到了一个和这个帖子很相似的问题:TIva C Series problems with I2C Interface
我正在使用 Energia 通过 SPI 对 Tiva C 系列 TI Launchpad(TM4C123 处理器)进行编程。我想使用 nRFL01+ 芯片发送数据,但是每当我尝试读取寄存器时,它都会返回默认的STATUS
寄存器。
我知道这个寄存器信息是在每个与 nRF24L01+ 的 SPI 事务开始时发送的,所以我最初的猜测是我的MISO
/MOSI
配置有问题。为了调试这个,我将我的MISO
和MOSI
插在一起,每次都收到预期的 ping 数据。
至于测试SCK
或CSN
引脚的问题,据我所知,我需要一台我没有的示波器。
您认为这是 Energia 的软件问题吗?
【问题讨论】:
在没有示波器的情况下编写 SPI 驱动程序不是很明智。有点像在没有电脑屏幕的情况下编写源代码 :) SPI 的标准化程度很低:最值得注意的是,从设备选择机制和时钟同步/时钟相位设置往往在每个设备上都不同。最重要的是,SPI 在更高的速度下也容易出现 EMI 问题。所以你必须在某个时候用示波器检查信号并验证它。否则,当产品投入生产时,您很可能会遇到突发的错误和问题。去过那里,做到了。 【参考方案1】:在发布问题之前,我实际上已经找到了如何解决我的问题,但我认为它可能对其他人有帮助,所以我还是发布了它,我会写下我是如何解决它的。
基本上,我认为CSN
引脚在传输每个字节时先切换为低电平,然后再切换为高电平,即使 nRF24L01+ 芯片需要它保持低电平以使多个字节正确传输信息。我没有使用默认的CSN
引脚,而是随机使用了另一个引脚,并在传输字节之前和之后自行切换。
我认为这是 Energia 中 SPI.transfer
例程的问题,虽然我还没有找到它(深入研究 SPI 库以向 Energia 提出补丁可能非常有趣,但这对我来说太复杂了瞬间)。
【讨论】:
您应该阅读MCU的参考手册(或用户指南)。 SPI 模块中可能有一个配置位,它改变了 TI 和摩托罗拉(原文如此!)模式之间的 nSS 行为。自动具有此行为也可能是不可能的,因此您必须手动处理该信号。但是,MCU不允许使用相同的引脚(GPIO功能)吗? 我认为 SPI 通信依赖于 nSS/CSN 引脚在整个交易过程中保持低电平,无论您正在与之交谈的模式或芯片如何。如果这是真的,那么我想毫无疑问代码中存在错误。我检查了引脚映射 (energia.nu/wordpress/wp-content/uploads/2014/01/…),它显示有许多 I2C 和 UART 引脚有时与 SPI 引脚复用,因此它可能是错误的根源。为了回答您的问题,我确实尝试在选择随机引脚之前手动切换专用 CSN 引脚。 啊,在阅读这个答案之前,我已经在上面的评论中写道:“最值得注意的是,从属选择机制......在每台设备上往往都不同”。您遇到的这个问题是 SPI 的经典问题。与 UART、CAN 等不同,没有 SPI 标准告诉它应该如何表现! (甚至 SPI 的名称都没有标准化。) SPI 硬件中通常有一个自动设置,它仅在时钟输出期间将选择线拉低。但有些设备需要将选择线拉下的时间比这更长,在这种情况下,您必须手动切换它。 谢谢你们俩!这很有帮助!以上是关于带有 nRF24L01+ SPI 的 Tiva C 系列始终返回 STATUS 寄存器的主要内容,如果未能解决你的问题,请参考以下文章
STM32F1基于STM32CubeMX配置硬件SPI驱动nRF24L01数据收发