Mengapa beberapa pin GPIO TINGGI ketika Raspberry Pi melakukan boot?

18

Saya memiliki sirkuit yang mudah terhubung, dengan LED yang terhubung ke pin 18 pada referensi PAPAN. Saya menjalankan program sederhana untuk menempatkan pin 18 ke HIGH, yang menyalakan LED, dan kemudian beberapa detik kemudian, saya mengatur pin 18 ke RENDAH, dan akhirnya saya mengakhiri program saya dengan GPIO.cleanup ().

Pada titik ini LED mati, yang berarti pin 18 mati (RENDAH). Sekarang saya me-reboot atau me-restart Raspberry Pi saya, dan ketika boot kembali, LED pada pin 18 menyala lagi, meskipun pinnya mati sebelum saya reboot Raspberry Pi.

Mengapa ini bisa terjadi? Bagaimana saya bisa mengonfigurasi pin tertentu, seperti pin 18 agar mati ketika Raspberry Pi melakukan boot? Dan saya tidak ingin pin GPIO berada pada TINGGI ketika Raspberry Pi melakukan booting.

Saya prihatin dengan masalah ini, karena katakanlah pin 18 terhubung ke motor DC pada robot, dan ketika Raspberry Pi menyala, motor akan hidup, dan ini bukan sesuatu yang saya inginkan karena akan mengganggu seluruh struktur robot, dan beberapa motor mungkin mulai dan yang lain tidak, tergantung pada pin yang terhubung dengannya. Saya ingin secara manual menyalakan semua motor secara tersinkronisasi.

Satu hal lagi adalah tidak semua pin memiliki masalah ini. Beberapa tidak aktif saat Raspberry Pi melakukan boot, tetapi yang lain tidak.

Viktor Raspberry
sumber
Apakah LED menyala seterang ketika Anda mengaturnya tinggi, atau hanya menyala redup?
goldilocks
Ada 3,3 volt yang diterapkan padanya.
Viktor Raspberry
Jadi, jika Anda masuk ke /sys/class/gpiodan mengekspor pin 18, keadaan apa yang dilakukan sistem, lalu mengatakannya jika Anda tidak mengubah apa pun?
goldilocks
Ketika saya menulis "/ sys / class / gpio", dikatakan "-bash: / sys / class / gpio: Is a directory". Saya tidak yakin cara mengekspor pin tertentu.
Viktor Raspberry
Ada banyak sekali penjelasan tentang itu , jadi saya tidak akan repot untuk memuntahkan. Contoh itu agak berat pada echo, yang menulis, yaitu, menetapkan sesuatu. Setelah Anda mengekspornya, Anda ingin menahan diri dari itu dan hanya menggunakan cat, yang berbunyi, untuk memeriksa arah dan nilai.
goldilocks

Jawaban:

25

Pada powerup, GPIO ditarik baik tinggi atau rendah melalui resistor internal. Apakah tarikan tinggi atau rendah untuk GPIO tertentu dirinci pada halaman 102 dari BCM2835 ARM Peripherals .

Ketika kernel Linux dimulai dan jika pohon perangkat diaktifkan (kemungkinan) maka itu akan mengkonfigurasi ulang GPIO sesuai dengan pengaturan pohon perangkat. Modul yang diambil dari /etc/modulesjuga dapat memperbarui status GPIO.

Perangkat lunak lain yang Anda jalankan saat start up berpotensi mengkonfigurasi ulang GPIO setelah pengaturan bagan perangkat dan memuat modul.

Paling aman untuk menemukan solusi perangkat keras jika Anda memiliki perangkat keras yang dapat dipicu secara salah pada startup sistem.

joan
sumber
10

Ketika Raspberry Pi mem-boot garis GPIO diatur ulang ke default chip, maka OS dimuat dan me-reset mereka ke default OS. Tidak ada cara untuk "mengingat" pengaturan di reboot. Lihat juga Apa kekuatan pada keadaan GPIO? dan status GPIO setelah boot .

Hildred
sumber
2

Aku tahu ini sudah terlambat. Untuk menjawab. Anda dapat menulis skrip python atau skrip bash yang secara manual mengatur pin ke rendah dan menjadwalkan tugas cron untuk dijalankan pada setiap boot. Anda tidak perlu mengubah sistem / file penting apa pun. Terlepas dari cron

Sathaye.h
sumber