Answers:
正如其他人所说,只要上拉电阻,时钟频率等,SPI和I2C可以在很长的距离上使用。
RS485和CAN是主要的替代产品(具有更好的抗噪能力)。两者都使用差分线,以最大程度地减少噪声问题,并且比I2C或SPI更适合于这种长度的数据传输。但是,我认为没有太多(任何一个)AVR带有内置的CAN外设,这使CAN的使用更加容易。
我要说的是,选择总线时要考虑的最重要的事情是确保用于设备之间通信的协议包括CRC或等效协议,以便您可以确定是否已正确接收消息(CAN将其作为消息的一部分)。数据包)。考虑到这一点,将ACK / NACK类型的响应作为协议的一部分也是有用的,以便可以重新传输损坏的消息。
几英尺应该没有问题,如果可以的话,请使用双绞线。SPI比I2C更容易缓冲(如果需要),因为SPI信号都是单向的,而I2C的信号在共享线路上。
AVR微控制器可以处理I2C和SPI从模式以及主模式吗?(您都需要)
对于长距离的I2C,您可能需要寻找一些“ I2C总线中继器”解决方案。请记住,对于I2C或SPI通信可能找到的最大距离主要是指总总线距离,而不是总线中两个节点之间的距离。
您可能需要研究RS485来解决这些问题。这是一种串行总线协议,可通过差分线路进行通信,因此,在使用双绞线时,噪声的机会会最小化。这样可以达到很长的距离。缺点是您的电路中需要一个额外的RS485编码器IC(例如MAX485,但价格并不昂贵)。
与I2C相比,尚未提及SPI的一个优势是所有SPI线都是单向的,并且始终被驱动为高电平或低电平。与I2C相比,这可以实现更快的通信,降低了对噪声的敏感性,并允许将简单的门用作转发器。另一个有用的选择是简单的异步通信(每个方向一根线)。我可以看到异步通信的唯一缺点是,它通常要求双方在保持时钟稳定的情况下保持“清醒”状态以交换数据。
对于我自己的项目,我使用了3线稍微修改的SPI协议,并且发现了令人满意的结果。我以10mbps的速率发送显示位图数据(偶尔的数据损坏不会有什么大不了),而以2.5mbps的速率发送其他数据则没有困难。