为什么芯片上的所有管脚都不是GPIO?
Why all the pins on a chip are not GPIOs?
Linux 中的 GPIO 文档指出:
A "General Purpose Input/Output" (GPIO) is a flexible software-controlled
digital signal. They are provided from many kinds of chip, and are familiar
to Linux developers working with embedded and custom hardware.
如果我们能够控制引脚的行为,那么为什么芯片上的所有引脚都不是 GPIO?
或
我们如何通过软件为芯片上的引脚提供功能?
请说明。
SOC中的所有管脚都不是GPIO。映射为 GPIO 的一组特定引脚。其他引脚配置用于特定接口,如 DDR、SPI、I2C 等,包括时钟、数据和电源引脚。 GPIO 是通用引脚,可根据用户要求用于任何目的。它可用于处理 IRQ、触发复位、发光 LED 等。
例如,假设 FPGA 通过 GPIO 连接到 SOC。用户需要通过这些 GPIO 引脚对 FPGA 进行编程。在 SOC 端,用户需要编写具有上述序列的特定程序来驱动这些 GPIO 以对 FPGA 配置文件进行编程。
当你设计一个集成电路(芯片)时,你在设计时会考虑到一些组件模型,这些内部组件可能有特定的需求,不能在不同的管脚之间重新分配,那么这些管脚就是固定功能。
例如与内存控制器相关的管脚有非常严格的性能要求集(在信号完整性、切换速率、输出驱动器、电容方面),这些管脚是固定功能不可重新分配的,因此您不能使用这些管脚对于通用输入输出口。如果这样做,您将以较慢的芯片结束,因为附加电路会改变这些值变得不可行。其他示例是电源域引脚(通常称为 VCC、VDD、VEE、GND)。
这就是为什么 GPIO 引脚总是与 SPI、I2C、SMBUS 等慢速接口共享,但从不与 SATA、DDR 等快速接口共享。
在其他情况下,唯一的原因是因为芯片没有特定组件就没有意义,例如,假设您必须有 RAM 内存,那么 RAM 专用引脚不需要重新分配,因为您永远不会实现该系统没有 RAM 内存,永远不需要将这些引脚重新用于 GPIO
Linux 中的 GPIO 文档指出:
A "General Purpose Input/Output" (GPIO) is a flexible software-controlled digital signal. They are provided from many kinds of chip, and are familiar to Linux developers working with embedded and custom hardware.
如果我们能够控制引脚的行为,那么为什么芯片上的所有引脚都不是 GPIO?
或
我们如何通过软件为芯片上的引脚提供功能?
请说明。
SOC中的所有管脚都不是GPIO。映射为 GPIO 的一组特定引脚。其他引脚配置用于特定接口,如 DDR、SPI、I2C 等,包括时钟、数据和电源引脚。 GPIO 是通用引脚,可根据用户要求用于任何目的。它可用于处理 IRQ、触发复位、发光 LED 等。
例如,假设 FPGA 通过 GPIO 连接到 SOC。用户需要通过这些 GPIO 引脚对 FPGA 进行编程。在 SOC 端,用户需要编写具有上述序列的特定程序来驱动这些 GPIO 以对 FPGA 配置文件进行编程。
当你设计一个集成电路(芯片)时,你在设计时会考虑到一些组件模型,这些内部组件可能有特定的需求,不能在不同的管脚之间重新分配,那么这些管脚就是固定功能。
例如与内存控制器相关的管脚有非常严格的性能要求集(在信号完整性、切换速率、输出驱动器、电容方面),这些管脚是固定功能不可重新分配的,因此您不能使用这些管脚对于通用输入输出口。如果这样做,您将以较慢的芯片结束,因为附加电路会改变这些值变得不可行。其他示例是电源域引脚(通常称为 VCC、VDD、VEE、GND)。
这就是为什么 GPIO 引脚总是与 SPI、I2C、SMBUS 等慢速接口共享,但从不与 SATA、DDR 等快速接口共享。
在其他情况下,唯一的原因是因为芯片没有特定组件就没有意义,例如,假设您必须有 RAM 内存,那么 RAM 专用引脚不需要重新分配,因为您永远不会实现该系统没有 RAM 内存,永远不需要将这些引脚重新用于 GPIO