2017-01-18 5 views
1

안드로이드에서 라즈베리 파이 3에 대한 GPIO 포트의 스위칭 속도의 특징은 어디서 찾을 수 있습니까 that 같은가?Android Things Raspberry Pi GPIO의 최대 주파수는 무엇입니까?

+1

죄송합니다. 늦어서 죄송합니다. 단지 제 관심을 끌었습니다. 첫 번째 대답에서 인용 한 테스트를 수행했습니다. 나는 단지 3KHz 정도 밖에 얻을 수 없었습니다. 그리고 나는 이것이 매우 느린 것으로 생각하여 개발 팀에 연락하여 왜 더 빨리 갈 수 있는지 물었습니다. 속도가 느린 이유는 안전하지만 매우 느린 SYSFS를 사용하기 때문입니다. 나는 메모리 매핑을 구현하는 것에 대해 물어 보았고 그것이 안전하지 않을 것이므로 결코 말하지 않았다. 그들은 기본적으로 그것을 얻지 못하고 그 시점에서 나는 그것이 유용한 플랫폼이되지 않을 것이라고 결정했습니다. Sysfs는 100kHz에서 실행되도록 만들 수 있습니다. 제 – HarryF

답변

1

이 자바 코드는 약 0.6 Hz로, 약 1500 Hz에 해당합니다.

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

최적화를 한 것 같습니다. 여러 번 실행하면 가끔 더 빠르게 진행되기 때문입니다.

나는 C/C++를 사용하여 결과를 보는 것이 매우 궁금합니다.

+0

의 3 장 참조 (setValue()는 GPIO 핀의 출력 전압이 주어진 값으로 설정된 경우에만 setValue()가 종료됨을 의미합니다)? 그리고 C/C++을 사용하여 Android 환경에서 GPIO에 액세스하는 예를 알고 있습니까? –

+0

setValue가 무엇인지에 대해서는 알지 못하지만 교육을받은 추측은 어느 시점에서 네이티브 메소드를 호출해야한다는 것입니다. 여전히 C/C++ 예제 나 참조를 찾지 못했지만, Brillo에서 여전히 적용될 수있는 것이 있거나 드라이버가보다 효율적인 솔루션을 제공 할 수 있습니다. 어쨌든, 이것들은 제가 곧 시도 할 수있는 것들입니다. – Fabio

+1

@AndriyOmelchenko는 C (http://stackoverflow.com/questions/41894967/how-to-do-gpio-on-android-things-bypassing-java)에서이 작업을 수행하는 데 몇 가지 진전을 보았습니다. 매우 미숙 한 코드에서 적어도 5kHz를 얻었습니다. 자바 측에서 시간을 측정하는 것입니다. – Fabio

1

여기에 C로 결과가 표시됩니다. 100kHz 근처입니다. 시간을 측정하고,주기의 큰 숫자에 대한 효율적 인 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 코드가 핀까지가 500ms 기다리고 앉아 있음을 구성되어 있습니다.

이 측정에 사용 된 모든 코드는 https://github.com/fmatosqg/androidthings_ndk/tree/SO_speed_measurement에 있으며, 속도 개선을위한 여지가 아직 남아 있다고 생각됩니다. 그것은 C 코드에서 작성하는 해킹을 사용하지만, README.md에서 사용 가능한 지시 사항을 사용합니다. DP2에서

2

는 GPIO를 제어하는 ​​방법은 두 가지가있다 :

1) SDK는 Java 사용을 가진 (해리 Fairhead here) 분석; NDK는 C 해리 Fairhead here 분석/C++을()를 사용하여 함께

enter image description here

2) . 본 SDK 사용하여 자바와

enter image description here

가장 빠른 펄스는 0.23ms 주위와 (8ms의 최대) 대형의 많은 중단 (!) 펄스 기차가있다. C/C++을 사용하는 NDK의 경우 펄스 폭은 0.23ms에서 약 0.15ms로 줄어 듭니다.

결론 : 안드로이드 것 DP2 Raspberry Pi GPIO 최대 주파수는 약 3 kHz이며, 지원되지 않는 "프로토콜"에서 지원되지 않는 드라이버를 작성할만큼 빠르지 않습니다.

+1

wiringPi를 NDK에 이식 할 수 있는지 알아볼 것입니다. 공식적인 NDK API에있는 것처럼 보이는 sysfs 대신 메모리 매핑을 사용한다고 생각합니다. 나는 약간의 컴파일 오류에 직면했지만 그들은 그것이 우회 될 수 있다고 생각한다. – Fabio

+0

@Fabio Android 기기에서 구현되기를 기다리는 많은 맞춤 프로토콜이 있기 때문에 좋을 것입니다.) –