c - 与 2 个具有不同 spi 模式的设备的 Spi 连接

标签 c eclipse optimization arduino spi

我有两个不同的设备要连接 Arduino .一个Ethernet屏蔽和轴编码器。第一个有 SPI模式 0 和第二个 SPI 模式 2。它们冲突。这个问题有解决方案吗?

我使用不同的芯片选择引脚,这两个设备单独工作时非常完美。

我该怎么做才能解决这个问题?有没有我想念的教程?

最佳答案

您可以根据需要在两个片选之间共享 SPI,每个片选都有自己的模式。我这样做。只需为指定 SPI 完整配置的每个片选编写一个帮助函数来代替 digitalwrite。

void cs1_low() {
    SPI.setDataMode(SPI_MODE0);
    SPI.setClockDivider(spiRate);
    digitalWrite(MP3_XCS, LOW);
}

void cs2_low() {
    SPI.setDataMode(SPI_MODE1);
    SPI.setClockDivider(spiRate/2)
    digitalWrite(MP3_XCS, LOW);
}

...

cs1_low();
foo = SPI.transfer(bar);
cs1_high(); //Deselect Control

...blah blah...

cs2_low();
foo = SPI.transfer(bar);
cs2_high(); //Deselect Control

在某些情况下,您可能需要考虑结算。我在 SD cards 之间使用这个和其他不一样的芯片。

最好不要假设 SPI 处于您想要的模式,因为不同的库或中断可能已经改变了它。我见过很多次模式相同,但SD卡和其他卡之间的速度不同。导致“开始的时候很好,但后来我得到了垃圾”。

关于c - 与 2 个具有不同 spi 模式的设备的 Spi 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16780376/

相关文章:

C - 声明时未声明的变量

谁能把这个翻译成Python?

c++ - 如何从字符串中解析欧元符号?

从 Eclipse 运行时不显示 Java JFrame 窗口

Swift - 如何在一群人之间平均分配一笔钱?

php - 极慢的 MySQL 查询

c - main 的多重定义首先在这里定义

c - 层次树打印所有后缀提供错误的输出

java - 使用 Ubuntu 13.04 桌面在 Nexus 7 上运行 Eclipse

java - 编译器有区别吗 - java