c - 通过 SPI 进行 Pic to Pic 通信

标签 c embedded microcontroller pic spi

我试图通过 SPI 通信让 PIC1 成为主机,PIC2 成为从机。我想从 PIC1(master)发送命令到 PIC2(slave),然后让它做一些事情。但是,我也想通过 SPI 通信建立从 PIC2(从)到数字电位器 (MCP4241) 的另一个 SPI 通信。这行得通吗?

举例说明:

PIC1 发送 'a' ----> PIC2 读取它

PIC2 ---->与数字电位器(MCP4241)建立连接

PIC2 ---->向数码锅发送数据

所以 PIC1 和 PIC2 之间会有 SPI 通信,然后是 PIC2 和数字电位器,我只是不知道这是否可行,因为我需要使用相同的引脚。对于这两个 PIC,我使用的是 pic16f690。

我希望我的问题很清楚,如果这不起作用,我该如何解决?

谢谢!

最佳答案

首先,为了方便起见,我建议为 PIC2 使用带有 2 个 SPI 端口的 PIC。

但是,如果您确定只想使用一个 SPI 端口有时作为主机,有时作为从机,那么要记住的是,您真的不希望两个 PIC 都尝试驱动串行线同一时间。您可能必须编写 TRIS 寄存器以使端口三态变为高阻态并禁用 spi 外设。

  • 如果你放入一些串联电阻器,那么事情就不会那么糟糕了,例如pic1 试图将 SCLK 驱动为高电平,而 pic2 试图将其驱动为低电平,那么从 pic1 流向 pic2 的电流将受到限制

  • 您可以使用额外的 GPIO 来允许 pic2 在忙时通知 pic1。您需要清楚地了解 2 台设备之间的执行流程,以免陷入竞争条件等问题

  • 例如你可以有一个流

  • pic1向pic2发送'write pot please'命令
  • pic1知道等待忙音
  • 然后 pic2 断言忙信号
  • pic1 看到忙信号,知道现在要等待它清除,然后再开始另一个 spi 事务
  • pic2与pot做spi交易
  • pic2 清除忙音
  • pic1看到busy信号已经清除,知道可以做spi交易了
  • pic2 不会尝试任何 spi 交易,直到它得到另一个“请写锅”

有很多方法可以实现类似的功能。重要的是在开始实现之前清楚地知道流程将是什么

关于c - 通过 SPI 进行 Pic to Pic 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22901424/

相关文章:

c - 另一个大小的数组

c - 通过命令行在Cygwin环境中启动C程序

c - 构建 USB 外设

linux - USB 设备枚举失败 : "device descriptor read/64, error -32"

c - 如何使用 C 在嵌入式系统中发出蜂鸣声?

c - C 中的红黑树删除故障

c - 程序不响应终端发送的 linux 信号而无需在终端上连续打印

c - 如何使用 resolve MISRA C error for assembly language inline function?

caching - 在哪些应用程序中缓存没有任何优势?

c++ - 递归函数中在堆上分配与在堆栈上分配