ทำไม GPIO พินสูงเมื่อ Raspberry Pi บู๊ตขึ้น


18

ฉันมีวงจรต่อสายง่าย ๆ พร้อม LED ที่เชื่อมต่อกับ pin 18 ในการอ้างอิง BOARD ฉันรันโปรแกรมง่าย ๆ เพื่อวาง pin 18 เป็น HIGH ซึ่งเปิด LED แล้วสองสามวินาทีต่อมาฉันตั้งค่า pin 18 เป็น LOW และในที่สุดฉันก็จบโปรแกรมด้วย GPIO.cleanup ()

ณ จุดนี้ไฟ LED ดับซึ่งหมายความว่าพิน 18 ปิด (LOW) ตอนนี้ฉันรีบูตหรือรีสตาร์ท Raspberry Pi ของฉันและเมื่อมันบู๊ตสำรอง LED ที่ขา 18 จะเปิดขึ้นอีกครั้งแม้ว่าหมุดจะปิดก่อนที่ฉันจะรีบูต Raspberry Pi

เหตุนี้อาจเกิดขึ้น? ฉันจะกำหนดค่าพินที่เฉพาะเจาะจงเช่นพิน 18 ให้ปิดได้เมื่อบูท Raspberry Pi ขึ้นมาได้อย่างไร และฉันไม่ต้องการให้หมุด GPIO ใด ๆ อยู่ในระดับสูงเมื่อ Raspberry Pi บู๊ตขึ้น

ฉันกังวลเกี่ยวกับปัญหานี้เพราะสมมติว่า pin 18 เชื่อมต่อกับมอเตอร์ DC บนหุ่นยนต์และเมื่อ Raspberry Pi บู๊ตขึ้นมอเตอร์จะเปิดและนี่ไม่ใช่สิ่งที่ฉันต้องการเพราะมันจะรบกวน โครงสร้างทั้งหมดของหุ่นยนต์และมอเตอร์บางตัวอาจเริ่มทำงานและบางอันก็ไม่ขึ้นอยู่กับหมุดที่เชื่อมต่อด้วย ฉันต้องการเปิดมอเตอร์ทั้งหมดด้วยตนเองในลักษณะที่ซิงโครไนซ์

อีกสิ่งหนึ่งคือว่าพินทั้งหมดไม่ได้มีปัญหานี้ บางคนพักเมื่อบูท Raspberry Pi แต่คนอื่นทำไม่ได้


LED นั้นติดสว่างเหมือนเมื่อคุณตั้งไว้สูงหรือเพียงแค่หรี่แสงลง?
goldilocks

มี 3.3 โวลต์นำไปใช้กับมัน
Viktor Raspberry

ดังนั้นถ้าคุณเข้าสู่/sys/class/gpioและส่งออกพิน 18 ระบบจะบอกว่ามันอยู่ในสถานะใดถ้าคุณไม่ได้เปลี่ยนอะไรเลย
goldilocks

เมื่อฉันเขียน "/ sys / class / gpio" จะมีข้อความระบุว่า "-bash: / sys / class / gpio: Is a directory" ฉันไม่แน่ใจว่าจะส่งออกพินที่เฉพาะเจาะจงได้อย่างไร
Viktor Raspberry

มีเยอะแยะคำอธิบายเกี่ยวกับเรื่องนั้นดังนั้นฉันจะไม่รำคาญที่จะสำรอก ตัวอย่างนั้นเป็นของหนักechoที่เขียนเช่นตั้งอะไรบางอย่าง หลังจากที่คุณส่งออกแล้วคุณต้องการละเว้นจากสิ่งนั้นและเพียงแค่ใช้catซึ่งอ่านแล้วเพื่อตรวจสอบทิศทางและค่า
goldilocks

คำตอบ:


25

ที่ powerup GPIOs จะถูกดึงสูงหรือต่ำผ่านตัวต้านทานภายใน ไม่ว่าจะเป็นการดึงสูงหรือต่ำสำหรับ GPIO โดยเฉพาะอย่างยิ่งมีรายละเอียดในหน้า 102 ของBCM2835 ARM อุปกรณ์ต่อพ่วง

เมื่อเคอร์เนล Linux เริ่มทำงานและหากเปิดใช้งานทรีอุปกรณ์ (น่าจะเป็น) จะทำการกำหนดค่า GPIO ใหม่ตามการตั้งค่าทรีของอุปกรณ์ โมดูลที่โหลดจาก/etc/modulesสามารถอัปเดตสถานะ GPIO ได้

ซอฟต์แวร์อื่น ๆ ที่คุณใช้เมื่อเริ่มต้นระบบสามารถกำหนดค่า GPIO ใหม่ได้ภายหลังจากการตั้งค่าทรีอุปกรณ์และโหลดโมดูล

วิธีที่ปลอดภัยที่สุดในการค้นหาโซลูชันฮาร์ดแวร์คือถ้าคุณมีฮาร์ดแวร์ซึ่งอาจเรียกใช้อย่างไม่ถูกต้องเมื่อเริ่มต้นระบบ


10

เมื่อ Raspberry Pi บูทสาย GPIO จะถูกรีเซ็ตเป็นค่าเริ่มต้นของชิปจากนั้นระบบปฏิบัติการจะถูกโหลดและรีเซ็ตเป็นค่าเริ่มต้นของระบบปฏิบัติการ ไม่มีวิธี "จดจำ" การตั้งค่าในการรีบูต ดูเพิ่มเติมสถานะพลังงานของ GPIOs คืออะไร และรัฐ GPIO หลังจากบูต


2

ฉันรู้ว่ามันค่อนข้างสาย ที่จะตอบ คุณสามารถเขียนสคริปต์ไพ ธ อนหรือสคริปต์ทุบตีซึ่งกำหนดพินเป็นต่ำและกำหนดเวลางาน cron ให้ทำงานทุกครั้งที่บู๊ต คุณไม่จำเป็นต้องแก้ไขระบบ / ไฟล์สำคัญใด ๆ นอกเหนือจาก cron

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.