24小时联系电话:18217114652、13661815404
中文
行业资讯
SPI与I2C:如何为您的存储芯片选择最佳协议
SPI与I2C:如何为您的存储芯片选择最佳协议
SPI和I2C可能是最常用的数字协议,用于连接各种产品中的集成电路。SPI和I2C都是易于使用、难以破解的串行数字协议,从信号完整性的角度来看,它们很容易路由。与阻抗控制的高速差分串行协议不同,这两种协议没有阻抗规范,通常被认为是电气短路的。这意味着,在PCB上,设计要求相对简单,并且在标准中仍有一些自由度可以根据需要调整性能。
PCB布局中SPI和I2C的常见实现之一是作为用于读取和写入外部闪存的协议。闪存芯片是嵌入式系统中非常常见的组件,可以提供高达Gb值的高容量非易失性存储器。选择内存芯片时,您需要将应用程序要求和功能与内存芯片中读写操作所需的总线速度相匹配。还有您需要访问的闪存类型的问题(NOR与NAND)。
SPI和I2C比较
串行外设接口(SPI)和内部集成电路(I2C)协议都是以低速到中速运行的简单串行数字协议。这两个接口有一些共同的特点:
他们使用不止一根线来发送/接收数据
时钟是源同步的,这意味着只有一条走线承载时钟线
总线上的其他芯片是可寻址或可切换的
大多数微控制器将集成其中一个或两个接口
信号电平可以通过给芯片的核心电压来设置
这些接口都没有阻抗要求
显然,这些接口非常相似。它们确实有一些重要的区别,如下表所示。
|
I2C |
SPI |
网名 |
- 串行数据(SDA) - 串行时钟(SCL) |
- 主输入,从输出(MISO) - 主输出,从输入(MOSI) - 串行时钟(SCK或SCLK) - 片选(CS,可选) |
拓扑 |
- 广播总线拓扑 |
- 共享味噌/MOSI/SCK - CS引脚的星号 |
数据速率 |
- 标准模式:高达100 kbps - 快速模式:高达400 kbps - 快速模式加:高达1 Mbps - 高速模式:高达3.4 Mpbs |
- 由时钟窗口时间固定,最高可达60Mbps |
上升/下降时间 |
- 取决于总线电容和上拉电阻值(使用RC时间常数) |
- 指定给定负载阻抗 |
寻址 |
- 固定在每个组件上的地址引脚 |
- 主控制器中用于切换芯片的CS引脚(可通过GPIO或专用CS引脚切换) |
方向性 |
- 半双工 |
- 全双工 |
信号驱动 |
- 开漏 |
- 推挽式(带CMOS缓冲器) |
与I2C相比,SPI标准提供更高的数据速率并且可以以更快的边沿速率运行。由于在I2C上使用上拉电阻、通常较高的总线电容以及驱动方法是开漏极的事实,I2C总线的上升时间可以达到100纳秒。对于驱动低负载电容的高级组件,SPI总线的上升时间可以低至1 ns ,这意味着它们在切换期间可能会出现瞬态振铃。SPI线路也更容易产生串扰,因为它们的开关速度非常快。要了解有关SPI总线中这两种协议和信号完整性的更多信息,请阅读以下资源。
为存储芯片选择SPI和I2C时的重要考虑因素
访问NAND与NOR闪存
在本节中,我不想深入讨论NAND与NOR闪存的细节,而是想关注如何使用串行协议访问它们。如果您可以采购正确的内存组件,则可以使用SPI或I2C总线访问这两种类型的闪存芯片:
NOR闪存 -绝大多数使用SPI访问,即使在更小和更慢的闪存芯片上也是如此。可以使用I2C访问速度较慢的芯片。
NAND闪存 -绝大多数使用并行总线访问,但具有I2C和SPI总线的芯片数量大致相等。
如果您查看Octopart并使用过滤器功能,您将能够找到一些使用任一接口的高容量存储器。
用于存储器的I2C到SPI接口桥接
如果需要在I2C和SPI接口之间进行转换,可以使用接口桥接器。这些组件在这些接口之间转换数据格式,因此可能只有SPI总线的组件可以访问只有I2C总线的外围组件。这包括内存芯片,但如果控制器仅使用I2C并且内存使用SPI,则速度可能会受到限制,并且接收组件可能由于上升时间长而无法工作。
要克服I2C的这一限制,最好使用带SPI的控制器,然后使用接口桥访问只有I2C的外设。请注意,SPI端的时钟必须更低,以确保它可以在I2C速度下使用。这将在以下拓扑中完成:
需要SPI到I2C接口桥接器的首选配置。
电平转换
开漏和推挽串行协议(其中信号电平由内核电压设置)中的另一个常见要求是电平转换。构建PCB的最简单方法是使用调节到所需核心电压的单个电源,例如使用LDO。实际上,您可能有一些外围设备在较高电压下运行(例如3.3 V),而主控制器在较低电压下运行多个轨(2.5 V、1.8 V等)。如果您的MCU以3V3运行,但您的内存以 1V8运行(这是一种常见情况),那么您将需要通过电平转换器路由SPI或I2C信号。请注意,一些接口桥将包括一个电平转换器,连接到两个电源轨;拓扑如下图所示。
用于电平转换的拓扑。
一旦您为您的设计找到了组件,您如何在SPI与I2C接口之间做出选择?以下几点将推动您做出决定:
速度:当您批量传输数据或有一个狭窄的窗口来验证用户输入与存储在内存芯片中的数据时,每一微秒都很重要。如果系统的其余部分需要实时重复读写功能,请使用SPI。如果控制器只需要偶尔从内存读取或写入,则使用I2C。
控制器:如果您使用的是非常小的MCU或外围设备,并且可用的引脚很少,那么您应该使用I2C。事实上,对于某些微控制器,您可能别无选择。例如,经典的ATTiny MCU 只有I2C,因此如果它们需要来自外部存储器的数据,则必须找到支持I2C的存储芯片。
电源:如果您正在设计需要重复访问数据的电池供电设备,您可能会选择SPI,因为该接口的平均功耗低于I2C接口。