อำนาจรัฐของ GPIOs คืออะไร?


35

สถานะของ GPIOs คืออะไรเมื่อใช้พลังงาน เช่นสูงต่ำ Hi-Z

ระบบปฏิบัติการใด ๆ จะเปลี่ยนสถานะของ GPIO ใด ๆ เมื่อมันโหลด? หวังว่าจะไม่


หากคุณไม่ได้อยู่ในแผ่นข้อมูลคุณอาจต้องวัดค่าเพื่อให้แน่ใจ ลินุกซ์ไม่ได้ "รู้" เกี่ยวกับ GPIO ดังนั้นมันจะไม่เปลี่ยนแปลงในระหว่างการบูทเครื่อง (เว้นแต่คุณจะสร้างสคริปต์เริ่มต้นที่ทำ) แต่ก็มีโอกาสที่ ROM จะทำเช่นนั้นเสมอ
Malvineous

@ Malvineous คุณไม่ถูกต้อง ลินุกซ์รู้เกี่ยวกับ GPIO และการสนับสนุนถูกสร้างขึ้นในเคอร์เนล นี่คือเอกสารบางส่วน: kernel.org/doc/Documentation/gpio.txt
Emmaly Wilson

2
@DustyWilson: ขออภัยถ้าฉันไม่ชัดเจนฉันหมายถึงเคอร์เนลหลักไม่ได้ใช้ GPIO ในระหว่างการบูต มันทำให้พวกเขาพร้อมใช้งานสำหรับ userspace และไดรเวอร์เฉพาะ ดังนั้นเคอร์เนลหุ้นจึงไม่ควรเปลี่ยนสถานะของ GPIO ในระหว่างการบู๊ต
Malvineous

@ Malvineous: อ้า gotcha
Emmaly Wilson

คำตอบ:


11

ผมพบคำตอบที่นี่ต้องขอบคุณrussellstrong ฉันพูดส่วนที่เกี่ยวข้องด้านล่าง

ฉันได้เพิ่มข้อสรุปเกี่ยวกับตัวต้านทานแรงดึง / ความไวของวงจรของฉันไปเป็นตัวต้านทานแบบดึงลง RPi ไม่ได้ตั้งค่า GPIO เป็นเอาท์พุทเมื่อบู๊ตครั้งแรก กำลังเปิดตัวต้านทานแบบดึงลงเป็นเวลา 740 มิลลิวินาที

ฉันใช้ตัวต้านทาน 18K สองตัว (3v3 -> GPIO -> GND) เพื่อดูว่าเกิดอะไรขึ้นกับขา นี่คือร่องรอย เส้นสีฟ้าคือกำลัง 3v3 เส้นสีเหลืองคือเส้น GPIO

ป้อนคำอธิบายรูปภาพที่นี่


คุณช่วยอธิบายให้กระจ่างหน่อยได้ไหม? เมื่อบูท Raspberry Pi, GPIO จะถูกตั้งค่าเป็นความต้านทานสูง, สถานะอินพุต?
Alex Chamberlain

1
@AlexChamberlain ดูเหมือนว่าชิป Broadcom เริ่มต้นด้วย pulldown แต่ตัวโหลดจะล้าง pulldown ดังนั้นพวกเขาจะมีความต้านทานสูง (อินพุต)
John La Rooy

9

เมื่อเริ่มใช้ Debian distro ที่แนะนำสำหรับ RPi GPIO จะถูกปิดการใช้งาน คุณต้องเปิดใช้งานหมุดแต่ละที

หากคุณทำผ่าน/ sysคุณจะพบ "เส้นทางใน Sysfs" ที่น่าสนใจ (ค้นหาภายในhttp://www.kernel.org/doc/Documentation/gpio.txt ) โดยเฉพาะอย่างยิ่งคุณจะเปิดใช้งานพินโดย "ส่งออก" คำสั่งใด ๆ ด้านล่างถือว่าคุณกำลังใช้งานด้วยสิทธิ์พิเศษ (sudo หรืออื่น ๆ ) หรือคุณเปลี่ยนสิทธิ์ / ความเป็นเจ้าของของไฟล์เสมือนที่กำลังแก้ไข

echo 4 > /sys/class/gpio/export

สิ่งนี้ทำให้ GPIO pin # 4 ซึ่งทำให้ / sys / class / gpio / gpio4 มีอยู่ซึ่งมีไฟล์เสมือนหลายไฟล์ ไฟล์เหล่านั้นรวมถึง "ทิศทาง" ซึ่งกำหนดว่าเป็นอินพุตหรือพินเอาต์พุต "ค่า" ซึ่งเป็นแบบอ่านอย่างเดียวสำหรับอินพุตหรือเขียนได้สำหรับเอาต์พุตและมีค่าปัจจุบันและอื่น ๆ

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

แน่นอนว่าคุณอาจต้องการใช้ไลบรารีที่มีอยู่ก่อนหน้าเพื่อทำ GPIO ที่มาพร้อมกับหรือเข้ากันได้กับภาษาที่คุณเลือก แต่ถ้าคุณต้องการอะไรที่เรียบง่ายคุณสามารถเชื่อมต่อโดยตรงกับ sysfs เพื่อทำ GPIO พื้นฐาน


สิ่งนี้มีประโยชน์ ฉันดูแผ่นข้อมูล แต่ไม่พบสถานะเริ่มต้นของหมุด นี่เป็นสิ่งสำคัญหากคุณควบคุมสิ่งต่าง ๆ ด้วยหมุดและไม่ต้องการให้อุปกรณ์ต่อพ่วงเปิดในขณะที่กำลังโหลดระบบปฏิบัติการ
John La Rooy

3
นี่เป็นคำตอบที่ดี แต่ฉันไม่แน่ใจว่ามันจะตอบคำถามจริงๆ สถานะของ GPIO ตรงหลังจากเปิดใช้งานคืออะไร และทิศทางที่กำหนด?
Alex Chamberlain

@gnibbler: ฉันเชื่อว่าคุณเพียงแค่ต้องทดสอบ ฉันลองด้วยตัวเองสักครู่แล้วและฉันไม่เห็นอะไรที่ไม่คาดคิดเกี่ยวกับบางสิ่งที่สะบัดหรือปิด ฉันไม่รู้หรือสัญญาว่าประสบการณ์ของฉันเป็นสิ่งที่คาดหวัง ฉันว่าคุณควรโยนมัลติมิเตอร์หรือหมุดที่คุณต้องการทดสอบแล้วรีบูทหรือใช้พลังงานรอบ Pi หลาย ๆ ครั้งเพื่อทดสอบ สิ่งที่ฉันเห็นคือว่าพินทั้งหมดถูกปิดราวกับว่าไม่มีอำนาจใด ๆ ต่อ Pi จนกระทั่งฉันเปิดใช้งานพินแต่ละตัว
Emmaly Wilson

@DustyWilson บางทีพวกมันถูกเซ็ตอัพเป็นอินพุทที่ไม่มีการดึงหรือดึงลงมา ซึ่งหมายความว่าพวกมันลอยได้อย่างมีประสิทธิภาพหากเชื่อมต่อกับ FET และจะทำให้เกิดพฤติกรรมแบบสุ่มหากตัวต้านทานแบบดึงขึ้น / ลงไม่ได้ถูกเพิ่มเข้าไปในเกต
John La Rooy

แน่นอน ... cat /sys/class/gpio/gpio4/directionพูดว่า "ใน" ฉันอ่านในแผ่นข้อมูลว่าไม่สามารถอ่านสถานะของ pullups / pulldowns ได้ ฉันจะพยายามวัดพวกเขา
John La Rooy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.