我曾经多次在台式电脑主板上看到过一些类似微控制器的 GPIO 引脚,我想知道,首先,它们真的是 GPIO 吗?如果是,是否可以读取或写入它们?
答案1
普通 PC 不具备“通用引脚”意义上的 GPIO。PC 主板上的连接器(无论是内部接头还是外部端口)都是为特定功能而设计的。但是,其中一些可以重新用于您自己的目的。
PC 上最接近 GPIO 的可能是并行打印机端口,它有许多数据线和握手线。这些线有点像 GPIO 引脚,不过在方向方面灵活性较差。http://retired.beyondlogic.org/spp/parallel.htm
串行端口上的握手线也可以用作通用 IO,尽管它们的电压电平很奇怪。
并行和串行端口不像以前那么常见了,但是如果货比三家,仍然很容易找到带有这些端口的主板。
您可能还能够重新利用用于机箱 LED、按钮等的输入和输出,但我想细节将非常具体到特定的系统。
PC 使用一种基于 I2C 的总线(称为 SMBUS)来实现各种管理功能。我确信我之前曾看到过有人通过焊接电线将自己的 I2C 设备放在此总线上的报道,但我现在找不到链接。
视频端口上还有另一条 I2C 总线,用于显示器识别。您是否可以通过软件访问它取决于您使用的操作系统和视频硬件http://www.instructables.com/id/Worlds-Cheapest-I2C-I-Squared-C-Adapter/step5/Software-and-Projects/
当然还有 USB。现在有便宜的微控制器带有 USB 接口,你可以用它来连接它。
答案2
我知道这是一个老话题,但无论如何......
编写完 BIOS 代码后,我可以说每个主板都有 GPIO,它们在用户地址空间中完全可用,端口地址通常非常接近并行端口。我使用标准并行端口驱动程序为自定义主板制作了自定义驱动程序,我所要做的就是修改地址号,但我事先知道这个数字。
你能使用它们吗?这取决于编写 BIOS 的人。所有 GPIO 的状态必须在编译前设置,所有未使用的 GPIO 都可以轻松设置为禁用。
如果 GPIO 未使用且未设置,其默认状态是什么?很可能只是浮动(大多数是三态的,所以祝你好运)。
GPIO 有上拉/下拉吗?谁知道 EE 是否添加了一个。
是否有任何未使用的 GPIO 的踪迹?我对此表示怀疑,但一切皆有可能。
简而言之,您必须幸运地将未使用的 GPIO 设置为可以使用的方式;与 arduino 非常相似(但没有真正的默认值),想想“INPUT/OUTPUT/TRI”。它必须在主板上有可用的走线,希望有一个引脚或焊盘可以焊接。然后,如果您知道 GPIO 的地址位置,则可以轻松使用标准用户空间驱动程序。
答案3
我认为主板是否有 GPIO 的问题与型号和制造商密切相关。有些可能有,有些没有。
例如,在我的华硕台式机主板上,它包含一个 Nuvoton NCT6775,用于风扇控制和温度读取。这可以通过(供应商定制的)BIOS 和 Windows 桌面实用程序访问。我需要运行华硕的软件才能使风扇控制工作,这意味着 PWM 风扇控制由软件完成。在 Linux 安装中,我需要通过此手动设置它内核模块和 pwmconfig。
如果你看看新唐NCT677xF数据表上,你会发现用于控制 PWM、读取温度和电压以及通过 SMBus 的 GPIO 的通用硬件。配备这两种硬件可以让你有一个良好的开端来工作。理论上,你可以将此芯片组用于 GPIO 功能。
但是我不会碰它。你不知道它连接了什么硬件,除非你想深入研究主板的特定型号并对其进行逆向工程(例如布局、引脚分配等)。它也没有分解成连接器。
最重要的是,如果您的应用程序需要使用数年,主板型号也应如此。如果不是,那么将主板硬件绑定到特定的主板硬件并不是一个好主意。
答案4
PC一般都有i2c接口,可以找到i2c的IO扩展芯片,比如TI TCA9535DBR。
因此,您可以根据自己的速度要求间接地做到这一点。如果您使用的是 PC,那么确切的时间要求无论如何都很棘手。