Apa kekuatan pada keadaan GPIO?


35

Bagaimana keadaan GPIO ketika daya diterapkan? mis. Tinggi, Rendah, Hi-Z?

Juga apakah ada OS yang mengubah status GPIO saat dimuat? Semoga tidak.


Kecuali itu ada dalam lembar data, Anda mungkin harus mengukurnya untuk memastikan. Linux tidak "tahu" tentang GPIO sehingga tidak akan mengubahnya saat boot up (kecuali jika Anda membuat skrip startup yang melakukannya), tetapi selalu ada kemungkinan ROM itu mungkin.
Malvineous

@Malvineous, Anda salah. Linux tahu tentang GPIO dan dukungan dibangun langsung ke dalam kernel. Berikut beberapa dokumentasi: kernel.org/doc/Documentation/gpio.txt
Emmaly Wilson

2
@UstyWilson: Maaf jika saya tidak jelas, maksud saya inti kernel Linux tidak menggunakan GPIO saat boot. Itu hanya membuatnya tersedia untuk userspace dan driver tertentu. Jadi stock kernel seharusnya tidak mengubah status pin GPIO saat boot.
Malvineous

@Malvineous: Ah, mengerti.
Emmaly Wilson

Jawaban:


11

Saya telah menemukan jawabannya di sini berkat russellstrong . Saya mengutip bagian yang relevan di bawah ini

Saya telah melompat ke kesimpulan tentang resistor pull-up saya / sensitivitas sirkuit saya ke resistor pull-down. RPi tidak mengatur keluaran GPIO saat pertama kali boot. Menghidupkan pull down resistor selama 740 milidetik.

Saya telah menggunakan dua resistor 18K (3v3 -> GPIO -> GND) untuk melihat apa yang terjadi dengan pin. Inilah jejaknya. Garis biru adalah kekuatan 3v3, garis kuning adalah garis GPIO.

masukkan deskripsi gambar di sini


Bisakah Anda sedikit menjelaskan? Saat Raspberry Pi melakukan booting, GPIO diatur ke kondisi input impedansi tinggi?
Alex Chamberlain

1
@AlexChamberlain, Sepertinya chip broadcom memulai dengan pulldown, tetapi loader menghapus pulldown sehingga akan memiliki impedansi tinggi (input)
John La Rooy

9

Ketika mulai menggunakan distro Debian yang disarankan untuk RPi, GPIO dinonaktifkan. Anda harus mengaktifkan setiap pin secara terpisah.

Jika Anda melakukannya melalui / sys, Anda akan menemukan "Paths in Sysfs" menarik (cari di dalam http://www.kernel.org/doc/Documentation/gpio.txt ). Khususnya, Anda akan mengaktifkan pin dengan "mengekspor" pin itu. Setiap perintah di bawah ini menganggap Anda menjalankan hak akses root (sudo atau lainnya) atau Anda telah mengubah izin / kepemilikan file virtual yang sedang dimodifikasi.

echo 4 > /sys/class/gpio/export

Ini memungkinkan GPIO pin # 4 yang kemudian menyebabkan / sys / class / gpio / gpio4 ada, yang berisi beberapa file virtual. File-file itu termasuk "arah" yang mendefinisikan apakah itu input atau pin output, "nilai" yang dapat dibaca-saja untuk input atau dapat ditulis untuk output dan berisi nilai saat ini, dan lainnya.

echo out > /sys/class/gpio/gpio4/direction # set it as an output pin
echo 1 > /sys/class/gpio/gpio4/value # set the value to ON
echo 0 > /sys/class/gpio/gpio4/value # set the value to OFF
echo in > /sys/class/gpio/gpio4/direction # set it as input
cat /sys/class/gpio/gpio4/value # get the value
echo 4 > /sys/class/gpio/unexport # disables pin 4 and removes the gpio4 directory

Tentu saja, Anda mungkin lebih suka menggunakan beberapa perpustakaan yang sudah ada sebelumnya untuk melakukan GPIO yang disediakan atau kompatibel dengan bahasa pilihan Anda. Tetapi jika Anda menginginkan sesuatu yang sederhana, Anda bisa langsung berinteraksi dengan sysfs untuk melakukan GPIO yang sangat dasar.


Ini sangat membantu. Saya melihat datasheet tetapi tidak dapat menemukan status default pin. Ini penting jika Anda mengontrol sesuatu dengan pin dan tidak ingin periferal dihidupkan saat os sedang memuat.
John La Rooy

3
Ini adalah jawaban yang bagus, tetapi saya tidak yakin itu benar-benar menjawab pertanyaan itu. Bagaimana keadaan GPIO langsung setelah diaktifkan? dan arah yang ditetapkan?
Alex Chamberlain

@gnibbler: Saya yakin Anda hanya perlu mengujinya. Saya mencobanya sendiri beberapa waktu lalu dan saya tidak melihat sesuatu yang tidak terduga sehubungan dengan sesuatu yang bergerak atau mematikan. Saya tidak tahu atau berjanji bahwa pengalaman saya adalah yang diharapkan. Saya katakan Anda hanya harus melemparkan multimeter atau lebih ke pin yang ingin Anda uji dan kemudian reboot atau power-cycle Pi berkali-kali untuk menguji. Yang saya lihat adalah semua pin mati, seolah-olah tidak ada kekuatan untuk Pi apa pun sampai saya mengaktifkan masing-masing pin sendiri.
Emmaly Wilson

@UstyWilson, mungkin mereka ditetapkan sebagai input tanpa pull up atau pull down. Ini berarti mereka secara efektif mengambang jika terhubung ke FET dan akan menyebabkan perilaku acak jika resistor naik / turun tidak ditambahkan ke gerbang
John La Rooy

memang ... cat /sys/class/gpio/gpio4/directionmengatakan "dalam". Saya membaca di datasheet bahwa tidak mungkin untuk membaca keadaan pullups / pulldowns. Saya akan mencoba mengukurnya
John La Rooy
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.