什么是 Android Things Raspberry Pi GPIO 最大频率?

What is Android Things Raspberry Pi GPIO max frequency?

Android下的Raspberry Pi3的GPIO口的开关速度特性在哪里可以找到that?

之类的

我在 0.633 秒内将此 java 代码转换为 运行,相当于大约 1500 Hz。

for (int i = 0 ; i < 1000 ; i++) {
     buzzer.setValue(true);
     buzzer.setValue(false);
}

似乎有一些优化,因为如果你 运行 多次它偶尔会更快。

虽然我很好奇使用 C/C++ 看到的结果。

这是 C 的结果:它接近 100kHz。

由于我没有适合这些措施的范围或适当的设备,所以我是这样做的:

一个java方法测量时间,并调用一个对大量循环有效的C方法。这只是为了简单起见,我相信这足以表明对于大量循环,速度逐渐接近 100kHz:

1 Iterations done in 501.38547 ms = 0.0019944734 kHz
10000 Iterations done in 599.4385 ms = 16.68228 kHz
100000 Iterations done in 1496.2832 ms = 66.83227 kHz
1000000 Iterations done in 10275.258 ms = 97.32116 kHz
2000000 Iterations done in 20104.879 ms = 99.47834 kHz

C 代码必须做的其他事情之一是等待 500 毫秒,直到引脚配置正确。

用于此测量的所有代码都可以在 https://github.com/fmatosqg/androidthings_ndk/tree/SO_speed_measurement 获得,我相信速度仍有改进的空间。尽管它使用 hack 从 C 代码编写,但 README.md.

中提供了说明

DP2中有两种方式控制GPIO:

1) 使用 java 的 SDK(由 Harry Fairhead here 分析);

2) NDK 使用 C/C++(由 Harry Fairhead here 分析)。

使用 SDK java 看到的最快脉冲约为 0.23 毫秒,脉冲序列中有很多大的(最多 8 毫秒)中断 (!!!)。使用 C/C++ 的 NDK,脉冲宽度从 0.23ms 减少到大约 0.15ms。

结论: Android Things DP2 Raspberry Pi GPIO 最大频率约为 3 kHz,这不够快,无法编写与大多数设备接口的驱动程序支持 "from the box" 协议。

我们有 运行 针对 Rpi.GPIO 和 PIGPIO python 库的相关基准测试。

我们得出结论,两个库在高达 5 KHz 的频率下表现良好,准确度超过 99%。 Rpi.GPIO 库的精度在 5 KHz 以上会下降,在 50 KHz 时它无法执行此任务。

PIGPIO 库的性能相对较好,对于高达 20 KHz 的频率,其准确度超过 99%。高于该频率,其性能会逐渐下降,在 110 KHz 时,它根本无法正确读取任何短语。

您可以在我们的 blog

阅读有关该测试的更多信息,包括复制它所需的所有信息