【问题标题】:Microcontroller to Microcontroller SPI communication微控制器到微控制器 SPI 通信
【发布时间】:2011-02-24 15:31:43
【问题描述】:

我正在阅读,甚至在我的微控制器上获得了一个“主”SPI。这是我的问题,基本上如果主机想要初始化写入我们写入 SSPBUF 的从机,我们如何控制从机响应什么?在这种情况下,数据表对我来说似乎并不清楚事件的顺序。

I.E. Master将一个char放入SSPBUF,这会启动SPI模块向从机发送数据,在移位期间,从机返回一个字节。

在从机端,有没有什么东西告诉你有传入数据,你可以先写入你的 SSPBUF,然后接受数据?

您是否必须先向 SSPBUF 写入您想要发回的第一个“返回值”,然后主机才有机会发起传输?

【问题讨论】:

    标签: microcontroller pic spi microchip


    【解决方案1】:

    您想在处理从机芯片选择的 GPIO 线上使用中断。确保从机有足够的时间处理此中断并在时钟开始之前加载输出数据寄存器。

    某些 SPI 模块无法使用 GPIO - 您需要检查您的 SPI 模块是否具有处理芯片选择的功能,或者仅根据 GPIO 活动启用模块。

    【讨论】:

    • 实际上看这个答案在重新讨论这个话题后似乎很有意义,如果我只是等到我看到一个chipselect hi,然后我将数据传递给buff,那么我应该准备好了为数据。我得试试看。
    【解决方案2】:

    通常我过去使用 SPI 所做的事情是,我从主机向从机发送 2 个字节,中间的延迟最小。主机发送:“X Y”,其中“X”是它希望从从机读取的变量,而“Y”实际上只是一个虚拟变量,用于输出从机的响应。同时,slave 在收到“X”时会获得一个中断,查找要放入其输出缓冲区的值,当它收到“Y”时,对其数据包的响应被计时输出给 master。

    【讨论】:

      【解决方案3】:

      无论您的微控制器是什么,三个都可能是与接收 SPI 数据相关的 ISR,以及一个寄存器,在该寄存器中可以访问已接收的数据并将其复制到局部变量中。

      【讨论】:

      • 有,但它只表示传入的数据,我遇到的问题是我不知道如何确保在主服务器启动之前我在从服务器中拥有我想要的数据回复。或者对于发生的每次传输,我想我已经解决了它,但现在偶尔会出现计时问题,但是我没有读取通道的主端,因为我已经连接了从站,但我会报告回来当我发现更多信息时。
      【解决方案4】:

      首先你需要确认你的master和slave的SPI模式和数据大小等参数有共同的值。 SPI 模式将决定 SPI 时钟线的空闲极性和数据采样沿是第一个还是第二个。数据大小会告诉它是 8 位还是 16 位,或者可能因芯片而异。

      现在,当主机通过芯片/从机选择引脚选择从机时,从机变为活动状态并等待时钟改变其状态,一旦时钟改变状态,从机根据 SPI 模式选择再次等待时钟线的第一个或第二个边沿。如果它是第一个沿从机采样 MOSI 线数据并放入它的内部移位寄存器,如果从机也必须发送数据,它必须在所选时钟沿之前将数据保存在 MISO 线上。 根据数据大小,此过程将重复 8 或 16 次。完成后,主机和从机可以向它们的 CPU 产生中断以收集数据(在微控制器的情况下)。

      【讨论】:

        猜你喜欢
        • 2015-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-09
        相关资源
        最近更新 更多